반응형
2장-IPC
-Semapore : 1965년 E. W. Dijkstra에 의해 소개된 새로운 변수 타입
사용 : down(P) operation → critical region → up(V) operation
2개의 operation
- down(P) operation (P for Dutch proberen(test))
- semaphore > 0 : 값을 하나 감소하고 계속함
- semaphore = 0 : sleep 상태가 됨
- up(V) operation (V for verhogen(increment))
- sleep 프로세스가 존재 : 깨움
- sleep 프로세스가 존재하지 않음 : semaphore 주소값을 증가시킴
각각의 down/up operation은 atomic action이다!!! : 0을 테스트하거나 값을 감소시키는 등의 중간에 context switch 발생 불가
-Race Conditions : 2개 이상의 프로세스가 공유 data를 동시에 read/write 할 때, 프로세스가 언제, 어떻게 실행되느냐에 따라 결과가 달라지는 것
-Mutual Exclusion : 한 프로세스가 공유 data를 read/write 할 때, 다른 프로세스가 같은 행위를 못 하게 배제하는 것
-Critical Region(Critical Section) : 공유 data를 read/write(access)하는 부분/코드 영역
four conditions of a good solution to critical-section problem
- 2개 이상의 프로세스가 critical region에 동시에 있을 수 없음
- CPU의 수나 속도에 대해 어떠한 가정도 하지 않음
- critical region에 있지 않은 프로세스가 다른 프로세스를 block 할 수 없음
- 어떠한 프로세스도 critical region에 들어가려고 무한정 기다리면 안 됌
-busy waiting : 어떤 값이 나타날 때까지 variable을 계속해서 test함.
CPU를 낭비하는 문제가 있음
priority inversion problem
-Busy Waiting을 사용한 Mutual Exclusion
- Disabling Interrupts : critical region에 들어간 후에는 모든 interrupt를 diable하게 만들고, critical region을 떠난 후에 reenable하게 만듦
- Lock variables : critical region에 들어가려면 lock을 확인함. race condition이 발생한다는 문제가 있음
- lock = 0 : lock을 1로 세팅하고 critical region에 진입
- lock = 1 : lock이 0이 될 때까지 기다림
- Strict Alteration(엄격한 교대) : 교대로 critical region에 들어가는 방식critical region에 있지 않은 process에 의해 block될 수 있으므로 3번 조건에 위배됨
- Spin lock : busy waiting에 사용되는 lock
- Peterson's solution : enter_region을 call한 process가 critical region에 들어감두 개의 프로세스가 enter_region을 동시에 call 했을 경우 process number로 순서를 매김
- strict alteration하지 않는 더 단순한 방법
- TSL(Test and Set Lock) instruction : lock을 test 하고 set 하는 과정을 통해 critical region에 들어가는 방식
- lock = 0 : enter_region → critical_region → leave_region
- lock = 1 : enter_region → register = 1로 세팅 → lock이 0이 될 때까지 loop를 돎
-Sleep and Wakeup
-Monitors
monitor의 구조
monitor example
integer i;
condition c;
procedure producer();
.
.
.
end;
procedure consumer();
.
.
.
end;
end monitor;
condition variables에 연관된 2개의 operations : mutual exclusion을 보장하며 사용됨
- wait
- 프로세스를 condition variable에 대해 block 되도록 함
- 다른 프로세스가 monitor에 들어오도록 함
- signal : condition variable에 대해 sleep 하고 있던 process를 깨움
- signal은 누적되지 않으므로, waiting이 없는 condition variable에 대해 signal이 수행되면 signal은 영원히 사라짐
반응형
'기타' 카테고리의 다른 글
[CSS] text-align 속성 (0) | 2022.03.04 |
---|---|
[운영체제론] Process (0) | 2021.12.11 |
[운영체제론] System Call (0) | 2021.12.11 |
[프로그래밍] C++과 JAVA의 차이점 (0) | 2021.12.09 |
[Jupyter] 주피터 노트북 사용하기 (0) | 2021.10.25 |