프로그램 실행 과정(소스코드부터 CPU에서 코드 실행하기 까지)

소스코드에서 실행파일로 변환 과정


- 소스파일은 컴파일러를 통해 오브젝트 코드(기계어) 파일로 바뀐다.

- 오브젝트 파일은 몇 개의 영역으로 나뉜다. .text 영역(section) 에는 오브젝트 코드가 들어있고, .rdata 영역은 read-only 데이터, .data 영역은 mutable 데이터 정보가 들어있다.

- 링커는 실행하기 위해 필요한 모든 오브젝트 파일을 종합해 실행파일 (그림에서 a.out, 윈도우에선 exe) 로 만든다.

- 링커는 각 unknown심볼들에 대한 정보(참조 주소 등)를 정리한다.

 그림 출처 : Link-Time Binary Rewriting Techniques for Program Compaction by BJORN DE SUTTER, BRUNO DE BUS, and KOEN DE BOSSCHERE / Ghent University

실행파일 적재 후 명령어 실행 과정


실행파일은 보조기억장치(DISK) 에서 주기억장치 (RAM)로 적재해야 실행할 수 있다.
- 적재는 로더(loader)가 수행한다.
- 메모리 적재시 여유공간 확인 후 페이징 기법 등이 사용될 수 있다.
- 메모리에 올라간 실행파일은 기계 명령어를 CPU로 보내고 한 줄씩 수행한다.

그림 출처 : Generating Programs and Linking by Rick Han / University of Colorado

댓글