[운영체제] 뮤텍스, 세마포어, 모니터

DEV_HOYA·2024년 2월 6일
0

CS

목록 보기
55/55
post-thumbnail
  • 뮤텍스, 세마포어, 모니터는 경쟁상태를 해결하는 대표적인 방법
  • 이들은 상호배제, 한정대기, 진행의 융통성의 조건을 만족시키면서 경쟁상태를 해결함

✅ 상호배제

  • Mutual Exclusion
  • 한 프로세스가 임계영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음

✅ 한정대기

  • Bounded Waiting
  • 임계영역에 진입하는 횟수에 제한을 두어, 특정 프로세스가 영원히 임계영역에 있는것을 방지함

✅ 진행의 융통성

  • Progress
  • 어떠한 프로세스도 임계영역을 사용하지 않는다면 임계영역의 외부의 어떠한 프로세스도 들어갈 수 있으며, 이때 프로세스끼리 서로 방해하지 않는 것

⭐ 뮤텍스

  • 공유자원을 lock()을 통해 잠금 설정하고 사용한 후에 unlock()을 통해 잠금해제가 되는 객체 lock을 기반으로 경쟁상태를 해결
  • 잠금이 설정되면 다른 프로세스나 스레드는 임계영역에 접근 불가
  • 한번에 하나의 프로세스만 임계영역에 존재

⭐ 세마포어

  • 일반화된 뮤텍스를 의미함
  • 정수 Swait(), signal()로 공유자원에 대한 접근을 처리함
  • 여러 프로세스가 동시에 임계영역에 접근가능
  • S는 현재 쓸수 있는 공유자원의 수
  • wait()는 S를 1씩 감소시키며, 프로세스가 임계영역에 들어간 상태, P( )라고도 함
  • signal()은 S를 1씩 증가시키며 공유자원을 프로세스가 다 쓴 상태, V( )라고도 함

✅ 뮤텍스 VS 세마포어

  • 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 잠금 메커니즘을 사용
  • 세마포어는 신호를 기반으로 상호배제가 일어나는 신호 메커니즘을 사용

⭐ 모니터

  • 둘 이상의 스레드나 프로세스가 공유자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대해 인터페이스를 제공하는 객체
  • 공유자원에 대한 작업들을 순차적으로 처리함

✅ 모니터 VS 세마포어

  • 모니터는 구현하기 쉬우며, 한번에 하나의 프로세스만 공유자원에 접근가능하며 인터페이스를 기반으로 구축됨
  • 세마포어는 구현하기 어려우며, 한번에 여러개의 프로세스가 공유자원에 접근가능하며 상호배제를 명시적으로 구현해야 함. 정수변수를 기반으로 구축됨

0개의 댓글