Deeper Learning

Semaphore & Mutex 본문

Computer Science

Semaphore & Mutex

Dlaiml 2021. 2. 9. 23:22

멀티프로그래밍 환경에서 공유자원의 안정적인 사용을 위해서는 여러 프로세스가 동시에 접근하는데 제한을 두어야 한다.

이를 위하여 Semaphore와 Mutex가 고안되었다.

 

Semaphore

예를 들어 프로세스 A는 변수 x를 1 증가시키고 프로세스 B 역시 변수 x를 1 증가시킨다고 하자.

x=1 -> A가 x를 load -> B가 x를 load -> A가 x++ -> B가  x++

위와같은 과정을 거치면 x는 3이 아닌 2가 된다. 

이는 동시에 두 프로세스가 한 공유자원을 변경하며 생긴 문제로 이를 Semaphore를 사용하여 해결이 가능하다.

 

임계 영역(critical section)은 공유자원에 접근할 수 있는 영역으로 Semaphore를 통해 보호한다.

P는 S를 1만큼 감소시키는 함수이며, V는  S를 1 증가시키는 함수다.

임계 영역에 진입하기 전 P 함수를 실행하고 임계 영역을 통과한 후 V함수를 실행하여 문제를 해결한다.

 

def P(S):
  while S == 0:
      pass
  S -= 1

def V(S):
  S += 1

# initialize S
S = 1

P(S)
# ENTER CRITICAL SECTION 
# PROCESS IN CRITICAL SECTION 
# OUT CRITICAL SECTION
V(S)

S는 1로 초기화되고 프로세스 A가 먼저 P 함수를 통과하여 S는 0이 되고 임계 영역에 진입한다. 
다음으로 프로세스 B가 임계영역에 진입하기 위해 P함수를 실행하면 S값이 0이므로 while loop에서 빠져나오지 못하며 이를 busy waiting이라고 한다.

프로세스 A가 임계영역을 빠져나와 V함수를 실행하여 S가 1로 바뀌고 나서야 프로세스 B가 임계 영역에 진입한다.

 

S의 초기값을 조절하여 임계영역에 진입하는 프로세스의 수를 조정할 수 있다.

 

위는 세마포어를 추상화한 간단한 구현으로 실제로는 다른 방식으로 작동한다.

세마포어는 위와 같은 방식을 통해 상호 배제를 보장하며 임계 구역으로의 다수의 프로세스의 접근을 차단한다.

 

Mutex

Mutex는 상태가 0,1 두개인 이진형 세마포어로 간단하게 1개의 화장실과 key를 사용한 예시로 비유가 가능하다.

열쇠 보관함에는 화장실을 열 수 있는 key가 있다.

 

  • 프로세스 A는 key를 가지고 화장실 (임계 영역)에 진입한다.
  • 프로세스 B는 화장실을 가고 싶으나 key가 없어 진입하지 못한다.
  • 프로세스 A는 화장실을 나와 key를 반납한다.
  • 프로세스 B는 key를 가지고 화장실에 진입한다.

Mutex는 프로세스에 의해 소유되는 key를 기반으로 한 상호 배제법이다.

Semaphore는 공유자원에 접근할 수 있는 프로세스, 스레드의 수를 나타내는 값을 기반으로 한 상호 배제법이다.

'Computer Science' 카테고리의 다른 글

CPU 성능 평가 (CPU Times)  (0) 2021.05.24
Floating Point  (0) 2021.03.19
SQL & NoSQL  (0) 2021.02.10
Virtual Memory  (0) 2021.02.09
Dynamic Programming & Greedy Algorithm  (0) 2021.02.09
Comments