#1 ์ปดํ์ผ ์ด์ผ๊ธฐ
#1-1 ํ๋ก๊ทธ๋๋ฐ์ด๋
ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ฐ์ ์ฌ๊ณ ์ ์๋๋ฅผ ๊ธฐ๊ณ(CPU)๊ฐ ์ดํดํ๊ณ ์ํํ ์ ์๋ ํํ๋ก ๋ฒ์ญํ๋ ๊ณผ์ ์ด๋ค.
#1-2 ์์ค ์ฝ๋ (Source Code)
์ธ๊ฐ์ ์ฌ๊ณ ์ ์๋๋ฅผ ๊ธฐ๊ณ๊ฐ ์คํด ์์ด ์ดํํ ์ ์๋๋ก, '์ปดํ์ผ'์ ์ผ๋์ ๋ ์ฌ๋ฌ ์ฝ์(๊ณ์ฝ)์ ๋ง์ถฐ ์ด ๊ธ.
#1-3 ์ปดํ์ผ (Compile)
๋จผ์ ์์ค ์ฝ๋๊ฐ ์ง์ผ์ผ ํ ์ฝ์์ ๊ฒ์ฌํ ๋ค์ ์์ค ์ฝ๋์ ๋ด๊ธด ๊ธ์ด์ด์ ์๋๋ฅผ ๋ณด์กดํ๋ฉด์ (์๋์ ) ๊ณ ๊ธ ์ธ์ด๋ฅผ, (์๋์ ) ์ ๊ธ ์ธ์ด๋ก ๋ณํํ๋ ๊ฒ.
์์
์1: example.c → example.s
์2: example.s → example.o
์3: example.c → example.o
์4: example.java → example.class
CPU์์ ๊ด๊ณ
์ปดํ์ผ์ ๊ถ๊ทน(์ต์ข )์ ์ผ๋ก CPU๊ฐ ์คํํ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ ๋ชฉ์ ์ ํ์๋ค. ๋ฐ๋๋ก ๋งํด, CPU๊ฐ ์ด ์ธ์์ ์กด์ฌํ์ง ์๋๋ค๋ฉด ์ปดํ์ผ ๋ํ ์กด์ฌ ์๋ฏธ๋ฅผ ์๋๋ค.
#1-4 ๋งํน (Linking)
์ปดํ์ผ๋ ์ฝ๋๋ค์ ์๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐํ ์ง ํ์ ํ ๋ค์, ํ๋ก๊ทธ๋จ ์์ ์ง์ (entry point)์ ์ ์ํ๋ ๋ฑ์ ์ฌ๋ฌ ์ถ๊ฐ ์์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ผ๋ก ์์ฑํ๋ ๊ฒ. ์ค๋ฌด์์๋ ๋งํน์ด ์ปดํ์ผ์ ํฌํจ๋ ๊ฐ๋ ์ธ ๊ฒ์ฒ๋ผ ๋งํ๊ธฐ๋ ํ๋ค.
์์
// main.c ํ์ผ
int add(int, int); // ์ ์ธ๋ง ์์
int main() {
int result = add(1, 2);
return result;
}
---
// add.c ํ์ผ
int add(int a, int b) {
return a + b;
}
main.c์ add.c๋ฅผ ๊ฐ๊ฐ ์ปดํ์ผํด์, ๊ฐ๊ฐ main.o์ add.o๋ก ๋ง๋ค ์ ์๋ค. main.o์ add.o๋ฅผ ์ฌ๋ฃ๋ก ๋งํน์ ์ํํ๋ฉด ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ(๊ฐ๋ น example.exe)์ด ํ์ด๋์จ๋ค.
์์์ฒ๋ผ ๋งํน์ ์ฌ๋ฃ๊ฐ 2๊ฐ๊ฐ ์๋๋ผ 1๊ฐ์ธ ๊ฒฝ์ฐ๋ ์ด๋จ๊น? ๋งํน์ด ํ์ ์์๊น? ์๋๋ค. ๋งํน์ ์ฐธ์กฐ ๊ด๋ จ ์์ ๋ง ์ํํ๋ ๊ฒ ์๋๊ณ , ํ๋ก๊ทธ๋จ ์์ ์ง์ ์ ์์ ๊ฐ์ ์ฌ๋ฌ ์ธ๋ถ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ด๋ค.
#2 ๋ฐ์ด๋๋ฆฌ ์ด์ผ๊ธฐ
#2-1 ์ด์ง ๋ฐ์ดํฐ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋
binary: (ํ์ฉ์ฌ) 2์ง๋ฒ์
๋ฐ์ด๋๋ฆฌ๋ 2์ง๋ฒ์ด๋ผ๋ ์๋ฏธ๋ค. ์ฆ, 0๊ณผ 1๋ง ์ด๋ค๋ ๋ง์ด๋ค.
์ด์ง ๋ฐ์ดํฐ
= binary data
= binary (๋ฐ์ด๋๋ฆฌ)
์ด์ง ๋ฐ์ดํฐ๋ '0๊ณผ 1๋ก ํํ๋ ์ ๋ณด'๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค๋ฉด cใjava ๋ฑ์ ์์ค ์ฝ๋ ํ์ผ, class ํ์ผ์ฒ๋ผ ์ปดํ์ผ์ ํ์ง๋ง ์์ง ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ ์๋ ์ฝ๋, JPGใMP3 ๋ฑ ๊ฐ์ข ํ์ผ, ๋๊ตด ๋ฒฝ์ ์๊ฒจ์ง "01011010..." ๋ฑ์ด ์๋ค. ์์ค ์ฝ๋๋ ํ ์คํธ ํํ์ด๋ฏ๋ก ์ด์ง ๋ฐ์ดํฐ๊ฐ ์๋๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ์ด๋ค ๋ฌธ์๋ ๋์คํฌ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ ๊ฒฐ๊ตญ 0๊ณผ 1๋ก ์ธ์ฝ๋ฉ๋์ด ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ด์ง ๋ฐ์ดํฐ๋ค. ์ด์ง ๋ฐ์ดํฐ๋ฅผ '๋ฐ์ด๋๋ฆฌ'๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
๋ฐ์ด๋๋ฆฌ ์ฝ๋
= binary code, binary language
= ๊ธฐ๊ณ์ด
์ด๋ค CPU๊ฐ '์ง์ ์คํํ ๋ช ๋ น'์ผ๋ก ๋ฐ์๋ค์ด๋ ์ด์ง ๋ฐ์ดํฐ(CPU์ ๊ทธ๋๋ก ๋๋ ค๋ฐ์์ ๋ CPU๊ฐ ์ ์ ์๋ํด์ผํ๋ ์ฝ๋)๋ฅผ ์๋ฏธํ๋ค. '๊ธฐ๊ณ์ด'๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. ์๋ฅผ ๋ค๋ฉด x86 ๊ธฐ๊ณ์ด, x86-64 ๊ธฐ๊ณ์ด, 8086 ๊ธฐ๊ณ์ด ๋ฑ์ด ์๋ค. ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ #1-3์์ ๋งํ '์ ๊ธ ์ธ์ด'์ '๊ทน๋จ'์ด๋ค.
#2-2 ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ ํ๊ธฐ ํ์
์ด์ง์(bit string) ํํ ๋ฐฉ์
0100110010...
0๊ณผ 1์ ๋นํธ ๋จ์(bit-level)๋ก ๋์ดํ ๋ฐฉ์์ด๋ค.
16์ง์(hexadecimal) ๋คํ ํํ ๋ฐฉ์
b8 78 56 34 12...
์ด์ง์(bit string) ํํ์ 8๋นํธ๋ง๋ค ๋์ด์, 16์ง์ 2์๋ฆฌ๋ก ํํํ ๊ฒ์ด๋ค. ๋ฐ์ด๋๋ฆฌ ์ฝ๋๊น์ง ๋๋ฒ๊น ํด์ผ ํ๋ ํ๋ก๊ทธ๋๋จธ๋ค์ ๊ฐ๋ ์ฑ ์ฆ๋๋ฅผ ์ํ ํ์์ด๋ค. 8๋นํธ๋ง๋ค ๋๋ ๊ฒ ์ ๊ฐ๋ ์ฑ ํฅ์์ ๋์์ด ๋ ๊น? CPU๊ฐ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ํด์ํ๋ ๋จ์์ธ word๊ฐ ์ผ๋ฐ์ ์ผ๋ก byte(= 8bit)์ ๋ฐฐ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. word๊ฐ byte์ ๋ฐฐ์๋ก ์ค๊ณ๋ ์ด์ ๋ #3-1์ ๋์จ๋ค.
#2-3 ISA (Instruction Set Architecture, ๋ช ๋ น์ด ์งํฉ)
๋ฐฉ๊ธ, CPU๊ฐ ๋ช ๋ น์ผ๋ก ๋ฐ์๋ค์ด๋ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ผ๊ณ ํ๋ค. ์ฌ๊ธฐ์ ๋ช ๋ น์ผ๋ก ๋ฐ์๋ค์ธ๋ค๋ ๋ง์, ์ผ๊ด์ฑ์ด ์กด์ฌํ๋ค๋ ๋ง์ด๊ธฐ๋ ํ๋ค. ๋น์ฐํ๊ฒ ์ง๋ง, CPU์ ์ด๋ค ๋ฐ์ด๋๋ฆฌ ์ฝ๋ A๋ฅผ ์ด์ ๋ฃ์์ ๋์ ์ค๋ ๋ฃ์์ ๋ ๋์ผํ๊ฒ ์๋ํด์ผ ํ ํ ๋ ๋ง์ด๋ค.
๊ทธ ์ผ๊ด์ฑ ์๋, (CPU๊ฐ ๋ฐ๋ผ์ผ ํ ) ๋ช ๋ น ์ฒด๊ณ๋ฅผ ISA๋ผ๊ณ ํ๋ค. ISA๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์ผ๋ฉฐ CPU๋ง๋ค ์คํ ๊ฐ๋ฅํ ISA๊ฐ ๋ค๋ฅด๋ค. ๊ฐ๋ น ๋ง์ ์ฐ์ฐ์ ํ๋ ๋ช ๋ น์ด, CPU๊ฐ ๋ณด์ ํ ์ด๋ค ๋ ์ง์คํฐ์ ์ด๋ค ๊ฐ์ ์ ์ฅํ๋ผ๋ ๋ช ๋ น์ด ๋ฑ์ ๊ฐ์ ISA๋ผ๋ฉด ๋ฐ๋์ ๋๊ฐ๊ณ , ๋ค๋ฅธ ISA๋ผ๋ฉด ๋ค๋ฅผ ์ ์๋ค.
#2-4 ABI (Application Binary Interface, ํ๋ก๊ทธ๋จ ์ด์ง ์ธํฐํ์ด์ค)
๋ณต์์ ์ฝ๋๋ค์ ๊ฐ๊ฐ ์ปดํ์ผํ ๋, ๊ฐ ์ปดํ์ผ ์ฐ์ถ๋ฌผ์ด CPU์์ ์๋ก ์ผ๊ด์ฑ ์๊ฒ ํธํ๋๊ฒ ๋ง๋ค๊ธฐ ์ํ ๊ท์ฝ์ด๋ค. ์ด๊ฒ ๋ฌด์จ ๋ง์ผ๊น? CPU ์ ์ฅ์์ ์๊ฐํ๋ฉด ์ฝ๋ค. CPU๋ "์ด๋ค ํจ์๋ฅผ ์ฒ๋ฆฌํ ๋ค์ ๊ทธ ํจ์์ ๋ฐํ ๊ฐ์ ์ด๋ค ๋ ์ง์คํฐ์ ์ ์ฅํด์ผ(must) ํ๋๊ฐ?" ๋ฐ์์ ๊ท์น์ด ์๋ค. ํน์ ๋ ์ง์คํฐ์ ์ด๋ค ๊ฐ์ ์ ์ฅํ๋ ๋ช ๋ น์ด(⊂ ISA)๋ ์๊ฒ ์ง๋ง, ๊ทธ๊ฑด ๋น์(must)์๋ ์๋ฌด๋ฐ ์ฐ๊ด์ด ์๋ค. ์ฆ CPU๋ผ๋ '๊ณต์ฉ ๊ณต๊ฐ'์์ ์ง์ผ์ผ ํ ๊ท์น์ ์ ์ด ๋์ ๊ฒ ABI๋ค. ๋ฐ์ด๋๋ฆฌ ์ฝ๋ A์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋ B์ ABI๊ฐ ์๋ก ๋ค๋ฅด๋ฉด ๋ ๋ค CPU๋ฅผ ์ ๋ฉ๋๋ก(?) ์ฌ์ฉํ ํ ๊ณ , ๋น์ฐํ A์ B๋ ์ํธ์์ฉ(ํธํ)์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
ISA์ ์ข ์๋ ABI
์๋ฅผ ๋ค์ด ์ด๋ค ABI์์๋ ์ฝ๋ ์์ ํํ๋ ํจ์ ํธ์ถ ์ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ RDI ๋ ์ง์คํฐ, ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ฅผ RSI ๋ ์ง์คํฐ์ ๋ฃ๊ณ , ๋๋จธ์ง ์ธ์๋ค์ CPU ๋ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ์์ญ์ ์์๋๋ก ๋ฐฐ์น, ํจ์์ ๋ฐํ๊ฐ์ RAX ๋ ์ง์คํฐ์ ๋ฐ๋๋ค๋ ๋ด๋ถ ๊ท์น์ ์ง๋๋ค.
์ฌ๊ธฐ์ ์ด๋ค ABI๋ ํน์ ISA์ ์ข ์๋๋ค๋ ์ฌ์ค์ ์ ์ ์๋ค. ISA ๋ณ๋ก ๋ ์ง์คํฐ ์ด๋ฆ๊ณผ ๊ฐ์, ๋ ์ง์คํฐ ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ฅํ๋ ๋ช ๋ น, ๊ณ์ฐ ๋ช ๋ น ๋ฑ์ด ์ ๋ถ ๋ค๋ฅผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์ ๋งํด, ABI๊ฐ ๋ณด์ ํ๋ ์ฌ๋ฌ ์ธ๋ถ ๊ท์น์ ํน์ ISA์ ๊ตฌ์กฐ์ ๋ช ๋ น์ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
ABI์ ์ข ์๋ ์ปดํ์ผ
๊ทธ๋ ๋ค๋ฉด '์ปดํ์ผ' ๋ํ 'ABI'์ ์ข ์์ ์ด๋ผ๋ ์ด์ผ๊ธฐ๊ฐ ๋๋ค. ์ปดํ์ผ์ ๊ถ๊ทน(์ต์ข )์ ์ผ๋ก CPU๊ฐ ์คํํ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ ๋ชฉ์ ์ ํ์์ด๋ฏ๋ก, ๊ทธ ์ต์ข ์ฐ์ถ๋ฌผ(๊ธฐ๊ณ์ด)์ด CPU์์ ์ ๋์๊ฐ์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ (ํด๋น CPU์ ISA๋ฅผ ์ง์ํ๋) ABI์ ๋ง์ถฐ ์ปดํ์ผ๋์ด์ผ ๊ธฐ๊ณ์ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋ ๊ฒ์ด๋ค.
์ค์ ๋ก๋ ๊ทธ๋ ๋ค. ์๋๋ example.c๋ฅผ example.s๋ก ์ปดํ์ผํ๋ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ค.
gcc -S example.c -o example.s -m32
์ด ๋ช ๋ น์ด๋, ๋ช ๋ น์ด๊ฐ ์คํ๋๋ ํ๋ซํผ(Window, Linux, ...)์ ABI๋ฅผ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ๋ค. ํ์ง๋ง,
gcc -S example.c -o example.s -m32 -mfastcall
์ฒ๋ผ ABI ์ต์ ์ ๋ช ์ํ๋ฉด ํด๋น ABI์ ๋ง์ถฐ ์ปดํ์ผ๋๋ค. ๋น์ฐํ๊ฒ ์ง๋ง, ์ฒซ ๋ฒ์งธ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ก ์์ฑ๋ example.s์ ๋ ๋ฒ์งธ ํฐ๋ฏธ๋ ๋ช ๋ น์ด๋ก ์์ฑ๋ example.s๋ ์๋ก ๋ค๋ฅธ ํ์ผ์ผ ๊ฒ์ด๋ค.
#3 ๋ฐ์ดํธ ์ด์ผ๊ธฐ
#3-1 ๋ฐ์ดํธ์ ํ์
๊ธฐ์
1956๋ IBM์์ ๊ทผ๋ฌดํ๋ Werner Buchholz๋ '์ปดํจํฐ๋ง๋ค ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋นํธ ๋ฌถ์'์ ์๋ฏธํ๋ 'byte'๋ผ๋ ์ฉ์ด๋ฅผ ์ฐฝ์ํ๋ค. ์ด๋ byte์ ๋ชฉ์ ์, ๋ฌธ์(character)๋ฅผ ๋ด๋ ์ต์ ์ฃผ์ ๋จ์๋ฅผ ํํํ๊ธฐ ์ํจ์ด์๋ค.
๊ตฌ์ฒด ๊ฐ๋ ์ผ๋ก์ ๋ณ๋ชจ
๊ฐ๋ น byte๊ฐ n๊ฐ์ ๋นํธ๋ก ์ด๋ฃจ์ด์ง๋ค๋ฉด 1byte๋ ์ด 2n ๊ฐ์ ๊ฐ์ง์๋ฅผ ์ง๋๋ ๋ฌธ์๋ค์ ํ๊ธฐํ ์ ์๋ค. 1byte๋ 1964๋ ์ ๊น์ง 6bit, 7bit, 12bit ๋ฑ ๊ฐ์๊ฐ์์ด์๋ค. 1964๋ ์ถ์๋ IBM 360์ด ๋์ฑ ๊ณต์ ๊ฑฐ๋๋ฉด์, IBM 360๊ฐ ์ฌ์ฉํ๋ 1byte = 8bit๊ฐ ๋๋ฆฌ ํผ์ง๊ฒ ๋์๋ค. ๊ทธ ๋๋ฌธ์ 1byte๋ 8bit๋ฅผ ์๋ฏธํ๋ ๋๋ช ์ฌ๋ก ๊ตณ์ด์ก๋ค. byte = "๋นํธ ๋ฌถ์"์ด๋ผ๋ ์ถ์ ๊ฐ๋ ์ด, "8๋นํธ ๋ฌถ์"์ด๋ผ๋ ๊ตฌ์ฒด ๊ฐ๋ ์ผ๋ก ๋ณ๋ชจํ ๊ฒ์ด๋ค.
์ฐ์ ์ ๋ผ์น ์ํฅ
์ด์ ๋ง์ถฐ ๋ฉ๋ชจ๋ฆฌ ์ฐ์ ๋ ๋ณํ๋ค. ๋ฐ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ์ต์ ์ฃผ์ ๋จ์๋ฅผ 8bit (1byte)๋ก ๋ ๊ฒ์ด๋ค. (IBM ์ฒด๊ณ์์) ๋ฌธ์ ํ๋๊ฐ 1byte์ด๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ํ๋์ ๋ฌธ์ ํ๋๊ฐ ๊ผญ ๋ง๊ฒ ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ byte๋ ๋ฒ์ฉ ๋ฐ์ดํฐ ํํ ๋จ์๋ก (์ฌ์ค์) ๊ณ ์ ๋์๋ค. ๋ ๋์๊ฐ byte๋ผ๋ 'ํํ ๋จ์์ ํ์ค'์, (๋ฉ๋ชจ๋ฆฌ·ํ์ผ·๋คํธ์ํฌ·๋ช ๋ น์ด ์ธ์ฝ๋ฉ ๋ฑ์) '์ต์ ๊ตํ ๋จ์์ ํ์ค'์ผ๋ก๋ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด์ก๋ค. ์ด ์์ ๋ถํฐ "ํ์ผ์ ์ฝ๋๋ค"๋ผ๋ ๊ฒ 'byte ์คํธ๋ฆผ'(byte๋ค์ ์ฐ์๋ ๋์ด)์ ๋ฐ๋๋ค๋ ๋ง๊ณผ ๋์์ด๊ฐ ๋์๋ค.
#3-2 VM (Virtual Machine, ๊ฐ์ ๋จธ์ )
VM์ 1970๋ ๋์ ๋ฑ์ฅํ๋ค. ๋น์์ ์ํํธ์จ์ด๋ค์ ํน์ ๊ธฐ๊ณ์ ๊ฐํ๊ฒ ์ข ์๋์๋ค. ํ๋์จ์ด ์ฌ์(ISA, ABI ๋ฑ) ๋ฑ์ด ๋ฌ๋๊ธฐ ๋๋ฌธ์, ๊ฐ์ ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ๋ง๋ค ๋ค์ ์ปดํ์ผํด์ผ ํ๋ค. ๋๋ฌธ์ ์ํํธ์จ์ด์ ์ด์์ฑ๊ณผ ํธํ์ฑ์ ์ฆ๋์์ผ์ผ ํ๋ค๋ ํ์๊ฐ ์๊ฒผ๊ณ , ์ด๋ฅผ ์ถฉ์กฑํ๊ธฐ ์ํด VM์ด ๋ฑ์ฅํ๋ค.
VM์ด๋ ๋ฌผ๋ฆฌ์ ์ธ ํ๋์จ์ด๊ฐ ์๋, ์ํํธ์จ์ด๋ก ๊ตฌํ๋ '์ถ์์ ์ธ ์คํ ํ๊ฒฝ'์ ์๋ฏธํ๋ค. ๋จ์ํํด์ ์ค๋ช ํ์๋ฉด VM์ ์ผ์ข ์ 'CPU ๋ํ'(์ถ์ํ๋ CPU)์ด๋ค. ๊ฐ์ ISA, ๊ฐ์ ๋ ์ง์คํฐ ๋ฑ์ ๋ณด์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํน์ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด์ ์์ธ ์ฌ์์ ์ง์ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ํ๋ก๊ทธ๋จ์ ์๋์ ์ง์คํ ์ ์๋ค. ์ฆ, VM์ด ์ ๊ณตํ๋ ์ถ์ํ๋ ํ๋์จ์ด ํ๊ฒฝ๋ง ์ดํดํ๋ฉด ๋๋ค.
#3-3 ๋ฐ์ดํธ ์ฝ๋ (Byte Code)
๊ฐ์ ๋จธ์ ์ ์ ๋ ฅํ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์ด๊ธฐ์๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ 'intermediate code'๋ผ๊ณ ๋ถ๋ ๋ค. CPU์ ISA๋ฅผ ๋ฐ๋ฅด์ง ์๋ ์ฝ๋์ง๋ง, VM์ด ์์์ ISA๋ก ๋ณํํ ์ฝ๋์ด๋ฏ๋ก ์ค๊ฐ ๋งค๊ฐ(intermediate) ์ญํ ์ ์ฝ๋๋ผ๋ ๋ป์ผ๋ก ๋ง์ด๋ค. ๊ทธ๋ฌ๋ค๊ฐ ์ ์ฐจ byte code๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ ธ๋๋ฐ, VM์ด intermediate code๋ฅผ byte ๋จ์๋ก 'ํด์'(≠ ์ฝ์)ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ VM์ ๋ฃ์ code์ด๊ธฐ์ byte code์ธ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ๋งํ๋ 'ํด์'์, ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ์ฝ์ด ๋ค์ด๋ ๊ฑธ ์๋ฏธํ๋ ๊ฒ ์๋๋ค. byte(= 8bit) ๋จ์๋ก ์ฝ์ด ๋ค์ด๋ ๊ฒ์ VM์ด ๋ฑ์ฅํ ์์ ์์๋ ์ด๋ฏธ ์ ๊ณ์ ํ์ค์ด์๊ธฐ์, ๋จ์ํ "byte ๋จ์๋ก ์ฝ๋๋ค"๋ผ๋ ์ด์ ๋ง์ผ๋ก byte code๋ผ ๋ช ๋ช ๋์๋ค๊ณ ๋ณด๊ธฐ๋ ์ด์ํ๋ค (์ด๋ฐ ์์ด๋ฉด ์์ค ์ฝ๋๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ผ๊ณ ๋ถ๋ฌ๋ ๋์ด๋ฒ๋ฆฐ๋ค!). ํด์์ ์ด๋ฏธ ์ฝ์ด ๋ค์ธ ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๊ท์น์ ๋ฌธ์ ๋ค.
๊ทธ๋ ๋ค๋ฉด VM์ ์ byte code ๋จ์๋ก ํด์ํ๋๊ฐ? ์ ๋ฌธ๋จ์์ 'ํด์'์ ๊ฐ์กฐํ๊ธฐ ์ํด์ '์ฝ์'์ ๋ฐฐ์ ํ๋ค๋ฉด, ์ฌ๊ธฐ์๋ ์ ์ ์ผ๋ก '์ฝ์'์ ๊ฐ์กฐํด์ผํ๋ค. ์ฝ๋ ๋จ์์ ํด์ ๋จ์๋ฅผ ์ผ์น์ํค๋ฉด ๋ณ๋์ ์กฐํฉใ์ ๋ ฌ ๊ณผ์ ์์ด ์ ๋ ฅ์ ๊ณง๋ฐ๋ก ๋ช ๋ น์ด๋ก์ ํด์ํ ์ ์๋ค. ์ด๋ VM์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค. '์ฝ์' ๋จ์ → 'ํด์' ๋จ์ ๋ณํ ๊ณ์ธต์ด ์๋ ๋จ์ํ ๊ตฌ์กฐ์์ ์ค๋ ๋์ ์๋ ๋๋ถ์ด๋ค.
'๊นจ์ ๊ฐ๋ ๐ > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Gradle] Type-safe Project Accessors ๋์ ๋ฐฐ๊ฒฝ ๋ฐ ์ฌ์ฉ๋ฒ (0) | 2025.12.30 |
|---|---|
| SCSS์ ์๋ํ (0) | 2025.12.23 |
| ์์กด์ฑ ๊ทธ๋ํ(Dependency graph), ๋ฐ์ดํฐ ํ๋ฆ๋(Data-flow diagram) (0) | 2025.12.11 |
| SOLID ์์น (0) | 2025.12.01 |
| Gradle, ๋ฒ์ ์นดํ๋ก๊ทธ (0) | 2025.11.26 |