Next-Squad/Interview-Question

[운영체제] 10. 세마포어와 뮤텍스의 차이에 대해 설명해보세요.

zbqmgldjfh opened this issue · 1 comments

세마포어와 뮤텍스의 차이에 대해 설명해보세요

Process 동기화를 위한 Mutex, Semaphore 에 대하여 학습하기

키워드

운영체제, Process, Process 동기화, 동기화

프로세스 혹은 스레드가 공유자원을 쓸 때, 하나의 자원에 두 개 이상의 것이 접근하는 경우에 문제가 생기는데 이때 이러한 현상을 제어하기 위해 쓰레드에서는 뮤텍스를, 프로세스에서는 세마포어를 사용한다.

Semaphore

세마포어는 2개 이상의 Process 환경에서 공유자원에 대한 동기화 방식 입니다.

하나의 정수값인 S(세마포어 카운터)를 이용하여 동시에 자원에 접근할 수 있는 프로세스를 제한합니다.
즉, S는 사용가능한 자원의 개수를 의미합니다.
현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법이라 할 수 있습니다.

이때 초기화 하는 S의 값에 따라 크게 2가지 종류로 나뉘게 됩니다.

  1. Counting Semaphore : 정수 값 S의 범위가 0 이상으로 제한이 없다.� 여러 자원을 사용할때 사용한다.
  2. Binary Semaphore : 정수 값 S가 오직 0 또는 1이다. 이는 Mutex lock과 동일한 역할을 갖는다.

Mutex

뮤텍스는 가장 간단한 자원 접근에 대한 동기화 방식 입니다.
mutex는 하나의 Process내부의 여러 Thread간의 상호배제를 위한 방식으로 critical section에 Lock을 걸어서 race condition을 막는 역할을 합니다.

이러한 동기화 작업을 하기 위해 필수적으로 lock을 획득하고, 일이 끝나면 반납을 해줘야 합니다.
즉, 동시에 2개의 Thread가 동일한 Mutex를 사용할수가 없습니다.

문제는, 하나의 Thread가 Mutex Lock을 획득하여 작업을하는동안, 다른 나머지 하나의 Thread는 무한 loop를 돌면서 Busy Waiting을 한다는 단점이 있습니다. 일종의 자원 낭비이죠.

둘간의 차이점

가장 큰 차이점은 동기화 대상의 갯수입니다.

  1. Mutex는 동기화 대상이 only 1개일 때 사용
  2. Semaphore는 동기화 대상이 1개 이상일 때 사용

또한 Mutex는 소유하고 있는 스레드만이 이 Mutex를 해제할 수 있지만,
반면, Semaphore는 Semaphore를 소유하지 않는 스레드가 Semaphore를 해제할 수 있습니다.


출처

https://worthpreading.tistory.com/90
https://chelseashin.tistory.com/40