→ 운영체제가 시스템의 자원을 어떤 단위로 할당하고, 프로세스와 스레드는 이 자원을 어떻게 사용하느냐
[ Process ]
<aside>
💡 “컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램”
</aside>
📌 사전적 의미
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스, 독립적인 개체
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
: CPU시간, 운영되기 위해 필요한 주소 공간, Code / Data / Stack / Heap 구조의 독립적 메모리 영역
- 즉, 동적인 개념으로는 실행된 프로그램을 의미
📌 특징

- 프로세스는 각각 독립된 메모리 영역을 할당 : Code / Data / Stack / Heap 구조
- Code | 프로그램의 실행 코드가 저장되는 영역, 실행 파일에 저장된 명령어의 집합 → CPU에 의해 실행
읽기 전용으로, 실행 중에 수정되지 않는다.
- Data | 전역 변수와 정적 변수가 저장되는 영역,
프로그램이 시작될 때 할당되고 프로그램이 종료될 때까지 유지
초기화된 전역 변수와 초기화 되지 않은 전역변수를 포함
- Stack | 지역 변수와 함수 호출에 사용되는 메모리 공간,
함수가 호출될 때마다 스택 프레임이 생성되고 함수의 매개변수, 지역 변수 및 복귀 주소가 저장
선입선출(LIFO)구조를 가지고 있으며 함수 호출이 끝나면 해당 스택 프레임이 제거
- Heap | 동적으로 할당된 메모리가 저장되는 영역,
프로그램이 실행 중 런타임에 동적으로 메모리를 할당하고 해제할 수 있음
주로 malloc()이나 new와 같은 함수를 사용하여 메모리를 할당하고,
free()나 delete를 사용하여 해제.
힙은 프로그래머가 메모리를 직접 제어할 수 있는 유연한 메모리 영역이다.
- 기본적으로 프로세스당 최소 1개의 스레드(메인스레드)를 가지고 있다
- 각 프로세스는 별도의 주소 공간에서 실행, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신을 사용해야
(IPC, inter-process communication … 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)
📌 프로세스 단위 자원의 할당
- CPU 시간 | 운영 체제는 프로세스에게 CPU 시간을 할당하여 실행될 수 있도록
프로세스는 CPU를 요청하고, 할당된 CPU 시간 동안 실행 됨.
- 메모리 | 각 프로세스는 운영 체제로부터 메모리를 할당받음
이 메모리는 프로세스의 코드, 데이터, 스택 등을 저장하는 데 사용 됨.