본문 바로가기
CS 지식/운영체제

[운영체제] Semaphore(세마포어) & Mutex(뮤텍스)

by CSEGR 2024. 8. 24.
728x90

이전 포스팅에서 Race Condition에 대해서 설명하면서, 공유 자원을 동시에 쓰지 않기 위해 한 번에 하나의 프로세스만 접근하도록 한다는 해결책을 언급하였다. 

 

[운영체제] Race Condition(경쟁 상태)

✔️ Race Condition(경쟁 상태) 정의Race Condition(경쟁 상태) 이란?경쟁 상태란 두 개 이상의 쓰레드가 공유자원에 대해 접근하려고 서로 경쟁하는 것이다. 다르게 말하면, 공유 자원에 대해 여러 쓰

cse-gr.tistory.com

이번 포스팅에서는 그 해결책을 구체적으로 알아보자 !

 

공유된 자원에 여러 프로세스가 동시에 접근하면, Race Condition 이라는 문제가 발생하고

이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근 할 수 있도록 1) Semaphore 와 2) Mutex를 사용한다. 

 

✔️ Semaphore [ 여러 개의 화장실이 있는 식당 ] 

Semaphore 란?

공유 자원을 사용하고 있는 스레드/프로세스 수를 관리하는 하나의 공통된 값을 이용해 공유 자원에 대한 접근을 제한 하는 방법
  • 공유 자원에 접근할 수 있는 쓰레드/프로세스의 최대 허용치만큼 동시에 사용자가 접근 가능 
  • 접근 가능한 스레드/프로세스의 수를 의미하는 변수는 운영체제나 커널에 저장되며, 모든 스레드가 확인 가능
  • 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있다. 

✔️ Mutex [ 하나의 화장실만 있는 식당 ㅠㅠ ]

Mutex 란?

한 프로세스에 의해 소유될 수 있는 Key를 이용해 공유 자원에 대한 접근을 제한 하는 방법 
  • 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 한 상호배제 기법 Key에 해당하는 어떤 객체(Object)가 있으며, 이 객체를 소유한 스레드/프로세스만 이 공유자원에 접근할 수 있다.
  • 공유 자원에 대한 접근을 조율하기 위해 lock 또는 동기화를 사용한다. 
  • Lock : 현재 임계 구역에 들어갈 권한을 얻음 / Unlock : 현재 임계 구역 사용을 완료했음 - 본인만 상태 변경 가능 !!
  • 뮤텍스 객체는 두 스레드가 동시에 사용할 수 없다. 

 

Semaphore 와 Mutex를 설명하기 위해 가장 유명한 설명인 식당 화장실을 예시로 들어 설명해보자 !

✔️ Semaphore  vs Mutext 무슨 차이?

화장실을 이용하는 사람 : 쓰레드 or 프로세스

화장실 : 공유자원

Semaphore (세마포어)

세마포어는 손님이 화장실을 쉽게 이용할 수 있는 레스토랑이다. 세마포어는 화장실 여러 칸이 있고, 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여준다. 

만약 화장실에 가고 싶다면, 입구에서 빈 칸 개수를 확인하고 빈 칸이 있다면 빈 칸 갯수를 바꾸고 화장실에 간다.

그리고 화장실에서 나올 땐 빈 칸 개수를 하나 더해준다. 

빈 칸이 없는경우는 당연히 빈 칸이 생길 때까지 기다려야한다!! 

 

이 때, 화장실 빈칸의 개수는 현재 공유자원에 접근할 수 있는 쓰레드/ 프로세스의 개수이다. 

 

Mutext (뮤텍스)

뮤텍스화장실이 하나밖에 없는 레스토랑이다. 화장실을 가기 위해서는 카운터에서 열쇠를 받아야한다. 

카운터에 열쇠가 있으면 화장실에 사람이 없다는 뜻이고, 그 열쇠를 가지고 화장실에 갈 수 있다. 

카운터에 열쇠가 없다면, 열쇠를 기다려야한다. 

 

이때, 화장실 열쇠(key)는 공유자원에 접근하기 위해 필요한 오브젝트이다. 

 

  • Mutex는 동기화 대상이 only 1개일 때 사용 가능
  • Semaphore는 동기화 대상이 1개 이상일 때 사용가능

 

 

#참고 

https://gyoogle.dev/blog/computer-science/operating-system/Semaphore%20&%20Mutex.html

https://worthpreading.tistory.com/90

728x90