본문 바로가기
  • 1+1=3
개발인강

[운영체제] 컴파일과 프로세스

by 여스 2022. 1. 12.
반응형

본 강의: 그림으로 쉽게 배우는 운영체제: 컴파일과 프로세스

 

컴파일 언어

개발자가 코드를 작성하고 컴파일이란 과정을 거쳐 0과 1로 된 기계여러 실행파일을 만듦(exe). 컴파일과정에서 개발자가 문법오류를 일으켰는지 검사하고  cpu에서 처리가능한 기계어로 실행파일을 만들어놓기 때문에 속도가 빠름(c, c++, c#).

인터프리터 언어

개발자가 작성한 코드를 미리 기계여로 만들지 않음. 대신 실행 시 코드를 한줄씩 해석해 실행하는 언어임. 미리 검사를 하지 않기에 실행 시 오류날 수 있고 속도도 컴파일언어에 비해 느림(js, python, ruby).

 

프로세스

- 코드영역:

말 그대로 실행해야 할 코드가 들어가는 영역.

예) ret = num1 + num2 

 

- 데이터영역:

전역변수나 배열이 들어가는 영역.예) int global_A = 1, int arr[10];

 

스택과 힙은 프로세스가 실행될 때 할당되는 메모리임- 스택: 지역변수와 함수관련 값(매개변수, 함수의 리턴 주소)

 

-힙: 실행중에 메모리 공간을 할당할 수 있는 유동적인 공간

 

 

컴파일된 파일 -> 프로레스

다음처럼 개발자가 c언어로 코드를 작성했다 치자. 

컴파일 하면 어떻게 프로세스가 되는걸까?

- 전처리기:

test.c파일을 훑어보고 전처리구문을 처리해줌

전처리구문은 #으로 시작함. 이 파일에서는 #include와 #define이 있음.

또한 모든 주석은 제거됨

 

-컴파일러:

c언어로 된 test.i파일을 어셈블리어로 바꿔줌.

 

- 어셈블러:

어셈블리어를 기계어로 바꿔줌(오브젝트파일). 0과 1로 구성된 파일임.

오브젝트파일에는 코드영역과 데이터영역이 나뉘어짐. 

 

- 링커:

모든 오브젝트파일을 하나의 코드영역과 하나의 데이터영역으로 묶음. 이걸 거치면 .exe파일이 생성됨.

 

 

사용자가 이 .exe파일을 실행시키면 운영체제가 얘를 프로세스로 만들어준다.

운영체제는 exe파일에 있는 코드영역과 데이터영역을 가져와 프로세스의 코드영역과 데이터영역에 넣어주고 빈상태의 스택과 힙을 할당함.

그리고 PCB를 만들어 관리가 가능하도록 만들고, 프로그램 카운터(=다음 실행할 명령어의 주소)를 생성한 프로세스의 코드영역의 첫번째 주소로 설정함. 이러면 운영체제의 cpu스케쥴링에 따라서 프로세스가 실행되다가 작업을 마침.

반응형

댓글