middlefitting

[OS] 동기화 도구 세마포어(Semaphores) Mutex(뮤텍스)는 무엇인가 본문

OS

[OS] 동기화 도구 세마포어(Semaphores) Mutex(뮤텍스)는 무엇인가

middlefitting 2023. 1. 31. 23:36

Semaphores

세마포어는 공유된 자원, Critical Section에 여러 프로세스가 접근하는 것을 방지합니다.

 

세마포어는 동기화 도구로써 동기화 대상이 1개 이상일 때 사용합니다.

 

공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있으며,

 

각 프로세스는 세마포어의 값을 확인하고 변경할 수 있습니다.

 

세마포어를 사용하기 위해서 다음과 같은 두 연산이 정의됩니다.

 

P(S)

P 연산은 락을 거는 과정으로 공유 데이터인 세마포어 변수 값을 획득합니다.

 

남아있는 자원이 없을 경우 대기를 하게되고, 누군가 자원을 내어 놓으면 자원을 획득하게 됩니다.

 

 

V(S)

V 연산은 락을 푸는 과정으로, 공유 데이터인 세마포어 값을 반납합니다.

 

대기하고 있는 프로세스가 있을 경우 자원을 획득할 수 있게 추가적인 작업을 수행할 수 있습니다.

 

 

 

Mutex

뮤텍스도 세마포어와 같이 공유 자원에 접근할 수 있는 프로세스들을 제어하지만,

 

세마포어와는 차이점이 존재합니다.

 

첫 번째는 뮤텍스를 두 프로세스가 동시에 사용할 수 없다는 것입니다.

 

세마포어는 동기화 대상의 개수를 지정할 수 있지만, 뮤텍스는 동기화 대상이 오직 하나일 때에만 사용할 수 있습니다.

 

두 번째는 뮤텍스는 자원 소유 및 책임 기능을 가지지만, 세마포어는 자원 소유가 불가합니다.

 

세 번째는 뮤텍스는 소유하고 있는 프로세스 및 스레드만이 락을 해제할 수 있다는 것이고, 세마포어는

 

소유하지 않는 경우에도 해제할 수 있습니다.

 

마지막으로는 세마포어는 시스템 범위에 존재하며 파일 시스템 상에 존재하며 뮤텍스는 프로세스의 범위를 가지면서 프로세스가 존재할 때

 

자동으로 제거된다는 특징이 존재합니다.

 

 

세마포어를 활용한 Critical Section 접근 제어

do
{
	P(semaphore);
 	Critical Section;
    	V(semaphore);
    	remainder section;
}

세마포어 변수에 lock을 걸때 P 연산을 수행하고 빠져나올때 V 연산을 수행하게 됩니다.

 

프로그램은 세마포어만 지원된다면 P, V 연산만 잘 수행하면 되니 사용자가 직접 코딩할 필요 없이 추상 자료형으로 사용되는 세마포어를

 

사용할 수 있다는 장점이 존재합니다.

 

따라서 이를 통해 세마포어를 사용하진 않는 것보다 간단한 프로그래밍이 가능합니다

 

 

 

출처

KOWS 운영체제 - 반효경 교수님 - Process Synchronization 4

http://www.kocw.net/home/search/kemView.do?kemId=1046323