본문 바로가기

OS(운영체제)/프로세스

[운영체제] 프로세스 - 뮤텍스와 세마포어 차이

뮤텍스와 세마포어

어떤 작업을 완료하기 위해 여러 프로세스, 쓰레드가 동시에 실행되는 경우가 있다. 이때 중요한건 '공유자원 관리' 이다.

공유자원의 관리가 제대로 되지 않으면 프로그램상 데드락 같은 문제가 발생될 여지가 다분하다.

뮤텍스세마포어는 이러한 문제 발생을 막기위한 일종의 '상호배제' 기법 중 하나라고 볼 수 있다.

 

특히 쓰레드의 경우 Critical Section이란 것이 존재하는데 이것도 마찬가지로 쓰레드A가 Critical Section을 선점하고 있다면 뒤에있는 쓰레드B는 쓰레드A의 작업이 종료될때 까지 기다려한다.

  • Critical Section : 프로그램상 동시에 실행될 경우 문제가 발생할수 있는 영역.

뮤텍스 동작 원리

공유자원 : A

프로세스or쓰레드: X, Y, Z, K, L ...(사용하려는 순서)

예를 들어 위와 같이 공유자원과 프로세스or 쓰레드를 명시했을때

 

1. A를 사용하기 위해 X가 먼저 접근합니다. 이때 X는 A를 사용하면서 lock을 걸어 다른 프로세스or쓰레드는 접근하지 못하도록 막습니다. 이때 Y도 A를 사용해야하지만 X가 먼저 사용하고 있고 lock이 걸려있기 때문에 기다려야 합니다.

2. X가 A의 사용을 완료하면 unlock을 하게되고 Y는 A에 접근할수 있게됩니다.

3. Y가 A를 사용하는 도중 Z,K,L 또한 A를 사용하기 위해선 Y가 A사용을 끝낼때 까지 기다려야 합니다.

4. Y가 A의 사용을 완료하면 마찬가지로 unlock후 Z, K, L 중에서 먼저 기다린 순서대로(큐) A를 사용합니다.

 

뮤텍스는 위와 같은 원리로 공유자원 하나에 하나의 프로세스, 쓰레드만 사용할수 있도록하는 상호배제 기법이다.

세마포어 동작 원리

공유자원 : A

프로세스or쓰레드: X, Y, Z, K, L ...(사용하려는 순서)

세마포어도 마찬가지의 예를 들고 설명하자면

 

1. A를 사용할 수 있는 프로세스,쓰레드의 제한을 둡니다.(여기선 예를들어 '2' 라고 가정)

2. A를 사용할 수 있는 프로세스,쓰레드는 최대 2개까지 가능하기 때문에 X,Y가 A를 사용합니다. 이때, 제한을 걸어뒀던 카운트 2를 X,Y가 각각 사용시작할때 -1 처리를 해줍니다.

3. 현재 제한은 '0'이므로 Z,K,L은 카운트가 증가될때 까지 기다립니다.

4. X가 A사용을 마치면 카운트 1을 증가 시켜줍니다. 이때 카운트는 0 -> 1로 증가 하게 됩니다.

5. '1'로 증가했기 때문에 Z는 A를 사용할 수 있게 되고, 마찬가지로 Z도 A를 다 사용할때까지 카운트를 -1를 해줍니다.

 

세마포어는 위와 같은 원리로 공유자원을 사용할 수 있는 프로세스,쓰레드의 수를 나타내는 값을 둬서 그 수만큼 사용할 수 있게끔 하는 상호배제 기법이다.


뮤텍스와 세마포어 차이점

위의 동작원리를 보면 알겠지만 뮤텍스와 세마포어는 공유자원 관리를 위한 상호배제 기법이라는 공통점이 있지만

뮤텍스는 공유자원 하나에 하나의 프로세스,쓰레드만 사용가능하다. 그리고 lock을 획득한 프로세스가 반드시 unlock을 해줘야 한다.

세마포어는 공유자원을 사용할수 있는 프로세스,쓰레드의 수를 나타내기 때문에 제한된 수만큼 공유자원에 접근이 가능하다. 그리고 현재 수행중인 프로세스,쓰레드가 아닌 다른 프로세스,쓰레드가 세마포어를 해제할 수 있다.