[OS Basics] 프로세스(Process)의 정의와 구조
Process 의 정의
Process란?
- 실행 중인 프로그램의 하나의 실행 단위 (An instance of a program in Execution)
- OS에서 program이 실행되면, 단순히 코드를 읽는 것이 아니라 독립적인 실행 환경 (=process)이 구성됨
- 비유를 하자면…
- User: 요리를 주문하는 손님
- OS: 요리사
- Program: 요리 레시피
- Process: 실제로 요리중인 음식
Program과 Process의 차이
항목 | Program | Process |
---|---|---|
상태 | Static (실행되지 않은 코드) | Dynamic (실행 중인 상태) |
저장 위치 | 주로 Disk (파일 형태로 존재) | Memory에 적재되어 실행됨 |
생성 시점 | 작성 / 설치 시 | Program을 실행할 때 OS 에 의해 |
예시 | hello.exe, main.c | program 을 실행했을 때 만들어진 실행 단위 |
Process의 구조
Logical Address Space (논리 주소 공간)
- OS는 Program이 실행되면 process에 독립적인 주소 공간을 할당
- = Logical Address Space
- 구성 요소
영역 | 역할 |
---|---|
Text Segment | 실행 code |
Data Segment | 전역 변수, static 변수 등 |
Heap | 동적 memory |
Stack | 함수 호출, 지역 변수 저장 |
- 각 process 는 고유한 Logical Address Space를 가짐
- 서로 다른 process 간에는 직접적인 memory 침범 불가
OS가 Process State을 관리하는 핵심 구조: PCB (Process Control Block)
- PCB: OS가 개별 process를 관리하기 위해 유지하는 데이터 구조
- 구성 요소
영역 | 역할 |
---|---|
Process State | 현재 process의 state |
Program Counter | 다음에 실행할 명령어의 주소 |
CPU Registers | 수행 중이던 작업을 저장 (Context Switching 시 필요) |
Memory Management Info | Page Table, Segment Table 등 메모리 관련 정보 |
Procces ID | Process 고유 식별자 |
Accounting Info | CPU 사용 시간, Process 시작 시간 등 |
I/O 상태 정보 | 어떤 I/O 자원을 요청했는지, 대기 중인 장치 등 |
Process의 실행 흐름
Process States
- Process 는 특정 시점에 하나의 State를 가진다
- Process는 실행을 위해 여러 State를 오가며, OS 가 이를 State transition으로 관리
- 대표적인 5가지 process state | 상태 | 설명 | | – | – | | New | Process가 생성 중인 상태 (ex. Program 실행 명령이 들어온 시점) | | Ready | 실행할 준비가 된 상태 (CPU가 할당되기만을 기다리고 있음) | | Running | CPU가 할당되어 실제 명령을 수행 중인 상태 | | Waiting(Blocked) | I/O 등의 이벹르를 기다리는 중이라 실행할 수 없는 상태 | | Terminated | 실행을 마치고 종료된 상태 (자원을 회수 중이거나 회수됨) |
Process State Transition
1. **New → Ready**
- 프로세스가 생성되어 실행 준비 완료 *(Admitted)*
2. **Ready → Running**
- 스케줄러가 CPU 할당 *(Scheduler Dispatch)*
3. **Running → Waiting (Blocked)**
- 입출력(I/O) 등 외부 이벤트 대기 *(I/O or event wait)*
4. **Waiting → Ready**
- I/O 완료 등 이벤트 발생 시 준비 상태로 복귀 *(I/O or event completion)*
5. **Running → Ready**
- 타임 슬라이스 종료 (Context Switching 발생) *(Time-out)*
- Context Switching 발생
6. **Running → Terminated**
- 실행 완료 또는 종료 명령 *(Release)*
상태 관리가 필요한 이유
- CPU 는 한 번에 하나의 Process만 실행 가능 (Multi-Cores는 병렬 처리 가능)
- System 자원을 효율적으로 분배하고 충돌을 방지하기 위해
Thread와의 비교
Thread
- Process 내에서 실행되는 작업 단위
- 여러 Thread는 하나의 Process가 할당 받은 자원(code, data, heap) 을 공유
- 각 Thread는 독립적인 stack, program counter, register 집합을 가짐
- 같은 자원을 공유하므로 통신 비용이 낮고, 작업 분할이 빠름
Multiprocessing 과 Multithreading
항목 | Multiprocessing | Multithreading |
---|---|---|
실행 단위 | 여러 개의 독립된 process 실행 | 하나의 process 내 여러 thread 실행 |
메모리 공간 | process마다 독립된 memory 공간 사용 | memory 공간 공유 (stack 만 분리) |
안정성 | 하나가 죽어도 다른 process는 영향 x | 하나의 thread가 죽으면 전체 process에 영향 o |
자원 소비 | 상대적으로 무겁고 resource 소모 큼 | 가볍고 빠름. context switching 비용 작음 |
통신 방식 | IPC(Inter-Process Communication) 필요 | 공유 메모리를 통한 간단한 통신 가능 |