실행 중인 프로그램의 인스턴스
즉, "프로그램 + 운영체제가 할당한 자원들의 묶음"이야.
| 역할 | 설명 |
|---|---|
| 자원 할당 단위 | 프로세스는 실행에 필요한 모든 자원의 컨테이너야. |
| 가상 메모리 공간 제공 | 스레드들은 이 공간을 공유하면서 작업해. |
| 보안 격리 | 서로 다른 프로세스는 메모리를 침범하지 못해 (보호 기법 기반). |
| 파일 디스크립터 관리 | 열려 있는 파일, 소켓 등도 프로세스 단위로 관리돼. |
| 프로세스 제어 | OS는 프로세스 단위로 작업을 생성, 제거, 스케줄링 관리해. |
| 스레드 묶음의 소유자 | 하나의 프로세스는 여러 스레드를 포함할 수 있어. |
| 자원 종류 | 예시 |
|---|---|
| 고유 PID | 프로세스를 구분하는 ID |
| 가상 메모리 공간 | 코드, 데이터, 힙, 스택 |
| 파일 디스크립터 | 열려 있는 파일/네트워크 |
| 권한/보호 정보 | 사용자, 그룹 ID 등 |
| 스레드 목록 | 스레드 A, B, C ... |
[프로세스 A]
└─ 스레드 A1 (실행 주체)
[프로세스 B]
├─ 스레드 B1
└─ 스레드 B2
실제로 CPU가 실행하는 건 스레드 A1, B1, B2 같은 스레드임
실행 상황:
[코어 1] ← 스레드 A1 실행
[코어 2] ← 스레드 A2 실행
[스레드 A3] ← 대기 중 (나중에 스케줄링되어 실행됨)
프로세스 A가 실행된다 = 그 안의 스레드 중 일부가 실행되고 있다.
운영체제는 각 프로세스를 독립된 "작업 단위"로 보고, 다음을 보장해:
| 항목 | 프로세스 | 스레드 |
|---|---|---|
| 실행 단위 | 큰 단위 | 작은 단위 |
| 자원 | 독립적인 자원 소유 | 프로세스의 자원 공유 |
| 주소 공간 | 독립 | 공유 |
| 컨텍스트 스위칭 비용 | 큼 | 작음 |
| 생성 비용 | 높음 | 낮음 |
프로세스는 "자원의 컨테이너"이자 "보안 단위"로서, 프로그램 실행을 위한 모든 환경을 구성하고 관리하는 핵심 단위야. 그 안에서 실제 일을 수행하는 건 스레드지만, 스레드들이 제대로 일하려면 프로세스라는 공간이 반드시 필요하지.