블로그를 변경하였습니다.

해당 블로그는 더 이상 추가 포스팅 없을 예정입니다.

👉 새 블로그 방문하기


프로세스의 컴파일

2023. 10. 15. 00:36
728x90
반응형

프로세스 컴파일 과정

컴파일(Compile) 이란?

인간이 이해할 수 있는 언어로 작성된 "소스 코드"를 CPU가 이해할 수 있는 언어로 번역(변환)하는 작업을 의미한다.

(컴퓨터는 0, 1로 이루어진 기계어만 이해할 수 있기 때문)

 

과정

전처리 - 컴파일 과정 - 어셈블리 과정 - 링킹 과정 으로 4 가지 단계로 나누어진다.

 

 

전처리 (Pre-Processing) 과정

소스 코드 파일을 전처리된 소스 파일로 변환하는 과정

 

이 과정에서 아래 세 가지 작업 수행

 

1. 주석 제거

👉 소스 코드에서 주석을 전부 제거 (주석은 사람이 알아보기 위해 작성한 것이므로 컴퓨터한테는 필요없다.)

 

2. 헤더 파일 삽입

👉 헤더 파일을 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다.

헤더 파일에 선언된 함수 원형은 후에 링킹 과정을 통해 실제로 함수가 정의되어 있는 오브젝트 파일(컴파일된 소스 코드 파일)과 결합된다.

 

3. 매크로 치환 및 적용

 

컴파일(Complie) 과정

 

전처리된 소스 코드 파일을 어셈블리어 파일로 변환하는 과정

 

이 과정에서 언어의 문법 검사가 이루어진다. (오류 처리, 코드 최적화 작업)

Static한 영역 (Data, BSS 영역) 들의 메모리 할당을 수행

 

💡 BSS (Block Started By Symbol)
초기화되지 않은 전역 데이터를 위한 영역
정적으로 할당된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해 사용

 

어셈블리(Assembly) 과정

어셈블러(Assembler)를 통해 오브젝트 파일로 변환화는 과정

 

💡 오브젝트 파일 (오브젝트 코드)
더 이상 사람이 알아볼 수 없는 기계어로 변환된 파일

 

링킹 (Linking) 과정

링커(Linker)를 통해 오브젝트 파일(*.o)들을 묶어 실행 파일로 만드는 과정

 

오브젝트 파일들과 프로그램에서 사용하는 라이브러리 파일들을 링크하여 하나의 실행 파일을 만든다.

 

💡 라이브러리를 링크하는 방법
정적 링킹 (Static Linking)과 동적 링킹(Dynamic Linking) 으로 나뉜다.

 

 

728x90
반응형

'CS > OS' 카테고리의 다른 글

PCB (Process Control Block)  (0) 2023.10.15
프로세스(Process)와 스레드(Thread)  (0) 2023.10.15
[OS] CPU란?  (0) 2021.09.08
[OS] 프로세스와 쓰레드  (0) 2021.08.22
[OS] 메모리 구조(Memory Structure)  (2) 2021.08.21

BELATED ARTICLES

more