[운영체제] Synchronization (3) - Spin lock과 Mutex lock, Mutex와 Semaphore

82.831·2023년 1월 6일
0

🚗 Mutex lock과 Spin lock?

Mutex lock

  • lock을 잡기 위해 오랜 시간을 기다려야 할 것 같으면 다른 작업을 동시에 진행할 수 있다.

  • busy waiting 하지 말고, blocking 되어 기다리자.

  • 자원을 단시간에 얻을 수 있게 되는 경우 차라리 spin lock이 효과적이다. context switching에 더 큰 자원을 낭비하게 될 수 있는 문제를 초래한다.

Spin lock

  • 문맥 교환(context switching)이 일어나지 않는다. 자원을 단시간에 얻을 수 있게 되는 경우 context switching 비용이 들지 않아 효율을 높일 수 있다.

  • 다른 작업을 동시에 진행하지 못하고 진입 가능할 때 까지 계속 기다리는 busy waiting 방식이다.

  • lock을 잡을 때 까지 끊임없는 무한 루프를 통해 critical section에 진입을 재시도하기 때문에, 하나의 스레드가 계속 CPU를 점유하고 있는 상태이므로, 자원을 단기간에 얻지 못하게 되는 경우 CPU의 낭비를 초래한다. 또한, lock을 잡고 있는 애가 preemtive 되면 이 lock을 잡기 위해 spin lock을 수행 중이던 프로세스는 한타임 내내 CPU의 낭비를 초래한다.


🚢 Mutex와 Semaphore?

Mutex

  • mutual exclusive를 보장하는 lock. 상호 배제 방식.
  • critical section에 하나의 프로세스가 접근하는 것을 방지
  • 동기화 대상이 오직 하나이다. semaphore과 차이점
  • 뮤텍스가 사용되는 critical section은 공유 불가능
  • 한번에 단 하나의 프로세스/스레드만 접근 가능. 오직 진입한 프로세스/스레드만이 mutex 해제할 수 있다.
  • 사용중인 프로세스/스레드가 락(Lock)을 걸어버려 다른 프로세스/스레드의 접근을 방지한다.
  • mutex는 화장실에 한칸 밖에 없는 것과 같음.
    출처 https://cocoon1787.tistory.com/541

Semaphore

  • critical section에 여러 개의 프로세스가 접근하는 것을 방지
  • 동기화 대상이 하나 이상이다. mutex와 차이점
  • 리소스의 상태, 갯수를 나타내는 간단한 카운터
  • lock을 걸지 않은 프로세스가 signal을 보내 락을 해제할 수 있다.
  • semaphore은 화장실에 여러 칸이 존재하는 것과 같음.

각 사용자는 사용할 수 있는(즉, 비어있는) 화장실 칸 갯수를 알 수 있음.
출처 https://cocoon1787.tistory.com/541

Binary semaphore

  • Semaphore의 value 값이 1인 경우 이를 mutex처럼 사용할 수 있다.

✨ Mutex와 Semaphore의 차이점

  • 관리하는 동기화의 갯수

    mutex는 동기화 대상 오직 하나,
    semaphore은 동기화 대상 하나 이상

  • lock 해제 권한

    mutex는 락을 걸은 스레드만이 락 해제 가능,
    semaphore은 락을 걸지 않은 스레드도 signal을 보내 락 해제 가능

0개의 댓글