CS/운영체제

컴파일과 프로세스

나디아 Nadia 2025. 5. 25. 19:58

 

프로그래밍 언어

프로그래밍 언어는 코드를 어떻게 실행하느냐에 따라 컴파일 언어인터프리터 언어로 나뉨

 

 

 

컴파일 언어

: 개발자가 코드를 작성하고 컴파일 과정을 거쳐 0과 1로 된 기계어로 실행 파일을 만듦

  • 컴파일 과정에서 코드의 문법 검사를 시행하고, CPU에서 처리 가능한 기계어로 실행 파일을 만들어놓기 때문에 실행 속도가 빠름
  • 대표적인 컴파일 언어: C, C++, Go 등

 

 

 

인터프리터 언어

: 개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 한 줄씩 해석해서 실행하는 언어

  • 미리 컴파일하지 않기 때문에 실행 도중에 오류가 발생할 수 있고, 실행 속도도 컴파일 언어에 비해 느림
  • 대표적인 인터프리터 언어: Python, JavaScript 등

 

 

 

컴파일 과정

개발자가 작성한 코드가 실행 파일로 만들어지는 과정은 다음과 같음

  1. 코드 작성 ⇒ test.c
    • 개발자가 코드를 작성하고 test.c라는 파일로 저장함
  2. 전처리 단계 (Preprocessing) ⇒ test.i
    • 전처리 단계: 전처리기는 text.c 파일을 훑어보고 전처리 지시문을 처리함
    • #include, #define 같은 전처리 지시문을 처리함
  3. 컴파일 단계 (Compilation) ⇒ test.s
    • 코드 파일을 기계어에 가까운 어셈블리어로 변환함
  4. 어셈블 단계 (Assembling) ⇒ test.o
    • 어셈블리어를 어셈블러를 통해 오브젝트 파일(.obj 또는 .o)로 변환함
    • 오브젝트 파일: 코드 영역데이터 영역으로 나뉨
      • 실행되기 위해서는 링커를 거쳐줘야 함
  5. 링크 단계 (Linking) ⇒ test.exe
    • 여러 개의 오브젝트 파일을 하나로 묶어 실행 파일로 만듦
    • 실제로 실행될 주소를 맵핑해줌
  6. 실행 파일 생성
    • 최종적으로 .exe 같은 실행 파일이 생성됨

 

 

 

파일 실행 과정

사용자가 실행 파일을 실행하면 운영체제는 다음과 같은 과정을 거쳐 프로세스를 만듦

 

  • 사용자가 프로그램을 실행하면 운영체제가 새로운 프로세스를 만듦
  • 운영체제는 실행 파일(.exe)에 있는 코드 영역데이터 영역을 복사해서 프로세스의 메모리 공간에 넣음
  • 빈 상태의 스택 영역힙 영역도 함께 할당함
  • 프로세스를 관리하기 위해 PCB(Process Control Block)를 생성함
  • 프로그램 카운터(PC) 에는 이 프로세스가 처음 실행할 코드의 주소를 설정함
  • 이후 운영체제의 CPU 스케줄링에 따라 이 프로세스가 CPU를 할당받아 실행되다가 작업을 마침