void wait(s){
while s<= 0;
s--;
}
void signal(s){
s++;
}
s값에 접근하는 프로세스 1개 - binary semaphore
s값에 접근하는 프로세스 n개 - counting semaphore
block and wakeup
ready queue에서 대기한다.deadlock
프로세스가 서로의 signal을 기다리게 되면서 모두 무한정 대기 (둘이 서로가 가진 자원을 wait하게됨 + 보유한 자원 비선점형으로 놓지않음 + 사이클 존재 + 상호배제 => deadlock)
starvation
block and wakeup 방식에서 ready queue에서 대기하고 있는 프로세스 중 하나를 선택하는 스케줄링 과정에서 선택되지 못하면 실행되지 못하는 프로세스가 생김 (starvation은 LIFO(얘는 자료구조지 스케줄링 알고리즘이 아님)에서만 발생하는게 아니다, 스케줄링 알고리즘으로 인하여 발생하는 것이지 스케줄링 알고리즘 (FIFO는 FCFS구조이지만 FIFO = 큐(자료구조)는 Priority(우선순위큐)에서 쓰인다.))
우선순위 역전 현상, 우선 순위가 낮은 프로세스 때문에 우선순위가 높은 프로세스가 실헹되지 않는 현상 (우선 순위 1 제일 높고 4가 제일 낮음(가정), 예를 들어 우선순위 4인 프로세스 B가 수행중에 Semaphore 0으로 돌리고 CS에 들어감, 이때 우선순위 1인 프로세스가 Critical Section에 들어가려하지만 while문에 의해 busywaiting하는 상황 그럼 B가 나올때 까지 A는 못들어가고 중간에 우선순위 2인 프로세스로 context switching되어 A는 여전히 CS에 들어가지 못하는 상황)
세마포어나 뮤텍스는 사용을 잘못할 경우 에러가 발생할 수 있다. 모니터는 프로그램이 제공하는 기능으로 자바에서 심플한 동기화 툴로 알려져있다.
다음시간에..