피터슨의 해결방안의 한계점
➡️ 하드웨어 기반 해결책의 구현 난이도. 임계구역 문제를 해결하기 위해 소프트웨어 도구를 개발해야함
뮤텍스 락(Mutex Lock)
acquire() {
while(!available)
; /* busy wait */
available = false;
}
release() {
available = true;
}
do {
acquire lock
critical section
release lock
remainder section
} while(true);
➡️ 뮤텍스보다 더 정교하게 동기화 할 수 있는 방법이 필요해짐
세마포어(Semaphores)
P
, signal() - V
연산으로만 접근이 가능wait(S){
while(S<=0); /*busy wait*/
S--;
}
signal(S){
S++;
}
카운팅 세마포어 : 영역에 제한이 없음, 유한한 개수를 가진 자원에 대한 접근을 제어하는데 사용
이진 세마포어 : 0과 1사이 값만 가능. 뮤텍스락과 유사하게 동작
각 자원을 사용하려는 프로세스는 세마포어에 WAIT연산 수행(S감소)
프로세스가 자원을 방출할때는 SIGNAL연산 수행(S증가)
세마포어 역시, busy waiting이라는 단점이 존재
busy waiting대신, 자신을 봉쇄하여 단점 상쇄
▪️ Sleep(일시중단):프로세스를 해당 세마포어와 연결된 대기큐에 위치시킴
▪️ Wakeup:프로세스를 대기 상태에서 준비 상태로 변경
https://bit.ly/3FVdhDa
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.