Skip to main content

프로세스

시작하기에 앞서

주의

해당 블로그의 모든 문서는 학습한 내용을 제 방식으로 정리하여 작성하고 있습니다.
순수 창작물도 아니고, 틀린 내용이 있을 수 있으므로 참고하고 읽어주시면 감사하겠습니다.


프로세스란?

프로세스는 실행파일 형태로 존재하던 프로그램이 메모리에 적재되어 CPU에 의해 실행되는 것을 프로세스라고 합니다. 프로그램은 단순히 명령어의 집합을 의미합니다. C언어로 프로그래밍을 해 본적이 있나요? 프로그래밍 후에 소스 코드를 컴파일러로 컴파일하면 실행할 수 있는 프로그램이 됩니다.

hello.c
#include <stdio.h>

int main() {
printf("Hello World!")
}

해당 코드는 C언어로 콘솔에 "Hello World!"를 출력하는 간단한 코드입니다.

확장자가 *.c인 상태로는 실행을 할 수 없습니다. 컴파일러로 hello.c파일을 컴파일하고 나면 비로소 실행할 수 있는 hello.exe파일이 생성되고, 이를 프로그램이라고 합니다.

다시 얘기해보면 보조기억장치에 저장된 실행 가능한 프로그램, 여기서는 hello.exe파일을 실행하게 되면 메모리(RAM)에 프로그램이 적재되고 CPU가 할당되어 실행되는 것을 프로세스라고 말합니다. 다 생략하고 정말 간단하게 얘기해 보자면, 그냥 실행된 프로그램을 프로세스라고 합니다.

info

보조기억장치는 하드디스크(HDD)나 SSD(Solid State Drive)등이 있습니다.
그리고 여기서의 메모리는 RAM(Random Access Memory)를 의미합니다.

프로그램 카운터 레지스터

프로그램이 메모리에 적재되면 CPU가 할당되어 프로그램의 코드를 한 줄씩 읽어 들이면서 프로세스가 동작합니다. 좀 더 자세하게 얘기해 보자면, CPU 내부에는 PC(Program Counter)라는 레지스터가 존재하는데, PC 레지스터에는 다음에 실행될 명령어의 주솟값이 저장되어 있고, 프로세스가 PC에서 명령어를 하나씩 읽어오면서 CPU가 연산하게 됩니다.

프로세스 메모리 영역

프로세스 내에서도 용도에 따라서 메모리의 영역이 스택(Stack), 힙(Heap), 데이터(Data), 코드(Code)의 총 4가지 영역으로 구분되어 있습니다. 그리고 프로세스마다 독립적으로 운영체제에 4가지의 메모리 영역을 할당받습니다. 여기서 프로세스마다 독립적이라는 말을 사용한 이유는, 메모리에는 프로세스가 딱 하나만 실행될 수 있는 게 아니라 여러 프로세스가 실행될 수 있고, 프로세스마다 4가지의 영역을 독립적으로 할당받기 때문입니다.

스택(Stack) 영역

스택 영역은 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 메모리 영역입니다.

힙(Heap) 영역

데이터 영역은 전역 변수와 static 변수가 저장되는 메모리 영역입니다.

데이터(Data) 영역

  • 이 부분은 좀 더 찾아보고 채워넣기!

코드(Code) 영역

코드 영역은 실행한 프로그램의 코드가 저장되는 메모리영역입니다.