운영체제

뮤텍스와 세마포어

Younghun 2024. 2. 5. 14:40

0.개요

  • 공유 자원에 대한 동시 접근을 방지하여 Race Condition을 제거할 수 있다.
  • 이를 위해 동기화 기법을 사용한다.
  • 대표적인 예로 뮤텍스와 세마포어가 있다.

1. 뮤텍스

  • 동작 원리
    • 뮤텍스는 공유 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘이다.
    • 임계구역(Critical Section)을 가진 스레드들의 실행시간이 서로 겹치지 않도록 한다.
    • 특정 객체의 Key를 소유한 스레드/프로세스만이 공유자원에 접근할 수 있게 하여 상호배제(Mutual Exclusion)를 달성한다.
  • 사용 시기
    • 뮤텍스는 동기화 대상이 하나일 때 사용한다.
  • 소유와 해제
    • 자원을 소유하고 있는 스레드만이 뮤텍스를 해제할 수 있습니다.
  • 범위와 종료
    • 뮤텍스는 프로세스의 범위를 가지며 프로세스가 종료될 때 자동으로 정리(Clean up)된다.

2. 세마포어

  • 동작 원리
    • 세마포어는 멀티 프로그래밍 환경에서 공유된 자원에 대한 접근을 제한한다.
    • 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제를 달성한다.
    • 이는 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근할 수 있게 한다.
  • 사용 시기
    • 세마포어는 동기화 대상이 하나 이상일 때 사용한다.
  • 소유와 해제
    • 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.
  • 범위와 종료
    • 세마포어는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재합니다.

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

  • 동기화 대상
    • 뮤텍스는 동기화 대상이 하나일 때 사용하고, 세마포어는 동기화 대상이 하나 이상일 때 사용한다.
  • 상호 배제
    • 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다. 뮤텍스는 0, 1로 이루어진 이진 상태를 가지므로 Binary Semaphore라고도 한다.
  • 소유와 해제
    • 뮤텍스는 소유하고 있는 스레드만이 이 뮤텍스를 해제할 수 있다. 반면, 세마포어는 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있다.
  • 범위와 종료
    • 세마포어는 시스템 범위에 걸쳐 있고, 파일 시스템 상의 파일로 존재한다. 반면, 뮤텍스는 프로세스의 범위를 가지며 프로세스 종료될 때 자동으로 정리된다.