์ถ์์๋ฃํ = operation + object
Semaphores๋ ์ผ์ข ์ ์ถ์์๋ฃํ์ด๋ค.
Semaphores ๋ณ์ S๊ฐ ์กด์ฌํ๋ค๊ณ ํ๋ฉด ์ด ๋ณ์ S๋ ์ ์๊ฐ์ ๊ฐ์ ์ ์๊ณ ์ฐ์ฐ์ 2๊ฐ์ง๊ฐ ์ ์๋๊ณ ์๋ค.
-> P์ฐ์ฐ, V์ฐ์ฐ๊ฐ ์กด์ฌํ๋ค.
lock์ ํ๊ณ ๊ฑฐ๋๊ฒ์ Semaphores๊ฐ ์ ๊ณตํ๋ค.
๊ณต์ ์์์ ํ๋ํ๊ณ ๋ฐ๋ฉํ๋ ๊ฒ์ semaphores๊ฐ ์ ๊ณตํ๋ค.
P์ฐ์ฐ : ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ ๊ณผ์
V์ฐ์ฐ : ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ฉํ๋ ๊ณผ์
์ ์์ธ ๋ณ์๊ฐ์ ๊ณต์ ๋ฐ์ดํฐ์ ๊ฐ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
-> s = 5๋ผ๋ฉด P์ฐ์ฐ์ ํ์ ๋ ์์์ ํ๋ ๊ฐ์ ธ๊ฐ๊ฒ ๋๊ณ S = 4๊ฐ ๋๋ค.
lock์ ๊ฑธ๊ณ ํธ๋ ๊ฒ์ semaphores๊ฐ์ด 1์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
-> P์ฐ์ฐ์ ํ๋ฉด lock์ ๊ฑฐ๋ ๊ณผ์ ์ด๊ณ V์ฐ์ฐ์ ํ๋ฉด lock์ ํธ๋ ๊ณผ์ ์ด๋ค.
์ฐ์ฐ์ด atomicํ๊ฒ ๋๋ค๊ณ ๊ฐ์ ํ๋ค.
-> semaphores๋ ์ถ์ํ์ด๊ธฐ ๋๋ฌธ์ ์ฐ์ฐ์ ๋ํ ์์ธํ ๊ณผ์ ์ ์๋ตํ์.
๋ค์์ Critical Section์ Semaphores๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ด๋ค.
Semaphores๊ฐ ์ฃผ์ด์ง๋ฉด ํ๋ก๊ทธ๋๋จธ๋ p,v์ฐ์ฐ์ ์ฌ์ฉํ๋ฉด๋๋ ๊ฒ์ด๊ณ ํด๋นํ๋ ๋ด์ฉ์ ์์คํ ์ ๋ฐ๋ผ ์ ํด์ค์ผ ํ๋ค.
ํ์ฌ p์ฐ์ฐ์ busy-wait์ํ์ด๋ฉฐ ํจ์จ์ ์ด์ง ๋ชปํ๋ค.(CPU๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค.)
-> ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๋ฐ! Block & Wakeup ๋ฐฉ์์ด๋ค.
-> CPU๋ฅผ ์ฌ์ฉํ์ง ์๊ณ waitting ์ํ๊ฐ ๋๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
๋๊ตฐ๊ฐ๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๊ทธ Process๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๊ธฐ ์ ๊น์ง ๋ด ์ฐจ๋ก๊ฐ ์ค์ง ์๋๋ค.
-> CPU๋ฅผ ๋ฐ๋ฉํ๊ณ Blocked์ํ๋ก ๋ง๋ค์.(busy watting x)
-> ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ process๊ฐ ๋ฐ๋ฉํ๋ฉด blocked ์ํ์ ์๋ process๊ฐ ๊นจ์ด๋๊ณ Ready Queue์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ semaphores๋ฅผ ์ฐ๊ณ ๋์ ๋ฐ๋ฉ์ ํ๊ฒ๋๋ฉด block๋ process์ค ํ๋๋ฅผ ๊นจ์์ wakeup(P)์ ์ํค๊ฒ ๋๋ค.
semaphores๋ณ์๊ฐ ์๋ค๊ณ ํ์ ๋ ๋๊ตฐ๊ฐ๋ ์ด ๋ณ์๋ฅผ ํ๋ํ์ ๊ฒ์ด๋ค.
-> semahpores๋ณ์๋ฅผ ํ๋ํ์ง ๋ชปํ process๋ค์ PCB๋ฅผ semaphores๋ณ์ Queue์๋ค๊ฐ ๋งค๋ฌ์ ๋๋๋ค.
block & wakeup ๋ฐฉ์์์ semaphores์ ๋์ ๋ฐฉ์์ ๋ณด์.
P์ฐ์ฐ์ ์์์ ํ๋ํ๋ ๊ณผ์ ์ด๋ค.
-> ์์์ ์ฌ๋ถ์ด ์๋ค๋ฉด ๋ฐ๋ก ํ๋ํ ๊ฒ์ด๊ณ ์์์ ์ฌ๋ถ์ด ์๋ค๋ฉด ์ ๋ค๊ฒ์ด๋ค.(blocked ์ํ)
V์ฐ์ฐ์ ์์์ ๋ค ์ฐ๊ณ ๋์ ๋ฐ๋ฉ์ ํ๋ ๊ฒ์ด๋ค.
-> ๋ฐ๋ฉํ๊ณ ๋๋๋ ๊ฒ์ด ์๋๋ผ ์ด ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ process๊ฐ ์กด์ฌํ๋ค๋ฉด ๊ทธ๊ฒ์ ๊นจ์์ฃผ๋ ์ญํ ๊น์ง V์ฐ์ฐ์ ๋ค์ด๊ฐ์ผ ํ๋ค.
add this process to S.L : S์ ์๋ ๊ตฌ์กฐ์ฒด L์ Process๋ฅผ ์ฐ๊ฒฐ์ํค์.
V์ฐ์ฐ์์ if(S.value <= 0) : ๊ณต์ ๋ฐ์ดํฐ(S)๋ฅผ ๋ํ์์๋ ๋ถ๊ตฌํ๊ณ ์์๋ผ๋ ๊ฒ์ ํด๋น ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ process๊ฐ ์กด์ฌํ๋ค๋ ๋ป์ด๋ค.
-> ๊ธฐ๋ค๋ฆฌ๋ process๊ฐ ์กด์ฌํ๋ค๋ฉด ๊นจ์์ฃผ์!
Busy-wait ๋ณด๋ค Block/wakeup ๋ฐฉ์์ด CUP๋ฅผ ์ข ๋ ์๋ฏธ์๋ ๊ฒ์ ์ฌ์ฉํ ์ ์๋ค.
-> ๊ทธ๋ฌ๋ Block/wakeup ๋ฐฉ์ ๋ํ ์ค๋ฒํค๋๊ฐ ์กด์ฌํ๋๋ฐ process์ ์ํ๋ฅผ ready์ํ์์ waitting ์ํ๋ก ๋ฐ๊ฟ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. + ๊ณต์ ๋ฐ์ดํฐ๊ฐ ์๊ธฐ๋ฉด waitting ์ํ๋ฅผ ๋ค์ ready์ํ๋ก ๋ฐ๊ฟ์ฃผ๋ ์์
์ด ํ์ํ๋ค.
Block/wakeup๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ critical section์ด ๋๋ฌด ์งง์ ๊ฒฝ์ฐ์๋ busy-wait ๋ฐฉ์๋ ๊ด์ฐฎ๋ค.
semaphores์ ์ฌ์ฉํ ๋ ์ฃผ์ํ ์ ์ด ์กด์ฌํ๋ค.
-> ์) semaphores S, Q๊ฐ ์กด์ฌํ๋๋ฐ ๋ ๋ค ํ๋ํด์ผ ์งํ ํ ์ ์๋ ์ํฉ์ด๋ค.
-> P0๊ฐ S๋ฅผ ํ๋ํ๊ณ CPU๋ฅผ ์์ด๋ฒ๋ฆฐ ํ P1์ด Q๋ฅผ ์ป์๋ค๋ฉด P1์ S๋ฅผ ํ๋ํ ์ ์๋ ์ํฉ์ด ๋๋ฒ๋ฆฐ๋ค.(์์ํ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ)
-> ์ด๋ฐ ์ํ๋ฅผ Deadlock์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
-> ์์์ ํ๋ํ๋ ์์๋ฅผ ๋๊ฐ์ด ๋ง์ถฐ์ฃผ๋ฉด Deadlock์ํ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
starvation(์์์ ์ป์ง ๋ชปํ๊ณ ๊ณ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ)๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ ์๋ค.
[์ถ์ฒ] ๋ฐํจ๊ฒฝ ๊ต์๋ ๊ฐ์