패스트캠퍼스 챌린지 20일차
운영체제
뮤텍스와 세마포어
피터슨의 해결방안의 한계점
➡️ 하드웨어 기반 해결책의 구현 난이도. 임계구역 문제를 해결하기 위해 소프트웨어 도구를 개발해야함
뮤텍스 락(Mutex Lock)
- 뮤텍스 락을 이용하여 임계영역을 보호, 경쟁 방지
- 프로세스는 임계영역에 진입하기 전 반드시 락을 획득해야함. 임계 영역 사용 종료 시 잠금 해제
- 잠금 사용 가능 여부를 나타내는 Boolean 변수 사용
- 그러나 busy waiting이 존재함(spinlock)
acquire() {
while(!available)
; /* busy wait */
available = false;
}
release() {
available = true;
}
do {
acquire lock
critical section
release lock
remainder section
} while(true);
➡️ 뮤텍스보다 더 정교하게 동기화 할 수 있는 방법이 필요해짐
세마포어(Semaphores)
- 정수 변수(S)
- wait() -
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
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
Author And Source
이 문제에 관하여(패스트캠퍼스 챌린지 20일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jinny/패스트캠퍼스-챌린지-20일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)