이전 글
2024.11.20 - [컴퓨터과학/컴퓨터구조: CSAPP] - 1.1 정보는 비트와 컨텍스트로 이뤄진다
프로그램의 실행조건
컴퓨터가 소스 프로그램을 실행하기 위해서는 소스 프로그램이 실행가능한 목적프로그램으로 번역되어야한다.
소스 프로그램 -> 실행가능한 목적 프로그램
소스를 실행가능한 목적 프로그램으로 변환하는 과정을 컴파일 이라고한다. 컴파일은 4단계로 이뤄지며 컴파일을 하는 체계를 컴파일 시스템이라고 한다.
컴파일 시스템
- 전처리단계
- 컴파일 단계
- 어셈블리 단계
- 링킹 단계
전처리 단계
소스 프로그램 -> 헤더 파일이 포함 된 소스 프로그램
전처리 단계에서는 전처리기가 소스 프로그램을 읽고 헤더 파일에서 텍스트를 모두 가져와 본래 소스에 합친다. 따라서 헤더파일이 포함 된 소스 프로그램은 여전히 소스 언어로 작성되어 있고 대신에 헤더에 들어가 있는 내용까지 포함한다.
컴파일 단계
헤더 파일이 포함된 소스 프로그램 -> 어셈블리어 프로그램
컴파일 단계에서는 컴파일러가 헤더 파일이 포함 된 소스 프로그램을 어셈블리어로 번역한다. 어셈블리어는 기계어 명령어로서 텍스트의 형태다. (참고로 어셈블리어는 여러 고급 언어의 컴파일러가 출력하는 언어이기도 하기 때문에 어셈블리어로 작성 된 프로그램은 어디서든 쓸 수 있는 장점이 있다.)
어셈블리 단계
어셈블리어 프로그램 -> 재배치 가능한 목적 프로그램
어셈블리 단계에서는 어셈블러가 어셈블리어 프로그램을 재배치 가능한 목적 프로그램으로 번역한다. 재배치 가능한 목적 프로그램은 바이너리 파일이다. 0과 1의 형태로 육안으로는 해석이 불가능하지만 실제로는 기계어 인스트럭션의 모음이다.
링크 단계
재배칙 가능한 목적 프로그램 -> 실행 가능한 목적 프로그램
링크 단계에서 링커는 재배치 가능한 목적 프로그램들을 합쳐서 실행 가능한 목적 프로그램으로 만든다. 예를 들어 hello.c에서 출력함수가 존재하는데 이는 C언어의 표준 라이브러리에서 제공한다. C언어에서는 해당 라이브러리는 이미 목적 파일로 보관하고 있고 링크 단계에서 소스가 번역 된 재배치 가능한 목적 프로그램과 합친다. 그 결과, 드디어 컴퓨터가 실행할 수 있는 목적 프로그램이 만들어진다.
정리
- 소스가 실행되기 위해서는 실행 가능한 목적 프로그램으로 번역되어야 한다.
- 실행 가능한 목적 프로그램은 컴퓨터가 읽고 실행할 수 있다.
- 컴파일 시스템은 소스를 실행 가능한 목적 프로그램으로 번역한다.
- 컴파일 시스템은 전처리, 컴파일, 어셈블리, 그리고 링크 단계로 이뤄진다.