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