프로세스 제어 블록(PCB)과 프로세스 상태
프로세스 제어 블록(PCB)과 프로세스 상태
운영체제는 여러 프로세스를 동시에 관리하기 위해, 각 프로세스에 대한 상세 정보를 프로세스 제어 블록(PCB)이라는 자료구조에 저장합니다. 또한 프로세스는 생성부터 소멸까지 여러 상태(State)를 거치며 변화합니다.
📇 프로세스 제어 블록 (PCB, Process Control Block)
- 정의 (Definition) : 운영체제가 특정 프로세스를 관리하기 위해 필요한 모든 정보를 담고 있는 자료구조입니다. 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 종료되면 PCB는 제거됩니다. PCB는 프로세스의 '신분증'과도 같습니다.
- 저장 위치 : 커널 메모리 영역에 저장되어, 일반 사용자가 접근할 수 없습니다.
- 주요 정보 (Key Information)
> * 프로세스 식별자 (Process ID, PID) : 각 프로세스를 고유하게 식별하는 번호. > * 프로세스 상태 (Process State) : 현재 프로세스가 어떤 상태에 있는지 (생성, 준비, 실행, 대기, 종료). > * 프로그램 카운터 (Program Counter, PC) : 이 프로세스가 다음에 실행할 명령어의 주소. > * CPU 레지스터 : CPU의 레지스터 상태 정보. (컨텍스트 스위칭 시 복원하기 위함) > * CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄링 큐에 대한 포인터 등. > * 메모리 관리 정보 : 페이지 테이블, 세그먼트 테이블 등 프로세스에 할당된 메모리 정보. > * 입출력 상태 정보 : 프로세스에 할당된 I/O 장치, 열린 파일 목록 등.
🚦 프로세스 상태 (Process State)와 전이
프로세스는 실행되는 동안 여러 상태를 거치며, 이를 '상태 전이(State Transition)'라고 합니다.
- 주요 상태
> * 생성 (New) : 프로세스가 생성되는 중. PCB가 만들어집니다. > * 준비 (Ready) : CPU를 할당받기를 기다리는 상태. CPU만 있으면 즉시 실행 가능하며, '준비 큐(Ready Queue)'에서 대기합니다. > * 실행 (Running) : CPU를 할당받아 명령어를 실행하고 있는 상태입니다. > * 대기 (Waiting / Blocked) : 특정 이벤트(e.g., I/O 작업 완료)가 발생하기를 기다리는 상태. 이벤트가 발생하기 전까지는 CPU를 할당받아도 실행될 수 없습니다. > * 종료 (Terminated) : 프로세스의 실행이 완료되고, 자원 정리를 기다리는 상태입니다.
- 상태 전이 과정
> * `New → Ready`: 프로세스 생성이 완료되면 준비 큐로 이동합니다. > * `Ready → Running`: 스케줄러(Dispatcher)에 의해 CPU를 할당받습니다. > * `Running → Ready`: 할당된 시간(Time Slice)이 만료되어 CPU를 반납합니다. > * `Running → Waiting`: I/O 요청 등 대기가 필요한 이벤트가 발생합니다. > * `Waiting → Ready`: 기다리던 이벤트가 완료됩니다. (주의: Running 상태로 바로 가지 않고, 다시 CPU 할당을 기다리는 Ready 상태로 갑니다.) > * `Running → Terminated`: 프로세스 실행이 완료됩니다.
💡 개발자 핵심 Point
- PCB는 운영체제가 멀티태스킹을 구현하는 데 핵심적인 역할을 합니다. 컨텍스트 스위칭이 발생할 때, 운영체제는 현재 프로세스의 실행 상태를 PCB에 저장하고, 다음 프로세스의 상태를 PCB에서 읽어와 CPU에 로드합니다.
- PCB는 프로세스에 대한 모든 정보를 담고 있으므로, 그 크기가 작지 않습니다. 이 때문에 컨텍스트 스위칭 시 PCB를 저장하고 복원하는 작업은 상당한 오버헤드를 유발합니다.
- 프로세스의 상태 변화를 이해하는 것은 시스템의 동작을 이해하고, 성능 문제를 디버깅하는 데 중요합니다. 예를 들어, 많은 프로세스가 '대기(Waiting)' 상태에 있다면 I/O 병목을 의심해볼 수 있습니다.