티스토리 뷰

운영체제/이론

(32) Mutex Lock & Semaphore

geonwoopaeng@gmail.com 2020. 9. 23. 00:34

### Mutex Lock ###

: S/W수준의 synchronization tool

: critical section에서 mutual exclusion을 해결하기 위해 rock변수를 사용한다.

: busy waiting 문제 발생

(busy waiting - 권한을 얻을 때까지 확인하는 것(원하는 자원을 얻기 위해 기다리는 것 x) => cpu 자원 낭비)

acquire() {
	while (!available);
    // busy wait 
    available = false;
	}
    
release() {
	// lock을 풀어주는 function 
    
	available = true;
	}


while true{
	// acquire lock{
        //critical section
        }
        
   	// release lock{
    	// remainder section
        }
}

 

 

 

 

### Semaphore ###

: mutex lock의 일반적인 형태

: wait() -> P(), signal() -> V()

wait(S){
	while (S <= 0);
    //busy wait 
    S--;
}


signal(S){
	S++;
}

(resouce)를 해제하기 위해 signal() 사용 => lock 푸는 것과 유사

 

 

 

< 종류 >

< Binary semaphore >

: 0,1 만 사용

: mutex lock과 같다

(while 문으로 무한 루프 => busy waiting 문제 발생

(busy waiting - 권한을 얻을 때까지 확인하는 것(원하는 자원을 얻기 위해 기다리는 것 x) => cpu 자원 낭비))

< Counting semaphore >

: 범위 제약 없는 semaphore

< Busy waiting problem >

: mutex lock의 구현에서 발생

: spinlock(busy waiting이 굉장히 긴 경우 사용 => busy waiting에 제한을 걸어 사용)

< Busy waiting을 almost 발생시키지 않는 semaphore >

출처: Operating System Concepts 10th Ed (John Wiley & Sons, Inc. 2018)

(내부적을 h/w기반의 synchronize tool을 사용해야한다  => busy waiting이 포함되어 있어서 almost이다.)

반응형
공지사항
최근에 올라온 글