CS/OS

13. Process Synchronization 2

hjkim0502 2022. 3. 28. 00:11
  • Semaphores
    • 프로그래머가 이렇게 lock/unlock 관련한 코드를 고민하기 어려우므로 앞의 방식들을 추상화한다
    • Semaphore S
      • integer variable (자원의 수) (이전의 알고리즘들은 S=1인 경우라고 생각할 수 있다)
      • 아래 두가지 atomic 연산에 의해서만 접근 가능

P: 자원(공유데이터) 획득, V: 자원 반납

  •  

  • critical section을 수행중인 다른 프로세스를 CPU ready queue가 아닌 semaphore에 대한 wait queue에서 대기

  • 이 연산에서 S 변수는 S가 양수면 기다리는 프로세스가 없다는 것, 음수면 기다리고 있다는 의미 (위에서와 다름)

 

  • critical section의 길이가 긴 경우 block/wakeup이 좋음
  • critical section의 길이가 매우 짧은 경우 block/wakeup 오버헤드가 busy-wait 오버헤드보다 더 커질 수 있음
  • 일반적으로는 block/wakeup 방식이 더 효율적

semaphore 문제점

  • P0가 P(S)를 수행하고 CPU를 P1에 넘겨주면 서로 영원히 기다리게 된다 -> 자원 얻는 순서를 정해서 해결

 

출처: https://core.ewha.ac.kr/publicview/C0101020140404151340260748?vmode=f