middlefitting

프로그램은 어떻게 프로세스가 될까 본문

OS

프로그램은 어떻게 프로세스가 될까

middlefitting 2023. 10. 28. 16:55

프로그램과 프로세스


프로그램과 프로세스, 같은 말처럼 들릴 수 있지만 둘은 엄연히 차이가 있습니다.

 

둘의 차이는 그 둘의 정의를 통해 알 수 있습니다.

 

 

프로그램

디스크 상에 존재하는 실행을 위한 명령어와 정적 데이터의 묶음

 

프로세스

실행중인 프로그램

 

운영체제의 관점에서 프로그램은 생명이 없는 정적 데이터일 뿐입니다. 운영체제가 프로그램을 실행시키면서 생명을 불어넣게 되고 프로세스가 되는 것입니다.

 

 

 

프로그램의 실행


1. 메모리 탑재

그렇다면 어떻게 프로그램은 실행될 수 있는 걸까요.

 

쉽게 생각하면 하드웨어 공간을 통해 이를 알 수 있습니다.

 

프로그램이 존재하는 공간은 SSD, HDD와 같이 흔히 '하드' 라 불리는 영구기억장치에 존재합니다.

 

운영체제의 작업 공간은 Ram 이라 불리는 휘발성 메모리 영역에 존재합니다.

 

프로세스가 되기 이전에는 이 둘의 공간이 분리되어 있는 것을 알 수 있습니다. 즉 프로그램을 실행시키려면 하드에 있는 프로그램을 운영체제의 작업공간인 메모리에 올려야 합니다.

 

그럼 위 내용을 좀 더 자세히 알아보도록 하겠습니다. 우리가 흔히 개발 언어로 작성하는 프로그램을 생각해보면 됩니다.

 

 메모리의 올리는 과정은 다음과 같이 진행됩니다.

-  먼저 프로그램의 코드를 컴파일해서 나온 인스트럭션(기계어)을 RAM의 Code 영역으로 올립니다.

- Data 영역에는 프로그램의 전역, 정적 변수를 저장합니다.

 

그림으로 표현하면 다음과 같이 될 것입니다.

 

2. Runtime Stack 할당

다음으로는 실행시간 스택을 위한 메모리를 할당합니다.

 

스택 공간은 프로그램을 실행하면서 발생하는 함수의 호출 정보, 지역 변수, 리턴 주소 등을 저장할 목적을 가지게 됩니다. 함수 호출마다 스택 프레임이 생성되고, 종료 시 제거되는 과정을 진행하게 됩니다.

 

 

3. Heap 영역 할당

힙 영역은 동적으로 할당되는 영역을 말합니다. C언어를 사용하는 분들은 익숙하실 malloc, free를 생각해 보시면 됩니다.

 

프로그램이 실행되면 malloc 라이브러리 API를 호출하여 메모리를 요청하고 운영체제가 이를 충족하도록 메모리를 할당하며, free는 반납을 진행하게 됩니다.

 

동적 할당이 필요한 이유는 크기가 가변적인 자료구조를 사용할 일이 많기 때문입니다. 연결 리스트, 해시 맵 등을 생각해보시면 됩니다.

 

여기까지 진행을 마치게 되면 다음과 같은 구조가 됩니다.

 

 

4. 입출력 관련 초기화 작업

Unix 기반 시스템에서는 프로세스가 시작될 때 기본적으로 세 개의 파일 디스크립터(FD) 를 할당받게 됩니다. 흔히 STDIN, STDOUT, STDERR로 익숙한 친구들입니다. 해당 파일 디스크립터들은 프로세스가 터미널, 다른 입출력 소스 및 대상과 통신할 수 있도록 합니다.

 

 

5. Entry Point

여기까지 진행되었으면 이제 프로그램을 시작하는 작업이 남게 됩니다. 'main 루틴'이라 불리는 특수 기법을 통해 운영체제는 CPU를 프로세스에 넘기게 되고 실행되게 됩니다.

 

 

 

참고문헌

OSTEP

https://product.kyobobook.co.kr/detail/S000001732370

 

Operating Systems Three Easy Pieces | Remzi H.Arpaci-Dusseau - 교보문고

Operating Systems Three Easy Pieces |

product.kyobobook.co.kr