728x90
반응형
출처 : https://www.youtube.com/watch?v=33OqgesF-mM&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=15
HW solution에서도 여전히 Busy waiting 문제가 남아있었다. Busy waiting 문제를 해결하고자 OS가 지원하는 SW 솔루션들이 등장하게 된다.
Spinlock
- Spinlock은 정수형 변수(S)이다.
- 초기화, P(), V() 연산으로만 접근 가능
- 위 연산들은 indivisible (or atomic) 연산
- OS가 보장해줌. 즉, P(), V() 연산이 한 번 실행되면 preemptive 되지 않고 끝까지 실행됨
- 전체가 한 instruction cycle에 수행 됨
- 위 연산들은 indivisible (or atomic) 연산
- P(S) 연산 : S는 물건의 갯수, P는 물건을 꺼내가는것
- 물건(S)이 0 이하라면 물건이 생기기를(S가 0 이상이 되기를) 기다린다.
- 물건(S)이 0보다 크다면 1개를 빼준다.
- V(S) 연산 : V는 물건을 집어넣는 것
- 물건(S)를 1 더해준다.
- 혹은 P연산은 자물쇠를 거는 것, V연산은 자물쇠를 푸는 것이라고 이해해도 된다.
Spinlock을 사용하면 ME 문제가 간단하게 해결된다.
들어가기 전에 P() 연산(자물쇠를 잠금), 나갈 때 V() 연산(자물쇠를 품)을 수행한다.
active라는 spinlock 변수가 존재하고, 초기값은 1이다. 즉, "물건이 있다" 를 의미한다.
Pi가 먼저 도착해서 P연산을 수행하고 active를 1 - 1 = 0 으로 만들고 CS에 진입한다. 그리고 CS에서 나가면서 V 연산을 통해 active를 다시 0 + 1 = 1 로 만든다.
Pj는 Pi가 CS에 있는 동안 active가 0이므로 P연산에서 반복문을 돌다가 Pi가 CS에서 나오고 V연산을 통해 active를 1로 만들면 CS에 진입한다.
Spinlock에서 P 연산과 V 연산은 중간에 preemptive 되지않고 한 번 실행되면 끝까지 수행하도록 보장되기 때문에 동시에 들어가거나 (Mutual Exclusion), 아무도 못들어가는 (Bounded waiting) 문제가 발생하지 않는다.
- Spinlock은 멀티 프로세서 시스템에서만 사용이 가능하다. CPU의 스레드가 2개가 있어서 Pi와 Pj가 동시에 돈다고 가정을 해야만 위의 예시의 로직이 동작하게 된다.
- Busy waiting. 여전히 P() 연산에서는 S가 1 이상이 될때까지 반복문을 돌고 있다.
728x90
반응형
'Study > 운영체제' 카테고리의 다른 글
6. 프로세스 동기화 & 상호 배제 (6) - Eventcount / Sequencer (0) | 2023.11.18 |
---|---|
6. 프로세스 동기화 & 상호 배제 (5) - Semaphore (1) | 2023.11.16 |
6. 프로세스 동기화 & 상호 배제 (3) - HW solution (1) | 2023.11.13 |
6. 프로세스 동기화 & 상호 배제 (2) - SW Solutions (0) | 2023.11.12 |
6. 프로세스 동기화 & 상호 배제 (1) - 개요 (1) | 2023.11.11 |