기타

[운영체제론] IPC(Inter-Process Communication)

sujin7837 2021. 12. 11. 22:14
반응형

2장-IPC

-Semapore : 1965년 E. W. Dijkstra에 의해 소개된 새로운 변수 타입

사용 : down(P) operation → critical region → up(V) operation

2개의 operation

  1. down(P) operation (P for Dutch proberen(test))
    1. semaphore > 0 : 값을 하나 감소하고 계속함
    2. semaphore = 0 : sleep 상태가 됨
  2. up(V) operation (V for verhogen(increment))
    1. sleep 프로세스가 존재 : 깨움
    2. 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

  1. 2개 이상의 프로세스가 critical region에 동시에 있을 수 없음
  2. CPU의 수나 속도에 대해 어떠한 가정도 하지 않음
  3. critical region에 있지 않은 프로세스가 다른 프로세스를 block 할 수 없음
  4. 어떠한 프로세스도 critical region에 들어가려고 무한정 기다리면 안 됌

-busy waiting : 어떤 값이 나타날 때까지 variable을 계속해서 test함.

CPU를 낭비하는 문제가 있음

priority inversion problem

-Busy Waiting을 사용한 Mutual Exclusion

  1. Disabling Interrupts : critical region에 들어간 후에는 모든 interrupt를 diable하게 만들고, critical region을 떠난 후에 reenable하게 만듦
  2. Lock variables : critical region에 들어가려면 lock을 확인함. race condition이 발생한다는 문제가 있음
    1. lock = 0 : lock을 1로 세팅하고 critical region에 진입
    2. lock = 1 : lock이 0이 될 때까지 기다림
  3. Strict Alteration(엄격한 교대) : 교대로 critical region에 들어가는 방식critical region에 있지 않은 process에 의해 block될 수 있으므로 3번 조건에 위배됨
  4. Spin lock : busy waiting에 사용되는 lock
  5. Peterson's solution : enter_region을 call한 process가 critical region에 들어감두 개의 프로세스가 enter_region을 동시에 call 했을 경우 process number로 순서를 매김
  6. strict alteration하지 않는 더 단순한 방법
  7. TSL(Test and Set Lock) instruction : lock을 test 하고 set 하는 과정을 통해 critical region에 들어가는 방식
    1. lock = 0 : enter_region → critical_region → leave_region
    2. lock = 1 : enter_region → register = 1로 세팅 → lock이 0이 될 때까지 loop를 돎
    operation은 indivisible함

-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을 보장하며 사용됨

  1. wait
    1. 프로세스를 condition variable에 대해 block 되도록 함
    2. 다른 프로세스가 monitor에 들어오도록 함
  2. signal : condition variable에 대해 sleep 하고 있던 process를 깨움
    1. 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