패스트캠퍼스 챌린지 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
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

좋은 웹페이지 즐겨찾기