= concurrency control 모니터는 공유 데이터와 그 데이터에 접근할 수 있게 하는 코드를 한 곳에 넣고 한번에 한 프로세스만 코드 수행하도록 하여 프로그래머의 부담을 덜어준다 active한 프로세스가 코드 수행을 마치거나, 특정 조건을 불만족하여 잠들게 되어야 다른 프로세스가 모니터로 들어와 active해질 수 있다 empty: 빈 버퍼를 기다리는 프로세서 줄 full: 자원을 기다리는 프로세서 줄 lock 관련 변수가 불필요함 semaphore 변수는 값을 가지고 프로세서가 코드를 수행하면서 그 값이 바뀐다 출처: https://core.ewha.ac.kr/publicview/C0101020140411143154161543?vmode=f
Semaphores 프로그래머가 이렇게 lock/unlock 관련한 코드를 고민하기 어려우므로 앞의 방식들을 추상화한다 Semaphore S integer variable (자원의 수) (이전의 알고리즘들은 S=1인 경우라고 생각할 수 있다) 아래 두가지 atomic 연산에 의해서만 접근 가능 critical section을 수행중인 다른 프로세스를 CPU ready queue가 아닌 semaphore에 대한 wait queue에서 대기 이 연산에서 S 변수는 S가 양수면 기다리는 프로세스가 없다는 것, 음수면 기다리고 있다는 의미 (위에서와 다름) critical section의 길이가 긴 경우 block/wakeup이 좋음 critical section의 길이가 매우 짧은 경우 block/wakeup..