강의 링크 : https://www.youtube.com/watch?v=33OqgesF-mM&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=15
1. Spinlock
1) 특징
- 정수 변수
- 초기화, P(), V() 연산으로만 접근 가능
- 위 연산들은 indivisible(or atomic) 연산
- -> preemptive 없음 (OS support로 인해)
- 전체가 한 instruction cycle에 수행 됨
- P(S) : S는 물건의 갯수를 뜻함, P(S)는 물건을 꺼내가는 상황이라고 생각하자.
- V(S) : S는 물건의 갯수를 뜻함, V(S)는 물건을 반납하는 상황이라고 생각하자.
2) 로직
- active는 물건의 유무를 나타내는 상태
- 1인 경우 물건 존재 / 0인 경우 물건이 존재하지 않음
- Pi가 먼저 진행되는 상황을 가정하면, P(active)를 진행했을 때, 물건이 있으니까 물건을 꺼내가게 되고, 이 때 active는 0으로 바꿔준다. 그리고 CS에 진입
- Pi가 CS에 진입하면서 active가 0으로 바뀌었기 때문에, Pj는 active가 0이어서 P()연산을 하지 못하고, 무한 대기 중
- Pi가 V(active)하면 (물건을 반납하면), active가 다시 1이 되어 Pj가 P(active)연산을 할 수 있게 되고 CS에 진입할 수 있게 된다.
- 이 때, P()부터 V()까지 OS의 도움으로 non preemptive가 보장되기 때문에 문제 상황(상호배제, ME의 조건을 어기는 상황)이 발생하지 않음.
3) 특징(단점)
- 멀티 프로세서 시스템에서만 사용 가능
- 단일 프로세서인 경우, Pi가 CS영역에 진입해있는 상황에서 멈추고, Pj가 P()연산을 진행한다면, while문에서 넘어가지 못한다. 즉, P(active)에서 계속해서 active가 1이 되는 상황을 기다린다. 이 때, Pi가 V()연산을 하려고 하는데, 단일 프로세서인 경우 이미 Pj가 CPU를 할당받은 채로 P()연산 내부의 while문을 진행하고 있기 때문에 결국 둘 다 일을 못하게 된다.
- -> 따라서 CPU가 여러 개 있어야 spinlock 가능
- Busy waiting
- while 문 내부에서 뺑뺑 돌고 있는 상황
'CS > OS' 카테고리의 다른 글
6. 프로세스 동기화 & 상호배제 (6) - Eventcount/Sequencer (0) | 2021.05.14 |
---|---|
6. 프로세스 동기화 & 상호배제 (5) - Semaphore (0) | 2021.05.14 |
6. 프로세스 동기화 & 상호배제 (3) - HW solution (0) | 2021.05.12 |
6. 프로세스 동기화 & 상호배제 (2) - sw solutions (0) | 2021.05.12 |
6. 프로세스 동기화 & 상호배제 (1) - 개요 (0) | 2021.05.12 |