Operation System - 10. 세마포어와 뮤텍스 편

Perdy·2023년 7월 30일
0

CS

목록 보기
10/20

세마포어와 뮤텍스

뮤텍스

프로세스나 스레드가 공유자원을 lock()을 통해 잠금 설정하고 사용한 수에는 unlock()을 통해 잠금해제하는 객체입니다. 잠김이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 반대입니다. 따라서, 뮤텍스는 공유된 자원의 데이터 혹은 임계영역 등에 하나의 프로세스 또는 스레드가 접근하는것을 막을 수 있습니다.

임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행될 수 있도록 하는 기술입니다.

세마포어

세마포어는 일반화된 뮤텍스입니다. 간단한 정수 값과 두 가지 함수 wait(P함수) 및 signal(V함수)로 공유 자원에 대한 접근을 처리합니다.

  • wait() : 자신의 차례가 올 때까지 기다리는 함수
  • signal() : 다른 프로세스로 순서를 넘겨주는 함수

프로세스나 스레드가 공유 자원에 접근하면 세마포어에서 wait() 작업을 수행하고, 프로세스나 스레드가 공유 자원을 해체하면 세마포어에서 signal() 작업을 수행합니다.
세마포어에는 조건 변수가 없소, 프로세스나 스레드가 세마포어의 값을 수정할 때 다른 프로세스나 세마포어는 동시에 세마포어 값을 수정할 수 없습니다.

일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 사용합니다.

바이너리 세마포어

0과 1의 두 가지 값만 가질 수 있는 세마포어입니다.

카운팅 세마포어

여러 개의 값을 가질 수 있는 세마포어이며, 여러 자원에 대한 접근을 제어하는 데 사용됩니다.

  • 뮤텍스는 바이너리 세마포어라고 할 수 있지만, 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 메커니즘이고, 세마포어는 신호를 기반으로 상호배제가 일어나는 신호 메커니즘입니다.

차이점

  • 뮤텍스는 동기화 대상이 오직 한 개일 때 사용하며, 세마포어는 한 개 이상일 때 사용합니다.
  • 뮤텍스는 자원을 소유할 수 있고 책임을 가지는 반면, 세마포어는 자원 소유가 불가능합니다.
  • 뮤텍스는 상태가 0, 1 뿐이므로 lock을 가질 수 있고, 소유하고 있는 프로세스나 스레드만이 이 뮤텍스를 해제할 수 있습니다. 그렇지만 세마포어는 세마포어를 소유하지 않는 스레드가 세마포어를 해제할 수 있습니다.
  • 세마포어는 시스템 범위에 걸쳐있고, 파일 시스템 상의 파일로 존재합니다. 뮤텍스는 프로세스의 범위를 가지며 프로세스가 종료될 때 자동으로 clean up됩니다.
profile
영원한 뉴비. 꾸준히 한다면 언젠가는 높은 곳에 도달할지도?

0개의 댓글