감자튀김 공장🍟

[OS] 뮤텍스(Mutex) VS 세마포(Semaphore) 본문

Study/Operating System

[OS] 뮤텍스(Mutex) VS 세마포(Semaphore)

Potato potage 2022. 4. 7. 12:03
반응형

사전 설명

  • https://good-potato.tistory.com/61
  • 상호배제 장치(mutual exclusion device), 동기화 프리미티브(synchronization primitive) : 상호배제를 기반으로 여러 스레드들이 공유 자원을 액세스하는 전통적인 스레드 동기화 기법
  • 대표적인 동기화 기법
    • 락(lock) 방식 : 뮤텍스(mutex), 스핀락(spinlock)
    • wait-signal 방식 : 세마포(semaphore)

 

뮤텍스(Mutex)

  • 뮤텍스는 잠김/열림(locked / unlocked) 중 한 상태를 가지는 락 변수를 이용하여 오직 한 스레드만이 자원을 배타적으로 사용하도록 하는 기법이다.
  • 락이 걸려있는 경우, 임계구역에 들어가려고 하는 스레드가 락이 풀릴 때까지 블록 상태로 큐에서 대기하기 때문에 blocking lock 기법이라고도 부르고, 대기 큐에서 잠자면서 기다린다고 해서 sleep-waiting lock 기법이라고도 부른다.
  • 목적 : 임계구역에 대한 한 스레드의 배타적 접근
  • 특징
    • 임계구역의 실행시간이 짧은 경우, 뮤텍스는 비효율성을 보인다.
  • 뮤텍스 동기화의 구조

 

세마포

  • 세마포는 스레드가 동시에 사용할 수 있는 하나의 자원에 대해 스레드가 공유하도록 관리하는 동기화 프로그래밍 기법이며 프로그래밍 개념(concept)이다.
  • 세마포 요소
    • 자원 : n개의 인스턴스
    • 대기 큐 : 자원을 할당받지 못한 스레드가 잠드는 곳
    • counter 변수 : 사용가능한 자원의 개수를 나타내는 정수형 전역 변수로 자원의 개수 n으로 초기화 된다.
    • P/V 연산: P 연산은 자원 요청 시, V 연산은 자원 반환 시 실행되는 연산
  • 목적 : 자원에 대한 다중 스레드의 원활한 공유
  • 세마포 동기화 구조

 

세마포 - P/V 연산

  • P/V 연산은 wait/signal 연산으로도 불린다.
  • P 연산은 스레드의 자원 사용을 허가한다.
  • P 연산은 counter 변수를 1 감소시키고 V 연산은 counter 변수를 1 증가 시킨다.
  • P/V 연산은 sleep-wait 세마포와 busy-waiting 세마포로 나뉜다.
    • sleep-wait 세마포
      • P 연산 중 자원 사용을 허가받지 못한 스레드는 사용가능한 자원이 생길 때까지 대기 큐에서 잠을 자고(sleep-wait), V 연산에 의해 사용가능한 자원이 생기게 되면 깨어나서 자원 사용을 허가 받는 형태이다.
    • busy-waiting 세마포
      • P 연산에서 사용가능한 자원이 생길 때까지 무한 루프를 돌면서 체크(busy-waiting)한다. 그러다가 V 연산에 의해 가용자원이 생기면, P 연산에서 자원을 획득하는 방식이다.
      • 대기 큐가 필요 없다.

 

출처

운영체제(Operating system), 황기태 지음

반응형
Comments