ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6-2. Process Synchronization 2
    OS/운영체제 강의정리 2021. 12. 30. 20:17

    6-2 Process Synchronization 2

    Semaphores, Critical Section of n Processes, Block / Wakeup Implementation, Implementation, Two Types of Semaphores, Deadlock and Starvation, Dining-Philosophers Problem

     

    Semaphores

    추상자료형 : Object와 Operation으로 구성됨

    앞의 방식들을 추상화 시킴

    공유자원을 획득하고 반납하는 것을 Semaphore가 처리해줌

    Semaphore S : 정수값(integer variable)을 가질 수 있는데 그것이 자원의 개수라고 생각(즉 S가 5면, 자원이 5개있는것)

    P연산은 값을 획득하는 과정이고, V연산은 반납하는 과정

    P(S) : while (S≤0)do no-op; //lock을 거는과정

    V(S) : S ++; //lock을 푸는 과정

    mutex : CS이 1개인것

    semaphore : CS이 1개이상 들어갈 수 있다

    Critical Section of n Processes

    Synchronization variable
    semaphore mutex; /* initially 1: 1개가 CS에 들어갈 수 있다 */
    
    Process Pi
    do {
    		P(mutex); //lock을 걸때 CS에 들어가야하면 P연산을 해주고,
    		critical section
    		V(mutex); //빠져나올 때에는 V연산 해줌
    		remainder section
    }while(1);
    

    busy-wait는 효율적이지 못함(=spin lock)

    Block&Wakeup 방식의 구현(=sleep lock)

     

    Block / Wakeup Implementation

    Semaphore를 다음과 같이 정의

    typedef struct
    {
    	int value; /* semaphore 변수 값 */
    	struct process *L; /* semaphore때문에 잠들어있는 프로세스들을 연결하기 위한 큐! */
    }semaphore;
    

    block : 커널은 block을 호출한 프로세스를 suspend시킴, 이 프로세스의 PCB를 semaphore에 대한 wait queue에 넣음 (semaphore를 획득할 수 없으면 그 프로세스를 block 시킴)

    wakeup(P) : block된 프로세스 P를 wakeup시킴, 이 프로세스의 PCB를 ready queue로 옮김

    P(S): S.value--; /* prepare to enter */ //값을 1 빼줌!!
    			if (S.value <0) // 깂이 음수이면 자원이 없겠지,
    			{
    			add this process to S.L; //S.L에 연결 시키고
    			Block(); //Block 상태로 만듦!
    			}
    
    V(S) : S.value++; //자원을 다 쓰고 나면, 값을 1증가시켜주고,
    			if (S.value <= 0) //S.value가 0이하면, 자원을 내놓았음에도 불구하고 0이하라면, 이친구를 기다리며 누군가가 잠들어 있다는 거지
          {
    			remove a process P from S.L;
    			wakeup(P);
          }

    Which is better?

    • Busy wait vs Block/wake up
    • Block/Wakeup overhead vs Critical Section 길이
      • Critical Section의 길이가 긴 경우 Block/Wakeup이 적당함
      • Critical Section의 길이가 매우 짧은 경우 Block/Wakeup의 오버헤드가 busy-wait 오버헤드보다 더 커질 수 있음
      • 일반적으로 Block/wakeup방식이 더 좋음

    Two types of Semaphores

    • Counting semaphore
      • 도메인이 0 이상인 임의의 정수값
      • 주로 resource counting에 사용
    • Binary semaphore(=mutex)
      • 0 또는 1 값만 가질 수 있는 semaphore
      • 주로 mutual exclusion(lock/unlock)에 사용

    Deadlock and Starvation

    Deadlock

    둘 이상의 프로세스가 서로 상대방의 의해 충족될 수 있는 event를 무한히 기다리는 현상

    Starvation

    indefinite blocking 프로세스가 suspend된 이유에 해당하는 세마포어 큐에서 빠져나갈 수 없는 현상

    'OS > 운영체제 강의정리' 카테고리의 다른 글

    7-1~2. Deadlocks 1,2  (0) 2021.12.31
    6-3~4. Process Synchronization 3,4  (0) 2021.12.30
    6-1. Process Synchronization 1  (0) 2021.12.30
    5-2. Process Synchronization 1  (0) 2021.12.30
    5-2. CPU Scheduling 2  (0) 2021.12.30

    댓글

Designed by Tistory.