본 강의: 그림으로 쉽게 배우는 운영체제: 컴파일과 프로세스
컴파일 언어
개발자가 코드를 작성하고 컴파일이란 과정을 거쳐 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스케쥴링에 따라서 프로세스가 실행되다가 작업을 마침.
'개발인강' 카테고리의 다른 글
[운영체제] 메모리-종류(레지스터,캐시 등), 주소(물리주소, 상대주소), 할당방식(내부단편화, 외부단편화) (0) | 2022.01.12 |
---|---|
[운영체제]데드락(교착상태) (0) | 2022.01.09 |
[운영체제]프로세스 동기화 (0) | 2022.01.09 |
[운영체제] cpu 스케쥴링 (0) | 2022.01.01 |
[운영체제] 프로세스와 쓰레드 (0) | 2021.12.31 |
댓글