OS #23 동기화와 세마포어

underlier12·2020년 4월 6일
0

OS

목록 보기
23/35

23. 동기화와 세마포어

Mutext & Semaphore

Critical Section에 대한 접근을 막기 위해 Locking 메커니즘이 필요하다.

  • Mutex(binary semaphore)

    • 임계 구역에 하나의 쓰레드만 들어갈 수 있음
  • Semaphore

    	- 임계 구역에 여러 쓰레드가 들어 갈 수 있으며 Counter를 두어 허용 쓰레드 수 제어

Semaphore 구성

식별자역할설명
P검사임계 영역에 들어갈 때 S값이 1 이상이면 영역 진입 후 S값 1 차감/S값 0이면 대기
V증가임계 영역에서 나올 때 S값을 1 더하고 나옴
S세마포어 값초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능

Busy waiting

다음과 같이 S값이 0일 때 대기하는 기능을 위해서 S값이 복귀될 때까지 반복문을 수행한다.

중단은 보통 loop로 표현하며 이 loop는 단순히 CPU 부하만 증가시킨다.

Ready Queue

위와 같은 단점이 있어 반복문을 수행하는 것 대신 대기 큐에 넣는다.

그리고 wakeup() 함수를 통해 대기 큐에 있는 프로세스를 재실행함으로 의미없는 CPU 부하를 제거할 수 있다.

주요 세마포어 함수

POSIX 세마포어에 다음과 같은 주요 함수가 있다.

  • sem_open() : 세마포어 생성
  • sem_wait() : 임계 영역 접근 전 세마포어 lock, 잠겨있다면 풀릴 때까지 대기
  • sem_post() : 공유 자원에 대한 접근이 끝났을 때 세마포어 잠금 해제
profile
logos and alogos

0개의 댓글