강의 링크 : https://www.youtube.com/watch?v=S7l2UEXVhb0&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=17
3. Eventcount/Sequencer
은행의 번호표와 비슷한 개념
1) 용어 및 연산
(1) Sequencer
은행에서 대기표 뽑는 기계 생각하면 됨.
- 정수형 변수
- 생성 시 0으로 초기화, 감소하지 않음
- 발생 사건들의 순서 유지
- ticket() 연산으로만 접근 가능
(2) ticket(S)
은행에서 대기표 뽑는 기계에서 대기표를 뽑는 상황
- 현재까지 ticket() 연산이 호출 된 횟수를 반환
- Indivisible operation
(3) Eventcount
은행 창구에서 현재 업무 중인 번호를 보여주는 기계
- 정수형 변수
- 생성 시 0으로 초기화, 감소하지 않음
- 특정 사건의 발생 횟수를 기록
- read(E), advance(E), await(E, v)연산으로만 접근 가능
(4) read(E)
은행 창구에서 현재 업무 중인 번호를 확인하는 상황
- 현재 Eventcount 값 반환
(5) advance(E)
은행 창구에서 현재 업무를 종료하고 다음 대기자를 받기 위해 업무 가능 번호를 +1하는 상황
- E <- E+1
- E를 기다리고 있는 프로세스를 깨움 (wake-up)
(6) await(E, v)
E는 은행 창구에서 업무볼 수 있는 번호(Eventcount), v는 현재 내가 든 번호표
- V는 정수형 변수
- if (E<v)이면 E에 연결된 Qe에 프로세스 전달(push) 및 CPU scheduler 호출
2) Mutual exclusion (상호 배제)
- 은행에 간다
- v <- ticket(S) : 대기표를 뽑는다.
- await(E, v) : 내 차례가 될 때까지 기다린다.
- Critical Section : 업무를 본다
- advance(E) : 내 업무를 마치고, 다음 차례를 부른다.
-> 2, 3번이 P()연산, 5번이 V()연산
-> 세마포어의 starvation 문제를 해결해줄 수 있음
3) Producer-Consumer problem
- Pticket : 생성자의 번호표, Cticket : 소비자의 번호표, In : 물건을 놓는 이벤트, Out: 물건을 가져가는 이벤트, buffer : 크기가 n인 circular buffer
- Producer
- t <- ticket(Pticket) : 생성자가 번호표를 뽑는다.
- await(In, t) : 자신의 차례가 올 때까지 기다린다.
- await(Out, t-N+1) : buffer를 넣을 공간이 있는지 확인한다.
- 총 공간이 N개 인데, 현재 t번까지 대기 중이고, out번까지 진행되었다고 생각하면 -> 현재 N-t+out 만큼 대기 중이라는 말. N-t+out이 1이상이어야 buffer를 넣을 수 있음.
- 이를 수식으로 나타내면 await(Out, t-N+1)
- buffer[t mod N] <- M : 공간에 buffer를 넣는다.
- 총 공간이 N개 인데, 현재 t번까지 대기 중이고, out번까지 진행되었다고 생각하면 -> 현재 N-t+out 만큼 대기 중이라는 말. N-t+out이 1이상이어야 buffer를 넣을 수 있음.
- advance(In) : eventcount ++
- Consumer
- u <- ticket(Cticket) : 소비자가 번호표를 뽑는다.
- await(Out, u) : 자신의 차례가 올 때까지 기다린다.
- await(In, u+1) : buffer가 있는지 확인한다.
- 현재 총 In개 들어왔는데, 그 중 u개를 사용했으므로 In-u가 1보다 크거나 같아야 내가 가져갈 buffer가 존재하는 것
- 이를 수식으로 나타내면 await(In, u+1)
- m <- buffer[u mod N]
- 정해진 위치에있는 물건(buffer)을 가지고 나온다.
- 현재 총 In개 들어왔는데, 그 중 u개를 사용했으므로 In-u가 1보다 크거나 같아야 내가 가져갈 buffer가 존재하는 것
- advance(Out) : eventcount ++
4) 특징 정리
- No busy waiting
- No starvation
- Qe에 의한 선입선출 스케줄링
- 세마포어보다 더 low-level control이 가능하다. (==더 세세한 control이 가능하다. 왜냐하면 순서 control이 가능하기 때문)
'CS > OS' 카테고리의 다른 글
6. 프로세스 동기화 & 상호배제 (7) - Monitor (0) | 2021.05.14 |
---|---|
6. 프로세스 동기화 & 상호배제 (5) - Semaphore (0) | 2021.05.14 |
6. 프로세스 동기화 & 상호배제 (4) - Spinlock (0) | 2021.05.13 |
6. 프로세스 동기화 & 상호배제 (3) - HW solution (0) | 2021.05.12 |
6. 프로세스 동기화 & 상호배제 (2) - sw solutions (0) | 2021.05.12 |