프로세스 동기화

도윤·2022년 5월 14일
0

운영체제

목록 보기
3/5

프로세스 동기화

프로세스는 동시에 실행될 수 있으며, 여러 개의 프로세스가 공유된 자원에 접근할 때 일관성이 보장되지 않을 수 있다.

경쟁 조건(Race Condition)


여러개의 프로세스(혹은 스레드)가 공유된 자원에 접근할 때, 공유 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황

임계 구역(Critical Section)


여러 프로세스(또는 스레드)가 자원을 공유하는 상황에서, 하나의 프로세스(스레드)만 접근할 수 있도록 제한해둔 코드 영역

The Critical-Section Problem


코드상에서 경쟁 조건이 발생할 수 있는 특정 부분을 critical section이라고 부른다. critical section problem를 해결하기 위해선 몇가지 요건을 충족해야 한다

  • Mutual exclusion(상호 배제) : 이미 한 프로세스가 critical section에서 작업중일 때 다른 프로세스는 critical section에 진입해서는 안된다.
  • Progress(진행) : Critical section에서 작업중인 프로세스가 없다면 다른 프로세스는 critical section에 진입할 수 있어야 한다.
  • Bouded Waiting(한정된 대기) : P1이 Critical Section에 진입하기 위해선 무한하게 대기해서는 안된다.

Non-preemptive kernels로 구현하면 임계구역 문제가 발생하지 않는다. 하지만 비선점 스케줄링은 반응성이 떨어지기 때문에 잘 사용하지 않는다.

해결 방안

Peterson’s Solution


임계 구역에서 프로세스가 작업중인지 저장하는 변수 flag와 critical section에 진입하고자하는 프로세스를 가키리는 변수 turn을 만들어 어떤 프로세스가 임계 영역에 진입하면 flag를 lock하고, 나오면 unlock하는 방식으로 임계 영역 문제를 해결한다

do {
  flag[i] =true;
  turn = j;
while (flag[j] && turn == j);
  // Critical section
  flag[i] =false;
  // Remainder section
}while(true);

Mutex Locks


  • 여러 스레드가 공통 리소스에 접근하는 것을 제어하는 기법
  • lock이 하나만 존재할 수 있는 locking 메커니즘을 따른다. 이미 하나의 스레드가 critical section에서 작업중인 lock상태에서 다른 스레드들은 critical section에 진입할 수 없도록 한다.
  • 2개 이상의 스레드는 가질 수 없다.

한계 : 다중 처리기 환경에선 시간적인 효율성 측면에서 적용할 수 없다.

Semaphores


  • 여러개의 스레드가 critical section에 진입할 수 있는 locking메커니즘이다.
  • 세마포어는 카운터를 이용해 동시에 리소스에 접근할 수 있는 프로세스를 제한한다. 한 프로세스가 값을 변경할 때 다른 프로세스가 동시에 값을 변경하지는 못한다. P와 V라는 명령으로 접근할 수 있다.
  • 세마포어 자체는 소유가 불가능하다. (세마포어를 가지지 않는 스레드가 해제할 수 있는 문제가 발생)

P연산 : Wait 동작. 자원을 사용하려는 프로세스들의 진입 여뷰를 자원 카운트(S)를 통해 결정한다. 카운트를 감소시켜서(S—)자원의 점유를 알린다.

V연산 : Signal 동작. 대기중인 프로세스를 깨우는 신호이다. 카운트를 증가시켜서(S++) 자원 반납을 알린다.

이진 세마포(binary semaphore)는 0 또는 1을 가진다. 계수 세마포(Counting semaphore)에서는 n개의 자원을 가진다.

Q. 뮤텍스와 세마포어의 차이는 ?

- 동기화 갯수( 뮤텍스는 동기화 대상이 1개일때, 세마포어는 1개 이상일때 사용)
- 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.
- Mutex는 소유하고 있는 스레드만이 Mutex를 해제할 수 있지만, Semaphore는 소유하지 않는 스레드가 semaphore를 해제할 수 있다.
- Mutexs는 프로세스의 범위를 가지고 프로세스가 종료될 때 clean up 되지만 Semaphore는 스세템 범위에 걸쳐 있고, 파일 시스템 상 파일로 존재한다.

모니터


  • Mutex와 Condition Variable(Queue)를 가지고 있는 동기화 매커니즘

0개의 댓글