Mutual Exclusion Solutions (OS supported SW solution)
Spinlock
โ ์ ์ ๋ณ์
โ ์ด๊ธฐํ, P(), V() ์ฐ์ฐ์ผ๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ ์ฐ์ฐ๋ค์ indivisible (or atomic) ์ฐ์ฐ
- OS support
- ์ ์ฒด๊ฐ ํ instruction cycle์ ์ํ๋จ
โ P, V ์ฐ์ฐ์ ํตํด active ์ํ๋ฅผ ํ์ธํ๊ณ ์๊ณ์์ญ์ ์ง์ ํ๋ค
ํน์ง
โ ๋ฉํฐ ํ๋ก์ธ์ค ์์คํ
์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
โ Busy waiting
- lock์ ๋๊ธฐํ๋ ๋์ loop๋ฅผ ๋๋ฉด์ busy waiting ์ํ๋ก ๋๊ธฐ
Semaphore
โ 1965๋
Dijkstra๊ฐ ์ ์
โ Busy waiting ๋ฌธ์ ํด๊ฒฐ
โ ์์ด ์๋ ์ ์ํ ๋ณ์(S)
- ์ด๊ธฐํ ์ฐ์ฐ, P(), V()๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅ
- P: Probern(๊ฒ์ฌ)
- V: Verhogen(์ฆ๊ฐ)
โ ์์์ S๋ณ์ ํ๋์ ready queue ํ๋๊ฐ ํ ๋น๋จ
semaphore์ ์ข ๋ฅ
โ Binary semaphore
- S๊ฐ 0๊ณผ 1 ๋ ์ข ๋ฅ์ ๊ฐ๋ง ๊ฐ๋ ๊ฒฝ์ฐ
- ์ํธ๋ฐฐ์ ๋ ํ๋ก์ธ์ค ๋๊ธฐํ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
โ Counting semaphore
- S๊ฐ 0 ์ด์์ ์ ์ ๊ฐ์ ๊ฐ์ง ์ ์๋ ๊ฒฝ์ฐ
- Producer-Consumer ๋ฌธ์ ๋ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ
- ์์ฐ์ - ์๋น์ ๋ฌธ์
์ฐ์ฐ
โ ์ด๊ธฐํ ์ฐ์ฐ: S๋ณ์์ ์ด๊ธฐ๊ฐ์ ๋ถ์ฌํ๋ ์ฐ์ฐ
โ P() ์ฐ์ฐ, V() ์ฐ์ฐ
โ ์์์ ํ ๋น ๋ฐ์ง ๋ชปํ๋ฉด ready queue(๋๊ธฐ์ค)์์ ๋๊ธฐ
โ ํ๋ก์ธ์ค๊ฐ ๋๊ฐ ๋ ready queue์ ์๋ ํ๋ก์ธ์ค ์ค ํ๋๋ฅผ wake up ์ํจ๋ค!
โ ๋ชจ๋ indivisible ์ฐ์ฐ
- OS support
- ์ ์ฒด๊ฐ ํ instruction cycle์ ์ํ
Semaphore๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ค
โ ์ํธ๋ฐฐ์ ๋ฌธ์ (Mutual exclusion)
โ ํ๋ก์ธ์ค ๋๊ธฐํ ๋ฌธ์ (process synchronization problem)
โ ์์ฐ์-์๋น์ ๋ฌธ์ (producer-consumer problem)
โ Reader - writer problem
โ Dining philosopher problem
โ ๊ธฐํ
Mutual exclusion
Process synchronization
โ Process๋ค์ ์คํ ์์ ๋ง์ถ๊ธฐ
- ํ๋ก์ธ์ค๋ค์ ๋ณํ์ ์ด๋ฉฐ, ๋น๋๊ธฐ์ ์ผ๋ก ์ํ
Producer-Consumer problem
โ ์์ฐ์ ํ๋ก์ธ์ค: ๋ฉ์ธ์ง๋ฅผ ์์ฑํ๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน
โ ์๋น์ ํ๋ก์ธ์ค: ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌ๋ฐ๋ ํ๋ก์ธ์ค ๊ทธ๋ฃน
Producer-Consumer problem with Single Buffer
โ 2๊ฐ์ ๋ณ์ ์์ฑ (consumed, produced)
โ producer๋ buffer๊ฐ ๋น์ด์๋์ง (consumed) ์ฒดํฌ ํ buffer์ ๋ฉ์ธ์ง(M) ๋ฃ๊ธฐ
โ ์ดํ produced ๋ณ์ 0 -> 1
โ consumer๋ ๋ฉ์ธ์ง๊ฐ ์๋์ง (produced) ํ์ธ
- ์์ผ๋ฉด ๋ฉ์ธ์ง ์๋น ํ cousumed 0 -> 1
- ์์ผ๋ฉด ๊นจ์์ค ๋๊น์ง ready queue์์ ๋๊ธฐ
Producer-Consumer problem with N-Buffer
โ buffer๋ ์ํ ํ ์ฌ์ฉ
โ mutexP: producer / mutexC: consumer -> ์ํธ๋ฐฐ์ ๊ตฌํ
โ nrfull: ์ฐจ ์๋ buffer์ ์ / nrempty: ๋น์ด ์๋ buffer์ ์
โ producer
- producer๋ ์์ฐํ ๋ nrempty๋ฅผ ํตํด์ ๊ณต๊ฐ์ด ์๋์ง(> 0) ํ์ธ
- ๊ณต๊ฐ์ด ์์ผ๋ฉด ๊ณต๊ฐ์ ๋ฉ์ธ์ง๋ฅผ ๋ฃ๊ณ ์ํํ์ ์์น ๊ฐฑ์ (์์ผ๋ฉด ready queue)
- nrfull ๋ณ์ ์ฆ๊ฐ
โ consumer
- ์๋นํ ๋ nrfull์ ํตํด ๋ฉ์ธ์ง๊ฐ ์๋์ง(> 0) ํ์ธ
- ๋ฉ์ธ์ง๊ฐ ์์ผ๋ฉด ๋ฉ์ธ์ง๋ฅผ ๊ฐ์ ธ๊ฐ๊ณ ์ํํ ์์น ๊ฐฑ์ (์์ผ๋ฉด ready queue)
- nrempty ๋ณ์ ์ฆ๊ฐ
Reader-Writer problem
โ Reader
- ๋ฐ์ดํฐ์ ๋ํด ์ฝ๊ธฐ ์ฐ์ฐ๋ง ์ํ
โ Writer
- ๋ฐ์ดํฐ์ ๋ํด ๊ฐฑ์ ์ฐ์ฐ์ ์ํ
โ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ ํ์
- reader๋ค์ ๋์์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ๋ฅ
- writer๋ค(๋๋ reader์ writer)์ด ๋์ ๋ฐ์ดํฐ ์ ๊ทผ ์ ์ํธ๋ฐฐ์ (๋๊ธฐํ) ํ์
โ ํด๊ฒฐ๋ฒ
- reader/writer์ ๋ํ ์ฐ์ ๊ถ ๋ถ์ฌ
- reader preference solution
- writer preference solution
reader preference solution
โ wmutex: writer / rmutex: reader
โ nreaders: reader์ ์
โ Reader
- ์๊ธฐ๊ฐ ์ฒ์ ์ฝ์ ๋ writer ์ํธ๋ฐฐ์
- reader ์ ์ฆ๊ฐ
- ์ฝ๊ธฐ๋ ์ฌ๋ฌ ๋ช ์ด ํด๋ ๋๋ค (์ํธ๋ฐฐ์ x)
- ๋ง์ง๋ง์ผ๋ก ๋๊ฐ ๊ฒฝ์ฐ์ writer ์ํธ๋ฐฐ์ ํด์
ํน์ง
โ No busy waiting
- ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ block(asleep) ์ํ๊ฐ ๋๋ค
โ seamaphore queue์ ๋ํ wake-up ์์๋ ๋น๊ฒฐ์ ์
- starvation problem
Eventcount / Sequencer
โ ์ํ์ ๋ฒํธํ์ ๋น์ทํ ๊ฐ๋
โ Sequencer
- ์ ์ํ ๋ณ์
- ์์ฑ ์ 0์ผ๋ก ์ด๊ธฐํ, ๊ฐ์ํ์ง ์์
- ๋ฐ์ ์ฌ๊ฑด๋ค์ ์์ ์ ์ง
- ticket() ์ฐ์ฐ์ผ๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅ
โ ticket(S)
- ํ์ฌ๊น์ง ticket() ์ฐ์ฐ์ด ํธ์ถ ๋ ํ์๋ฅผ ๋ฐํ
- indivisible operation
โ Eventcount
- ์ ์ํ ๋ณ์
- ์์ฑ ์ 0์ผ๋ก ์ด๊ธฐํ, ๊ฐ์ํ์ง ์์
- ํน์ ์ฌ๊ฑด์ ๋ฐ์ ํ์๋ฅผ ๊ธฐ๋ก
- read(E), advance(E), await(E, v) ์ฐ์ฐ์ผ๋ก๋ง ์ ๊ทผ ๊ฐ๋ฅ
โ read(E)
- ํ์ฌ Eventcount ๊ฐ ๋ฐํ
โ advance(E)
- E <- E + 1
- E๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ๊นจ์ (wake-up)
โ await(E, v)
- v๋ ์ ์ํ ๋ณ์
- if (E < v)์ด๋ฉด E์ ์ฐ๊ฒฐ๋ Q_E์ ํ๋ก์ธ์ค ์ ๋ฌ(push) ๋ฐ CPU scheduler ํธ์ถ
Mutual exclusion
producer-consumer problem
ํน์ง
โ No busy waiting
โ No starvation
- FIFO scheduling for Q_E
โ Semaphore๋ณด๋ค ๋ low-level control(์์ ์์) ๊ฐ๋ฅ
'โญ Group_Study > Operating System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[4์ฃผ์ฐจ] Deadlock: Deadlock and Resource types (0) | 2022.12.22 |
---|---|
[3์ฃผ์ฐจ] Mutual Exclusion Solutions (Language-Level solution) (0) | 2022.12.21 |
[3์ฃผ์ฐจ] Mutual Exclusion Solutions (SW & HW) (1) | 2022.12.17 |
[3์ฃผ์ฐจ] Process Synchronization and Mutual Exclusion (0) | 2022.12.16 |
[2์ฃผ์ฐจ] Scheduling Algorithms (0) | 2022.12.14 |
๋๊ธ