학습 목표
프로그램과 프로세스의 차이를 설명할 수 있다.
PCB(Process Control Block) 가 담는 정보를 나열할 수 있다.
프로세스 5가지 상태와 상태 전이를 설명할 수 있다.
컨텍스트 스위칭이 왜 필요하고 무엇이 바뀌는지 설명할 수 있다.
문제 상황
nginx바이너리는 하나인데ps에는 worker가 여러 개 보인다- 실행 파일과 실행 중인 인스턴스가 다른 개념인지 헷갈린다
top에서 CPU 0%인 프로세스가 수백 개 있다- 멈춘 건지, I/O를 기다리는 건지 구분이 안 된다
- 코어가 8개인데 프로세스는 수천 개 — 동시에 다 도는 게 아닌 것 같다
- 누가 다음에 CPU를 쓰는지, 전환할 때 무엇을 저장하는지 모른다
kill -9 1234로 특정 PID만 죽인다- OS가 프로세스마다 무엇을 추적하는지 모르면 PID·상태를 읽기 어렵다
앞서 시스템 콜과 프로세스 관리 서비스를 봤다. 이번 편은 OS가 실행 단위로 무엇을 관리하는지, PCB·상태·전환으로 잡는다.
1. 프로그램 vs 프로세스
| 프로그램 (Program) | 프로세스 (Process) | |
|---|---|---|
| 정의 | 디스크에 있는 실행 파일 (정적) | 실행 중인 프로그램 인스턴스 (동적) |
| 상태 | 파일 내용·메타데이터 | CPU 레지스터, 메모리, 열린 파일 등 실행 맥락 |
| 개수 | 같은 바이너리 하나 | 동시에 여러 프로세스 가능 (nginx worker 등) |
| 생명 | 삭제 전까지 존재 | 생성 → 실행 → 종료 |
- 프로세스 = 프로그램 + 현재 실행 상태
- 코드·데이터·힙·스택 등 주소 공간
- PC(Program Counter), 레지스터, 스케줄링 정보
- OS는 프로세스마다 PCB로 위 정보를 묶어 관리한다
# 같은 바이너리, 다른 PID = 다른 프로세스
ps -o pid,comm -C nginx
2. PCB (Process Control Block)
OS가 프로세스를 식별·스케줄·전환할 때 쓰는 커널 자료구조다. Linux에서는 task_struct 등으로 구현된다.

| PCB 항목 | 역할 |
|---|---|
| PID | 프로세스 고유 식별자 |
| 상태 | new, ready, running, waiting, terminated |
| PC·레지스터 | 다음에 실행할 명령, 연산 결과 |
| 메모리 정보 | 페이지 테이블, 메모리 한계, 스택·힙 포인터 |
| 스케줄링 | 우선순위, 큐 포인터, CPU 사용 시간 |
| I/O·파일 | 열린 파일 디스크립터, 현재 작업 디렉터리 |
| 계정·보안 | UID/GID, 자식·부모 PID |
- 유저가 보는 프로세스 = PCB + 사용자 주소 공간
- 컨텍스트 스위칭 시 PCB 내용을 저장·복원한다
3. 프로세스 상태와 전이
OSC 10/E의 전형적인 5-state 모델이다.

| 상태 | 의미 |
|---|---|
| New | 생성 중, 아직 ready 큐에 안 올라감 |
| Ready | CPU 할당만 기다림, 실행 준비 완료 |
| Running | CPU에서 현재 명령 실행 중 |
| Waiting (Blocked) | I/O, 자식 종료, 락 등 이벤트 대기 |
| Terminated | 실행 끝, 자원 회수 중 또는 완료 |
| 전이 | 조건 |
|---|---|
| New → Ready | admit — OS가 프로세스 생성·초기화 완료 |
| Ready → Running | dispatch — 스케줄러가 CPU 할당 |
| Running → Ready | interrupt / preempt — 타임 슬라이스·우선순위 |
| Running → Waiting | I/O request, wait — 블로킹 syscall·이벤트 대기 |
| Waiting → Ready | I/O complete, event — 대기 조건 충족 |
| Running → Terminated | exit — 정상 종료 또는 시그널 |
- 한 코어에서는 running 프로세스가 한 번에 하나
top의 대부분 프로세스가 idle에 가깝게 보이는 이유 — waiting·ready가 많기 때문- I/O 대기 중인 프로세스는 CPU를 쓰지 않는다
4. 컨텍스트 스위칭
CPU가 프로세스 A에서 B로 넘어갈 때, A의 실행 맥락을 PCB에 저장하고 B의 맥락을 복원한다.

Running: Process A on CPU
→ timer interrupt or syscall (scheduler entry)
→ save A's registers, PC into PCB(A)
→ pick next process (e.g. B from ready queue)
→ load registers, PC from PCB(B)
Running: Process B on CPU
- 컨텍스트 스위칭 비용
- 레지스터·PC 저장/복원
- 캐시·TLB 무효화 가능 — 이후 메모리 접근이 느려질 수 있음
- 스케줄러 실행 자체도 CPU 시간 소비
- 그래서 너무 잦은 전환은 오히려 성능을 해친다
- 스레드·고정 코어 바인딩 등은 이 비용을 줄이려는 실무 대응
| 구분 | 내용 |
|---|---|
| 트리거 | 타이머 인터럽트, I/O 블록, yield, 우선순위 변경 |
| 저장 위치 | 각 프로세스 PCB |
| 유저 관점 | 한 프로세스가 멈춘 것처럼 보이지 않음 (시간 분할) |
5. 정리
- 프로세스는 실행 중인 프로그램 인스턴스이고, OS는 PCB로 추적한다
- new → ready → running ↔ waiting → terminated 흐름으로 상태를 관리한다
- CPU는 코어당 running 하나, 전환 시 컨텍스트를 PCB에 저장·복원한다
ps·top의 PID·상태·CPU%는 이 모델 위에 올라간 관측값이다
다음에 다룰 것
- 프로세스 생성과 종료
fork/exec,wait, 좀비·고아 프로세스
해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.
'운영체제 따라잡기' 카테고리의 다른 글
| 스레드 (0) | 2026.06.23 |
|---|---|
| 프로세스 생성과 종료 (0) | 2026.06.22 |
| 운영체제 구조와 시스템 콜 (0) | 2026.06.20 |
| 운영체제의 개념과 구조 (0) | 2026.06.19 |
| 운영체제 오리엔테이션 (0) | 2026.06.15 |