내용정리

[인프런] 그림으로 쉽게 배우는 운영체제_섹션 05. 쉬어가기

suuuullloc 2023. 1. 19. 04:36

컴파일과 프로세스

 

컴파일 언어

- 개발자가 코드를 작성하고 컴파일이라는 과정을 거쳐서 0과 1로 된 기계어로 실행파일을 만든다.

- 컴파일 과정에서 개발자가 문법 오류를 일으켰는지 검사를 하고 CPU에서 처리 가능한 기계어로 실행파일을 만들어놓기 때문에 속도가 빠르다.

ex) C, C++, C#

 

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

- 미리 검사를 하지 않기 때문에 실행할 때 오류가 날 수도 있고 속도도 컴파일 언어와 비교하면 느리다.

ex) Javascript, Python, Ruby

 

프로세스의 메모리 구조 복습

 

컴파일 과정

1. test.c : 개발자가 코드를 작성하고 test.c라는 파일로 저장

2. 전처리기 : test.c 파일을 훑어보고 전처리 구문을 처리

- 전처리 구문은 #으로 시작

3. 컴파일러 : C언어로 작성된 이 파일을 기계어에 가까운 어셈블리어로 바꾼다.

4. 어셈블러 : 오브젝트 파일로 바꾼다.

- 오브젝트 파일 : 0과 1로 된 기계어로 구성

5. 링커 : 오브젝트 파일을 실행 파일로 바꾼다.

- 모든 오브젝트 파일을 하나의 코드영역과 데이터영역으로 묶는다.

- 실제로 실행될 주소를 매핑시켜준다.

6. .exe 파일 탄생!

 

1. 사용자가 이 파일을 실행시키면 운영체제가 프로세스를 만든다.

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

3. PCB를 만들어 관리가 가능하도록 만든다.

4. 프로그램 카운터 즉, 다음 실행할 명령어의 주소를 생성한 프로세스의 코드영역의 첫번째 주소로 설정한다.

5. 운영체제의 CPU 스케줄링에 따라서 프로세스가 실행되다가 작업을 마친다.


중간정리