본문 바로가기
CS/OS

Semaphore와 Mutex?

by 나른한 사람 2021. 3. 24.

Semaphore & Mutex

- 세마포어와 뮤텍스는 모두 공유 자원에 대한 프로세스/쓰레드의 접근 제어 방법이다.

 

Semaphore

- 세마포어는 특정 변수 값의 갯수만큼 프로세스가 공유된 자원에 접근할 수 있도록 허용한다.

- 기본적으로 Semaphore 변수, semWait 함수, semSignal 함수가 있다.

Semaphore 변수 : 양수 값 (1일 경우 Binary Semaphore, 2 이상일 경우 General/Counting Semaphore)

semWait 함수 : Semaphore 변수 값을 감소시키고 변수 값이 음수가 되면 semWait을 호출한 프로세스는 queue에 넣고 블록 상태로 들어간다. 음수가 아니라면 프로세스를 계속 수행한다.

semSignal 함수 : Semaphore 변수 값을 증가시키고 변수 값이 0이상의 수가 되면 블록 상태의 프로세스를 queue에서 제거하고 깨운다.

- 이와 같이 동작하며, 어떤 자원에 동시에 접근할 수 있는 프로세스의 최대 갯수를 정해준다.

 

Mutex

- 뮤텍스는 특정 키를 가진 프로세스만 공유된 자원에 접근할 수 있도록 허용한다.

- 기본적으로 Mutex 변수, lock 함수, unlock 함수가 있다.

Mutex 변수 : 0 또는 1

lock 함수 : Mutex 변수 값이 1(unlock 상태)이 될 때까지 기다린 후, 변수 값을 0(lock 상태)으로 바꾸어서 다른 프로세스가 접근하지 못하도록 한다.

unlock 함수 : Critical Section을 벗어나온 후, 다른 프로세스에서 접근 할 수 있도록 Mutex 변수 값을 1(unlock 상태)로 바꾸어 준다.

 

Semaphore vs. Mutex

- 세마포어와 뮤텍스는 모두 공유 자원에 대한 프로세스/쓰레드의 접근 제어 방법이라는 공통점이 있다.

- 세마포어는 공유 자원에 세마포어 변수만큼의 프로세스/쓰레드가 접근할 수 있다.

- 뮤텍스는 공유 자원에 하나의 프로세스/쓰레드만 접근할 수 있다.

- 세마포어는 공유 자원을 사용하고 있지 않더라도 semSignal 함수를 통해 세마포어를 해제할 수 있다.

- 뮤텍스는 공유 자원을 사용하고 있는 프로세스/쓰레드만이 뮤텍스를 해제할 수 있다.

 

'CS > OS' 카테고리의 다른 글

Deadlock의 개념 / 해결 방법  (0) 2021.03.24

댓글