CS/운영체제
컴파일과 프로세스
나디아 Nadia
2025. 5. 25. 19:58
프로그래밍 언어
프로그래밍 언어는 코드를 어떻게 실행하느냐에 따라 컴파일 언어와 인터프리터 언어로 나뉨
컴파일 언어
: 개발자가 코드를 작성하고 컴파일 과정을 거쳐 0과 1로 된 기계어로 실행 파일을 만듦
- 컴파일 과정에서 코드의 문법 검사를 시행하고, CPU에서 처리 가능한 기계어로 실행 파일을 만들어놓기 때문에 실행 속도가 빠름
- 대표적인 컴파일 언어: C, C++, Go 등
인터프리터 언어
: 개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 한 줄씩 해석해서 실행하는 언어
- 미리 컴파일하지 않기 때문에 실행 도중에 오류가 발생할 수 있고, 실행 속도도 컴파일 언어에 비해 느림
- 대표적인 인터프리터 언어: Python, JavaScript 등
컴파일 과정
개발자가 작성한 코드가 실행 파일로 만들어지는 과정은 다음과 같음
- 코드 작성 ⇒ test.c
- 개발자가 코드를 작성하고 test.c라는 파일로 저장함
- 전처리 단계 (Preprocessing) ⇒ test.i
- 전처리 단계: 전처리기는 text.c 파일을 훑어보고 전처리 지시문을 처리함
- #include, #define 같은 전처리 지시문을 처리함
- 컴파일 단계 (Compilation) ⇒ test.s
- 코드 파일을 기계어에 가까운 어셈블리어로 변환함
- 어셈블 단계 (Assembling) ⇒ test.o
- 어셈블리어를 어셈블러를 통해 오브젝트 파일(.obj 또는 .o)로 변환함
- 오브젝트 파일: 코드 영역과 데이터 영역으로 나뉨
- 실행되기 위해서는 링커를 거쳐줘야 함
- 링크 단계 (Linking) ⇒ test.exe
- 여러 개의 오브젝트 파일을 하나로 묶어 실행 파일로 만듦
- 실제로 실행될 주소를 맵핑해줌
- 실행 파일 생성
- 최종적으로 .exe 같은 실행 파일이 생성됨
파일 실행 과정
사용자가 실행 파일을 실행하면 운영체제는 다음과 같은 과정을 거쳐 프로세스를 만듦
- 사용자가 프로그램을 실행하면 운영체제가 새로운 프로세스를 만듦
- 운영체제는 실행 파일(.exe)에 있는 코드 영역과 데이터 영역을 복사해서 프로세스의 메모리 공간에 넣음
- 빈 상태의 스택 영역과 힙 영역도 함께 할당함
- 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성함
- 프로그램 카운터(PC) 에는 이 프로세스가 처음 실행할 코드의 주소를 설정함
- 이후 운영체제의 CPU 스케줄링에 따라 이 프로세스가 CPU를 할당받아 실행되다가 작업을 마침