PCB(Process Control Block)
운영체제(OS)는 프로세스를 효율적으로 관리하고 제어하기 위해 각 프로세스의 중요한 정보를 저장하는 자료구조를 유지합니다. 이 자료구조를 PCB(Process Control Block) 라고 합니다. PCB는 운영체제가 각 프로세스를 식별하고 관리할 수 있도록 하는 핵심 요소이며, 프로세스의 실행과 관련된 다양한 정보를 포함합니다.
PCB(Process Control Block)의 구성 요소
PCB에는 프로세스를 관리하기 위한 다양한 정보가 포함됩니다. 주요 요소들은 다음과 같습니다.
- 프로세스 상태 (Process State)
- 프로세스는 실행(Running), 대기(Waiting), 준비(Ready) 등의 상태를 가지며, PCB에는 현재 프로세스의 상태 정보가 저장됩니다.
- 프로세스 식별자 (Process ID, PID)
- 운영체제는 각 프로세스를 고유하게 식별할 수 있도록 PID(Process ID) 를 부여합니다.
- 부모 프로세스와 자식 프로세스 간의 관계를 유지하기 위해 부모 프로세스의 PID 와 자식 프로세스의 PID 도 저장됩니다.
- 프로그램 카운터 (Program Counter, PC)
- 프로세스가 다음에 실행할 명령어의 주소를 저장합니다. 이를 통해 프로세스가 중단된 이후에도 이어서 실행할 수 있습니다.
- CPU 레지스터 (CPU Registers)
- 프로그램 실행 도중 CPU에서 사용하는 레지스터 값들을 저장합니다.
- 프로세스가 인터럽트되거나 문맥 교환(Context Switch)이 발생할 경우, 현재 CPU 상태를 보존하고 다시 실행할 때 해당 레지스터 값을 복원하는 데 사용됩니다.
- 프로세스 우선순위 (Process Priority)
- 운영체제는 여러 개의 프로세스를 스케줄링할 때 우선순위(priority) 를 기준으로 실행 순서를 결정합니다.
- PCB에는 프로세스의 우선순위 정보가 포함되며, 우선순위가 높을수록 CPU를 먼저 할당받을 가능성이 커집니다.
- 메모리 관리 정보 (Memory Management Information)
- 프로세스의 주소 공간, 페이지 테이블, 세그먼트 테이블 등의 정보를 포함합니다.
- 실행 중인 프로그램이 사용하는 메모리 영역(코드, 데이터, 스택, 힙 등)에 대한 정보를 저장합니다.
- 입출력 정보 (I/O Information)
- 프로세스가 사용하는 입출력 장치, 파일 디스크립터, 네트워크 소켓 등의 정보를 저장합니다.
- 특정 프로세스가 어떤 파일을 열었는지, 어떤 장치를 사용 중인지 등의 정보가 포함됩니다.
- 계정 정보 (Accounting Information)
- 프로세스 실행 시간, CPU 사용량, 시스템 리소스 사용량 등의 정보를 저장합니다.
- 사용자의 실행 기록과 자원 사용량을 추적하는 데 활용됩니다.
프로세스의 생성
운영체제에서 새로운 프로세스를 생성하는 가장 일반적인 방법은 fork() 시스템 호출을 사용하는 것입니다.
fork() 시스템 호출은 기존 프로세스를 복제(clone) 하여 새로운 프로세스를 생성하는 역할을 합니다. 이때 원래 프로세스를 부모 프로세스(Parent Process), 새롭게 생성된 프로세스를 자식 프로세스(Child Process) 라고 합니다.
fork() 호출 과정은 다음과 같습니다.
- 부모 프로세스가 fork() 함수를 호출합니다.
- 운영체제는 부모 프로세스의 메모리 공간을 복사하여 새로운 자식 프로세스를 생성합니다.
- fork() 함수는 부모 프로세스에게는 자식 프로세스의 PID를 반환 하고, 자식 프로세스에게는 0을 반환 합니다.
- 부모와 자식 프로세스는 독립적으로 실행되며, 이후의 동작은 스케줄러에 의해 결정됩니다.
이 과정에서 부모와 자식 프로세스는 거의 동일한 메모리 공간을 공유하지만, 변수 값 등이 독립적으로 유지되므로 각 프로세스는 별개의 흐름을 가집니다.
프로세스 상태도
프로세스는 실행 도중 여러 상태를 오가며, 운영체제는 적절한 시점에 상태를 변경하면서 프로세스를 관리합니다.
일반적으로 프로세스는 다음과 같은 5가지 상태 를 가집니다.
- 생성(New)
- 프로세스가 생성되었지만 아직 실행을 시작하지 않은 상태입니다.
- OS가 필요한 자원을 할당하는 과정이 포함됩니다.
- 준비(Ready)
- 프로세스가 CPU를 사용할 준비가 되어 있는 상태입니다.
- CPU가 사용 가능해지면 즉시 실행될 수 있습니다.
- 여러 개의 프로세스가 준비 상태에서 대기하며, 스케줄러(Scheduler) 가 어떤 프로세스를 실행할지 결정합니다.
- 실행(Running)
- 현재 CPU를 할당받아 실행 중인 상태입니다.
- 한 번에 하나의 프로세스만 실행 상태를 가질 수 있습니다.
- 대기(Waiting/Blocked)
- 프로세스가 입출력 작업을 기다리는 등의 이유로 일시적으로 실행되지 못하는 상태입니다.
- 예를 들어, 파일 읽기/쓰기 또는 네트워크 작업이 완료될 때까지 대기해야 합니다.
- 종료(Terminated)
- 프로세스의 실행이 완료되었거나 오류로 인해 종료된 상태입니다.
- 운영체제가 PCB를 삭제하고 자원을 해제합니다.

해당 글은 다음 도서의 내용을 참고한 글임을 밝힙니다.
이수진, ⌜기술면접대비 CS전공 핵심요약집⌟, (주)도서출판 길벗
'CS지식 > 운영체제' 카테고리의 다른 글
교착 상태(Deadlock)와 스레드 안전(Thread Safe) (0) | 2025.02.03 |
---|---|
프로세스 동기화 (0) | 2025.02.01 |
동시성과 병렬성, 멀티 프로세스와 멀티 스레드 (0) | 2025.01.31 |
프로세스, 메모리 구조 (0) | 2024.11.05 |
운영체제, 커널, 시스템 콜 (0) | 2024.11.05 |