<Compilation System>

Pre-processor(전처리기)

전처리기는 소스코드를 컴파일 할때 가장 먼저 실행되는 프로그램으로 소스파일의 지시자를 처리한다.

지시자는 #으로 시작해서 줄바꿈으로 끝나는 코드이다. ex) #inlcude<stdio.h>, #define MAX 10

소스코드 파일의 전처리가 끝나면 전처리기는 .i 확장자로 끝나는 전처리가 완료된 파일을 생성한다. 

 

Compiler(컴파일러)

컴파일러는 전처리가 완료된 .i파일을 어셈블리 프로그램으로 변환한다. 

컴파일러는 C, java, python 과 같은 고급언어에서 저급언어 assembly어 변환하는데 언어 문법에 맞지않거나 표준과 달라 발생하는 오류들을 발견하여 컴파일 에러를 발생시킨다. 컴파일이 완료되면 .s 확장자로 끝나는 어셈블리 프로그램을 생성한다. 

 

Assembler(어셈블러)

어셈블러는 어셈블리 프로그램을 기계어로 바꿔 .o 확장자로 끝나는 재배치가능한 객체 프로그램(relocatable object program)을 생성한다. 

 

Linker(링커)

링커는 재배치 가능한 프로그램들을 하나로 합쳐 실행가능한 프로그램을 만든다. 

hello.c 소스코드의 printf 와 같은 함수는 외부 라이브러리(stdio.h)의 printf.o 프로그램에 구현되어 있기 때문에 링크과정을 거쳐야 한다.

 

<로더의 역할>

Loader(로더)

컴파일러를 통해 생성된 프로그램은 하드디스크와 같은 보조기억장치에 저장된다. 프로그램을 실행하기 위해서는 프로그램을 주기억장치인 메인 메모리에 적재해야 하는데 이때 사용되는 시스템 프로그램이 로더이다.

로더는 프로그램의 주기억장치 할당(Allocation) > 연결(Linking) >재배치(Relocation) >적재(Load) 순으로 실행되며 앞서 언급한 링커는 로더의 한 종류이다.

+ Recent posts