Peterson's solution
ํ๋ก์ธ์ค๊ฐ 2๊ฐ ์๋ค๊ณ ๊ฐ์ , 3๊ฐ๋ถํฐ๋ ์ด๋ป๊ฒ ํ๋๊ฐ. Peterson์ solution์ผ๋ก๋ ์๋๋ค. Pi, Pj๋ ์๋์ ์ธ ์ด๋ฆ์ด๋ค. ๋ ์์ ์ด P0๋ผ๋ฉด Pi๊ฐ P0๊ฐ ๋๋ค. Pi๋ ๋ ์์ ์ ์ผ์ปซ๋ ๋ง์ด๋ค. turn, ๋๊ฐ ๋ค์ด๊ฐ ์ฐจ๋ก์ธ์ง๊ฐ turn ๋ณ์์ ํด๋นํ๋ค. flag๋ณ์๋ ์ฌ์ด์ฆ๊ฐ 2์ธ ๋ฐฐ์ด์ด๋ค. ํ๋ก์ธ์ค๊ฐ 2๊ฐ ์๋ค๊ณ ๊ฐ์ ์ ํ๊ธฐ ๋๋ฌธ. turn์ ์ด๊น๊ฐ์ 0 flag๋ 0์ผ๋ก ์ด๊ธฐํ ๋์ด์๋ค.
Erroneus Algorithm
do while ๋ฃจํ ์์์ critical section์ด ์กด์ฌํ๋ค. entry section์ด while ์์๋ฌธ์ด๊ณ exit section์ ์๋ ์ฒ๋ผ ๊ตฌํํ๋ค๋ ๊ฒ์ด๋ค. ๋ด ์ฐจ๋ก๊ฐ ์๋๋ฉด ๊ธฐ๋ค๋ฆฌ๋ผ๋ ๋ฐ๋ณต๋ฌธ์ด ๋๋ค. turn์ด i ์ธ ๊ฒฝ์ฐ false๊ฐ ๋์ critical section์ ๋ค์ด๊ฐ ์ ์๋ค. ์๋๋ฐฉ์๊ฒ ์ฐจ๋ก๋ฅผ ์ฃผ๋ฉด์ ๋๋๊ฒ ๋๋ค.
Erroneus Algorithm
0์ผ๋ก ์ด๊ธฐํ ๋์ด์์ ๋ ์์์ P0๋ถํฐ ์์ํ๋ค. condition์ด true์ด๋ฉด while๋ฌธ์ ๊ณ์ ๋๊ฒ ๋๋ค. Process2๋ ๊ธฐ๋ค๋ฆฐ๋ค. Process1์ด ๋๋๋ฉด turn 1์ด ๋๋ฉด Process2๊ฐ ๋ค์ด๊ฐ ์ ์๊ฒ ๋๋ค. turn์ 0์ผ๋ก ๋ง๋ค๋ฉด์ ๋์ค๋ฉด ๋ค์ ์๋๋ฐฉ์ด ๋ค์ด๊ฐ ์ ์๊ฒ ๋๋ค. Mutual exclusion์ ๋ณด์ฅ์ด๋๋ค. (์ด๊ธฐํ๊ฐ ์ ๋์๋ค๋ ์ ์ ์กฐ๊ฑด์ด๋ค.) ๋์์ ๋ค์ด์ค๋ ์ํฉ์ด์ด์ผ ์๋ฏธ๊ฐ ์๋ค. ๋์ด ๋์์ ๋ค์ด์ค๊ณ turn์ ๊ฐ์ ๋ฐ๋ผ์ 0์ด๋ 1์ด๋์ ๋ฐ๋ผ์ ํ ๊ฐ์ง๋ง ์คํํ ์ ์๊ฒ ๋๋ค. Progress๋ ๋ณด์ฅ์ด ์๋๋ค. remainder section์์ ์๋๋ฐฉ์๊ฒ ์ ํธ๋ฅผ ์ฃผ์ง ์๋ ๊ฒฝ์ฐ์ Critical section์ ์์ง๋ ์์ผ๋ฉด์ ์๋๋ฐฉ์ด critical section์ ๋ค์ด๊ฐ๋ ๊ฒ์ ๋ง๊ณ ์๋ค.
Erroneus Algorithm2
flag[i] = true; ๋๋ critical section์ ๋ค์ด๊ฐ ๊ฑฐ๋ผ๊ณ ์ ์ธ์ ํ๋ ๊ฒ์ด๋ค. while(flag[j]);๋ ์๋๋ฐฉ์ด ๋ค์ด๊ฐ ์๋์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์๋๋ฐฉ์ด ๋ค์ด๊ฐ ์์ง ์๋ค๋ฉด ๋ด๊ฐ critical section์ ๋ค์ด๊ฐ ์ ์๋ค. critical section์ ๋ ๋ ๋ flag๋ฅผ false๋ก ํ๊ณ ๋ ๋๊ฒ ๋๋ค.
Erroneous Algorithm2
Mutual exclusion์ ๋ณด์ฅ์ด ๋๋ค. Progress๊ฐ ๋ณด์ฅ์ด ์๋๋ค. (CPU๊ฐ ๋ ๊ฐ์ธ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ) flag[0] =0 flag[1] = 0 -> flag[0] =1 flag[1] = 1 ๋๋ฉด ๋์ด ์๋ก๋ฅผ ์ง์ ํ์ง ๋ชปํ๊ฒ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค. while๊ณผ true ํ ๋น์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด?? mutual exclusion์ด ๋ณด์ฅ์ด ์๋๋ค.
Peterson's Solution
turn ํ๊ณ flag๋ฅผ ๋ ๋ค ์ฌ์ฉํ๋ค. ๋ ์ค์ ํ๋๋ง false์ด๋ฉด critical section์ผ๋ก ๋ค์ด๊ฐ ์ ์๋ค.
์ฒ์์ P0๊ฐ ์คํ๋๋ค ์ ์ฌ์ง์์;..
๋์ด ๋์์ ๋ค์ด์ฌ ๋ ๋ฐ์ํ๋ ์ผ์ธ mutual exclusion ์ํ๋ฅผ ์ดํด ๋ณด์. ๋์์ ๋ค์ด์จ ๊ฒฝ์ฐ turn์ ๊ฐ์ 0์ผ ์๋ 1์ผ ์๋ ์๋ค. ๋ค์ ์คํ๋๋ ๊ฒ์ด turn์ ๊ฐ์ด ๋๋ค. while loop๊ฐ ๋ ๋ค false๋ ๊ฐ๋ฅ์ฑ์ ์๋ค. ์๋ํ๋ฉด turn์ด 0์ธ ๋์์ 1์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.--> Mutual Exclusion ๋ง์กฑ
Progress๋ ์ด๋ป๊ฒ ๋๋๊ฐ? P0๋ง ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ P0๋ง ์คํ์ด ๋๋ค.
flag[1] = false; ๊ฐ Time quantum์ด ๋๋์ง ์์์ remainder๋ฅผ ์คํํ๊ณ ๋ค์ ์คํํ๊ฒ ํ๋ ๊ฒฝ์ฐ๋ Progress๊ฐ ๋ณด์ฅ๋๋ค.
Peterson's Solution
Synchronization์ thread๊ฐ์์๋ ์ด๋ฃจ์ด์ง๋ค. ๋ณ์ flag ๋ณ์์ x ๋ณ์๊ฐ ์กด์ฌํ๋ค. x๋ ๋ฌด์กฐ๊ฑด 100์ผ ๋๋ง ์ถ๋ ฅํ๋ค. x๊ฐ 0์ผ ๋ ์คํํ ์ ์๋ค. ์ปดํ์ผ๋ฌ ์ ์ฅ์์ Thread2๋ฅผ ์ปดํ์ผ ํ ๋ thread 1์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. Thread2๊ฐ์ statement ๊ด๊ณ๊ฐ ์ ํ ์๋ค. ๋ฐ๊ฟ์ ์๋ ๊ณ์ฐ์ด ์๋ค๊ณ ํด์ ๋จผ์ flag = true๋ก ๋ฐ๊ฟ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๊ทธ๋ด ๋๋ x ๊ฐ 0์ผ๋ก ์ถ๋ ฅ๋ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
Memory Model
CPU ํ๋๊ฐ ๋ณ์๋ฅผ ๋ฐ๊ฟจ๋ค. ๊ทธ ๋ฐ๊พธ์๋ง๋ค ๋ณํ๋ฅผ ์ฆ์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ Strongly ordered memory๋ผ๊ณ ๋ถ๋ฅธ๋ค. cache์ ์๋ ๊ฐ์ด ์กด์ฌํ๋ค. ํด๋นํ๋ ๋ณ์๊ฐ cache์๋ง ์กด์ฌํ๊ณ memory์๋ง ๋ฐ์๋๋ delay๊ฐ ์๋ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ if ๋ฌธ์ด ๋ค๋ฅด๊ฒ ๋์๊ฐ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
Memory Barriers
barrier์ด์ ์ ์์๋ ๋ชจ๋ ์ด์๋ค์ ์ดํ์ ๋ชจ๋ ๋ฐ์์ด ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ ํ์ ๊ฑธ์ด๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด x ๊ฐ 100์ด ๋ ์ดํ์๋ง ๋ฐ์์ด ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ด ์๊น์ ์ฐจ์ด์ ์ด ๋๋ค.
Hardware Instructions
entry section๊ณผ exit section์ด ์กด์ฌํ๋ค๋ ๊ฒ. lock ๋ณ์๊ฐ ์กด์ฌํ๋ค. lock ์ด 0์ด๋ฉด ๋ค์ด๊ฐ๋ ๋๊ณ 1์ด๋ฉด ๋ค์ด๊ฐ๋ฉด ์๋๋ค. lock์ ๋น์ฐํ shared variable์ด๋ค. entry section์์ ํด์ผ ํ๋ ๊ฒ. ๋ค์ด๊ฐ๋ค๊ณ ํ์ํ๊ณ ๋๊ฐ ์ ๊ทธ์ง ์์๋์ง ํ์ธํ๋ค. ๋์ฌ ๋๋ ๋ฌธ์ ์ด์ด ๋๊ณ ๋์จ๋ค.
Mutual Exclusion by Lock variable
while(lock) ์ ๊ฒจ์์ง ์์ผ๋ฉด ๋ด๊ฐ ๋ค์ด๊ฐ๋ค๋ ๊ฒ. lock = true๋ ๋ฌธ์ ์ ๊ทธ๋ ๊ฒ์ด ๋๋ค. ๋์ฌ ๋๋ lock = false๋ก ํ๊ณ ๋์จ๋ค. ๋์์ ๋ค์ด๊ฐ๋ฉด mutual exclusion์ด ๋ณด์ฅ๋์ง ์๋๋ค. knocking๊ณผ locking ์ฌ์ด์ gap ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฒ์ด ๋์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋๋ฐ ๋ฐ๋ก ๋ฐ๋ก ์ด๋ฃจ์ด์ง๋ ์ค๊ฐ ํ์์ด ์๊ธฐ ์ํฉ์ด ๋๋ค. lock๊ณผ knock์ ๋ถ๋ฆฌ ๋ ์ ์๋ค๋ ์กฐ๊ฑด์ด ๋ค์ด์ค๋ฉด ๋๋ค. ํ ๋ฒ์ ์คํํ๋ค๋ ๊ฒ์ actomic์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Interrupt disable
Interrupt๋ฅผ ๋ง์ผ๋ฉด Context Switching์ด ๋ฐ์ํ์ง ์๋๋ค. ์ค๊ฐ์ ๋ฉ์ถ์ง ์๊ณ ๊ฐ๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
Hardware Instruction
TestAndSet
machine instruction์ด๋ค. (Function์ด ์๋!!!!!!!!!) ์ค๊ฐ ๊ณผ์ ์ด ์๊ณ ํ ๋ฒ์ ํ ์คํ์ด ๋์ด๋ฒ๋ฆฐ๋ค. ๋ณ์์ ์๋ ๊ฐ์ local์ ์นดํผํ๊ณ ๋ฌด์กฐ๊ฑด true๋ก ์ ์ ํ ํ ์๋๊ฐ์ ๋ฐํํ๋ค. ์ด๋ค ๊ฐ์ ๋ฆฌํดํ๋ฉด์ ๋์์ ๊ทธ ๋ณ์์ ๊ฐ์ 1๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ค. knocking์ ๊ฐ์ ๊บผ๋ด์ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ lockingํ๋ ๊ฒ์ 1์ ๋ฃ๋ ๊ฒ์ด๋ค. ํจ์๊ฐ ์๋๋ผ Machine Instruction์ด ์ด๋ ๊ฒ ๋์ํ๋ค๋ ๊ฒ์ ์๋ ์ฝ๋์ด๋ค(*******************)
lock ๋ณ์ a , local ๋ณ์ b๊ฐ ์๋ค. ๊ฐ์ ๊บผ๋ด๋ ๋์์ 1๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ ๋์์ ์ธ ํจ๊ณผ๋ฅผ ์ค ์ ์๋ค.
compare and swap
value์ lock ๋ณ์๊ฐ expected์ ๊ฐ์ผ๋ฉด new_value๋ฅผ value์ ์ง์ด ๋ฃ์ผ๋ผ๋ ๊ฒ. value์ ๊ฐ์ ์ผ๋จ ๊บผ๋ด์จ๋ค. ๋ณ์์ ๊ฐ์ด 0์ด๋ฉด 1๋ก overwriteํด์ผ ํ๋ค. CAS๋ผ๊ณ ๋ถ๋ฅธ๋ค. knocking๊ณผ locking์ ํ๋๋ก ๋ฌถ๊ฒ ๋๋ ๋ช ๋ น์ด๊ฐ ๋๋ค.