프로세스(Process): 실행 중인 프로그램
- 1. 프로세스란?
- 2. 프로세스의 주요 특징
- 3. 프로세스의 메모리 구조 (4영역)
- 4. 프로세스의 상태 (State)
- 5. 프로세스와 스레드
- 6. 프로세스 간 통신 (IPC)
- 7. 요약
1. 프로세스란?
프로세스(Process) 는 한마디로 “실행 중인 프로그램” 이다.
- 프로그램은 디스크에 저장된 정적인 파일일 뿐이다 (
.exe,.out,.py등) - 이 프로그램을 실행하면, 운영체제(OS)가 메모리(RAM)에 올리고 CPU가 실행할 수 있도록 준비한다. 이 상태가 바로 프로세스다
즉, 프로그램 ≠ 프로세스이며, 프로그램을 실행 중인 것이 프로세스다.
2. 프로세스의 주요 특징
| 구분 | 설명 |
|---|---|
| 고유한 메모리 공간 | 코드·데이터·스택·힙 등 독립적인 메모리 구조를 가짐 |
| 고유한 PID | OS가 각 프로세스를 식별하기 위해 부여하는 Process ID |
| 자원 소유 | 파일 디스크립터, 메모리, CPU 시간 등을 소유 |
| 독립성 | 프로세스끼리는 기본적으로 메모리를 공유하지 않고 독립적으로 동작 |
| 생명주기 | 생성 → 준비 → 실행 → 대기 → 종료의 흐름을 가짐 |
3. 프로세스의 메모리 구조 (4영역)
프로세스가 메모리에 올라오면 4개 영역으로 나뉜다. 높은 주소에서 낮은 주소 순으로 정리하면 다음과 같다.
| 영역 | 저장 내용 | 관리 방식 |
|---|---|---|
| Stack | 함수 호출 시 지역변수·매개변수 | 호출마다 자동으로 push/pop |
| Heap | 동적 메모리 할당 영역 | malloc/new로 할당, free/delete로 해제 |
| Data | 전역변수, static 변수 | 프로그램 시작 시 초기화 |
| Code | 실행할 프로그램 코드(명령어) | 컴파일된 machine code |
Stack과 Heap은 서로 마주 보는 방향으로 자라 충돌을 피한다. (Stack은 아래로, Heap은 위로 성장)
4. 프로세스의 상태 (State)
프로세스는 CPU에서 실행되며 여러 상태를 거친다.
| 상태 | 의미 |
|---|---|
| New | 프로그램이 메모리에 적재되는 중 |
| Ready | CPU를 받을 준비가 된 상태 |
| Running | CPU를 점유해 실제 실행 중인 상태 |
| Waiting | 어떤 이벤트(I/O 등)를 기다리는 상태 |
| Terminated | 실행이 끝나 종료된 상태 |
보통 Ready ↔ Running ↔ Waiting 을 반복하다가 종료된다.
5. 프로세스와 스레드
| 구분 | 정의 | 메모리 |
|---|---|---|
| 프로세스 | 완전히 독립된 실행 단위 | 서로 독립적 |
| 스레드 | 프로세스 안의 작업 단위 | 같은 프로세스 내에서 공유 |
“프로세스는 집이고, 스레드는 집 안의 가족”이라고 비유할 수 있다. 집(프로세스)끼리는 독립적이지만, 한 집 안의 가족(스레드)은 같은 공간(메모리)을 공유한다.
6. 프로세스 간 통신 (IPC)
프로세스끼리는 기본적으로 메모리를 공유하지 않으므로, 정보를 주고받으려면 별도의 방법이 필요하다.
| 방법 | 설명 |
|---|---|
| Pipe (파이프) | 단방향 데이터 스트림으로 연결 |
| Message Queue (메시지 큐) | 메시지 단위로 송수신 |
| Shared Memory (공유 메모리) | 공유 메모리 영역을 두고 직접 읽고 씀 (가장 빠름) |
| Socket (소켓) | 네트워크 기반 통신 |
| Signal (시그널) | 간단한 알림·이벤트 전달 |
7. 요약
프로세스는 실행 중인 프로그램이며, 고유한 메모리 공간과 자원을 소유하고, 여러 상태를 거치며 실행된다. 프로세스끼리는 독립적이라 정보를 주고받으려면 IPC가 필요하다.