Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- class
- flask
- nodejs
- typeORM
- dfs
- Dinosaur
- AWS
- MySQL
- cookie
- game
- MongoDB
- GIT
- Queue
- OCR
- 게임
- Sequelize
- jest
- Bull
- 공룡게임
- Nest.js
- 정렬
- Python
- mongoose
- 자료구조
- TypeScript
- JavaScript
- react
- nestjs
- Express
Archives
- Today
- Total
포시코딩
[운영체제] 5. Process Synchronization (5) - 정리 + monitor 본문
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
'CS (Computer Science)' 카테고리의 다른 글
[운영체제] 7. Memory Management (1) (0) | 2023.05.10 |
---|---|
[운영체제] 6. Deadlock (0) | 2023.05.09 |
[운영체제] 5. Process Synchronization (4) - semaphore를 통한 동시성 문제 해결 방법, monitor (0) | 2023.05.05 |
[운영체제] 5. Process Synchronization (3) (0) | 2023.05.05 |
[운영체제] 5. Process Synchronization (2) - The Critical Section Problem (0) | 2023.05.05 |