전처리(preprocess)단계
- 전처리기(cpp)는 소스 C 프로그램의 #지시어(directive)에 따라 처리
- hello.c의 #include<stdio.h> 지시어는 전처리기에게 시스템 헤더파일 stdio.h의 삽입을 지시
- 삽입된 처리 결과는 hello.i로 생성
컴파일(compile) 단계
- 컴파일러(cc1)는 hello.i를 어셈블리어 프로그램으로 변환하여 hello.s 를 생성
- 아래에서 각 줄이 한 개의 저수준 어셈블리 명령어를 텍스트 형태로 표시
어셈블리(assembly) 단계
- 어셈블러(as)가 어셈블리 명령어를 기계어 명령어(코드)로 변환
- 메모리에 재배치 가능한 프로그램(relocatable program) 형태의 hello.o 의 목적 파일 생성
- main 함수의 기게어 명령어를 인코딩한 바이너리 파일(binary file)
- 텍스트 편집기로는 읽을 수 없고 리눅스의 objdump 명령으로 역 어셈블(disassemble. -d)하여 표시
링크(Link) 단계
- 링커 프로그램이 라이브러리 등을 결합하여 메모리에 적재되어 실행되는 실행 가능한 목적파일(실행 파일)을 생성
- 표준 C 라이브러리의 printf 함수의 목적파일 printf.o와 hello.o를 통합한 실행 파일 hello를 생성
- 이 실행 파일은 메모리에 적재(load)되어 시스템에 의해 실행
'Computer Structure > 컴퓨터 시스템' 카테고리의 다른 글
컴퓨터 시스템 하드웨어 구성(p.26쪽 그림과 함께 참고) (0) | 2019.09.26 |
---|---|
컴파일 시스템 동작 이해 (0) | 2019.09.26 |
기계어 변환 (0) | 2019.09.25 |
소스 프로그램 (0) | 2019.09.25 |
컴퓨터 시스템의 구성 (0) | 2019.09.25 |