포시코딩

[운영체제] 5. Process Synchronization (5) - 정리 + monitor 본문

CS (Computer Science)

[운영체제] 5. Process Synchronization (5) - 정리 + monitor

포시 2023. 5. 8. 15:46
728x90

키워드

process synchronization, concurrency control, 병행 제어, semaphore, monitor

 

Process Synchronization

  • concurrency control, 병행 제어라고도 부른다.

 

Semaphore

  • 프로그래머 관점에서 concurrency control을 잘하기 위한 방법을 제공하기 위한 수단으로
    P 연산과 V 연산으로 구성된 일종의 추상자료형
  • P 연산: 자원을 획득하는 과정을 나타내는 연산
  • V 연산: 자원을 반납하는 과정을 나타내는 연산

 

고전적인 프로세스 동기화 문제 세 가지

  • Bounded-Buffer Problem(Producer-Consumer Problem)
  • Readers and Writers Problem
  • Dining-Philosophers Problem(식사하는 철학자 문제)

  • 세 가지 문제 모두 semaphore, monitor를 이용해 해결하는 방법 존재

 

Monitor

  • 프로그래머의 실수가 존재할 수 있는 semaphore와 달리
    프로그래밍 언어 차원에서 공유 데이터 접근 관련 문제를
    monitor가 자동으로 해결함으로서 프로그래머의 부담을 줄임
  • 공유 데이터 접근 코드를 monitor 안에 정의하기 때문에 
    프로세스가 공유 데이터에 접근하기 위해선 monitor 안에 정의된 해당 코드로만 접근이 가능
  • active한 프로세스 하나만이 monitor 안에 들어올 수 있게 monitor가 제어하고 있기 때문에
    공유 데이터에 코드들이 동시에 접근할 수 없다. 
  • lock을 걸고 풀 필요가 없어짐

 

condition variable

  • monitor 안에는 condition variable이 존재
  • monitor 안의 프로세스가 어떤 조건이 충족되지 않아 오래 걸리면 잠들게 한다.
  • 조건에 해당하는걸 변수로 둘 수 있는데 이게 condition variable
  • semaphore 처럼 어떤 값을 가지거나 개수를 카운팅하는게 아닌
    어떤 프로세스를 잠들게 하고 줄 세우기 위한 변수
  • wait 연산signal 연산에 의해서만 접근 가능

x.wait()

  • x.wait()을 invoke한 프로세스는 다른 프로세스가 x.signal()을 invoke 하기 전까지 suspend

x.signal()

  • x.signal()은 정확하게 하나의 suspend된 프로세스를 resume 한다.
  • suspend된 프로세스가 없으면 아무 일도 일어나지 않는다. 

 

Bounded-Buffer Problem

  • produce(생산자 프로세스)
    • 공유 buffer에 자원을 만들어 집어넣는 프로세스
  • consume(소비자 프로세스)
    • 공유 buffer에서 자원을 꺼내가는 프로세스
  • monitor에선 생산자든 소비자든 코드를 실행하는 도중에 다른 프로세스의 접근을 monitor가 막아주기 때문에 
    공유 buffer에 대해 lock을 걸거나 푸는 코드가 필요하지 않다. 
  • condition full
    • 자원이 들어있는 buffer를 기다리는 프로세스를 줄 세우는 condition variable
  • condition empty
    • 빈 buffer를 기다리는 프로세스를 줄 세우는 condition variable
  • semaphore 버전 코드보다 훨씬 자연스럽고 프로그래머가 작성하기 쉽다. 
  • 가능하다면 monitor 버전 코드와 semaphore 버전 코드는 서로 쉽게 컨버전이 가능
  • monitor는 동시 접근 막는 것을 monitor에서 지원해주는 것이고 
    semaphore는 자원을 획득하기 위해 프로그래머가 직접 P 연산, V 연산을 해줘야 해서
    목적 자체는 다르다고 볼 수 있다. but, 코드는 비슷

 

Dining Philosophers Example

 

728x90