카샤의 만개시기

세마포어(Semaphore)와 뮤텍스(Mutex) 본문

Foundation/Operation

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

SKaSha 2019. 7. 3. 14:26

공유 되어 있는 자원에 프로세스 혹은 스레드가 접근하고자 할 때 한번에 하나의 프로세스가 접근 할 수 있도록 고안 된 것이 세마포어입니다.

세마포어

공유된 자원의 데이터를 경쟁적으로 사용하는 프로세스들의 행동을 조정하거나 동기화 하는 기술입니다.
예를 들어 어떤 운영체제의 리소스를 동시에 4개의 프로세스만 사용 할 수 있다고 할 때, 이 리소스를 가지고 경쟁하는 여러 프로세스간 우선순위 등을 고려하여 행동을 조정하는 기술입니다.

뮤텍스

공유된 자원의 데이터를 여러 쓰레드가 접근 하는 것을 막는 기술입니다.
공유 리소스에 대하여 locking과 unlocking을 통하여 임계 영역을 가진 쓰레드들의 Running time이 서로 겹치지 않게 각각 단독으로 실행되게 하는 기술입니다.

임계 영역 (Critical Section)

다중 프로그래밍에서 여러 프로세스가 데이터를 공유하면서 수행될 때 각 프로세스에서 공유데이터에 접근하는 프로그램 코드부분을 말합니다.

세마포어와 뮤텍스 차이

  1. 세마포어는 뮤텍스가 될수 있지만, 뮤텍스는 세마포어가 될 수 없습니다.
  2. 뮤텍스는 상태가 0과 1(locking, unlocking)로 나뉘는 binary Semaphore입니다.
  3. 세마포어는 파일시스템 상 파일 형태로 존재하고 뮤텍스는 프로세스 범위입니다. (프로세스가 사라질 때 뮤텍스는 clean up 됩니다.)
  4. 세마포어는 소유할 수 없고 뮤텍스는 소유할 수 있습니다.
    뮤텍스를 소유하고 있는 쓰레드는 해당 뮤텍스를 해제 할 수 있지만 세마포어는 소유하고 있지 않은 쓰레드도 이 세마포어를 해제 할 수 있습니다.
Comments