728x90
Mutual Exclusion using TestAndSet
critical section ์์ entry section์ด ์๋ค. Lock์ ์ด๊น๊ฐ์ด false์ด๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ critical section์ ๋ค์ด๊ฐ๋ ค๊ณ ์๋๋ฅผ ํ๋ค. TestAndSet์ ์ด์ ์ lock์ ๊ฐ์ return ํด์ฃผ๋ ํจ์์ด๋ค. while()๋ฌธ์ด ๊นจ์ง๊ฒ ๋๋ค. ๋ค์ด๊ฐ๋ ์ ์ฅ์์ while๋ฌธ์ด ๊นจ์ง๋ ๊ฒ, Critical section์ ๋ค์ด๊ฐ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. lock = 0์ด๋ฏ๋ก ๋ค์ด๊ฐ ์ ์๊ฒ ํด์ฃผ๊ณ TestAndSet์ ํด๋น lock๊ฐ์ ๋ฌด์กฐ๊ฑด 1๋ก ๋ฐ๊พธ์ด ์ค๋ค. ๊ทธ ๋ณ์์ ๊ฐ์ true๋ก ๋ฐ๊ฟ์ค๋ค. ๋ค์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๊ฒ ๋๋ ๊ฒฝ์ฐ TestAndSet์ ๋ฆฌํด๊ฐ์ true์ด๋ฏ๋ก while ๋ฌธ์ด ์ ์ง๊ฐ ๋์ด์ critical section์ ๋ค์ด๊ฐ์ง ๋ชปํ๋ค. ์ด ์ํฉ์์๋ while ๋ฌธ์ด ์ ์ง๋๋ ๊ฒ์ด ์ข๋ค. ๋๊ตฐ๊ฐ๊ฐ ๋ค์ด๊ฐ ์๋ ์ํฉ์ด๋ฏ๋ก while๋ฌธ์ด ์ ์ง๋๋ ๊ฒ์ด ์ข์ ์ํฉ์ด๋ค.
3๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ ์ํฉ์ ์๊ฐํด๋ณด์. ๊ทธ ํ๋ก์ธ์ค๋ while๋ฌธ์ด ์ ์ง๊ฐ ๋๋ค. ๊ธฐ๋ค๋ฆฌ๋ ์ํธ์์์ TestAndSet์ ์ํฉ์ ๋ค 1๋ก ์ ์ง๊ฐ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก P1์ ๋ค์ด๊ฐ์ง๋ง P2 P3๋ ๊ฑธ๋ ค์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. P1์ด ๋๊ฐ๋ ค๊ณ ํ ๋ lock = false๋ก ๋ฐ๊พผ๋ค. ํด๋น ๊ฐ์ด 0์ผ๋ก ๋ฐ๋๊ฒ ๋๊ณ P2, P3์๊ฒ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค. P2์ ๊ฒฝ์ฐ while๋ฌธ์ด 0์ด ๋์ด๋ฒ๋ ค์ Critical section์ ๋ค์ด๊ฐ์ lock์ ๊ฐ์ 1๋ก ๋ฐ๊พธ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด์ P3๋ ๋ค์ด์ค์ง ๋ชปํ๋๋ก ๋ง๊ฒ ๋๋ค. ์ค์ ๋ก๋ Scheduling์ ํตํด์ ๋จผ์ ๋ค์ด๊ฐ ์ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
Mutual Exclusion and Swap
local variable์ ์ฌ์ฉํ๋ค. ์ด๊น๊ฐ์ 1๋ก ์ค์ ์ ํ๋ค. P1์ key๊ฐ์ 1์ด ๋๋ค. while๋ฌธ์ด ๊ทธ๋ฌ๋ฉด true๊ฐ ๋๋ค. ์ด ์ํ์์ swap Atomic Instruction์ ์ฌ์ฉํ๋ค. lock๊ณผ key๋ฅผ ๋ฐ๊พธ๊ฒ ๋๋ฉด lock์ 0์์ 1๋ก ๋๊ณ key๋ 1์์ 0์ผ๋ก ๋ฐ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด while๋ฌธ์ด ๊นจ์ง๊ฒ ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค P1์ critical section์ ๋ค์ด๊ฐ ์ ์๊ฒ ๋๋ค. ๊ทธ ๋์ P2๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ ๊ฒฝ์ฐ P2๋ local variable์ด ์๋ค๊ณ ํ ์ ์๋ค. ์ด๊น๊ฐ์ 1๋ก ๋์ด์๋ค. key๊ฐ true์ด๋ฏ๋ก swap์ ์คํํ๊ฒ ๋๊ณ lock์ ํ์ฌ ๊ฐ์ด 1์ด๊ณ key๋ 1์ด๋ฏ๋ก ๋ฐ๊ฟ๋ ๊ณ์ 1์ด ๋๋ค.(ํ๋ก์ธ์ค๋ง๋ค ๊ณ ์ ์ง์ญ ๋ณ์ key๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ํด๋น ๊ฐ์ ์ด๊ธฐ์ ํญ์ ture๋ก ์ด๊ธฐํ๊ฐ ๋๋ค.)
ํด๋น While ๋ฌธ์ด ๊ณ์ ๋ฐ๋ณต๋๋ค. critical section์ ๋ค์ด๊ฐ์ง ๋ชปํ๊ณ ๊ธฐ๋ค๋ฆฐ๋ค๋ ๋ป์ด๋ค. P2, P3๋ while์์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. P1์ด exit section์ ๋ง๋ ๋ lock์ false๋ก ๋ง๋ค๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด์ remainder section์ผ๋ก ์ด๋ํ๊ฒ ๋๋๋ฐ ๊ทธ ๋์ P2, P3์ ์ํฉ์ ์ดํด๋ณด์.
lock์ด 0์์ ๋ค์ 1๋ก ๋๊ณ key๋ 0์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค. while ๋ฌธ์ด ๊นจ์ง๊ฒ ๋๊ณ critical section์ผ๋ก P2๊ฐ ๋ค์ด๊ฐ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ฌ ๋ lock์ 0์ผ๋ก ๋ฐ๊พธ์ด์ ๋ค์ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ ์ ์๋๋ก ๋ง๋ ๋ค. TestAndSet๊ณผ ๊ฑฐ์ ๋์ผํ๊ฒ Mutual exclusion์ ๋ณด์ฅํ ์ ์๋ค. lock์ shared ๋ณ์์ด๊ณ key๋ local ๋ณ์์ด๋ค.
Mutual Exclusion using CAS
compare_and_swap์ ํด์ lock = 0 ์ธ ์ํ๋ฅผ ๋ณด๋ด๊ฒ ๋๋ฉด 0์ด ๋ฆฌํด์ด ๋์ด์ ํด๋น condition์ ์ํด์ while๋ฌธ์ด ๊นจ์ง๊ฒ ๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค๋ Critical section์ผ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค. lock๊ณผ ๋ ๋ฒ์งธ 0์ ๊ฐ์ ๋น๊ตํด์ ๊ฐ์ผ๋ฉด ์ธ ๋ฒ์งธ ๊ฐ์ lock์ ํ ๋นํ๊ฒ ๋๋ค. while๋ฌธ์ ์ง๋๊ฐ๊ฒ ๋๋ฉด์ lock์๋ 1์ด๋ผ๋ ๊ฐ์ด ํ ๋น๋๋ค. ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค๋ ๋ค์ด๊ฐ๊ณ lock์ ๊ฐ์ 1๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒฐ๊ณผ์ด๋ค. ๊ทธ ์ํ์์ P2๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์. ๊ทธ ๊ฒฝ์ฐ return ๊ฐ์ 1์ด ๋๋ค. (ํ์ฌ lock์ ๊ฐ์ด return ๋จ)
while ๋ฌธ์ด ์ ์ง๊ฐ ๋๊ณ ํด๋น lock ๊ฐ์ 1๋ก ์ ์ง๊ฐ ๋๋ค. P2๋ while ๋ฌธ์์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๊ฐ ๋๋ค. P1์ด ๋ ๋๋ฉด์ lock = 0์ผ๋ก ๋ง๋ค๊ณ ๋ ๋๊ฒ ๋๋ค. P2์ P3์ ์ด๋ค ์ํฅ์ ์ฃผ๋๊ฐ ์ดํด๋ด์ผ ํ๋ค. P2์ ๊ฒฝ์ฐ while๋ฌธ์ ์คํํ๋ฉด return ์ด 0์ด ๋๊ณ while๋ฌธ์ด ๊นจ์ง๊ฒ ๋๊ณ ๋ค์ lock ๊ฐ์ 1๋ก ๋ฐ๊พธ๊ฒ ๋๋ฉด์ P3๋ฅผ while๋ฌธ ์์ ๋จธ๋ฌผ๊ฒ ๋ง๋ค์ด์ค๋ค.
Bounded Waiting Mutual Exclusion
๋จ์ด ๋ค์ด๊ฐ๋ฉด ๋ด๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ์ต๋ํ ๋ช ๋ฒ๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค๋ Bounded Waiting์ด๋ผ๊ณ ํ๋ค. N๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉด ์ต๋ํ N-1๋ฒ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ ๊ฒ์ด ์์์ ์ธ ๊ฒ์ด๋ค. ํ๋ก์ธ์ค๊ฐ 0๋ถํฐ N-1๋ฒ ๊น์ง ์กด์ฌํ๊ณ Shared Process์ ์ ๊ทผํ๋ ค๊ณ ํ๋ค. ๋ชจ๋ ํ๋ก์ธ์ค๋ ๋ชจ๋ ์๊ฐ์ Shared Process์ ์ ๊ทผํ๋ ค๊ณ ํ๋ค. (X) ์ด ๊ฒฝ์ฐ critical section์ผ๋ก๋ง ์ด๋ฃจ์ด์ก๋ค๋ ๋ง์ด๋ฏ๋ก ํ๋ฆฐ ๋ง์ด๋ค. ์งํ ํ์ดํ๋ Shared resource์ ์ ๊ทผํ๊ณ ์ถ์ ํ๋ก์ธ์ค์ด๋ค. ์์ ํ์ดํ๋ Critical section์ ๋ค์ด๊ฐ ์๊ฐ์ด ํ์ฌ๋ ์๋ ์ํ์ธ ๊ฒ์ด๋ค. ๋นจ๊ฐ์ ํ์ดํ๋ ํ์ฌ Critical section์ ๋ค์ด๊ฐ ์๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค. ๊ฒ์์ ๊ตต์ ํ์ดํ๋ Entry section์ ๋ค์ด๊ฐ ์๋ ์ํฉ์ผ๋ก ๋ณผ ์ ์๋ค. ๋ค์ด๊ฐ ์๋ค๋ ๊ฒ์ ํ์ฌ Lock์ด 1 ์ด๋ผ๋ ๊ฒ์ด๋ค. P1์ด ๋ค์ด๊ฐ๋ค๊ฐ ๋์ค๋ ค๊ณ ํ๋ค๊ณ ํด๋ณด์. lock = 0์ผ๋ก ๋ง๋ค์ด์๋ Bounded waiting์ ๋ณด์ฅํ๊ธฐ ํ๋ค๋ค. ์๋ํ๋ฉด ๋ถํน์ ํ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๋๊ฐ ๋ค์ด๊ฐ ์ง๋ ์ ์ ์๋ค. ์๋ง Scheduling์ ํตํด์ ๋ค์์ ๋ค์ด๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ ํ๋ฅ ์ด ๋๊ณ ๋ด๊ฐ ์ํ๋ ํ๋ก์ธ์ค๊ฐ ๋ค์ด๊ฐ ๋ณด์ฅ์ ํ ์ ์๋ค. N๊ฐ์ Process๊ฐ ์์ผ๋ฉด ์ต๋ N-1๋ฒ ์ต๋ ๊ธฐ๋ค๋ฆด ์ ์๋ค๊ณ ํ ์ ์๋ค.
๋ค์ด๊ฐ๋ค ๋์ฌ ๋ ํน์ ํ๋ก์ธ์ค์๊ฒ ์๋ ค์ค์ผ๋ง ์ํ๋ ์์๋ฅผ ๋ถ์ฌํ ์ ์๊ฒ ๋๋ค. P1์ด ๋ค์ด๊ฐ๋ค ๋์ค๋ ค๊ณ ํ ๋ ์ด๋ ํ๋ก์ธ์ค์๊ฒ ํฐ์น๋ฅผ ํด์ผ ํ๋๊ฐ. P3์๊ฒ ํฐ์น๋ฅผ ํด์ผ ํ๊ณ P3๋ P5์๊ฒ ์ด์ง ํฐ์น๋ฅผ ํด์ผ ํ๋ค. P0๊ฐ ๋ง์ง๋ง์ผ๋ก ๋์ฌ ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ? ์ด ๊ฒฝ์ฐ๋ lock์ false๋ก ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋๋ค. lock์ ํ์ด์ค์ผ ํ๋ ๊ฒ์ด๋ค.
Bounded Waiting Mutual Exclusion
critical section์ ์๋ฌด๋ ์์ ๋๋ lock = 0์ด๊ณ ๋๊ตฐ๊ฐ ์์ ๋๋ lock = 1์ด ๋๋ค. ๊ตต์ ํ์ดํ๊ฐ Critical section์ ๋ค์ด๊ฐ๊ณ ์ถ์ง๋ง Waiting ํ๋ ๊ฒ์ด ๋๊ณ ๋นจ๊ฐ์ ํ๋ก์ธ์ค๋ ์ ์ธ๋์ด์ผ ํ๋ค. ์ด๋ฅผ waiting ๋ฐฐ์ด๋ก ์ง์ ์ ํ๋ค. P1, P3, P5 ๋ชจ๋ 1์ด ๋๊ณ ๋๋จธ์ง ๊ทธ๋ฅ ํ์ดํ๋ค์ 0์ด ๋๋ค. waiting ๊ฐ์ 0์ด ๋๋ค. waiting์ Bounded Waitingํ ๋ ์ฌ์ฉ๋๋ค. ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์ ๋ฐ๋ผ๊ฐ๋ค๊ฐ ๊ฐ์ด 1์ธ ํ๋ก์ธ์ค๋ฅผ ๋ค์ด์ค๊ฒ ํ๋ฉด ๋๋ค. entry section๊ณผ exit section์ผ๋ก ๋์ด ์๋ค. Bounded Waiting์ ๋ณด์ฅํ๊ธฐ ์ํด ์ฝ๋ ์ค์ด ๋์ด๋ฌ๋ค. waiting[i] = 1์ธ ์น๊ตฌ๋ค์ Entry section์ ์๋ ์น๊ตฌ๋ค์ด๋ค. Mutual Exclusioin์ ๋ณด์ฅํ๊ธฐ ์ํ ์ฝ๋๊ฐ Entry section์ ์กด์ฌํ๋ค. key = true์ด๋ฉด while test๋ฅผ ์คํํ๊ฒ ๋๋ค. ๋ ๊ฐ๊ฐ ๋ค True์ฌ์ผ While๋ฌธ์ด True๊ฐ ๋๋ค. waiting ๋ true์ด๊ณ key๋ true์ฌ์ TestAndSet์ ํธ์ถํ๊ฒ ๋๋ค. lock์ ์ด๊น๊ฐ์ 0(false)์ด๊ณ ๋ฆฌํด ๊ฐ์ 0์ด ๋๊ณ key๊ฐ์ด 0์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ while์ ๋ง๋๊ฒ ๋๋ฉด while๋ฌธ์ด false๊ฐ ๋๋ค. ๊ทธ๋์ while๋ฌธ์ด ๊นจ์ง๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ critical section์ ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๋ค์ด๊ฐ ๋ TestAndSet์ ์ค์ํ๊ธฐ ๋๋ฌธ์ lock์ ๊ฐ์ด 1๋ก ๋ฐ๋๊ฒ ๋๊ณ waiting[i] ๋ false(0)์ผ๋ก ๋ฐ๋๊ฒ ๋๋ค.
2๋ฒ ํ๋ก์ธ์ค๊ฐ ๋ค์ด์ค๋ ๊ฒฝ์ฐ waiting[i] = True๋ก ํ๊ณ key = true๋ก ํ๋ฉด while๋ฌธ์ด ์คํ๋๋ค. TestAndSet์ด ๋ฆฌํดํ๋ ๊ฒ์ lock์ ๊ฐ์ด๋ค. ์ฆ ๋ฆฌํด๊ฐ์ 1์ด ๋๊ณ key๋ 1๋ก ์ ์ง๊ฐ ๋๋ค. ๊ทธ๋์ while๋ฌธ์ด ๊ณ์ ๋ฐ๋ณต๋์ Critical section์ ๋ชป๋ค์ด๊ฐ๊ฒ ๋๋ค.
J != I๋ ๋ ์ด์ ๋๋ฆฌ์ง ์๊ณ ํ ๋ฐํด๋ง ๋๊ณ ๋๋ด๋ผ๋ ์กฐ๊ฑด์ด ๋๋ค. j == i ์ผ๋๋ง lock์ ํ์ด์ฃผ๊ฒ ๋๋ค.