공부기록

세마포어 본문

CS/OS

세마포어

코타쿠 2021. 5. 14. 15:11
  • 세마포어
    • 운영체제와 프로그램 언어 수준에서 병행성을 위해 제공되는 기법
      • 세마포어
      • 모니터
      • 메세지 전달
    • Dijkstra 기법의 기본적인 원리 - 세마포어
      • 두 개 이상의 프로세스들은 간단한 형태의 신호를 이용해 협력
      • 한 프로세스가 특정 신호를 수신할 때까지 정해진 위치에서 중지하도록 강제하는 것
      • 신호를 보내고 받기 위해 세마포어라 불리는 특수 변수들을 사용
        • semSignal(s) : 세마포어 s를 통해 신호를 전송
        • semWait(s) : 세마포어 s를 통해 신호를 수신
        • 특정 신호를 받으려는 프로세스에게 아직 해당 신호가 전달되지 않았다면, 전달될 때까지 프로세스의 수행은 보류됨
    • 세마포어
      • 정수값을 가지는 변수
      • 세가지 연산을 통해 접근
        • 세마포어 초기화 : 세마포어는 음이 아닌 값으로 초기화
        • semWait
          • 세마포어 값을 감소, 값이 음수가 되면 semWait을 호출한 프로세스는 블록됨, 음수가 아니면 프로세스는 계속 수행될 수 있음
        • semSignal
          • 세마포어 값을 증가시킴, 만일 값이 양수가 아니면 semWait 연산에 의해 블록된 프로세스들을 깨움
    • 이진 세마포어 (binary semaphore)
      • 이진 세마포어는 오직 0과 1만 유지
      • 세가지 연산에 의해 정의
        • 세마포어 초기화 : 0 또는 1로 초기화
        • semWaitB
          • 값이 0 이면 semWaitB를 호출한 프로세스는 블록
          • 값이 1 이면 값을 0으로 변경시키고 프로세스는 계속 수행
        • seSignalB
          • 블록되어 있는 프로세스가 존재하는 지 확인
          • 블록되어 있는 프로세스가 존재 시 프로세스를 깨움
          • 블록되어 있는 프로세스가 존재하지 않으면 세마포어 값을 1로 설정
    • 이진 세마포어 vs 범용 세마포어
      • 이진 세마포어가 구현하기 더 쉬움
      • 범용 세마포어와 같은 표현력을 가질 수 있음
    • mutual exclution lock (mutex)
      • 이진 세마포어와 비슷
      • 하지만 한 프로세스가 lock 하면 그 프로세스가 반드시 unlock 해줘야함
      • 이진 프로세스는 한 프로세스가 0 하면 다른 프로세스가 1 해줄 수 있다.
  • 세마포어는 블록된 프로세스들을 관리하기 위해 큐를 사용한다.
    • 강성 세마포어 : 블록된 프로세스들을 큐에서 제거하는 순서를 명시
      • 장점
        • 기아상태 X
        • 직관적, 구현이 편리
    • 약성 세마포어 : 순서가 명시되어 있지 않음

 

'CS > OS' 카테고리의 다른 글

교착상태의 원리  (0) 2021.05.14
프로세스와 스레드  (0) 2021.05.14
병행성의 원리  (0) 2021.05.14
병행성 : 상호배제와 동기화  (0) 2021.05.04
스케줄링 알고리즘  (0) 2021.05.04