PCB와 프로세스 상태 전이: 운영체제의 실행 단위 관리

PCB 구조, 프로세스 상태 전이, 컨텍스트 스위칭과 프로세스 큐를 중심으로 운영체제가 실행 단위를 관리하는 방식을 정리한다.

2026-08-14 · 최초 발행 2026-01-16

디스크의 프로그램이 실행 단위가 되는 순간

프로세스는 메모리에 올라와 실행 중인 프로그램의 인스턴스다. 디스크에 보관된 프로그램 코드만으로는 실행 상태나 자원 사용 내역을 알 수 없지만, 프로세스에는 실행에 필요한 컨텍스트가 함께 포함된다.

운영체제는 이를 가장 기본적인 작업 단위로 다룬다. 여러 프로세스가 CPU를 번갈아 사용하고 입출력 완료를 기다리는 환경에서, 프로세스 관리는 CPU 활용률과 사용자 응답성을 좌우한다.

구분 프로그램(Program) 프로세스(Process)
상태 정적(Static) 동적(Dynamic)
저장 위치 디스크(보조기억장치) 메모리(주기억장치)
생명주기 영구적 일시적
자원 할당 없음 CPU, 메모리, I/O 등
실행 불가능 가능

각 프로세스는 독립된 가상 주소 공간을 사용한다. 실행 코드와 전역 데이터, 동적 할당 영역, 함수 호출 정보가 한 주소 공간 안에서 다음과 같이 배치된다.

프로세스 메모리 구조Stack 영역지역변수, 함수 호출 정보 스택 증가 방향 공간 (가용 영역) 증가 방향Heap 영역동적 할당 메모리BSS 영역초기화되지 않은 전역/정적변수Data 영역초기화된 전역/정적 변수Text 영역실행 코드 (기계어)
영역 설명 특징
Text 실행할 프로그램 코드 읽기 전용, 공유 가능
Data 초기화된 전역/정적 변수 읽기/쓰기 가능
BSS 초기화되지 않은 변수 0으로 초기화
Heap 동적 할당 메모리 런타임에 크기 변경
Stack 함수 호출 정보, 지역변수 LIFO 구조, 자동 관리

PCB에는 다음 실행을 위한 정보가 남는다

운영체제가 프로세스를 추적하기 위해 유지하는 자료구조가 PCB(Process Control Block)다. 프로세스 테이블의 각 엔트리로 존재하며, 프로세스마다 하나의 PCB가 생성된다. 프로세스의 현재 상태뿐 아니라 CPU를 다시 배정받았을 때 어느 명령부터 이어서 실행해야 하는지도 PCB에서 찾는다.

PCB (Process Control Block)프로세스 식별자 (PID)프로세스 상태프로그램 카운터 (PC)CPU 레지스터CPU 스케줄링 정보메모리 관리 정보입출력 상태 정보계정 정보커널 영역프로세스 관리
항목 설명 예시
프로세스 ID 프로세스 고유 식별자 PID 1234
프로세스 상태 현재 실행 상태 Ready, Running, Waiting
프로그램 카운터 다음 실행할 명령어 주소 0x00401000
CPU 레지스터 레지스터 값들의 집합 EAX, EBX, ESP, EBP 등
스케줄링 정보 우선순위, 스케줄링 큐 포인터 우선순위 10, Ready Queue
메모리 관리 정보 페이지 테이블, 세그먼트 테이블 베이스/리미트 레지스터
입출력 상태 할당된 I/O 장치, 열린 파일 파일 디스크립터 목록
계정 정보 CPU 사용 시간, 시간 제한 총 CPU 시간 2.5초

CPU가 실행 대상을 바꾸는 컨텍스트 스위칭에서는 현재 프로세스의 상태를 PCB에 저장하고, 선택된 프로세스의 PCB에서 상태를 복원한다.

프로세스 B운영체제(커널)프로세스 A프로세스 B운영체제(커널)프로세스 A컨텍스트 스위칭 완료인터럽트/시스템콜 발생프로세스 A의 상태를 PCB_A에 저장스케줄러가 프로세스 B 선택PCB_B에서 프로세스 B의 상태 복원프로세스 B 실행 재개

이 전환에는 레지스터 저장·복원과 PCB 갱신이라는 직접 비용이 든다. 캐시와 TLB 무효화로 캐시 미스가 늘어나는 간접 비용도 발생한다. 시간 비용은 일반적으로 수 마이크로초이며, PCB 크기를 최소화하고 하드웨어 지원을 활용하는 방식으로 오버헤드를 줄일 수 있다.

실행과 대기를 오가는 상태 전이

프로세스는 생성된 뒤 CPU를 기다리고, 실행되며, 입출력이나 이벤트를 기다렸다가 종료된다. 운영체제는 이 상태를 PCB에 기록하고 전이 조건에 따라 스케줄링 대상과 자원 할당을 바꾼다.

프로세스 생성Admitted (스케줄링 대기열진입)Dispatch (CPU 할당)Timeout/Preemption (시간초과/선점)I/O or Event Wait (입출력대기)I/O or Event Completion(입출력 완료)Exit (종료)NewReadyRunningWaitingTerminated프로세스 생성CPU 할당 대기CPU에서 실행이벤트 대기종료 처리
상태 영문 표기 설명 PCB 위치
생성 New 프로세스 생성 중, PCB 초기화 생성 중
준비 Ready CPU 할당 대기 중 Ready Queue
실행 Running CPU에서 명령어 실행 중 CPU
대기 Waiting/Blocked I/O 또는 이벤트 대기 Wait Queue
종료 Terminated 실행 완료, 자원 해제 중 해제 대기
전이 원인 설명
New → Ready Admit 프로세스 생성 완료, 스케줄링 가능 상태
Ready → Running Dispatch 스케줄러가 프로세스 선택, CPU 할당
Running → Ready Timeout 타임 슬라이스 만료, 선점 발생
Running → Waiting I/O Request 입출력 요청으로 인한 대기
Waiting → Ready I/O Complete 입출력 완료, 다시 스케줄링 대상
Running → Terminated Exit 정상 종료 또는 강제 종료

실제 운영체제는 메모리 상태까지 반영해 더 세분화된 모델을 사용할 수 있다. Suspended 상태는 메모리 부족이나 사용자 요청으로 프로세스를 디스크로 스왑 아웃한 상태다.

Suspend (메모리 부족)Suspend (스왑 아웃)Resume (메모리 확보)Event Occurs (이벤트 발생)ResumeReadySuspendedReadyWaitingSuspendedWaiting메모리에서 제거됨, 준비 상태메모리에서 제거됨, 대기 상태
Suspended 상태 설명
Suspended Ready 메모리에서 제거되었지만 준비 상태
Suspended Waiting 메모리에서 제거되었고 이벤트 대기 중

스케줄러가 보는 대기열

운영체제는 프로세스를 상태별 큐에 연결해 관리한다. Job Queue에는 시스템 내 모든 프로세스가 놓이고, Ready Queue에는 CPU 할당을 기다리는 프로세스가 들어간다. 장치 작업을 요청한 프로세스는 Device Queue에서 입출력 완료를 기다린다.

프로세스 시스템Job Queue모든 프로세스Ready QueueCPU 대기 프로세스Device QueueI/O 대기 프로세스장기 스케줄러단기 스케줄러CPU
큐 유형 용도 관리 주체
Job Queue 시스템 내 모든 프로세스 장기 스케줄러
Ready Queue CPU 할당 대기 프로세스 단기 스케줄러
Device Queue 특정 장치 대기 프로세스 I/O 스케줄러

프로세스가 생성된 뒤 실행되기까지 Ready Queue를 거치며, 입출력이 필요한 경우에는 장치별 Wait Queue로 이동한다. 이 큐는 PCB를 연결 리스트 방식으로 연결해 관리한다.

생성 이후 종료까지의 자원 처리

프로세스는 다른 프로세스에 의해 생성되고 부모-자식 관계를 형성한다. 생성 과정에서는 PID를 부여하고, 커널 메모리에 PCB를 할당해 초기화한다. 이어 프로세스 주소 공간과 필요한 시스템 자원을 할당하고, 프로그램 카운터와 스택 포인터를 설정한 뒤 Ready Queue에 등록한다.

UNIX/Linux에서는 다음 시스템 콜이 이 흐름과 관련된다.

시스템 콜 기능 특징
fork() 현재 프로세스 복제 부모와 동일한 자식 생성
exec() 새 프로그램으로 교체 메모리 이미지 교체
clone() 스레드/프로세스 생성 공유 범위 지정 가능
vfork() 최적화된 fork exec 전용, COW 불필요

프로세스의 종료는 exit() 호출에 의한 정상 종료, 치명적 오류에 따른 오류 종료, kill 시그널을 통한 강제 종료, 부모 종료에 따른 연쇄 종료로 나뉜다.

종료 유형 원인 설명
정상 종료 exit() 호출 프로세스가 자발적으로 종료
오류 종료 치명적 오류 예외, 세그멘테이션 폴트
강제 종료 kill 시그널 다른 프로세스에 의한 종료
연쇄 종료 부모 종료 부모 종료 시 자식도 종료

종료 처리에서는 열린 파일과 자원을 해제하고, 할당된 메모리를 반환한다. 자식 프로세스를 처리해 고아 프로세스를 방지하고, 부모에게 종료 상태를 전달한 뒤 PCB를 해제한다.

유형 정의 해결 방법
좀비(Zombie) 종료되었으나 PCB가 남아있는 프로세스 부모가 wait() 호출
고아(Orphan) 부모가 먼저 종료된 자식 프로세스 init 프로세스가 입양

주소 공간을 넘는 통신 수단

프로세스는 각자 독립된 주소 공간을 가지므로, 서로 데이터를 주고받으려면 IPC 메커니즘이 필요하다. 통신 대상의 관계, 데이터 성격, 동기화 요구에 따라 수단을 선택한다.

기법 특징 용도
파이프(Pipe) 단방향, 부모-자식 간 명령어 연결
명명된 파이프 양방향, 비관련 프로세스 서버-클라이언트
메시지 큐 비동기, 메시지 단위 분산 시스템
공유 메모리 고속, 동기화 필요 대용량 데이터
소켓 네트워크 통신 네트워크 서비스
시그널 비동기 이벤트 알림 예외 처리
운영체제프로세스PCB컨텍스트 스위칭IPC