[Computer Structure] Register
๐งฉ Memory Hierarchy
ํ๋ ์ปดํจํ ์ํคํ ์ฒ์์ ์ฑ๋ฅ์ ๋ณ๋ชฉ์ ์ฐ์ฐ ์๋๊ฐ ์๋ ๋ฐ์ดํฐ์ ์ด๋ ์๋์์ ๋ฐ์ํฉ๋๋ค. ํ๋ก์ธ์์ ์ฐ์ฐ ์ฑ๋ฅ์ด ์๋ฌด๋ฆฌ ๋์๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์์ ๊ณต๊ธ๋ฐ์ง ๋ชปํ๋ฉด CPU๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์ ํด ์ํ์ ๋จธ๋ฌผ๊ฒ ๋ฉ๋๋ค. ๋ ์ง์คํฐ๋ ์ด๋ฌํ ์ ์ก ์ง์ฐ ์๊ฐ์ ๊ทน๋ณตํ๊ธฐ ์ํด ์ฐ์ฐ ์ฅ์น ์ต์ ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ฑฐ๋ฆฌ์ ์ ์ก ์ง์ฐ
๋ฐ์ดํฐ ์ ์ก ์๋๋ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ์ ์ ์ฝ์ ๋ฐ์ต๋๋ค. 3GHz๋ก ์๋ํ๋ CPU์ ํ ํด๋ก ์ฌ์ดํด์ ์ฝ 0.33๋๋ ธ์ด์ด๋ฉฐ, ์ด ์๊ฐ ๋์ ์ ๊ธฐ ์ ํธ๊ฐ ์ด๋ํ ์ ์๋ ๊ฑฐ๋ฆฌ๋ ๋งค์ฐ ์งง์ต๋๋ค. ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ CPU ์ธ๋ถ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(RAM)์์ ์ถ๋ฐํ๋ค๋ฉด, ๋ฌผ๋ฆฌ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฑฐ์น๋ ๊ณผ์ ์์ ์๋ฐฑ ํด๋ก ์ฌ์ดํด์ด ์๋ชจ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋์จ์ด๋ ๋ฐ์ดํฐ ์ ๊ทผ ๋น๋์ ๊ทผ์ ์ฑ์ ๊ธฐ์ค์ผ๋ก ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ์ต๋๋ค. ๋ ์ง์คํฐ๋ ์ฐ์ฐ ์ฅ์น์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณณ์ ์์นํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก ๊ณต๊ธํฉ๋๋ค. ์ ์ฅ ์ฅ์น๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ง ์ฐฝ๊ณ ์ด๊ณ RAM์ด ๋์ฅ๊ณ ๋ผ๋ฉด, ๋ ์ง์คํฐ๋ ์์ ์ ์ํํ๋ ๋๋ง ์์ ๊ฐ์ต๋๋ค. ๊ณต๊ฐ์ ํ์ํ์ง๋ง ์ ๊ทผ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๊ฑฐ์ 0์ ์๋ ดํฉ๋๋ค.
์ํคํ ์ฒ ์ํ ๋ณด์กด์ ์ ์
๋ ์ง์คํฐ๋ ๋จ์ํ ๋น ๋ฅธ ์ ์ฅ์๊ฐ ์๋๋ผ, ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ํ์ฌ ์ํ๋ฅผ ์ ์ํ๋ ํต์ฌ ๊ณต๊ฐ์ ๋๋ค. ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ํํ๋ ์ปจํ ์คํธ ์ค์์นญ ์, ๊ฐ์ฅ ๋จผ์ ๋ณดํธํ๊ณ ๋ณต๊ตฌํด์ผ ํ๋ ๋ฐ์ดํฐ๋ ๋ ์ง์คํฐ์ ๊ฐ๋ค์ ๋๋ค. ๋ค์ ์คํํ ๋ช ๋ น์ด ์ฃผ์(PC), ์ฐ์ฐ์ ์ค๊ฐ ๊ฒฐ๊ณผ๋ฌผ, ํจ์ ํธ์ถ์ ์ํ ์คํ ํฌ์ธํฐ ๋ฑ์ด ๋ชจ๋ ์ด ๊ณต๊ฐ์ ์ ์ฅ๋ฉ๋๋ค.
๋ง์ฝ ๋ ์ง์คํฐ๊ฐ ์๊ณ ๋ชจ๋ ์ฐ์ฐ์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ด๋ฃจ์ด์ง๋ค๋ฉด, CPU๋ ์ํ๋ฅผ ํ์ธํ ๋๋ง๋ค ๋ฉ๋ฆฌ ๋จ์ด์ง RAM์ ์ฐธ์กฐํด์ผ ํ๋ฏ๋ก ํจ์จ์ด ์ ํ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ ์ง์คํฐ๋ ์ฉ๋ ๋๋น ๋น์ฉ์ด ๋งค์ฐ ๋์์๋ ๋ถ๊ตฌํ๊ณ ์์คํ ์ ์ฒด์ ์ฒ๋ฆฌ๋์ ๊ฒฐ์ ์ง๋ ํ์ ์์์ ๋๋ค. ํ๋์จ์ด ์ค๊ณ์๋ ํ์ ๋ ๋ฉด์ ๋ด์์ ์ฐ์ฐ ํจ์จ์ ๋์ด๊ธฐ ์ํด ๋ ์ง์คํฐ๋ฅผ ์ ๋ต์ ์ผ๋ก ๋ฐฐ์นํฉ๋๋ค.
๐งฉ Register
๋ ์ง์คํฐ๋ ์ถ์์ ์ธ ๊ณต๊ฐ์ด ์๋๋ผ ๋ ผ๋ฆฌ ๊ฒ์ดํธ๋ก ๊ตฌํ๋ ๋ฌผ๋ฆฌ์ ํ๋ก์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๋ ์ฅ์๋ผ๋ฉด, ๋ ์ง์คํฐ๋ ํ๋ก์ธ์์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ์ฅ์น์ ๋๋ค.
ํ๋ฆฝํ๋กญ๊ณผ ๋ฐ์ดํฐ ์ ์ง
๋์งํธ ํ๋ก์์ 1๋นํธ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ต์ ๋จ์๋ ํ๋ฆฝํ๋กญ์ ๋๋ค. ๋ ์ง์คํฐ์ ๊ทผ๊ฐ์ธ D-ํ๋ฆฝํ๋กญ์ ์ ํธ๊ฐ ๋ด๋ถ์์ ์ํํ๋ฉฐ ์ ์ ์ํ๋ฅผ ์ ์งํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
์ ๋ ฅ ์ ํธ๊ฐ ๋๊ธฐ๋๋ผ๋ ํ๋ก ๋ด๋ถ์์ ์ ํธ๊ฐ ๋ฐ๋ณตํด์ ํ์ ํ๋ฉฐ ํ์ฌ์ ๊ฐ์ ๋ณด์กดํฉ๋๋ค. ํด๋ก ์ ํธ๊ฐ ์์นํ๋ ์์ ์๋ง ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ์ ์์ผ๋ฉฐ, ๊ทธ ์ธ์ ์๊ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๊ฒฉ๋ฆฌํ์ฌ ๋ณด์กดํฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์ ๋๋ถ์ CPU๋ ์ฐ์ฐ ์ค์ ๋ฐ์ํ๋ ์ ๊ธฐ์ ๋ ธ์ด์ฆ ์์์๋ ์ ํํ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฉํฐ ํฌํธ
ํ๋ CPU๋ ํ ์ฌ์ดํด์ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋์์ ์ํํ๋ ์ํผ์ค์นผ๋ผ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ๋ ์ง์คํฐ์ ํต๋ก๊ฐ ํ๋๋ฟ์ด๋ผ๋ฉด ์ฌ๋ฌ ๋ช ๋ น์ด๊ฐ ๋์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ๋ณ๋ชฉ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ์ง์คํฐ๋ โ๋ ์ง์คํฐ ํ์ผโ์ด๋ผ๋ ๋ฑ ํฌ ๊ตฌ์กฐ๋ก ์ค๊ณ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ SRAM๊ณผ ๋ฌ๋ฆฌ ๋ ์ง์คํฐ ํ์ผ์ ์ฌ๋ฌ ๊ฐ์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ํต๋ก๋ฅผ ๋์์ ์ด ์ ์๋ ๋ฉํฐ ํฌํธ ๊ตฌ์กฐ๋ฅผ ์ฑํํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ์ฌ์ดํด์ 4๊ฐ์ ๋ช ๋ น์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ 2๊ฐ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๊ธฐ๋ก๋๋ ๋์์ด ๋์์ ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ง ํฌํธ ์๊ฐ ๋์ด๋ ์๋ก ํ๋ก ๋ฐฐ์ ์ด ๋ณต์กํด์ง๋ฉฐ, ์ด๋ ๋ค์ด ๋ฉด์ ์ ์ ๊ณฑ($N^2$)์ ๋น๋กํ๋ ๋น์ฉ ์์น์ ์ด๋ํฉ๋๋ค. ๋ ์ง์คํฐ ๊ฐ์๊ฐ ์์ญ ๊ฐ ์์ค์์ ์ ํ๋๋ ์ด์ ๋ ๋ฐฐ์ ๋ณต์ก๋์ ์ ๋ ฅ ์๋ชจ์ ํ๊ณ ๋๋ฌธ์ ๋๋ค.
์ ์ด์ฉ ํน์ ๋ ์ง์คํฐ
์ฐ์ฐ ๋ฐ์ดํฐ ์ธ์ CPU์ ๋์์ ์ ์ดํ๋ ํน์ ๋ชฉ์ ๋ ์ง์คํฐ๋ค๋ ์กด์ฌํฉ๋๋ค.
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC): ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ์คํ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
- ์คํ ํฌ์ธํฐ(SP): ํ์ฌ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ์คํ์ ์๋จ์ ๊ฐ๋ฆฌ์ผ ํจ์ ํธ์ถ๊ณผ ๋ฐํ์ ์ง์๋ฅผ ์ ์งํฉ๋๋ค.
- ํ๋๊ทธ ๋ ์ง์คํฐ: ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0์ธ์ง, ์์์ธ์ง, ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ๋์ง ๋ฑ์ ์ํ๋ฅผ ๊ธฐ๋กํ์ฌ ์กฐ๊ฑด๋ฌธ ๋ถ๊ธฐ์ ๊ธฐ์ค์ด ๋ฉ๋๋ค.
๐งฉ Instruction Set Architecture
์ํํธ์จ์ด ์์ง๋์ด์๊ฒ ๋ ์ง์คํฐ๋ ํ๋์จ์ด์ ๋ณต์กํ ๋ฌผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ค์ฃผ๋ ์ถ์ํ ๊ณ์ธต์ ๋๋ค. ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ(ISA)๋ ์ํํธ์จ์ด๊ฐ ํ๋์จ์ด ์์์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํ ๊ท์ฝ์ ์ ์ํฉ๋๋ค.
์์ ์ถ์ํ ๊ณ์ธต
ISA๋ ํ๋ก์ธ์๊ฐ ์ดํดํ๋ ๋ช ๋ น์ด ์งํฉ์ธ ๋์์ ์์ ํ์ฉ์ ๋ํ ๊ท์ฝ์ ๋๋ค. x86-64 ์ํคํ ์ฒ๋ 16๊ฐ์ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ฅผ ์ ๊ณตํ๊ณ , ARMv8์ 31๊ฐ๋ฅผ ์ ๊ณตํ๋ ์์ ๋๋ค.
์ด ๊ฐ์๋ ๋ช ๋ น์ด ๊ธธ์ด์ ๋ ์ง์คํฐ ์๋ณ์ ํ์ํ ๋นํธ ์ ์ฌ์ด์ ํจ์จ์ ๊ณ์ฐํ ๊ฒฐ๊ณผ์ ๋๋ค. ์ํํธ์จ์ด๋ ์ค์ ๋ฌผ๋ฆฌ ํ๋ก๋ฅผ ์ ํ์ ์์ด ISA๊ฐ ์ ์ํ ๋ ผ๋ฆฌ์ ๋ ์ง์คํฐ๋ฅผ ์์์ผ๋ก ์ธ์ํ๊ณ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ๋ผ์ ISA๋ ํ๋์จ์ด ์ค๊ณ์์๊ฒ๋ ๊ตฌํ ๋ช ์ธ๊ฐ ๋๊ณ , ์ปดํ์ผ๋ฌ ์ ์์์๊ฒ๋ ์์์ ํ๊ณ์ ์ด ๋ฉ๋๋ค.
๋ ์ง์คํฐ ํ ๋น ์ ๋ต
์ปดํ์ผ๋ฌ์ ํต์ฌ ์๋ฌด๋ ๋ณ์๋ฅผ ์ด๋ค ๋ ์ง์คํฐ์ ๋ฐฐ์นํ ์ง ๊ฒฐ์ ํ๋ ๋ ์ง์คํฐ ํ ๋น์ ๋๋ค. ๋ณ์์ ์๋ ๋ง์ง๋ง ๋ ์ง์คํฐ๋ ํ์ ๋์ด ์์ผ๋ฏ๋ก, ์ปดํ์ผ๋ฌ๋ ๊ฐ ๋ณ์์ ์ฌ์ฉ ๊ธฐ๊ฐ์ ๋ถ์ํ์ฌ ์๋ก ๊ฒน์น์ง ์๋ ๋ณ์๋ค์ ๋์ผํ ๋ ์ง์คํฐ์ ๋ฒ๊ฐ์ ๋ฐฐ์นํฉ๋๋ค.
๊ฐ์ฉ ๋ ์ง์คํฐ๊ฐ ๋ถ์กฑํด์ง๋ฉด ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ ๋ณ์๋ฅผ ์ ์ ๋ฉ๋ชจ๋ฆฌ(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๋ ๋ช ๋ น์ด๋ฅผ ์ฌ๋ฌ ๋จ๊ณ๋ก ์ชผ๊ฐ์ด ๋์์ ์ฒ๋ฆฌํ๋ ํ์ดํ๋ผ์ธ ๋ฐฉ์์ ์ฑํํ๋ฉฐ, ๋ ์ง์คํฐ๋ ๊ฐ ๋จ๊ณ๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ํต์ ํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
์คํ ์ด์ง๊ณผ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ
ํ์ดํ๋ผ์ธ ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ๋ ํด๋ก ์ ํธ์ ๋ง์ถฐ ๋ค์ ๋จ๊ณ๋ก ์ด๋ํฉ๋๋ค. ์ด๋ ๊ฐ ๋จ๊ณ(Fetch, Decode, Execute ๋ฑ) ์ฌ์ด์์ ๋ฐ์ดํฐ๊ฐ ์์ด์ง ์๋๋ก ๋ฌผ๋ฆฌ์ ์ธ ๊ฒฝ๊ณ๊ฐ ํ์ํ๋ฐ, ์ด๋ฅผ ํ์ดํ๋ผ์ธ ๋ ์ง์คํฐ ๋๋ ์คํ ์ด์ง ๋ ์ง์คํฐ๋ผ๊ณ ํฉ๋๋ค.
์ด ๋ ์ง์คํฐ๋ ์ด์ ๋จ๊ณ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ค์ ๋จ๊ณ๋ก ๋์ด๊ฐ๊ธฐ ์ ๊น์ง ๊ทธ ๊ฐ์ ์์ ์ ์ผ๋ก ๋ณด๊ดํฉ๋๋ค. ์ด๋ฌํ ๊ฒฉ๋ฆฌ ์ฅ์น๊ฐ ์๋ค๋ฉด ์ ์ ๋ณํ๊ฐ ํ์ดํ๋ผ์ธ ์ ์ฒด์ ์ํฅ์ ์ฃผ์ด ๋ฐ์ดํฐ๊ฐ ์ค์ผ๋ ์ ์์ต๋๋ค. ๋ ์ง์คํฐ๋ ํ์ดํ๋ผ์ธ ๋ง๋๋ง๋ค ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํ๋ฉฐ CPU๊ฐ ๊ณ ์์ผ๋ก ์๋ํ ๋๋ ๋ ผ๋ฆฌ์ ์ ํ์ฑ์ ์ ์งํ๊ฒ ๋์ต๋๋ค.
ํด์ ๋์ ๋ฐ์ดํจ์ค ๋ก์ง
ํ์ดํ๋ผ์ธ์ ์ฑ๋ฅ์ ์ ํดํ๋ ์ฃผ์ ์์ธ์ ๋ช ๋ น์ด ๊ฐ์ ๋ฐ์ดํฐ ์์กด์ฑ์ผ๋ก ๋ฐ์ํ๋ ๋ฐ์ดํฐ ํด์ ๋(Data Hazard)์ ๋๋ค. ์ด์ ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ๊ฐ ์์ง ๋ ์ง์คํฐ ํ์ผ์ ๊ธฐ๋ก๋์ง ์์๋๋ฐ, ๋ค์ ๋ช ๋ น์ด๊ฐ ๊ทธ ๊ฐ์ ์ฆ์ ์ฝ์ผ๋ ค ํ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ๋จ์ํ ๋๊ธฐ(Stall)ํ๋ฉด ์ฒ๋ฆฌ๋์ด ๊ธ๊ฒฉํ ๋จ์ด์ง๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๋ CPU๋ ํฌ์๋ฉ(Forwarding) ๋๋ ๋ฐ์ดํจ์ค(Bypass)๋ผ๋ ์ฐํ ํ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐ์ฐ ์ฅ์น(ALU)์์ ๋์จ ๊ฒฐ๊ณผ๊ฐ์ ๋ ์ง์คํฐ ํ์ผ์ ๊ธฐ๋ก๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์ฆ์ ๋ค์ ๋ช ๋ น์ด์ ์ ๋ ฅ๊ฐ์ผ๋ก ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ์ฐํ๋ก๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ค์ ์ ์ฅ์์ ์์ฐฉํ๊ธฐ ์ ์ด๋ผ๋ ํ์ํ ๊ณณ์ผ๋ก ๋ฐ๋ก ์ ๋ฌ๋์ด ์ง์ฐ ์๊ฐ์ ์ต์ํํฉ๋๋ค.
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 ๋ฐ์!)
ํ์ดํ๋ผ์ธ์ ๊น์ด์ ๋ ์ง์คํฐ ๋น์ฉ
ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ฅผ ๋ ์ธ๋ฐํ๊ฒ ๋๋์๋ก ํด๋ก ์๋๋ฅผ ๋์ผ ์ ์์ง๋ง, ๊ทธ๋งํผ ๋ ๋ง์ ์คํ ์ด์ง ๋ ์ง์คํฐ์ ๋ณต์กํ ํฌ์๋ฉ ๋ก์ง์ด ํ์ํฉ๋๋ค. ์ด๋ ๋ค์ด ๋ฉด์ ์ฆ๊ฐ์ ์ ๋ ฅ ์๋ชจ ์์น์ผ๋ก ์ด์ด์ง๋ฉฐ, ๋ถ๊ธฐ ์์ธก ์คํจ ์ ๋น์์ผ ํ๋ ํ์ดํ๋ผ์ธ์ ๋น์ฉ๋ ํจ๊ป ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค.
Register Renaming
์ํํธ์จ์ด๊ฐ ์ธ์ํ๋ ๋ ์ง์คํฐ๋ ์์ญ ๊ฐ ์์ค์ด์ง๋ง, ์ค์ ํ๋์จ์ด ๋ด๋ถ์๋ ์๋ฐฑ ๊ฐ์ ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ๊ฐ ์กด์ฌํฉ๋๋ค. CPU๋ ์ด ์ฐจ์ด๋ฅผ ๋ฉ์ฐ๊ธฐ ์ํด ์คํ ์์ ์ ๋ ์ง์คํฐ์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๋ ์ง์คํฐ ๋ฆฌ๋ค์ด๋ฐ(Register Renaming) ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ฆ ์ค๋ณต์ผ๋ก ๋ฐ์ํ๋ ๊ฐ์ง ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ ๋น์์ฐจ ์คํ(Out-of-Order Execution)์ ํจ์จ์ ๊ทน๋ํํฉ๋๋ค.
๊ฐ์ง ์์กด์ฑ ์ ๊ฑฐ
ํ๋ก๊ทธ๋จ ์ฝ๋ ๋ด์์๋ ํ์ ๋ ๋ ์ง์คํฐ ์ด๋ฆ์ ๋ฐ๋ณตํด์ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ค์ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ๋ ์๊ด์์ด ๋จ์ํ ์ด๋ฆ์ด ๊ฐ์์ ๋ฐ์ํ๋ WAR(Write-After-Read)์ด๋ WAW(Write-After-Write) ๊ฐ์ ์์กด์ฑ์ด ์๊น๋๋ค. ์ด๋ ๋ฆฌ์์ค๊ฐ ๋ถ์กฑํด์ ๋ฐ์ํ๋ ๊ฐ์ง ์์กด์ฑ์ ๋๋ค.
๋ฆฌ๋ค์ด๋ฐ ๊ธฐ์ ์ ๋ค์ ๋ช ๋ น์ด๊ฐ ์ฌ์ฉํ ๋ ์ง์คํฐ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ์ ํ ๋นํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ๊ฒ๋ณด๊ธฐ์๋ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ง๋ง ์ค์ ๋ก๋ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋์ด, ๋ ๋ช ๋ น์ด๊ฐ ๋๊ธฐ ์์ด ๋์์ ์คํ๋ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ฐ์ํ ๋งคํ
๋ฆฌ๋ค์ด๋ฐ์ ํต์ฌ ๊ธฐ๊ตฌ๋ ๋ ์ง์คํฐ ๋ณ์นญ ํ ์ด๋ธ(RAT)์ ๋๋ค. CPU๋ ๋ช ๋ น์ด๋ฅผ ํด์ํ ๋ ์ฝ๋์ ๋ช ์๋ ๋ ผ๋ฆฌ ๋ ์ง์คํฐ ๋ฒํธ๋ฅผ ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ ํ(PRP)์ ๋น์ด ์๋ ๋ฒํธ๋ก ์ฆ์ ์นํํฉ๋๋ค.
์ด ๋งคํ ์ ๋ณด๋ RAT์ ๊ธฐ๋ก๋๋ฉฐ, ์ดํ์ ๋ช ๋ น์ด๋ค์ ์ด ์ ๋ณด๋ฅผ ์ฐธ์กฐํด ์ ํํ ์์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ISA์ ์ ์๋ ๋ ์ง์คํฐ๋ ์ผ์ข ์ ํธ๋ค ์ญํ ๋ง ์ํํ๋ฉฐ, ์ค์ ๋ฐ์ดํฐ๊ฐ ๋จธ๋ฌด๋ ๊ณณ์ ํ๋์จ์ด๊ฐ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฌผ๋ฆฌ ์ ์ฅ์์ ๋๋ค. ์ด๋ ์ด์์ฒด์ ๊ฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํตํด ๋ฌผ๋ฆฌ RAM์ ๊ด๋ฆฌํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํ ํ๋์จ์ด ์์ค์ ๊ฐ์ํ์ ๋๋ค.
๋น์์ฐจ ์คํ์ ์ํ ๋ฆฌ์ค๋ ๋ฒํผ(ROB)
๋ฆฌ๋ค์ด๋ฐ์ ํตํด ๋ช ๋ น์ด๋ค์ด ์์์ ์๊ด์์ด ์คํ๋๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ ์ต์ข ๋ฐ์ํ๋ ์์๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์คํ์ ํจ์จ์ ์ํด ๋น์์ฐจ์ ์ผ๋ก ํ๋๋ผ๋, ํ๋ก๊ทธ๋จ์ ์ต์ข ์ํ๋ ๋ฐ๋์ ์ฝ๋์ ์ ํ ์์๋๋ก ๋ฐ์๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฅผ ์ํด ๋ฆฌ์ค๋ ๋ฒํผ(ROB)๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์์ ์๊ด์์ด ์๋ฃ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ค์ ์ผ๋จ ROB์ ์์ ์ ์ฅ๋์๋ค๊ฐ, ๊ฐ์ฅ ์ค๋๋ ๋ช ๋ น์ด๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ ์ง์คํฐ ํ์ผ์ ๊ธฐ๋ก(Commit)๋ฉ๋๋ค. ๋ง์ฝ ์์ธก์ด ํ๋ฆฌ๊ฑฐ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ROB์ ์์ธ ๋น์์ฐจ ๊ฒฐ๊ณผ๋ค์ ์ฆ์ ํ๊ธฐํ๊ณ RAT๋ฅผ ์ด์ ์ํ๋ก ๋๋๋ ค ์์คํ ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
๋ฌผ๋ฆฌ ๋ ์ง์คํฐ ํ์ ๊ณ ๊ฐ๊ณผ ์ฑ๋ฅ ์ ํ
๋ฆฌ๋ค์ด๋ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ์ ๊ฐ์๋ ํ์ ๋์ด ์์ต๋๋ค. ๋น์์ฐจ์ ์ผ๋ก ๋๊ธฐํ๋ ๋ช ๋ น์ด๊ฐ ๋๋ฌด ๋ง์์ ธ ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ๊ฐ ๋ฐ๋ฅ๋๋ฉด ํ์ดํ๋ผ์ธ์ด ์ ์งํ๊ฒ ๋ฉ๋๋ค. ํ๋ CPU ์ค๊ณ์๋ค์ด ๋ค์ด ๋ฉด์ ์ ํฌ์ํ๋ฉด์๊น์ง ๋ฌผ๋ฆฌ ๋ ์ง์คํฐ ๊ฐ์๋ฅผ ๊ณ์ ๋๋ฆฌ๋ ์ด์ ์ ๋๋ค.
Summary
๋ ์ง์คํฐ๋ CPU ๋ด๋ถ์ ๊ฐ์ฅ ๋น ๋ฅธ ์ ์ฅ์์ธ ๋์์ ํ๋์จ์ด์ ์ํํธ์จ์ด๊ฐ ๋ง๋๋ ์ธํฐํ์ด์ค์ ๋๋ค. ๋ฐ์ดํฐ ์ ์ก ์ง์ฐ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๊ณ์ธต ๊ตฌ์กฐ์ ์ต์๋จ์ ์์นํ๋ฉฐ, ํ์ดํ๋ผ์ธ๊ณผ ๋ฆฌ๋ค์ด๋ฐ ์ค๊ณ๋ฅผ ํตํด ์ฐฐ๋์ ์๊ฐ์๋ ์ฐ์ฐ ์ฅ์น์ ๋์์์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํฉ๋๋ค. ์ด๋ฌํ ๋ ์ง์คํฐ์ ์งํ๋ ํ๋์จ์ด์ ๋ฌผ๋ฆฌ์ ์ ์ฝ ์์์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํจ์จ์ ๋์ด๊ธฐ ์ํ ์์ง๋์ด๋ง์ ๊ฒฐ๊ณผ๋ฌผ์ ๋๋ค.



