[운영체제] 뮤텍스와 세마포어의 차이는 무엇인가요?

orca·2023년 11월 30일

CS

목록 보기
9/46

뮤텍스와 세마포어는 스레드 동기화의 방법입니다. 뮤텍스는 잠금 기반 동작이며, 하나의 스레드만 동시에 임계 구역에 존재할 수 있습니다. 반면 세마포어는 시그널 기반 동작이며, 여러 스레드가 동시에 임계 구역에 존재할 수 있습니다.

스레드 동기화

스레드 동기화는 경쟁 조건이 발생하지 않도록 하기 위해, 공유 자원에 대한 접근을 조정하는 것을 말합니다.

공유 자원

  • 여러 프로세스가 공동으로 이용하는 자원

경쟁 조건

  1. 여러개의 프로세스가 동일한 자원에 접근하여 조작함
  2. 실행 결과가 자원에 접근하는 순서에 따라 달라짐

임계 구역

  • 한번에 하나의 프로세스만 접근할 수 있는 구역
  • 임계 구역에는 공유 자원이 포함됨
  • 임계 구역 문제 해결 조건
    • 상호 배제
    • 한정된 대기
    • 진행의 융통성

임계구역

뮤텍스 (Mutual Exclusion Object)

  • 한 번에 하나의 스레드만 임계 영역에 존재
  • 잠금 기반 동작
    1. 스레드가 시스템에 공유 자원을 요청
    2. 시스템은 고유한 뮤텍스 객체를 생성
      ➡️ 다른 스레드는 공유 자원을 사용할 수 없음
    3. 스레드는 뮤텍스 객체를 사용
    4. 시스템은 뮤텍스 객체를 해제
      ➡️ 다른 스레드는 공유 자원을 사용할 수 있음

세마포어

  • 여러 스레드가 동시에 임계 영역에 존재할 수 있음
  • 신호 기반 동작
    1. Semaphore(1) : 세마포어의 값이 1인 상태
    2. P() : 스레드의 임계 구역 진입
      • 스레드가 세마포어의 값을 0으로 변경함 (감소)
      • 공유 자원을 사용함
        ➡️ 세마포어의 값이 0이므로, 다른 스레드는 공유 자원을 사용할 수 없음
    3. V() : 스레드가 임계 구역 탈출
      • 스레드가 세마포어의 값을 1로 변경함 (증가)
      • 공유 자원 해제
      • 세마포어에서 대기하는 스레드에 WAKE_UP 시그널을 보냄
        ➡️ 다른 스레드는 공유 자원을 사용할 수 있음

Introduction of Process Synchronization
Mutex vs Semaphore
Difference between Mutex and Semaphore in Operating System

0개의 댓글