๐ค Computer System
์์คํ ์ด๋ ํ๋์ ๊ณตํต์ ์ธ ๋ชฉ์ ์ ์ํํ๊ธฐ ์ํด ์กฐ์งํ๋ ์์๋ค์ ์งํฉ์ฒด๋ผ๊ณ ์ ์ํ ์ ์์ต๋๋ค.
์ปดํจํฐ ์์คํ ์ ์กฐ์ง์ด๋ ๊ณํ ๊ทธ ์์ฒด๋ก ๋ฌ์ฌ๋๊ธฐ๋ ํ๊ณ . ์ปดํจํฐ ์์คํ ๋ด์ ์ผ๋ถ๋ถ์ผ๋ก ๋ฌ์ฌ๋๊ธฐ๋ ํฉ๋๋ค.
์ปดํจํฐ ์์คํ ์ ์ด๋ ํ ์์ ์ ์ ์ํํ๊ธฐ ์ํด ์ฃผ์ ๊น๊ฒ ์ ์ ๋ ๋ถ์ํ๋ค์ธ ํ๋์จ์ด์, ๊ทธ ์ปดํจํฐ์์ ์๋ํ๋ ์ํํธ์จ์ด ๋๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ํํธ์จ์ด์์ ๊ฐ์ฅ ์ฃผ๋ ๊ตฌ์ฑ์์๋ ์ด์์ฒด๊ณ์ด๋ฉฐ, ์ปดํจํฐ์์ ์คํ๋๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์๊ฒ ์ฌ๋ฌ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค
์ปดํจํฐ ์์คํ ์ค ์ปดํ์ผ ์์คํ ์ ์ค์ฌ์ ์ผ๋ก ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.
๐ ์ปดํ์ผ ์์คํ
์ปดํ์ผ ๊ณผ์ ์ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ปดํ์ผ ๊ณผ์ ์ ์ดํดํจ์ผ๋ก์จ ํ๋ก๊ทธ๋จ์ด ์ปดํจํฐ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง ์ดํดํ ์ ์์ต๋๋ค.
๋ํ ๋๊ท๋ชจ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ ๊ณผ์ ์ ์ดํดํ ์ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ๊ฐ์ , ๋งํฌ์ ๋ฐ์ํ๋ ์๋ฌ์ ๋ํ ์ดํด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ปดํ์ผ์ ์ธ๊ฐ์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋(C, C++, Java ๋ฑ)๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด(๊ธฐ๊ณ์ด)๋ก ๋ฒ์ญํ๋ ์์ ์ ๋งํฉ๋๋ค.
์ปดํจํฐ๋ 0, 1๋ก ์ด๋ฃจ์ด์ง ๊ธฐ๊ณ์ด๋ง ์ดํดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๊ฒ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ณผ์ ์ด ํ์ํฉ๋๋ค.
hello.c๋ผ๋ c์ธ์ด๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ ํ๋ ๊ณผ์ ์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ปดํ์ผ ๊ณผ์ ์ ์กฐ๊ธ ๋ ์ธ๋ถ์ ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
์ ์ฒ๋ฆฌ(Pre-processing) ๊ณผ์
์ ์ฒ๋ฆฌ๊ณผ์ ์ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ํตํด ์์ค์ฝ๋ ํ์ผ์ ์ ์ฒ๋ฆฌ๋ ์์ค ์ฝ๋ ํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค.
๋ํ์ ์ผ๋ก ์ฃผ์์ ๊ฑฐ, ํค๋ ํ์ผ ์ฝ์ , ๋งคํฌ๋ก ์นํ ๋ฐ ์ ์ฉ๊ณผ ๊ฐ์ ์์ ์ ์ํํฉ๋๋ค.
์ปดํ์ผ(Compilation) ๊ณผ์
์ปดํ์ผ ๊ณผ์ ์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ์ ์ฒ๋ฆฌ๋ ์์ค์ฝ๋ ํ์ผ์ ์ด์ ๋ธ๋ฆฌ์ด ํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค.
์ด ๊ณผ์ ์์ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผํ๋ฉด ์๊ฐํ๋ ์ธ์ด์ ๋ฌธ๋ฒ ๊ฒ์ฌ๊ฐ ์ด๋ค์ง๋๋ค.
๋ํ Staticํ ์์ญ๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํํฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ(Assembly) ๊ณผ์
์ด์ ๋ธ๋ฆฌ ๊ณผ์ ์ ์ด์ ๋ธ๋ฌ๋ฅผ ํตํด ์ด์ ๋ธ๋ฆฌ์ด ํ์ผ์ ์ค๋ธ์ ํธ ํ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค.
์ด๋ ์ค๋ธ์ ํธ ํ์ผ์ ๋์ด์ ์ฌ๋์ด ์์๋ณผ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋ ์ฝ๋๋ฅผ ๋งํฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด
๊ธฐ๊ณ์ด๋ ์ค์ ๋ก ์ปดํจํฐ์ CPU๊ฐ ์ฝ์ด์ ์คํํ ์ ์๋ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ช ๋ น์ด์ ์กฐํฉ์ ๋๋ค.
์ด๋ฌํ ๊ฐ ๋ช ๋ น์ด์ ๋ํด ์ฌ๋์ด ์์๋ณด๊ธฐ ์ฌ์ด ๋๋ชจ๋ ๊ธฐํธ(mnemonic symbol)๋ฅผ ์ ํด ์ฌ๋์ด ์ข ๋ ์ฝ๊ฒ ์ปดํจํฐ์ ํ๋์ ์ ์ดํ ์ ์๋๋ก ํ ๊ฒ์ด ์ด์ ๋ธ๋ฆฌ ์ธ์ด์ ๋๋ค.
์๋ฅผ ๋ค์ด,
10110000 01100001
๋ x86 ๊ณ์ด CPU์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๊ณ , ์ด๊ฒ์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ์ฎ๊ฒจ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
mov al, 061h
๋ช ๋ น์ด mov๋ ์์ด move๋ฅผ ๋ณํํ ๋๋ชจ๋์ด๋ฉฐ, al์ CPU์์ ์๋ ๋ณ์๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ์ ํ๋์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , 061h๋ 16์ง์ 61 (์ฆ ์ญ์ง์ 97, ์ด์ง์ 01100001)์ ๋๋ค.
์ด ํ ์ค์ ๋ป์ 16์ง์ 61์ al๋ ์ง์คํฐ์ ๋ฃ์ผ๋ผ๋ ๋ป์ด๋ฉฐ, 1๊ณผ 0์ ๋ฐ๋ณต์ธ ๊ธฐ๊ณ์ด๋ณด๋ค ์ฌ๋์ด ํผ๋์์ด ์ดํดํ๊ธฐ ํ๊ฒฐ ์ฝ์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด๋ ์ด๋ฌํ ๋ฌธ์ฅ๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด์ ๋ธ๋ฌ
์ด์ ๋ธ๋ฌ(assembler)๋ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๊ธฐ๊ณ์ด ํํ์ ์ค๋ธ์ ํธ ์ฝ๋๋ก ํด์ํด ์ฃผ๋ ์ปดํจํฐ ์ธ์ด ๋ฒ์ญ ํ๋ก๊ทธ๋จ์ ๋งํฉ๋๋ค.
์ด์ ๋ธ๋ฌ๋ ๊ธฐ๋ณธ ์ปดํจํฐ ๋ช ๋ น์ด๋ค์, ์ปดํจํฐ ํ๋ก์ธ์๊ฐ ๊ธฐ๋ณธ ์ฐ์ฐ์ ์ํํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ๋นํธ ํจํด์ผ๋ก ๋ณํ์ํค๋ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๋งํน(Linking) ๊ณผ์
๋งํน๊ณผ์ ์ ๋ง์ปค๋ฅผ ํตํด ์ค๋ธ์ ํธ ํ์ผ์ ๋ฌถ์ด ์คํ ํ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ๋๋ค.
์ด ๊ณผ์ ์์ ์ค๋ธ์ ํธ ํ์ผ๋ค๊ณผ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ๋งํฌํ์ฌ ํ๋์ ์คํํ์ผ์ ๋ง๋ญ๋๋ค.
์์ ๊ฐ์ด ์ปดํ์ผ๋ฌ์ ๋ท๋ฉด์๋ ๋ณต์กํ ์ผ์ด ์ผ์ด๋๊ณ ์๋ค๋ ๊ฒ์ด ์ค์ํ๊ฒ ์ง๊ณ ๋์ด๊ฐ์ผํ ์ ์ ๋๋ค.
๋ ์์ธํ ์ฌํญ์ ์๊ณ ์ถ๋ค๋ฉด Reference๋ฅผ ํตํด ์์ ์์ต๋๋ค.
๐ Reference
http://www.terms.co.kr/system.htm
https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4
https://bradbury.tistory.com/226
'Computer Science > System Programing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] BombLab ์ค์ต ๋ฉ๋ชจ์ฅ (2) | 2022.10.19 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ค์์ ํํ ๋ฐ ์ฒ๋ฆฌ (0) | 2022.09.26 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ ์์ ํํ ๋ฐฉ๋ฒ (0) | 2022.09.24 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ ์์ ํํ (0) | 2022.09.24 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ปดํจํฐ ์์คํ (์ปดํจํฐ ๊ตฌ์กฐ) (0) | 2022.09.20 |