2026. 3. 11. 12:52ㆍ운영체제(OS)
프로세스 개요와 PCB, 상태 전이
프로세스가 무엇인지, OS가 어떻게 관리하는지, 그리고 실행 중에 어떤 상태 변화를 거치는지 정리한다.
1. 프로세스란
컴퓨터에서 실행의 대상이 되는 것은 프로그램과 자료다. 프로그램은 소프트웨어에 속하며, 평소에는 HDD나 SSD 같은 보조기억장치1에 저장돼 있다. 실행하려면 이 프로그램을 주기억장치2(RAM)로 옮겨야 한다. 이 과정을 담당하는 것이 OS 안의 로더(Loader)다.
RAM에 올라와 CPU를 사용하거나 기다리고 있는 프로그램, 즉 실행 중인 프로그램을 프로세스라 한다. 프로세스를 처리하는 주체는 프로세서(CPU)다. OS 입장에서 프로세스는 관리의 최소단위이며, 작업(Job) 또는 태스크(Task)라고도 부른다.
프로그램 저장
RAM에 적재
프로세스 상주
실행
컴퓨터 시스템은 시스템 프로세스와 사용자 프로세스의 집합으로 구성된다. 시스템 프로세스는 OS 코드를 실행하고, 사용자 프로세스는 사용자가 띄운 앱을 실행한다. 이 모든 프로세스는 병행 수행이 가능하다 — 실제로 동시에 돌거나, 번갈아 가며 CPU를 나눠 쓰는 방식으로.
2. PCB (Process Control Block)
OS가 프로세스를 관리하기 위해 프로세스마다 만드는 자료구조가 프로세스 제어 블록(PCB)이다. 프로세스가 생성되는 순간 해당 PCB가 만들어지고, 프로세스가 종료되면 함께 삭제된다. PCB는 OS 커널3 영역에 위치한다.
PCB는 TCB(Task Control Block) 또는 JCB(Job Control Block)이라고도 불린다. 프로세스 상태가 바뀔 때마다 PCB 내용은 트래픽 제어기(Traffic Controller)에 의해 갱신된다.
PCB에서 가장 핵심적인 필드는 프로그램 카운터(PC)와 CPU 레지스터 정보다. CPU를 빼앗길 때 이 두 값을 PCB에 저장해 뒀다가, 다시 실행될 때 그대로 복원한다. 이 저장-복원 과정이 바로 문맥 교환(Context Switching)이다.
3. 프로세스 상태와 전이
프로세스는 생성부터 종료까지 여러 상태를 오가며 CPU와 메모리 자원을 할당받는다. 이 흐름을 프로세스 상태 전이라 한다. 하나의 CPU에서는 오직 한 프로세스만 실행 상태에 있을 수 있고, 나머지는 준비 또는 대기 상태로 큐에서 기다린다.
각 상태 설명
| 상태 | 설명 |
|---|---|
| 제출 (Submit) | 사용자가 작업을 시스템에 제출한 상태 |
| 보류 (Hold) | 스풀러가 작업을 디스크에 저장해둔 상태. Job 스케줄러 대기 중 |
| 준비 (Ready) | RAM에 올라와 CPU를 기다리는 상태. 준비 큐(Ready List)에서 대기 |
| 실행 (Run) | CPU를 할당받아 실행 중인 상태. 타임 슬라이스 만료 또는 I/O 발생 시 이탈 |
| 대기 (Wait/Block) | I/O 완료를 기다리는 상태. 우선순위 없이 이벤트 완료 시 준비로 복귀 |
| 완료 (Terminated) | 실행 종료. CPU 반납, PCB 삭제 |
상태 전이 트리거
타임 슬라이스와 인터럽트
OS는 각 프로세스에 일정한 CPU 사용 시간(타임 슬라이스)을 준다. 이 시간이 끝나면 시스템 클록이 인터럽트(Interrupt)를 발생시켜 현재 실행 중인 프로세스를 준비 상태로 되돌리고, 다음 프로세스에게 CPU를 넘긴다. 이 메커니즘 덕분에 여러 프로세스가 CPU를 번갈아 쓰면서 동시에 실행되는 것처럼 보인다.
스케줄러 종류
| 스케줄러 | 역할 | 담당 전이 |
|---|---|---|
| 스풀러 (SPOOLer) | 제출된 작업을 디스크 스풀 공간에 저장 | 제출 → 보류 |
| 작업 스케줄러 | 보류 중 작업을 선택해 RAM에 올림 | 보류 → 준비 |
| 프로세스 스케줄러 (CPU 스케줄러) | 준비 큐에서 실행할 프로세스를 선택해 CPU 배분 | 준비 → 실행 |
| 트래픽 제어기 | 모든 프로세스의 상태 추적·관리, 전이 조율 | 전체 |
4. Unity 개발자 시점에서
Unity 게임을 실행하면 OS는 Unity 런타임에 대한 프로세스를 생성하고 PCB를 만든다. 게임이 종료되면 PCB가 삭제되며 할당된 메모리와 I/O 자원이 모두 반환된다.
Unity의 게임 로직(Start, Update 등)은 기본적으로 메인 스레드 하나에서 순차 실행된다. 멀티코어 환경에서 성능을 끌어올리려면 Job System을 써야 하는데, Job System은 스레드를 매번 생성하는 대신 워커 스레드 풀을 재사용한다. 스레드를 반복 생성·소멸하면 OS 레벨에서 Context Switching 비용이 누적되기 때문이다.
OS가 관리하는 단일 프로세스 (PCB 1개)
Start / Update / Rendering 등 게임 루프 전체
물리, 애니메이션, 경로탐색 등 병렬 처리 작업
렌더링·오디오 전용 내부 스레드
Coroutine은 메인 스레드 안에서 실행 흐름을 나눠 쓰는 것이므로 OS 레벨 프로세스 전환과는 무관하다.
반면 async/await는 상황에 따라 OS 스레드를 실제로 사용할 수 있어, Unity API를 메인 스레드 밖에서 호출하면 오류가 난다.
Unity API는 스레드 세이프하지 않기 때문이다.
📎 용어 설명
- 보조기억장치 — HDD, SSD처럼 전원이 꺼져도 데이터가 유지되는 저장 장치. 용량은 크지만 접근 속도가 RAM보다 느리다.
- 주기억장치 — RAM. CPU가 직접 접근할 수 있는 휘발성 메모리. 프로그램이 실행되려면 반드시 RAM에 올라와야 한다.
- 커널 — OS의 핵심 부분. 하드웨어 자원(CPU, 메모리, I/O)을 직접 제어하며, 프로세스 관리·스케줄링을 담당한다.
'운영체제(OS)' 카테고리의 다른 글
| [OS] CPU 스케줄링 - 7 (0) | 2026.03.12 |
|---|---|
| [OS] 스레드(Thread)와 멀티 스레딩 - 6 (0) | 2026.03.12 |
| [OS] CPU 구조와 파이프라인 - 4 (0) | 2026.03.11 |
| [OS]운영체제 발전 흐름 - 3 (0) | 2026.03.11 |
| [OS] 프로그래밍 언어 분류와 링커, 로더 - 2 (0) | 2026.03.10 |