스터디/운영체제

[인프런 CS 전공지식 스터디 3기_운영체제] 4. 프로세스 동기화

왹져박사 2025. 3. 16. 10:27

프로세스 간 통신

프로세스는 다른 프로세스와 데이터를 주고받으며 통신을 하는 경우도 있음

동일 컴퓨터 내의 프로세스/다른 컴퓨터 내의 프로세스와 네트워크를 통한 방법

 

1. 동일 컴퓨터 내의 프로세스

파일/파이프 이용

 

파일

통신을 하려는 프로세스들이 하나의 파일을 읽고 쓰는 방법

 

파이프

운영체제가 생성한 파이프를 통해 데이터를 읽고 쓰는 방법

 

 

2. 쓰레드 간 통신

한 프로세스 내의 쓰레드 간 통신 방법

코드, 데이터, 힙 영역을 공유하기 때문에 데이터, 힙 영역을 이용하여 통신 가능

 

3. 네트워크를 이용한 방법

운영체제가 제공하는 소켓통신 / RPC(원격 프로시저 호출) 통신

 

 

 

공유자원과 임계구역

공동으로 이용하는 변수나 파일 : 공유자원

공유자원은 프로세스들의 접근 순서에 따라 결과가 달라질 수 있음

컨텍스트 스위칭으로 시분할처리되기 때문에 프로세스의 실행 순서를 예측하기 힘듦

연산 결과를 예측하기 힘듦  →  동기화 문제

 

여러 프로세스가 동시에 사용하면 안 되는 영역 : 임계구역

공유자원을 사용하기 위해 경쟁하는 것 : 경쟁조건

 

임계구역 문제를 해결하기 위한 조건들

상호배제 메커니즘

1. 임계구역에는 동시에 항상 하나의 프로세스만 접근 가능

2. 여러 요청에도 하나의 프로세스의 접근만 허용

3. 임계구역에 접근한 프로세스는 최대한 빠르게 나와야 함

 

 

세마포어

상호배제 메커니즘

OS가 세마포어(정수형 변수)를 통해 임계구역의 접근을 관리하고,

접근하려는 프로세스들을 대기큐로 관리하여 차례로 처리. 

 

공유자원의 수만큼 세마포어의 수가 존재. 

 

단점

wait(), signal() 함수를 잘못 호출하여 세마포어를 잘못 사용할 가능성 있음

 

 

모니터

세마포어의 단점을 해결한 상호배제 매커니즘

synchronized ↓cpp 예시

class CMyClass 
{
   float m_nBalance;

   [synchronize]
   void UpdateBalance(float nAdjust) 
   {
      m_nBalance += nAdjust;
   }
};

 

모니터의 구현만 완벽하다면, 

세마포어 매커니점에서 사용하던 wait(), signal()을 임계영역에 감싸지 않아도 되어

편리하게 코드 작성 가능