본문 바로가기
Computer Science

Semaphore / Mutex / Critical Section

by luk_hwkim 2022. 12. 30.

스레드 동기화 

멀티 프로세서, 멀티 스레드 시스템에서 공유 자원에 대한 동시 간섭을 막기 위한 동기화 방법

  • 유저모드 동기화(User Mode Synchronization)
    • 동기화를 하는 과정에서 커널의 자원을 이용하지 않고 수행 (성능상의 이점)
    • Critical Section
  • 커널모드 동기화(Kernel Mode Synchronization)
    • 동기화가 진행되는 과정에서 커널의 자원을 이용
      (성능상의 저하가 발생할 수 있으나, 유저모드에서 제공하지 못하는 기능 제공)
    • Mutex, Semaphore

 

🔖Crtical Section

  • 하나의 프로세스, 하나의 프로세스 안에서의 Thread에서만 사용 가능하다.
  • 먼저 접근한 스레드는 EnterCriticalSection을 통해 락을 획득하고, 그 이후 접근하는 스레드는 대기 시킨다.
  • 할 일을 마치면 LeaveCriticalSection으로 락을 해제한 후 다른 스레드가 접근할 수 있게 된다.
  • 대기중인 스레드는 다른 스레드에게 CPU 점유를 넘겨야 하므로, 컨텍스트 스위칭(Context Switching)이 발생하지만 이후 대기시간동안 CPU자원을 점유하지 않는다. 

 

🔖Mutex

  • Mutex는 상호배제라는 의미인 Mutual Exclusion의 줄임말이다.
  • Mutex라는 커널 객체를 이용해서 동기화를 하는 방법이다.
  • 커널 객체를 사용하기 때문에 프로세스 사이에서의 동기화도 가능하다. 물론 쓰레드 사이에서의 동기화도 가능
  • 한 프로세스에 의해 소유될 수 있는 Key를 기반으로 하는 상호배제 기법
  • Key에 해당하는 객체(Object)가 있으며, 이 Object를 소유한 스레드/프로세스만이 공유자원에 접근할 수 있다.

javatpoint

 

🔖Semaphore

  • 세마포어 역시 커널 객체를 이용한 동기화 방법이다.
  • MutexCritical Seciton은 오로지 스레드 1개만 자원을 액세스 할수 있는 반면, 세마포어는 원하는 개수의 스레드가 자원을 액세스 할 수 있다.
  • 세마포어의 자원 액세스를 1개로 설정하면 뮤텍스와 같다. 고로, 세마포어뮤텍스가 될 수 있지만 뮤텍스세마포어가 될 수 없다.
  • 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있다.
  • 자원을 사용하지 않는 상태가 될 때, 대기하던 프로세스가 즉시 자원을 사용한다.
  • 세마포어를 사용하는 프로세스는 그 값을 확인하고, 자원을 사용하는 동안에는 그 값을 변경함으로써 다른 세마포어 사용자들이 대기하도록 해야한다. 
  • 세마포어는 시스템 범위에 걸쳐 있고, 파일 시스템상의 파일로 존재한다.
    이와 비교하여 뮤텍스는 프로세스의 범위를 가지며 프로세스 종료에 자동으로 해제된다.

Semaphores (keil.com)

 

댓글