[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์ด๋ ์ฌ์ง ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด๋ฃ์ ๊ฒ์ธ๊ฐโ์ ๋ํ ์์ง๋์ด๋ง์ ์๋ต์ ๋๋ค.



