๋จผ์ , ํด๋น ํฌ์คํ ์ ๋จ์ผ ํ๋ก์ธ์ ์ํธ๋ฐฐ์ ๊ตฌํ ๋ฐฉ๋ฒ์ธ ๊ฒ์ ์๊ณ ์์ด์ผ ํ๋ค.
์ธํฐ๋ฝํธ ์๋น์ค ๊ธ์ง ๋ฐฉ๋ฒ
์ง์ ์ฝ๋(Entry Code)์์ cli(clear interrupt flag) ๋ช ๋ น์ผ๋ก ์ธํฐ๋ฝํธ ์๋น์ค๋ฅผ ์ค์งํ๊ณ
์๊ณ ๊ตฌ์ญ(Critical Code)์์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ฌด์ํ๋ค.
์ง์ถ ์ฝ๋(Exit Code)์์ sti(set interrupt flag) ๋ช ๋ น์ผ๋ก ์ธํฐ๋ฝํธ ์๋น์ค๋ฅผ ์ฌ์คํํ๋ค.
์ธํฐ๋ฝํธ ์๋น์ค๋ฅผ ์ค์งํ์ง ์์ ๊ฒฝ์ฐ, ๊ทธ๋ฆผ2์ ๊ฐ์ด T1์ด ์๊ณ๊ตฌ์ญ์ ์ ๊ทผํ์ ๋, T1์๊ฒ์ ์ธํฐ๋ฝํธ ์๋น์ค๊ฐ ๋ฐ์ํ๋ฉด ์ค๋ ๋๋ ๋๊ธฐ ์ํ๊ฐ ๋๊ณ T2๋ฅผ ์ค์ผ์คํ๋ค. ์ด ๋, T2๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ ๊ทผํ๊ฒ ๋๋ค๋ฉด ๊ณต์ ์์์ T1๊ณผ T2๊ฐ ๊ณต์กดํ๋ ํ์์ด ๋ฐ์ํ๋ค. ์ฆ T1์ด ๋ณ์์ ๊ฐ์ ์ฝ๊ณ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋ณ์์ ๊ฐ์ด ๋๊ธฐํ๋์ง ์๋๋ค.
์ธํฐ๋ฝํธ ์๋น์ค ๊ธ์ง ์ํธ๋ฐฐ์ ๋ฐฉ๋ฒ์ ์ค๋ ๋ ๋๊ธฐํ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง ๋ฌธ์ ์ ๋ ์กด์ฌํ๋ค.
- Single Core CPU์์ ๊ณ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์๊ณ๊ตฌ์ญ์ ์ฒ๋ฆฌํ๋ ๋์ค ๋ชจ๋ ์ธํฐ๋ฝํธ ์๋น์ค๋ฅผ ๋ฌด์ํ๊ฒ ๋๋ค.
- Multi Core CPU์์๋ ๋ค๋ฅธ CPU์ ์ธํฐ๋ฝํธ ์๋น์ค๋ฅผ ๋ฌด์ํ๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
์ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก CPU์ LOCK ํ์ ์ ํธ๋ฅผ ๋ฐ์์ํค๋ LOCK ์ ํธ๋ฅผ ์ด์ฉํด์ ํ์ฌ ์ก์ธ์ค ์ค์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํ ์ ์๋ค.
Lock ์ ํธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๋ค.
1. T1์ด mov ax, lock ๊น์ง ์ฒ๋ฆฌ ์ค์ผ ๋, &ax ์๋ 0์ด ์ ์ฅ๋์ด ์์ผ๋ฏ๋ก ์๊ณ๊ตฌ์ญ์ ์ ๊ทผํ ์ ์๋ค.
2. ์ด ๋, T1์ Time Slice๊ฐ ๋ง๋ฃ๋์ด T2๊ฐ ์ค์ผ์ค๋๋ค.
3. T1์ด mov lock, 1์ ์ฐ์ฐ์ ์ํํ์ง ์์์ผ๋ฏ๋ก T2๋ mov ax, lock ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ฉด์ &ax๋ 0์ด ๋๋ค.
4. T2๋ ax๊ฐ 0์ด๋ฏ๋ก ์๊ณ๊ตฌ์ญ์ ์ง์ ํ์๊ณ ๋์ค Time Slice๊ฐ ๋ง๋ฃ๋์ด T1์ด ์ฌ์ํ๋๋ค.
5. T1์ ์ปจํ ์คํธ ์ ๋ณด์ ๋ค์ ๋ช ๋ น์ธ mov lock, 1์ ์ํํด์ผํ๋ค. ํ์ง๋ง ์ด๋ฏธ lock์ 1์ด์ง๋ง ์๊ด์๋ค.
6. T1์ 1์์ ax ๊ฐ์ด 0์ด๋ฏ๋ก cmp ax, 0 ์ฐ์ฐ์ ์ํํ๊ณ ์๊ณ๊ตฌ์ญ์ ์ง์ ํ๊ฒ ๋๋ค.
์ 6๊ฐ ๊ณผ์ ์์ ์๊ณ๊ตฌ์ญ์๋ T1๊ณผ T2์ด ๊ณต์กดํ๊ฒ ๋๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
์์ ๋ช ๋ น(Atmoic Instruction) ์ฌ์ฉ
Locking์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋ ๋ฐฉ์์ด๋ค.
mov ax, lock ๊ณผ move lock, 1 ์ ๋์์ ์ํํ๋ TSL ax, lock ์ด๋ผ๋ ์์ ๋ช ๋ น์ ํตํด ax์ lock ์ ๋ณด๋ฅผ ๋ด์ผ๋ฉด์ locking์ ์ํํ๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ธํฐ๋ฝํธ ์๋น์ค ๊ธ์ง์ ์์ ๋ช ๋ น ์ฌ์ฉ์ ํตํด ์ํธ๋ฐฐ์ ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์์๋ดค๋ค. ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ๋จ์ผ ํ๋ก์ธ์ค์์๋ ๋ฌธ์ ๊ฐ ์กด์ฌํ๊ณ ๋ฉํฐ ํ๋ก์ธ์๊ฐ ๋์ ๋๋ฉด์ ๋ณต์กํด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ค์ ํฌ์คํ ์๋ ๋ฉํฐ ํ๋ก์ธ์์์๋ ์ด๋ป๊ฒ ์ํธ๋ฐฐ์ ๋ฅผ ์ฒ๋ฆฌํ๋์ง ํฌ์คํ ํด๋ณด์.
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
17. ์ํธ ๋ฐฐ์ (Mutual Exclusion) (0) | 2024.06.15 |
---|---|
16. ์ค๋ ๋ ๋๊ธฐํ (Thread Synchronization) (0) | 2024.06.15 |
15. CPU Scheduling Algorithm (1) | 2024.04.22 |
14. CPU Scheduling (0) | 2024.04.22 |
13. ๋ฉํฐ์ค๋ ๋ ๊ตฌํ (0) | 2024.04.22 |