← Blog로 돌아가기

2026년 5월 7일

CS / Theory / OS

[OS] PCB

멀티프로그래밍과 멀티태스킹 환경에서 운영체제는 여러 프로세스를 동시에 관리한다. 그런데 프로세스가 수십, 수백 개가 되면 운영체제는 각 프로세스의 상태를 어떻게 추적할까. 이 글에서는 그 핵심 자료구조인 PCB를 살펴본다.



목차


[1] PCB란
[2] PCB에 저장되는 정보
[3] PCB의 관리 방식
[4] PCB가 필요한 이유
[5] 컨텍스트 스위칭과 PCB
전체 흐름 정리



[1] PCB란


PCB(Process Control Block)는 운영체제가 각 프로세스를 관리하기 위해 유지하는 자료구조다. 프로세스 하나당 PCB 하나가 대응된다.

프로세스가 생성되는 순간 운영체제는 해당 프로세스의 PCB를 만들고, 프로세스가 종료되면 PCB를 제거한다. 운영체제 입장에서 프로세스를 안다는 것은 곧 그 프로세스의 PCB를 안다는 뜻이다.

TEXT
프로세스 A 생성 → PCB A 생성 프로세스 B 생성 → PCB B 생성 프로세스 C 생성 → PCB C 생성 프로세스 B 종료 → PCB B 제거


[2] PCB에 저장되는 정보


PCB에는 운영체제가 프로세스를 관리하는 데 필요한 모든 정보가 담긴다.


프로세스 상태 (Process State) — 현재 프로세스가 어떤 상태인지 나타낸다. 생성, 준비, 실행, 대기, 완료 중 하나의 값을 가진다. 운영체제는 이 값을 보고 어떤 프로세스를 CPU에 올릴지 결정한다.

프로세스 ID (PID) — 각 프로세스를 구별하는 고유 번호다. 운영체제는 PID로 프로세스를 식별한다. Linux 터미널에서 ps 명령어를 실행하면 현재 실행 중인 프로세스들의 PID를 확인할 수 있다.

프로그램 카운터 (Program Counter, PC) — 다음에 실행할 명령어의 메모리 주소를 가리킨다. 프로세스가 중단되었다가 다시 실행될 때, 운영체제는 PC 값을 보고 어디서부터 이어서 실행할지 결정한다.

레지스터 정보 — 프로세스가 실행 중에 사용하던 CPU 레지스터 값들이다. 프로세스가 중단되면 현재 레지스터 상태를 PCB에 저장해두고, 나중에 다시 실행할 때 복원한다.

메모리 정보 — 프로세스가 사용하는 메모리 영역의 위치와 크기, 접근 권한 정보가 담긴다. 다른 프로세스가 이 영역을 침범하지 못하도록 보호하는 데 사용된다.

CPU 스케줄링 정보 — 운영체제가 CPU를 어떤 프로세스에 얼마나 줄지 결정할 때 사용하는 정보다.

  • 우선순위
  • CPU를 사용한 총 시간
  • 대기 시간

입출력 상태 정보

프로세스가 현재 사용 중인 입출력 장치나 열려 있는 파일 목록이 담긴다.


정리하면 PCB의 구조는 다음과 같다.

TEXT
┌──────────────────────────┐ │ PCB │ ├──────────────────────────┤ │ 프로세스 상태 │ │ 프로세스 ID (PID) │ │ 프로그램 카운터 (PC) │ │ 레지스터 정보 │ │ 메모리 정보 │ │ CPU 스케줄링 정보 │ │ 입출력 상태 정보 │ └──────────────────────────┘


[3] PCB의 관리 방식


운영체제는 생성된 PCB들을 연결 리스트(Linked List) 형태로 관리한다.

TEXT
[PCB A] → [PCB B] → [PCB C] → [PCB D] → NULL

연결 리스트를 사용하는 이유는 프로세스가 수시로 생성되고 종료되기 때문이다. 배열처럼 크기가 고정된 자료구조는 중간에 삽입하거나 삭제할 때 비용이 크다. 연결 리스트는 포인터만 바꾸면 되므로 삽입과 삭제가 빠르다.

프로세스 상태에 따라 별도의 큐(Queue)로 나뉘어 관리되기도 한다.

  • 준비 큐 (Ready Queue): CPU 할당을 기다리는 프로세스들의 PCB
  • 대기 큐 (Waiting Queue): I/O 완료를 기다리는 프로세스들의 PCB
TEXT
준비 큐: [PCB A] → [PCB C] → [PCB E] 대기 큐: [PCB B] → [PCB D]

CPU 스케줄러는 준비 큐에서 PCB를 하나 꺼내 해당 프로세스를 실행한다.



[4] PCB가 필요한 이유


멀티태스킹 환경에서 CPU는 여러 프로세스를 빠르게 전환하며 실행한다. 이때 핵심 문제가 생긴다.

프로세스 A를 잠깐 멈추고 B를 실행했다가, 다시 A로 돌아올 때 A는 어디서부터 이어서 실행해야 할까?

이 문제를 PCB가 해결한다. 프로세스 A가 중단될 때 현재 상태(PC 값, 레지스터 값 등)를 PCB A에 저장해두고, 나중에 A를 다시 실행할 때 PCB A에서 상태를 복원한다.

PCB가 없다면 프로세스를 중단했다가 재개하는 것 자체가 불가능하다. 멀티태스킹의 기반이 되는 자료구조다.



[5] 컨텍스트 스위칭과 PCB


컨텍스트 스위칭(Context Switching)은 CPU가 한 프로세스에서 다른 프로세스로 전환하는 작업이다. 이 과정에서 PCB가 핵심 역할을 한다.

TEXT
[프로세스 A 실행 중] ↓ 타임 슬라이스 만료 / I/O 요청 / 인터럽트 [A의 상태를 PCB A에 저장] - 프로그램 카운터 - 레지스터 값 - 프로세스 상태 [PCB B에서 B의 상태를 CPU에 복원] [프로세스 B 실행]

컨텍스트 스위칭이 발생하는 상황은 세 가지다.

  • 타임 슬라이스 만료: 할당된 실행 시간이 끝난 경우
  • I/O 요청: 프로세스가 입출력 작업을 요청한 경우
  • 인터럽트 발생: 외부 신호로 CPU가 개입해야 하는 경우

컨텍스트 스위칭 자체는 오버헤드다. 전환하는 동안에는 어떤 프로세스도 실행되지 않기 때문이다. 스위칭이 너무 자주 일어나면 실제 작업보다 전환에 드는 시간이 더 커질 수 있다.



전체 흐름 정리


TEXT
프로세스 생성 PCB 생성 (상태, PID, PC, 레지스터, 메모리 정보 등) 준비 큐에 삽입 CPU 스케줄러가 PCB를 선택 → 프로세스 실행 중단 시: 현재 상태를 PCB에 저장 재개 시: PCB에서 상태를 복원 → 이어서 실행 프로세스 종료 → PCB 제거

PCB는 운영체제가 프로세스를 관리하는 핵심 단위다. 프로세스의 모든 정보가 PCB에 담기며, 컨텍스트 스위칭, CPU 스케줄링, 메모리 보호 모두 PCB를 기반으로 동작한다.



다음 글에서는 프로세스가 거치는 프로세스 상태와 상태 전이 흐름을 살펴볼 예정이다.

댓글

댓글을 불러오는 중...