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

림예·2024년 3월 21일
0

CS_운영체제

목록 보기
7/11

프로세스는 독립적으로 실행된다. 즉, 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다. (스레드는 프로세스 안에서 자원을 공유하므로 영향을 받는다)

이런 독립적 구조를 가진 프로세스 간의 통신을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신이다.

프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.

IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스를 사용한다. (공유된 자원에 한번에 하나의 프로세스만 접근시킬 때)



세마포어(Semaphore) & 뮤텍스(Mutex)

Race condtion

공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태

동시 접근 시 자료의 일관성을 해치는 결과가 나타남


Race Condition이 발생하는 경우

  • 커널 작업을 수행하는 중에 인터럽트 발생
  • 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때
  • 멀티 프로세서 환경에서 공유 메모리 내의 커널 데이터에 접근할 때


임계 구역(Critical Section)

여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

공유 데이터를 여러 프로세스가 동시에 접근할 때 잘못된 결과를 만들 수 있기 때문에, 한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야 한다.



뮤텍스

임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술
상호 배제(Mutual Exclusion)의 약자임

한 스레드, 프로세스에 의해 소유될 수 있는 Key🔑를 기반으로 한 상호배제기법

화장실이 하나 뿐이 없는 식당과 비슷하다.
Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 (쓰레드,프로세스) 만이 공유자원에 접근할 수 있다.


해당 접근을 조율하기 위해 lock과 unlock을 사용한다.
  • lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
  • unlock : 현재 임계 구역을 모두 사용했음을 알림. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 )



세마포어

Signaling mechanism. 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제를 달성하는 기법

세마포어는 손님이 화장실을 좀 더 쉽게 이용할 수 있는 레스토랑이다. 세마포어를 이용하는 레스토랑의 화장실에는 여러 개의 칸이 있다. 그리고 화장실 입구에는 현재 화장실의 빈 칸 개수를 보여주는 전광판이 있다.

세마포어는 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.



뮤텍스와 세마포어의 차이점

  1. 동기화 대상의 개수
  • Mutex는 동기화 대상이 1개
  • Semaphore는 동기화 대상이 1개 이상
  1. 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다.
  • 뮤텍스는 상태가 0, 1로 이진 세마포어로 부르기도 함
  1. 뮤텍스는 자원 소유 가능 + 책임을 가지는 반면 세마포어는 자원 소유 불가
  • 뮤텍스는 상태가 0, 1뿐이므로 Lock을 가질 수 있음
  1. 뮤텍스는 소유하고 있는 스레드만이 이 뮤텍스를 해제할 수 있다.
  • 반면 세마포어는 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.
  1. 세마포어는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재한다.





면접 질문


Race Condition과 Critical Section이 무엇이고, 경쟁상태를 막기 위해 어떤 방법을 사용하는지 설명해주세요.
  • 두 개 이상의 쓰레드가 공유자원에 대해 접근하려고 서로 경쟁하는 것을 'Race Condition(경쟁상태)'라고 합니다.
  • 이 공유자원이 존재하는 구간으로 Race Condition이 일어날 수 있는 영역을 'Critical Section(임계영역)'이라고 합니다.
  • 이러한 임계영역에 대한 경쟁상태를 제거하기 위해서 한 공유자원에 대해서 한 쓰레드에만 접근을 허락하도록 하는 '상호배제(Mutual Exclusion)'를 사용합니다.

Mutex(뮤텍스)와 Semaphore(세마포어)에 대해 설명해주세요.

  • 뮤텍스
    오직 1개만의 스레드(또는 프로세스)만 접근 할 수 있다.
    1개만 접근 가능하므로 반드시 락을 획득한 프로세스가 락을 해제해야 한다.
  • 세마포어
    세마포어 변수만큼의 스레드(또는 프로세스)가 접근 할 수 있다.
    현재 수행중인 프로세스가 아닌 다른 프로세스가 세마포어를 해제할 수 있다.
    이진 세마포어는 뮤텍스와 동일하다고 볼 수 있다. 이진 세마포어가 아닌 나머지 세마포어를 카운팅 세마포어라고 부른다.
  • 뮤텍스와 세마포어를 사용해 임계영역에서의 경쟁상태를 제거할 수 있습니다.



profile
Think big 🌏

0개의 댓글