Post

[Computer Structure] Register

[Computer Structure] Register

๐Ÿงฉ Memory Hierarchy

ํ˜„๋Œ€ ์ปดํ“จํŒ… ์•„ํ‚คํ…์ฒ˜์—์„œ ์„ฑ๋Šฅ์˜ ๋ณ‘๋ชฉ์€ ๋” ์ด์ƒ ์—ฐ์‚ฐ ์†๋„ ๊ทธ ์ž์ฒด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” โ€˜๋ฐ์ดํ„ฐ์˜ ์ด๋™โ€™์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ๊ฐ€ ์•„๋ฌด๋ฆฌ ๊ฐ•๋ ฅํ•œ ALU(Arithmetic Logic Unit)๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋”๋ผ๋„, ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ ์‹œ์— ๊ณต๊ธ‰๋ฐ›์ง€ ๋ชปํ•˜๋ฉด CPU๋Š” ๊ทธ์ € ๋ฌด์˜๋ฏธํ•œ ํด๋ก ์‚ฌ์ดํด์„ ์†Œ๋ชจํ•˜๋ฉฐ ๋Œ€๊ธฐํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ด ์ž”ํ˜นํ•œ โ€˜์ง€์—ฐ ์‹œ๊ฐ„(Latency)โ€™์˜ ์ „์žฅ์—์„œ ์ตœ์ „๋ฐฉ์„ ์‚ฌ์ˆ˜ํ•˜๋Š” ๊ณ ๋ฆฝ๋œ ์š”์ƒˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌ์  ๊ฑฐ๋ฆฌ์™€ ์ง€์—ฐ

์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃจ๋Š” ๋‚˜๋…ธ์ดˆ(ns) ๋‹จ์œ„์˜ ์„ธ๊ณ„์—์„œ โ€˜๋น›์˜ ์†๋„โ€™๋Š” ๋งค์šฐ ๋А๋ฆฐ ๋ฌผ๋ฆฌ์  ์ œ์•ฝ์ž…๋‹ˆ๋‹ค. 3GHz๋กœ ์ž‘๋™ํ•˜๋Š” CPU์˜ ํ•œ ํด๋ก ์‚ฌ์ดํด์€ ์•ฝ 0.33๋‚˜๋…ธ์ดˆ์ด๋ฉฐ, ์ด ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋น›์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ๋ฆฌ๋Š” ๊ณ ์ž‘ 10cm ๋‚จ์ง“์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ CPU ๋‹ค์ด(Die) ์™ธ๋ถ€์— ์žˆ๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ(RAM)์—์„œ ์ถœ๋ฐœํ•œ๋‹ค๋ฉด, ์ „๊ธฐ ์‹ ํ˜ธ๊ฐ€ ๋ฒ„์Šค๋ฅผ ํƒ€๊ณ  ๋ฌผ๋ฆฌ์  ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋™ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ค‘์žฌ๋ฅผ ๊ฑฐ์ณ ๋Œ์•„์˜ค๋Š” ๋ฐ ์ˆ˜๋ฐฑ ํด๋ก ์‚ฌ์ดํด์ด ์†Œ๋ชจ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌผ๋ฆฌ์  ๊ดด๋ฆฌ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋“œ์›จ์–ด ์—”์ง€๋‹ˆ์–ด๋“ค์€ ๋ฐ์ดํ„ฐ ๊ทผ์ ‘์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์—ฐ์‚ฐ ์žฅ์น˜์™€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ์— ์œ„์น˜ํ•˜๋ฉฐ, ์‚ฌ์‹ค์ƒ ์ „์„ (Wire)์˜ ์—ฐ์žฅ์„ ์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. โ€˜์š”๋ฆฌ์‚ฌ์˜ ๋„๋งˆโ€™ ๋น„์œ ๋ฅผ ๋“ค์ž๋ฉด, Disk๋Š” ๋จผ ์‹์žฌ๋ฃŒ ์ฐฝ๊ณ ์ด๊ณ  RAM์€ ์ฃผ๋ฐฉ ์˜† ๋ƒ‰์žฅ๊ณ ์ด์ง€๋งŒ, ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์š”๋ฆฌ์‚ฌ๊ฐ€ ์นผ์งˆ์„ ํ•˜๋Š” ๋„๋งˆ ๋ฐ”๋กœ ์œ„์ž…๋‹ˆ๋‹ค. ๋„๋งˆ ์œ„๊ฐ€ ์ข์„์ˆ˜๋ก ํ•œ ๋ฒˆ์— ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์žฌ๋ฃŒ๋Š” ์ ์–ด์ง€์ง€๋งŒ, ์†์„ ๋ป—๋Š” ๊ฑฐ๋ฆฌ(Latency)๋Š” 0์— ์ˆ˜๋ ดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ ์ƒํƒœ ๋ณด์กด์˜ ์ •์ 

๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋‹จ์ˆœํžˆ ๋น ๋ฅธ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ โ€˜ํ˜„์žฌ ์ƒํƒœ(Architectural State)โ€™ ๊ทธ ์ž์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒฐ์ •์  ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ „ํ™˜ํ•  ๋•Œ(Context Switch), ๊ฐ€์žฅ ๋จผ์ € ๋ณดํ˜ธํ•˜๊ณ  ๋ณต๊ตฌํ•ด์•ผ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’๋“ค์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(PC)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ, ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ์—ฐ์‚ฐ์˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์Šคํƒ ํฌ์ธํ„ฐ ๋“ฑ์ด ๋ชจ๋‘ ์ด ์ข์€ ๊ณต๊ฐ„์— ์‘์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ์—ฐ์‚ฐ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, CPU๋Š” ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ์ˆ˜์ฒœ ํ‚ฌ๋กœ๋ฏธํ„ฐ ๋ฐ–์˜ ์žฅ๋ถ€(RAM)๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๋น„ํšจ์œจ์— ๋น ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ •์ ์— ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๊ฒฝ์ œ์  ๋…ผ๋ฆฌ(์šฉ๋Ÿ‰ ๋Œ€๋น„ ๊ฐ€๊ฒฉ)๋ฅผ ๋„˜์–ด์„  ๋ฌผ๋ฆฌ์  ํ•„์—ฐ์„ฑ์ž…๋‹ˆ๋‹ค. ๋‹ค์ด ๋ฉด์ ์˜ ๋ง‰๋Œ€ํ•œ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋ฉด์„œ๋„ ์ˆ˜ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ(KB)์กฐ์ฐจ ์ฑ„์šฐ์ง€ ๋ชปํ•˜๋Š” ์ด ๊ทน์†Œ๋Ÿ‰์˜ ์ž์›์ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput)์„ ๊ฒฐ์ •์ง“๋Š” ํ•ต์‹ฌ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ Register

๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ถ”์ƒ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ณต๊ฐ„์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ˆ˜์–ต ๊ฐœ์˜ ํŠธ๋žœ์ง€์Šคํ„ฐ๊ฐ€ ์ •๊ตํ•˜๊ฒŒ ์–ฝํ˜€ ๋งŒ๋“ค์–ด๋‚ธ ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ์˜ ๋ฌผ๋ฆฌ์  ๊ฒฐ์ •์ฒด์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ โ€˜๊ณต๊ฐ„โ€™์˜ ๊ฐœ๋…์ด๋ผ๋ฉด, ๋ ˆ์ง€์Šคํ„ฐ๋Š” โ€˜์ƒํƒœโ€™ ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค.

ํ”Œ๋ฆฝํ”Œ๋กญ์˜ ์ƒํƒœ ์œ ์ง€

๋””์ง€ํ„ธ ํšŒ๋กœ์—์„œ ๋‹จ 1๋น„ํŠธ์˜ ์ •๋ณด๋ฅผ โ€˜๊ธฐ์–ตโ€™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๋Š” ํ”Œ๋ฆฝํ”Œ๋กญ(Flip-Flop)์ž…๋‹ˆ๋‹ค. ๊ทธ์ค‘์—์„œ๋„ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” D-ํ”Œ๋ฆฝํ”Œ๋กญ์€ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋…ผ๋ฆฌ ๊ฒŒ์ดํŠธ๊ฐ€ ์„œ๋กœ์˜ ์ถœ๋ ฅ์„ ์ƒ๋Œ€๋ฐฉ์˜ ์ž…๋ ฅ์œผ๋กœ ๋ฐ€์–ด๋„ฃ๋Š” โ€˜ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„(Feedback Loop)โ€™๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ž…๋ ฅ ์‹ ํ˜ธ๊ฐ€ ๋Š๊ธฐ๋”๋ผ๋„ ํšŒ๋กœ ๋‚ด๋ถ€์—์„œ ์‹ ํ˜ธ๊ฐ€ ๊ผฌ๋ฆฌ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ  ํšŒ์ „ํ•˜๋ฉฐ ํ˜„์žฌ์˜ ์ „์•• ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ธฐ์–ต์„ ์œ ์ง€ํ•˜๋Š” ๋ณธ์งˆ์ ์ธ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํด๋ก(Clock) ์‹ ํ˜ธ๊ฐ€ ์ƒ์Šนํ•˜๋Š” ๊ทธ ์ฐฐ๋‚˜์˜ ์ˆœ๊ฐ„์—๋งŒ ์ž…๋ ฅ๊ฐ’์ด ์ด ๋ฃจํ”„ ์•ˆ์œผ๋กœ ์นจํˆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ผ๋‹จ ์นจํˆฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ ํด๋ก์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ์ฒ ์ €ํžˆ ๊ฒฉ๋ฆฌ๋˜์–ด ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ž˜์นญ(Latching) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•๋ถ„์— CPU๋Š” ์—ฐ์‚ฐ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ˆ˜๋งŽ์€ ๋…ธ์ด์ฆˆ ์†์—์„œ๋„ ํ”๋“ค๋ฆฌ์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์ค€์ ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํฌํŠธ ๋ฐ์ดํ„ฐ ๋ฑ…ํฌ

ํ˜„๋Œ€ CPU๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜ํผ์Šค์นผ๋ผ(Superscalar) ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ํ•œ ์‚ฌ์ดํด์— 4๊ฐœ ์ด์ƒ์˜ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋‹จ์ˆœํ•œ 1:1 ํ†ต๋กœ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๊ฐ€ ๋™์‹œ์— โ€œEAX ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ฝ์–ด๋ผโ€๋ผ๊ณ  ์š”์ฒญํ•  ๋•Œ ์‹ฌ๊ฐํ•œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ์ง€์Šคํ„ฐ๋Š” โ€˜๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ(Register File)โ€™์ด๋ผ๋Š” ํŠน์ˆ˜ํ•œ ๋ฑ…ํฌ ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ SRAM ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์€ ๋ฉ€ํ‹ฐ ํฌํŠธ(Multi-port) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 2๊ฐœ์˜ ์“ฐ๊ธฐ ํฌํŠธ์™€ 4๊ฐœ์˜ ์ฝ๊ธฐ ํฌํŠธ๋ฅผ ๊ฐ€์ง„ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์€ ํ•œ ์‚ฌ์ดํด์— 4๊ฐœ์˜ ๋ช…๋ น์–ด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐ€๊ณ , ๋™์‹œ์— 2๊ฐœ์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ณ‘๋ ฌ์„ฑ์€ ๊ณต์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํฌํŠธ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๊ฐ ๋น„ํŠธ ์…€(Cell)์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์›Œ๋“œ๋ผ์ธ๊ณผ ๋น„ํŠธ๋ผ์ธ์˜ ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์ด๋Š” ๋‹ค์ด(Die) ๋ฉด์ ์˜ ์ œ๊ณฑ($N^2$)์— ๋น„๋ก€ํ•˜๋Š” ๋น„์šฉ ์ƒ์Šน์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 32๊ฐœ๋‚˜ 16๊ฐœ ์ˆ˜์ค€์—์„œ ์ •์ฒด๋˜์–ด ์žˆ๋Š” ์ด์œ ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ•œ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐฐ์„ (Wiring)์˜ ๋ณต์žก๋„๊ฐ€ ์‹ค๋ฆฌ์ฝ˜ ๋ฉด์ ๊ณผ ์ „๋ ฅ ์†Œ๋ชจ๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์—†๋Š” ์ˆ˜์ค€์œผ๋กœ ์น˜์†Ÿ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ œ์–ด ๋ ˆ์ง€์Šคํ„ฐ

๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ์‹์žฌ๋ฃŒ(Operand)๋ฅผ ๋‹ด๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ๋ ˆ์ง€์Šคํ„ฐ๋“ค์€ CPU์˜ ์‹ ๊ฒฝ๊ณ„๋ฅผ ํ†ต์ œํ•˜๋Š” ์กฐ์ข…๊ฐ„ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ํŠน์ˆ˜ ๋ชฉ์  ๋ ˆ์ง€์Šคํ„ฐ(Special Purpose Register)๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(PC / RIP): ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์ด ๋ณ€ํ•˜๋Š” ์ˆœ๊ฐ„ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„(๋ถ„๊ธฐ, ์ ํ”„)์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํƒ ํฌ์ธํ„ฐ(SP / RSP): ํ˜„์žฌ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์ธ โ€˜์Šคํƒโ€™์˜ ๊ผญ๋Œ€๊ธฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜์˜ ์งˆ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ํ•ต์‹ฌ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค.
  • ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ(FLAGS / EFLAGS): ๋ฐ”๋กœ ์ง์ „ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ด์—ˆ๋Š”์ง€(Zero Flag), ์Œ์ˆ˜์˜€๋Š”์ง€(Sign Flag), ํ˜น์€ ์˜ค๋ฒ„ํ”Œ๋กœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋“ฑ์˜ โ€˜์ƒํƒœโ€™๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด 1๋น„ํŠธ์˜ ๊นƒ๋ฐœ๋“ค์ด ๋ชจ์—ฌ ์กฐ๊ฑด๋ฌธ(if)์˜ ๋ถ„๊ธฐ๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์˜ ํ•˜๋“œ์›จ์–ด ํŠธ๋ ˆ์ด๋“œ์˜คํ”„

ํฌํŠธ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์„ฑ๋Šฅ์€ ์˜ฌ๋ผ๊ฐ€์ง€๋งŒ, ๋ฌผ๋ฆฌ์ ์ธ ๋ฐฐ์„  ๋ฉด์ (Area)์ด ๋„“์–ด์ง€๋ฉด์„œ ์ „๊ธฐ์  ์‹ ํ˜ธ๊ฐ€ ์ด๋™ํ•ด์•ผ ํ•˜๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Š” ์—ญ์„ค์ ์œผ๋กœ ์ตœ๋Œ€ ํด๋ก ์ฃผํŒŒ์ˆ˜๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋“ค์€ ํ•ญ์ƒ โ€˜๋ณ‘๋ ฌ์„ฑโ€™๊ณผ โ€˜์†๋„โ€™ ์‚ฌ์ด์˜ ํŒฝํŒฝํ•œ ์ค„ํƒ€๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿงฉ Instruction Set Architecture

์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด์—๊ฒŒ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํ•˜๋“œ์›จ์–ด์˜ ๋ณต์žกํ•œ ๋ฌผ๋ฆฌ์  ๊ตฌํ˜„์„ ๊ฐ€๋ ค์ฃผ๋Š” ๊ฒฌ๊ณ ํ•œ ์ถ”์ƒํ™” ๊ณ„์ธต(Abstraction Layer)์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ โ€˜๋ฌดํ•œํ•œ ์บ”๋ฒ„์Šคโ€™๋กœ ๋ฌ˜์‚ฌํ•œ๋‹ค๋ฉด, ISA(Instruction Set Architecture)๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ โ€˜์—„๊ฒฉํ•˜๊ฒŒ ์ œํ•œ๋œ ๊ณ ์ •์„โ€™์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ž์› ์ถ”์ƒํ™” ๊ณ„์ธต

ISA๋Š” ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด์˜ ์ง‘ํ•ฉ์ฒด์ธ ๋™์‹œ์—, ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ํ•˜๋“œ์›จ์–ด ์ž์›์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ž…๋‹ˆ๋‹ค. x86-64 ์•„ํ‚คํ…์ฒ˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ 16๊ฐœ์˜ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ(RAX, RBX ๋“ฑ)๋ฅผ ๋…ธ์ถœํ•˜๋ฉฐ, ARMv8์€ 31๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฐœ์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ์ž„์˜๋กœ ์ •ํ•ด์ง„ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ช…๋ น์–ด ์ฝ”๋“œ ๋‚ด์—์„œ ๋ ˆ์ง€์Šคํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋น„ํŠธ ์ˆ˜(์˜ˆ: 32๊ฐœ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๋ ค๋ฉด 5๋น„ํŠธ๊ฐ€ ํ•„์š”)์™€ ๋ช…๋ น์–ด ์ „์ฒด ๊ธธ์ด ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ด โ€˜๋…ผ๋ฆฌ์  ๋ ˆ์ง€์Šคํ„ฐโ€™์˜ ๊ฐœ์ˆ˜๋ฅผ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ ˆ๋Œ€์ ์ธ ๋ฌผ๋ฆฌ ์ž์›์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ISA๋Š” ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„์ž์—๊ฒŒ๋Š” ๊ตฌํ˜„ํ•ด์•ผ ํ•  ์ŠคํŽ™์ด ๋˜๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ ์ œ์ž‘์ž์—๊ฒŒ๋Š” ์ง€์ผœ์•ผ ํ•  ์ž์›์˜ ํ•œ๊ณ„์„ ์ด ๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น ์ „๋žต

์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ž„๋ฌด ์ค‘ ํ•˜๋‚˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์–ด๋–ค ๋ ˆ์ง€์Šคํ„ฐ์— ๋ฐฐ์น˜ํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” โ€˜๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น(Register Allocation)โ€™์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์ˆ˜๋Š” ์ˆ˜์ฒœ ๊ฐœ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ˆ˜์‹ญ ๊ฐœ๋ฟ์ด๋ฏ€๋กœ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฐ ๋ณ€์ˆ˜์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ(Liveness)๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜๋“ค์„ ๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ๋ ค๋ง‰๊ธฐ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ „์‚ฐํ•™์—์„œ โ€˜๊ทธ๋ž˜ํ”„ ์ฑ„์ƒ‰ ๋ฌธ์ œ(Graph Coloring Problem)โ€™๋กœ ์น˜ํ™˜๋˜๋Š” NP-์™„์ „ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์ตœ์ ์˜ ํ• ๋‹น์— ์‹คํŒจํ•˜์—ฌ ๊ฐ€์šฉ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ฐ”๋‹ฅ๋‚˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” โ€˜๋ ˆ์ง€์Šคํ„ฐ ์Šคํ•„๋ง(Register Spilling)โ€™์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ€์žฅ ๋œ ์“ฐ์ด๋Š” ๋ณ€์ˆ˜๋ฅผ ์ž ์‹œ ๋ฉ”๋ชจ๋ฆฌ(Stack)๋กœ ์ซ“์•„๋‚ด๊ณ , ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋‹จ ํ•œ ๋ฒˆ์˜ ์Šคํ•„๋ง๋งŒ์œผ๋กœ๋„ ๋‚˜๋…ธ์ดˆ ๋‹จ์œ„์˜ ์—ฐ์‚ฐ์ด ์ˆ˜์‹ญ ๋‚˜๋…ธ์ดˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ์œผ๋กœ ๋Œ๋ณ€ํ•˜๋ฉฐ, ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ ๊ณก์„ ์„ ๋ฌด๋„ˆ๋œจ๋ฆฌ๋Š” ์น˜๋ช…์ ์ธ ํ•˜๋ฝ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
; C ์ฝ”๋“œ ์˜ˆ์‹œ: ๋งŽ์€ ์ง€์—ญ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
; int calculate(int a, int b, int c, int d, int e, int f) {
;     int x = a + b;
;     int y = c + d;
;     int z = e + f;
;     return x * y * z;
; }

; ์ปดํŒŒ์ผ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ (x86-64, ์ตœ์ ํ™” ํฌํ•จ)
; ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์Šคํƒ(๋ฉ”๋ชจ๋ฆฌ)์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ์ €์žฅ(spilling)ํ•˜๋Š” ๋ชจ์Šต
calculate:
    push   rbp          ; ์Šคํƒ ํ”„๋ ˆ์ž„ ๋ณด์กด
    mov    rbp, rsp
    sub    rsp, 16      ; ์Šคํƒ ๊ณต๊ฐ„ ํ™•๋ณด (Spilling ์˜์—ญ)

    mov    eax, edi     ; a (edi)๋ฅผ eax๋กœ ์ด๋™
    add    eax, esi     ; eax = a + b (x ๊ณ„์‚ฐ)
    mov    DWORD PTR [rbp-4], eax ; ๊ณ„์‚ฐ๋œ x๋ฅผ ์Šคํƒ์— ์ €์žฅ (Spilling!)

    mov    eax, edx     ; c (edx)๋ฅผ eax๋กœ ์ด๋™
    add    eax, ecx     ; eax = c + d (y ๊ณ„์‚ฐ)
    mov    DWORD PTR [rbp-8], eax ; ๊ณ„์‚ฐ๋œ y๋ฅผ ์Šคํƒ์— ์ €์žฅ (Spilling!)

    mov    eax, r8d     ; e (r8d)๋ฅผ eax๋กœ ์ด๋™
    add    eax, r9d     ; eax = e + f (z ๊ณ„์‚ฐ)

    imul   eax, DWORD PTR [rbp-4] ; eax = z * x (์Šคํƒ์—์„œ x๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์˜ด)
    imul   eax, DWORD PTR [rbp-8] ; eax = (z * x) * y (์Šคํƒ์—์„œ y๋ฅผ ๋‹ค์‹œ ์ฝ์–ด์˜ด)

    leave               ; ์Šคํƒ ํ”„๋ ˆ์ž„ ๋ณต๊ตฌ
    ret                 ; ๋ฐ˜ํ™˜

๐Ÿงฉ CPU Pipeline

๋ช…๋ น์–ด๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์‹คํ–‰๋˜๋Š” ๋ชจ๋ธ์€ ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CPU๋Š” ๊ณต์žฅ์˜ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์ฒ˜๋Ÿผ ๋ช…๋ น์–ด๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ชผ๊ฐœ์–ด ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด ๋ณต์žกํ•œ ํ๋ฆ„์„ ์ง€ํƒฑํ•˜๋Š” ๋ผˆ๋Œ€๊ฐ€ ๋ฐ”๋กœ ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค.

์Šคํ…Œ์ด์ง•๊ณผ ๋ฐ์ดํ„ฐ ๊ฒฉ๋ฆฌ

ํŒŒ์ดํ”„๋ผ์ธ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ํด๋ก(Clock)๋งˆ๋‹ค ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ „์ง„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฐ ๋‹จ๊ณ„(Fetch, Decode, Execute ๋“ฑ) ์‚ฌ์ด์—๋Š” ๋ฌผ๋ฆฌ์ ์ธ ๋ฒฝ์ด ํ•„์š”ํ•œ๋ฐ, ์ด๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ ๋ ˆ์ง€์Šคํ„ฐ(Pipeline Register) ๋˜๋Š” ์Šคํ…Œ์ด์ง• ๋ ˆ์ง€์Šคํ„ฐ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์ด ๋ ˆ์ง€์Šคํ„ฐ๋“ค์˜ ์ž„๋ฌด๋Š” ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์•ž ๋‹จ๊ณ„์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „๊นŒ์ง€ ๊ทธ ๊ฐ’์„ ์•ˆ์ „ํ•˜๊ฒŒ โ€˜์บก์ฒ˜โ€™ํ•˜์—ฌ ๋ณด์กดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ฒฉ๋ฆฌ ๋ฒฝ์ด ์—†๋‹ค๋ฉด, ์ „์••์˜ ๋ณ€ํ™”๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด์— ์ˆœ์‹๊ฐ„์— ํผ์ ธ๋‚˜๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ช…๋ น์–ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์„ž์ด๋Š” ๋Œ€ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊ฐ ๋งˆ๋””์—์„œ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ํ†ต์ œํ•˜๋ฉฐ, CPU๊ฐ€ ๊ณ ์† ํด๋ก์—์„œ๋„ ๋…ผ๋ฆฌ์  ์ •๋ฐ€ํ•จ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•ต์‹ฌ ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

ํ•ด์ €๋“œ์™€ ๋ฐ”์ดํŒจ์Šค ๋กœ์ง

ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ตœ๋Œ€ ์œ„ํ˜‘์€ ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์—์„œ ๋น„๋กฏ๋˜๋Š” ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ(Data Hazard)์ž…๋‹ˆ๋‹ค. ์•ž์„  ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์•„์ง ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ๊ธฐ๋ก(Writeback)๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๋ฐ”๋กœ ๋‹ค์Œ ๋ช…๋ น์–ด๊ฐ€ ๊ทธ ๊ฐ’์„ ์ฝ์œผ๋ ค ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹จ์ˆœํžˆ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ฉˆ์ถฐ ์„œ๊ณ (Stall), CPU์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์€ ๊ธ‰๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ์›Œ๋”ฉ(Forwarding) ๋˜๋Š” ๋ฐ”์ดํŒจ์Šค(Bypass)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ง€๋ฆ„๊ธธ ํšŒ๋กœ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ ์žฅ์น˜(ALU)์˜ ์ถœ๋ ฅ๋ถ€์—์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ๋กœ ๋ณด๋‚ด๋Š” ๋™์‹œ์—, ์ฆ‰์‹œ ๋‹ค์Œ ๋ช…๋ น์–ด์˜ ์ž…๋ ฅ๋ถ€๋กœ ์ง์ ‘ ์˜์•„์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์‹์ ์ธ โ€˜๊ธฐ๋กโ€™ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๊ธฐ ์ „์— ์‹ค์งˆ์ ์ธ โ€˜์‚ฌ์šฉโ€™ ์žฅ์†Œ๋กœ ๋จผ์ € ์ ํ”„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ •๊ตํ•œ ์šฐํšŒ๋กœ๋Š” ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ฐฉํ•˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ˆ˜ ์‚ฌ์ดํด์˜ ์ง€์—ฐ์„ 0์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
; ๋ฐ์ดํ„ฐ ํ•ด์ €๋“œ ๋ฐœ์ƒ ์˜ˆ์‹œ
; ๋ช…๋ น์–ด 1: EAX ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ์“ด๋‹ค. (Write)
add eax, ebx  ; EAX = EAX + EBX

; ๋ช…๋ น์–ด 2: ๋ฐ”๋กœ ๋‹ค์Œ ์‚ฌ์ดํด์— EAX ๊ฐ’์„ ์ฝ์œผ๋ ค ํ•œ๋‹ค. (Read)
; ๋งŒ์•ฝ ๋ฐ”์ดํŒจ์Šค๊ฐ€ ์—†๋‹ค๋ฉด, ๋ช…๋ น์–ด 1์ด WB(Writeback) ๋‹จ๊ณ„๊นŒ์ง€ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค.
mov ecx, eax  ; ECX = EAX (RAW Hazard ๋ฐœ์ƒ!)

ํŒŒ์ดํ”„๋ผ์ธ์˜ ๊นŠ์ด์™€ ๋ ˆ์ง€์Šคํ„ฐ ๋น„์šฉ

ํŒŒ์ดํ”„๋ผ์ธ์„ ๋” ์ž˜๊ฒŒ ์ชผ๊ฐœ๋ฉด(Deep Pipeline) ํด๋ก ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋งŒํผ ๋” ๋งŽ์€ ์Šคํ…Œ์ด์ง• ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ณต์žกํ•œ ํฌ์›Œ๋”ฉ ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์ด ๋ฉด์  ์ฆ๊ฐ€์™€ ์ „๋ ฅ ์†Œ๋ชจ์˜ ์ƒ์Šน์œผ๋กœ ์ด์–ด์ง€๋ฉฐ, ๋ถ„๊ธฐ ์˜ˆ์ธก ์‹คํŒจ ์‹œ ๋น„์›Œ์•ผ ํ•  ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋น„์šฉ(Penalty)์„ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ํ‚ค์šฐ๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Register Renaming

ํ˜„๋Œ€ ํ”„๋กœ์„ธ์„œ์˜ ์„ฑ๋Šฅ์„ ์ดํ•ดํ•˜๋Š” ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ํ‚ค์›Œ๋“œ๋Š” โ€˜๊ฐ€์ƒํ™”โ€™์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด(ISA)๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๊ณ ์ž‘ ์ˆ˜์‹ญ ๊ฐœ์— ๋ถˆ๊ณผํ•˜์ง€๋งŒ, ์‹ค์ œ ์‹ค๋ฆฌ์ฝ˜ ๋‹ค์ด ์œ„์—๋Š” ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ฌผ๋ฆฌ์  ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์›จ์–ด๋Š” ์ด ๊ฐ„๊ทน์„ ๋ฉ”์šฐ๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„์— ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” โ€˜๋ ˆ์ง€์Šคํ„ฐ ๋ฆฌ๋„ค์ด๋ฐ(Register Renaming)โ€™ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ช…๋ น์–ด ๊ฐ„์˜ ๊ฐ€์งœ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋น„์ˆœ์ฐจ ์‹คํ–‰(Out-of-Order Execution)์˜ ์ž ์žฌ๋ ฅ์„ ๊ทนํ•œ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ€์งœ ์˜์กด์„ฑ ์ œ๊ฑฐ

ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ ๋‚ด์—์„œ๋Š” ๋™์ผํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„์„ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ WAR(Write-After-Read)๋‚˜ WAW(Write-After-Write)์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์˜์กด์„ฑ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ, ๋‹จ์ˆœํžˆ โ€˜์ด๋ฆ„(๋ ˆ์ง€์Šคํ„ฐ ๋ฒˆํ˜ธ)โ€™์ด ๋ถ€์กฑํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€์งœ ์˜์กด์„ฑ(Name Dependency)์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด๊ฐ€ RAX๋ฅผ ์ฝ๊ณ  ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์–ด๊ฐ€ RAX์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ์“ฐ๋ ค ํ•  ๋•Œ, ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์–ด๋Š” ์•ž์„  ๋ช…๋ น์–ด๊ฐ€ ์ฝ๊ธฐ๋ฅผ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋„ค์ด๋ฐ ๊ธฐ์ˆ ์€ ๋‘ ๋ฒˆ์งธ ๋ช…๋ น์–ด์˜ RAX๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ(์˜ˆ: P42)๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ด ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์—†์•ฑ๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋‘ ๋ช…๋ น์–ด๊ฐ€ ์‹ค์ œ๋กœ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌ์  ๊ฐ€์ƒํ™” ๋งคํ•‘

๋ฆฌ๋„ค์ด๋ฐ์˜ ํ•ต์‹ฌ ๊ธฐ๊ตฌ๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๋ณ„์นญ ํ…Œ์ด๋ธ”(RAT, Register Alias Table)์ž…๋‹ˆ๋‹ค. CPU๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ๋””์ฝ”๋”ฉํ•  ๋•Œ, ๋ช…๋ น์–ด์— ๋ช…์‹œ๋œ ๋…ผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ ๋ฒˆํ˜ธ๋ฅผ ํ˜„์žฌ ๊ฐ€์šฉํ•œ ๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ ํ’€(PRP, Physical Register Pool)์˜ ๋นˆ ๋ฒˆํ˜ธ๋กœ ์ฆ‰์„์—์„œ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋งคํ•‘ ์ •๋ณด๋Š” RAT์— ๊ธฐ๋ก๋˜๋ฉฐ, ์ดํ›„์˜ ๋ช…๋ น์–ด๋“ค์€ ์ด ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜์—ฌ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๊ฐ‘๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ISA์— ์ •์˜๋œ ๋ ˆ์ง€์Šคํ„ฐ ์„ธํŠธ๋Š” ์ผ์ข…์˜ โ€˜ํ•ธ๋“คโ€™ ์—ญํ• ์„ ํ•  ๋ฟ์ด๋ฉฐ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จธ๋ฌด๋Š” ๊ณณ์€ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ฌผ๋ฆฌ์  ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฌผ๋ฆฌ RAM์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋†€๋ผ์šธ ์ •๋„๋กœ ํก์‚ฌํ•œ ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์˜ ๊ฐ€์ƒํ™”์ž…๋‹ˆ๋‹ค.

๋น„์ˆœ์ฐจ ์‹คํ–‰์„ ์œ„ํ•œ ๋ฆฌ์˜ค๋” ๋ฒ„ํผ(ROB)

๋ ˆ์ง€์Šคํ„ฐ ๋ฆฌ๋„ค์ด๋ฐ์„ ํ†ตํ•ด ๋ช…๋ น์–ด๋“ค์ด ์ˆœ์„œ๋ฅผ ์•ž์งˆ๋Ÿฌ ์‹คํ–‰(Out-of-Order)๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด, ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ โ€˜์˜ˆ์™ธ ์ฒ˜๋ฆฌโ€™์™€ โ€˜์ปค๋ฐ‹(Commit)โ€™์˜ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค. ์‹คํ–‰์€ ์ œ๋ฉ‹๋Œ€๋กœ ํ•˜๋”๋ผ๋„, ํ”„๋กœ๊ทธ๋žจ์˜ ์ตœ์ข… ์ƒํƒœ๋Š” ๋ฐ˜๋“œ์‹œ ์ฝ”๋“œ์— ์ ํžŒ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ฆฌ์˜ค๋” ๋ฒ„ํผ(ROB, Reorder Buffer)๊ฐ€ ๋™์›๋ฉ๋‹ˆ๋‹ค. ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋“ค์€ ์ผ๋‹จ ROB์— ์ž„์‹œ ์ €์žฅ๋˜๋ฉฐ, ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ช…๋ น์–ด๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ ˆ์ง€์Šคํ„ฐ ํŒŒ์ผ์˜ ์ตœ์ข… ์ƒํƒœ๋ฅผ ํ™•์ •(Commit) ์ง“์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ค‘๊ฐ„์— ๋ถ„๊ธฐ ์˜ˆ์ธก์ด ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ROB์— ์Œ“์ธ ๋น„์ˆœ์ฐจ ๊ฒฐ๊ณผ๋“ค์„ ์ฆ‰์‹œ ํ๊ธฐํ•˜๊ณ  RAT๋ฅผ ์ด์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ์œผ๋กœ์จ ์‹œ์Šคํ…œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ ํ’€์˜ ๊ณ ๊ฐˆ๊ณผ ์„ฑ๋Šฅ ์ €ํ•˜

๋ฆฌ๋„ค์ด๋ฐ์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐœ์ˆ˜๋Š” ์œ ํ•œํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๋ช…๋ น์–ด๊ฐ€ ๋น„์ˆœ์ฐจ์ ์œผ๋กœ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋˜๋ฉด ๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ฐ”๋‹ฅ๋‚˜๊ณ , ๊ฒฐ๊ตญ ๋ฆฌ๋„ค์ด๋ฐ ๋‹จ๊ณ„์—์„œ ํŒŒ์ดํ”„๋ผ์ธ์ด ์ •์ง€(Stall)ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ˜„๋Œ€ CPU ์„ค๊ณ„์ž๋“ค์ด ๋‹ค์ด ๋ฉด์ ์„ ํฌ์ƒํ•˜๋ฉด์„œ๊นŒ์ง€ ๋ฌผ๋ฆฌ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์† ๋Š˜๋ฆฌ๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Summary

๋ ˆ์ง€์Šคํ„ฐ๋Š” ๋‹จ์ˆœํžˆ CPU ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋„˜์–ด, ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ต์ฐจํ•˜๋Š” ์ตœ์ „์„ ์˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์  ์ง€์—ฐ ์‹œ๊ฐ„์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ •์ ์— ์„ฐ์œผ๋ฉฐ, ํ”Œ๋ฆฝํ”Œ๋กญ๊ณผ ๋ฉ€ํ‹ฐ ํฌํŠธ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ์ฐฐ๋‚˜์˜ ์ˆœ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜๋Š” ์—ฌ๊ธฐ์„œ ํ•œ ๋ฐœ ๋” ๋‚˜์•„๊ฐ€ ๋ฆฌ๋„ค์ด๋ฐ๊ณผ ๊ฐ€์ƒํ™”๋ฅผ ํ†ตํ•ด ๋…ผ๋ฆฌ์  ํ•œ๊ณ„๋ฅผ ๋›ฐ์–ด๋„˜๋Š” ๋ณ‘๋ ฌ์„ฑ์„ ๊ตฌํ˜„ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ง„ํ™”๋Š” โ€˜์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์—ฐ์‚ฐ ์žฅ์น˜๊ฐ€ ๋‹จ 1์ดˆ๋„ ์‰ฌ์ง€ ์•Š๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ์„ ๊ฒƒ์ธ๊ฐ€โ€™์— ๋Œ€ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง์  ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

References

This post is licensed under CC BY 4.0 by the author.