본문 바로가기

STUDY/C

프로세스 개념과 이해

C프로그래밍을 잘하기 위해서는,

내가 짠 프로그램이 어떻게 메모리 상에서 존재하고 실행되는지를 이해할 필요가 있다.

 

이번 포스팅에서는 다음과 같은 내용들을 다뤄보려고 한다.

실행파일(executable file)와 프로세스(process)의 개념

- 실행파일(executable file)와 프로세스(process)의 구조

 

실행파일(executable file)의 개념


아래 그림과 같이, C 소스코드가 컴파일러(compiler)를 거치면 실행파일(executable file)이 된다.

 

C 언어는 고급언어이기 때문에 사람만 이해할 수 있었다면,

실행파일(executable file)은 C 소스코드를 컴퓨터도 이해할 수 있는 기계어로 컴파일러(compiler)가 바꿔준 것이다.

(자세한 컴파일 과정은 다른 포스팅에서 다루기로 하자.) 

 

실행파일(executable file)이 실제 생성되는 과정을 살펴보자.

 

이제 실행파일(executable file)의 개념과 생성과정은 이해가 되었을 것이다.

그렇다면, 프로세스(process)에 대해서 배워보자.

* 프로세서(processor)와 프로세스(process)는 다른 용어임에 주의하자.

 

프로세스(process)의 개념


위에서 생성된 실행파일(executable file)은 하드디스크(HDD), SSD와 같은 보조기억장치에 저장되어있다.

컴퓨터에서 어떤 프로그램을 실행시키기 위해서는, 그 프로그램을 메인메모리(RAM)에 올려줘야한다.

(왜 프로그램을 실행시키기 위해서 메인메모리에 올려줘야하는지는 다른 포스팅에서 다루기로 하자.)

 

메인메모리에 올리는 작업을 로딩(loading)이라고 하며,

이 작업을 수행하는 운영체제의 일부분을 가리켜 로더(loader)라고 한다.

또한, 이렇게 메인메모리에 올라가 실행중인 프로그램을 가리켜 프로세스(process)라고 한다.

 

관련 용어를 다시 정리해보면 다음과 같다.

* 실행파일(executable file) : 보조기억장치에서 비 실행중인 기계어 프로그램

* 프로세스(process) : 주기억장치(또는 메인메모리)에서 실행중인 기계어 프로그램

* 로딩(loading) : 실행파일(executable file)을 프로세스(process)로 만드는 과정

* 로더(loader) : 로딩(loading) 작업을 수행하는 운영체제의 일부분

 

그러면, 프로세스(process)는 어떻게 생성할까? 그건 아주 간단하다.

아까 생성된 실행파일(executable file) 위에 마우스를 가져다 대고 더블클릭하면 된다.

또는, 마우스를 우클릭하여 열기(O)를 해주면 된다.

우리가 흔히 생각하는 파일을 실행한다는 개념과 동일하다.

 

실행파일(executable file)과 프로세스(process)의 구조


그렇다면, 이제 실행파일(executable file)과 프로세스(process)의 구조에 대해 살펴보자.

 

1) Code segment

- Text Segment 라고도 불린다.

- 함수, 제어문 등 프로그램이 어떻게 동작하는 지에 대한 정보가 저장된다.

 

2) Data segment

- 초기화된 전역, 정적 변수들이 저장된다.

 

3) BSS

- 초기화되지 않은 전역, 정적 변수들이 저장된다.

- 프로그래머가 특정 값으로 초기화 해준 것은 아니지만, 이 영역의 변수들은 기본적으로 0으로 초기화 된다.

 

4) Heap

- 프로그래머가 동적할당(malloc) 받은 변수들이 저장된다.

 

5) Statck

- 지역변수들이 저장된다.

- 지역변수들은 전역, 정적 변수들과 달리, 초기화해주지않으면 쓰레기값이 저장된다.

 

이 때, Code, Data, BSS는 컴파일(compile) 타임에 크기가 결정되는데

이를 그림으로 표현해보면 다음과 같다.

 

 

실제 예시를 통해 살펴보자.

 

<그림5 : 프로세스(process) 구조에 대한 예시 >

 

마무리


본 포스팅은 window를 기준으로 설명되었는데,

사실 프로세스(process) 구조나 용어는 운영체제마다 다르기도 하고

책이나 강의자의 관점에 따라 조금씩 다르게 설명하기도 한다.

 

따라서, 용어나 구조에 너무 집중해서 공부하기보다는

실행파일(executable file)과 프로세스(process)의 개념과 그들 간의 관계를 이해하는데 초점을 맞췄으면 좋겠다.

 

그리고 컴파일(compile)과정이나 주기억장치(또는 메인메모리), 폰 노이만 구조 등 

이번 포스팅을 다루면서 하고싶은 이야기가 많았지만, 한꺼번에 다루기에는 너무 많은 양이므로

관련된 주제들에 관해서 또 다른 포스팅으로 다루려고 한다.

 

* 포스팅 읽어주셔서 감사합니다. 혹시 잘못된 점 있으면 뭐든 말씀해주세요.