가장 유명한 예제로 화장실이 있다... (더러워도... -_-;)

남자 화장실의 소변기가 아니라 문을 걸어서 잠구고 들어가는 대변기, 혹은 여자 화장실은 있는 그대로 생각하면 된다. 화장실 문에는 각각 자물쇠와 열쇠가 있다. 화장실에서 기다리기에 앞서, 2가지 방법이 있다는 것을 언급해야 한다. 화장실을 기다리는 방법에는 2가지가 존재한다. 닥치고 줄 서서 기다리는 것은 당연하지만, 줄을 서서 기다리는 동안 기다리는 사람은 그냥 '멍' 때리고 있을 수 있고, 책을 읽거나 카톡을 하거나 하는 등의 다른 일을 할 수 있다. 그냥 멍 때리는 것은 Busy Waiting이고, 다른 일을 하고 있는 것은 뭐 예를 들면 잠을 재우는 것이지만, 실제로는 Process가 Wait state로 넘어가 있는 것을 의미합니다. Busy wait의 경우 해당 프로세스 혹은 스레드는 Run state와 Ready state를 오가며, 특별한 일을 하지 않더라도 화장실 문이 이제는 열렸나? 하며, 계속해서 확인을 한다.

Busy waiting의 경우 당연히 특별한 결과를 얻어내기 전까지 기다리면서 계속해서 CPU의 부하를 일으키는 문제를 발생시킨다. 반면에 2번째 방법은 부하가 적고, 화장실에서 나오는 사람이 기다리는 사람에게 이제 화장실을 사용해도 된다고 알려주는 일을 한다.

여튼, 세마포어에서 당연히 Busy waiting을 싫어할 것이고... -_-; 이제 Mutex와의 비교할 점을 이야기를 해야 한다. 인터넷에 검색을 해보면 세마포어는 프로세스의 개념이고, 뮤텍스는 스레드의 개념이라고 이야기를 하기도 하는데, 사실 조금 동의하기가 애매하다. 확실히 세마포어는 2개 이상의 프로세스에서 생겨나는 문제점을 해결하기 위해서 만들어진 것이지만, 스레드라고 생겨나지 않는 문제점이라고 보기에는 애매한 부분이 많다. (일단 서로 다른 프로세스는 서로 메모리를 공유하지 않는다. -_-) 가장 확실한 부분은 프로세스고 스레드의 이야기가 아니라, 들어갈 수 있는 화장실의 개수와 가장 큰 연관을 가진다고 보면 된다.

물론 세마포어에서도 단지 2개를 이용하기 위해서는 binary semaphore를 이용하면 되지만... -_- 여튼, 여러 개를 가질 수 있는 세마포어에 비해, 뮤텍스는 Mutual Exclusion의 약자로 해석을 하자면 상호 배제라고 하는데 그냥 독점한다고 생각하면 편하다. 1개의 공유 자원으로 생겨나는 문제점을 해결하기 위해서 접근할 수 있는 스레드의 개수는 오직 1개라고 정의하는 것이다.

세마포어와 뮤텍스를 이용하여 해결한 문제점이 있는 반면에 오히려 생겨나는 문제점도 있다. 다음 글에서는 그러한 문제점에 대해서 이야기를 하도록 하겠다.

(글을 짧게 적으면 설명을 하는 의미가 없고, 글을 길게 적다보면 잘못된 부분이 있을까 두렵다. -_-)
저작자 표시 비영리 변경 금지
신고

'Theory > CA & OS' 카테고리의 다른 글

OS, Priority Inversion  (0) 2011.09.12
OS, Deadlock  (0) 2011.09.12
OS, Semaphore and Mutex  (2) 2011.09.12
OS, Synchronization  (0) 2011.09.12
OS, Thread (스레드, 쓰레드)  (0) 2011.09.12
OS, CPU 스케쥴링 (Process scheduling)  (0) 2011.09.12
by 가우초 2011.09.12 16:45
| 1 |