# 3.3.4 Process Control Block (PCB)

## 3.3.4 PCB

PCB(Process Control Block)는 운영체제가 프로세스에 대한 메타데이터를 저장한 '데이터'를 말합니다. 프로세스 제어 블록이라고도 합니다. 프로세스가 생성될 때 운영체제는 해당 PCB를 생성합니다. PCB는 프로세스의 상태를 관리하고, 필요한 정보를 저장하여 프로세스 간의 전환을 원활하게 합니다.

## PCB의 구조

PCB는 프로세스 스케줄링 상태, 프로세스 ID 등의 중요한 정보를 포함하고 있으며, 다음과 같은 주요 항목으로 구성됩니다:

* **프로세스 스케줄링 상태**: 준비(ready), 실행(running), 대기(waiting) 등의 프로세스 상태 정보.
* **프로세스 ID**: 각 프로세스를 고유하게 식별할 수 있는 ID.
* **프로세스 우선순위**: 프로세스의 우선순위 정보.
* **프로세스 메모리 정보**: 프로세스의 주소 공간 정보, 즉 코드, 데이터, 힙, 스택 영역의 메모리 주소.
* **CPU 레지스터 상태**: 프로세스가 실행되던 시점의 CPU 레지스터 값.
* **프로세스 계정 정보**: 프로세스 소유자, 그룹 정보 등.
* **I/O 상태 정보**: 프로세스가 사용 중인 I/O 디바이스 정보 및 상태.

### PCB의 역할

PCB는 프로세스가 시스템에서 실행되는 동안 필요한 모든 정보를 저장합니다. 운영체제는 이 정보를 사용하여 프로세스를 관리하고, 효율적으로 스케줄링합니다. 특히, 컨텍스트 스위칭(context switching)이 발생할 때 PCB는 중요한 역할을 합니다. 컨텍스트 스위칭은 현재 실행 중인 프로세스의 상태를 저장하고, 다음 실행할 프로세스의 상태를 복원하는 과정입니다.

### **프로세스 스케줄링**

운영체제는 프로세스 스케줄러를 통해 프로세스의 실행 순서를 결정합니다. 이때 PCB는 프로세스의 상태 정보를 바탕으로 스케줄링 결정을 내리기 위해 사용됩니다. 예를 들어, 준비 상태에 있는 프로세스 중 우선순위가 높은 프로세스를 선택하여 실행합니다.

### 컨텍스트 스위칭

컨텍스트 스위칭은 실행 중인 프로세스의 상태를 PCB에 저장하고, 다른 프로세스의 상태를 PCB에서 불러오는 작업을 말합니다. 이는 멀티태스킹 시스템에서 여러 프로세스를 빠르게 전환하여 실행하는 데 필수적입니다.

* **절차**:
  1. 현재 실행 중인 프로세스의 상태를 PCB에 저장합니다.
  2. 다음 실행할 프로세스의 PCB를 불러와 상태를 복원합니다.
  3. CPU가 다음 프로세스를 실행합니다.
* **비용**: 컨텍스트 스위칭은 CPU 레지스터, 프로그램 카운터, 메모리 맵 등 많은 상태 정보를 저장하고 복원해야 하기 때문에 비용이 발생합니다. 빈번한 컨텍스트 스위칭은 시스템 성능을 저하시킬 수 있습니다.
* **캐시 미스**: 컨텍스트 스위칭 동안 프로세스의 메모리 주소가 변경되면 캐시 메모리에 있는 데이터가 무효화될 수 있습니다. 이로 인해 캐시 미스(cache miss)가 발생하여 메모리 접근 시간이 증가할 수 있습니다.

### 스레드에서의 컨텍스트 스위칭

컨텍스트 스위칭은 스레드에서도 발생합니다. 스레드는 프로세스 내에서 실행되는 작은 단위로, 동일한 메모리 공간을 공유합니다. 스레드 간의 컨텍스트 스위칭은 프로세스 간의 컨텍스트 스위칭보다 비용이 적게 들고 빠르게 수행됩니다. 이는 스레드가 스택 영역을 제외한 모든 메모리 영역을 공유하기 때문입니다.

#### 결론

PCB는 프로세스 관리의 핵심 요소로, 프로세스의 상태와 관련된 모든 정보를 저장하여 운영체제가 프로세스를 효율적으로 관리하고 스케줄링할 수 있도록 합니다. 또한, 컨텍스트 스위칭을 통해 멀티태스킹을 구현하는 데 중요한 역할을 합니다. PCB와 컨텍스트 스위칭의 원리를 이해하면 시스템 성능 최적화와 안정적인 운영체제 설계에 큰 도움이 됩니다.
