[OS] 동기화 기법

touhou09·2024년 11월 12일
0

컴퓨터 이론

목록 보기
23/47

process를 동기화하기 위해서는 아래 도구들을 사용한다.

  • mutex lock
  • semaphore
  • monitor

mutex lock

mutex lock은 critical section에 진입하는 process가 자신이 있음을 알리기 위해 lock을 걸도록 하는 도구이다.
이를 통해 다른 process는 critical section이 잠겨 있다면 기다리고 그렇지 않다면 접근할 수 있도록 한다.

mutex lock의 가장 간단한 구조는 아래와 같다.

  • 자물쇠 역할의 global variable
  • locking을 위한 acquire 함수
  • locking을 해제하기 위한 release 함수

위 상황에서 lock을 획득할 수 없다면 무작정 기다리고, 획득 가능하다면 locking 후 critical section에서 작업을 시작하도록 하며 critical section에서 빠져나올때는 다시 locking을 해제함으로써 critical section을 보호한다.

acquire 함수에서는 critical section이 잠겨있는지 반복적으로 lock을 확인하는데 이를 busy wait이라 한다.

semaphore

공유 자원이 여러 개 있는 경우 여러 개의 process가 각각 자원에 접근할 수 있어야한다.
mutex lock과 형태 자체는 유사한데, binary semaphore같은 경우는 mutex lock과 아주 비슷하고 counting semaphore는 mutex lock을 여러 자원에 활용할 수 있도록 하는 것이다.

monitor

semaphore에 비해서 더 사용자 친화적인 도구이다.
monitor는 공유 자원과 공유 자원에 접근하기 위한 interface를 묶어 관리하고 process는 반드시 interface를 통해 공유 자원에 접근하도록 한다.
이를 위해 monitor를 통해서 공유 자원에 접근하고자 하는 process를 queue에 삽입하고 queue에 삽입된 순서대로 하나씩 공유 자원을 이용하도록 한다.

이 밖에도 monitor는 semaphore와 마찬가지로 실행 순서 제어를 위한 동기화도 제공한다.
특정 조건을 바탕으로 process를 실행하고 일시 중단하기 위해 monitor는 condition variable을 사용하여 process나 thread의 실행 순서를 제어한다.

profile
Engineer가 되기 위하여

0개의 댓글