2022.05.19 TIL (Mutex vs Semaphore)

이진호·2022년 6월 8일
0

운영체제 이론

목록 보기
7/9

교착 상태

  • 두 가지 이상의 작업이 서로의 작업이 끝나기만을 하염없이 기다리는 상태.
  • 서로 자원을 놓아줄 생각이 없고, 요청만 무한정 기다리는 상태
  • 공유 자원이 속해있어 교착 상태가 발생할 수 있는 영역을 임계 영역(Critical Section)이라 부름.

임계 영역(Critical Section)

  • 교착 상태가 발생할 수 있는 영역이고, 네 가지 조건이 존재함
  1. 상호 배제
  2. 점유 대기
  3. 비선점
  4. 순환대기
  • 이 네 가지 조건 중 하나만 만족하지 않아도 교착 상태가 발생하지 않음

상호 배제

  • 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구하는 것
  • 쉽게 말해 하나의 프로세스가 공유자원을 사용할 때 다른 프로세스가 동일한 공유자원에 접근할 수 없도록 통제하는 것을 의미함.

mutex

  • mutual과 exclusion의 합성어로 상호 배제라는 뜻이 있음.
  • 사전적 정의: 여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 메커니즘
  1. 대기큐를 생성해두고 임계 영역에 스레드가 있을 경우에 다른 스레드가 공유 자원을 사용하려 한다면 스레드를 blocking 하고 대기큐에 sleep 시킴.(Mutex Sleeping-wating Blocking-lock)
  2. SpinLock: 입구에서 공유 자원에 진입할 수 있는지 계속 물어보는 방법. 이러한 행위를 busy-waiting이라 함.

spinLock을 사용할 경우란?
1. 컨텍스트 스위칭 시간이 더 짧은가?
2. 멀티 코어 프로세스인가?

세마포어

  • 사전적 정의: 멀티프로그래밍 환경에서 다수의 프로세스나 스레드의 여러 개의 공유 자원에 대한 접근을 제한하는 방법으로 사용됨.
  • 뮤텍스와 다르게 여러 스레드가 동시에 접근할 수 있다는 차이가 존재함.
  1. sleep-waiting 방식으로 대기 큐에서 잠자고 있다가 사용가능한 자원이 생기면 잠자고 있던 스레드를 깨우는 방식임
  2. 사용 가능한 자원이 생길 때까지 계속 검사를 실시함.

요약

뮤텍스
1. 여러 스레드를 사용하는 환경에서 자원에 대한 접근을 강제하기 위한 동기화 매커니즘
2. Boolean 타입의 Lock 변수를 사용함.
3. 공유자원을 사용중인 스레드가 있을 때, 다른 스레드가 공유자원에 접근한다면 Blocking 후 대기 큐로 보냄.
4. Lock을 건 스레드만 Lock을 해제할 수 있음.

스핀락
1. 기본적으로 뮤텍스와 유사
2. Busy-waiting 하며 대기 큐를 갖지 않음.
3. Mutex-nonblocking 모델로 볼 수 있음.

세마포어

  • 세마포어 변수를 통해 wait, signal을 관리함. 세마포어 변수는 0 이상의 정수형 변수를 가짐.
  • 계수 세마포어로 사용할 수 있으며, 접근 가능한 공유 자원의 수가 1개일 때는 이진 세마포어로 뮤텍스처럼 사용할 수 있음.
  • Lock을 걸지않은 스레드도 Signal을 보내 Lock을 해제할 수 있음.

0개의 댓글