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) 영역​

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