[운영체제] 뮤텍스 VS 세마포어 차이점에 대해(임계영역)
먼저 임계영역(Critical Section)에 대해 정리하겠습니다. 임계영역은 공유 자원을 가진 코드 부분으로 서로 다른 프로세스가 동시에 접근할 때 생기는 문제가 생기는 부분입니다. 만약 모든 동작들이 Atomic하게 동작한다면 임계영역에 대해 문제가 발생하지 않겠지만 실제로는 코드 실행 중에 다른 쓰레드나 프로세스로 전환이 일어날 수 있습니다.
서로 다른 프로세스/쓰레드에서 동시에 접근하는 공유 자원이 있다면 먼저 도착한 프로세스/쓰레드가 작업을 다 끝난 후 그 뒤에 온 프로세스/쓰레드가 작업을 하게해야 안전합니다.
제가 대학생 때 이해를 좀 쉽게하기 위해 화장실을 비유로 설명을 들었던 기억이 납니다.
뮤텍스의 경우 화장실 1칸(공유자원)이 주어진 경우입니다. 1번에 1명만 화장실을 사용할 수 있게 먼저 화장실에 들어간 사람은 화장실 문을 잠굽니다(Lock). 화장실(공유자원) 사용이 끝나면 문을 열고 나옵니다(Unlock). 이렇게 화장실을 사용하면 여러 사람이 화장실을 사용해야할 때 먼저 온 순서대로 화장실을 쓸 수 있어 문제가 생기지 않습니다.
세마포어는 화장실 4칸이 주어진 경우를 예로 들 수 있습니다.
이 경우에 화장실의 각 칸 앞에 사람들이 줄을 설 수도 있지만 이렇게 하면 먼저 왔으나 다른 사람보다 더 늦게 화장실을 사용할 수 있습니다. 이마트에서 물건을 계산하기 위해 줄을 서는 장면을 생각해보세요 ㅎ 내가 먼저 와도.. 옆의 줄이 더 빨리 빠지는 신기한 경험을 해본적이 다 있을 겁니다.
그래서 이런 경우에는 줄은 1줄만 서고 화장실 4칸 중에서 먼저 비는 칸이 생기면 차례대로 들어가면 됩니다. 이 예에서 세마포어는 사용할 수 있는 화장실 칸의 갯수로 볼 수 있겠네요. 이 값이 0보다 큰 경우에만 다른 사람(프로세스/쓰레드가) 화장실(공유자원)을 이용할 수 있습니다.
GeeksforGeeks에 Mutex와 Semaphore 내용이 있긴한데;; 잘 쓰여진 글은 아닌 것 같아요. 이해가 잘 안되네요.
Guru99의 내용이 더 좋은 것 같아요.
참고
www.geeksforgeeks.org/mutex-vs-semaphore/
www.guru99.com/semaphore-in-operating-system.html
댓글 영역