운영체제 세마포어와 뮤텍스 개념

세마포어

공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것으로써 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두는 기법

뮤텍스

Mutual Exclusion 의 줄임말로, 여러 쓰레드가 동시에 공유된 자원에 접근하는 것을 배제하기 위한 기술


Critical Section (임계 구역) : 위에서 나온 공유 자원을 활용하는 코드 부분을 의미한다. 즉, 한번에 한 프로세스나, 스레드만 실행되어야 하는 부분이다.

세마포어의 원리

세마포어에는 서로 다른 프로세서가 현재 임계 구역을 접근중인지를 확인하기 위해 P와 V 연산을 사용한다. P는 현재 임계구역을 활용중인 프로세스가 있는지 확인하는 연산이고, V는 임계구역을 활용하던 프로세스가 끝이날 때 해당 프로세스가 알리기 위해 사용하는 연산이다.

1
2
3
4
5
6
7
8
9
P(S) // P(S) 를 수행했는데 S가 0이면 다른 프로세스가 있다는 의미로 대기한다.
     // 만약 1이면 다른 프로세스가 아직 없다는 의미이므로 해당 프로세스가 0으로 만든 뒤, 진입한다.
-----

임계 구역

-----

V(S) // 사용이 끝난 프로세스는 V(S)를 통해 S를 0에서 1로 만들고 V(S) 과정을 끝낸다.

뮤텍스의 원리

뮤텍스는 lock, unlock 을 표현하기 위한 1과 0 만으로 구성된 값을 통해 임계 구역을 통제하는 기법이다. 따라서 임계구역을 진입하려면 락을 획득해야하고, 벗어날 때 언락하면 다른 프로세스가 새로 락을 하는 원리이다.

뮤텍스와 세마포어의 차이

  • 세마포어는 현재 수행중인 프로세스가 아닌 다른 프로세스가 해제할 수 있지만 뮤텍스는 반드시 락을 획득한 프로세스가 다시 락을 해제해야 한다.

  • 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스가 접근할 수 있다. 반면에 뮤텍스는 오직 1개만의 쓰레드가 접근할 수 있다.