๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์šด์˜์ฒด์ œ

18. ์ƒํ˜ธ๋ฐฐ์ œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

by ๐Ÿณ Laboon 2024. 6. 16.

๋จผ์ €, ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋‹จ์ผ ํ”„๋กœ์„ธ์„œ ์ƒํ˜ธ๋ฐฐ์ œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๊ธˆ์ง€ ๋ฐฉ๋ฒ•

๊ทธ๋ฆผ1. ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๊ธˆ์ง€

 

์ง„์ž… ์ฝ”๋“œ(Entry Code)์—์„œ cli(clear interrupt flag) ๋ช…๋ น์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ 

์ž„๊ณ„ ๊ตฌ์—ญ(Critical Code)์—์„œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฌด์‹œํ•œ๋‹ค.

์ง„์ถœ ์ฝ”๋“œ(Exit Code)์—์„œ sti(set interrupt flag) ๋ช…๋ น์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๋ฅผ ์žฌ์‹คํ–‰ํ•œ๋‹ค.

 

๊ทธ๋ฆผ2. T1 ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ

 

์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๊ทธ๋ฆผ2์™€ ๊ฐ™์ด T1์ด ์ž„๊ณ„๊ตฌ์—ญ์„ ์ ‘๊ทผํ–ˆ์„ ๋•Œ, T1์—๊ฒŒ์„œ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๊ณ  T2๋ฅผ ์Šค์ผ€์ค„ํ•œ๋‹ค. ์ด ๋•Œ, T2๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ณต์œ  ์ž์›์— T1๊ณผ T2๊ฐ€ ๊ณต์กดํ•˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ฆ‰ T1์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฝ๊ณ  ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋™๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๊ธˆ์ง€ ์ƒํ˜ธ๋ฐฐ์ œ ๋ฐฉ๋ฒ•์€ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™”๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ์ ๋„ ์กด์žฌํ•œ๋‹ค.

  • Single Core CPU์—์„œ ๊ณ ์•ˆ๋œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž„๊ณ„๊ตฌ์—ญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„์ค‘ ๋ชจ๋“  ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๋ฅผ ๋ฌด์‹œํ•˜๊ฒŒ ๋œ๋‹ค.
  • Multi Core CPU์—์„œ๋„ ๋‹ค๋ฅธ CPU์˜ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์œ„ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ CPU์˜ LOCK ํ•€์— ์‹ ํ˜ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” LOCK ์‹ ํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ์•ก์„ธ์Šค ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆผ 3. Locking / UnLocking

 

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์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๊ธˆ์ง€์™€ ์›์ž ๋ช…๋ น ์‚ฌ์šฉ์„ ํ†ตํ•ด ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ดค๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์€ ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค์—์„œ๋„ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•˜๊ณ  ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋„์ž…๋˜๋ฉด์„œ ๋ณต์žกํ•ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŒ…์—๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ๋ฐฐ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ํฌ์ŠคํŒ…ํ•ด๋ณด์ž.