[OS] PCB & Context Switching

do_it·2025년 10월 16일

os

목록 보기
5/13

1. PCB (Process Control Block)

1-1. PCB란?

운영체제가 각 프로세스의 상태를 관리하기 위해 저장하는 정보를 저장하는 자료구조

⇒ 프로세스의 모든 중요 정보를 담고 있는 스냅샷의 역할

OS가 프로세스를 실행/중단하거나, 재개할 때 그 프로세스의 모든 문맥(context)을 기억하기 위한 일종의 메모리 기록장 같은 역할을 함

OS는 이 PCB를 통해 프로세스의 상태를 파악하고, CPU 자원을 할당

  • 어디에 존재하는가?
    PCB는 프로세스의 가장 중요한 정보를 담고 있으므로, 일반 사용자 프로그램이 임의로 접근하거나 수정하지 못하도록 운영체제의 커널 영역 내부에 생성되고 관리됨
    유저 프로세스는 PCB에 직접 접근할 수 없음 (보안)
    커널은 모든 프로세스의 PCB를 프로세스 테이블에 모음
    OS의 프로세스 테이블 = 여러 개의 PCB 집합
  • 생성과 소멸
    프로세스가 생성될 때 PCB가 만들어지고, 프로세스가 종료될 때 PCB도 폐기됨

1-2. PCB의 역할

OS는 동시에 여러 프로세스를 실행해야 함

그래서 CPU가 어떤 프로세스를 실행하다가 다른 프로세스로 전환할 때 (Context Switching),

현재 프로세스의 상태를 저장하고 나중에 복원해야 함
이 때 그 정보를 PCB에 기록함

  1. 프로세스의 실행 상태 보존 (context saving)
    프로세스의 현재 상태(준비, 실행, 대기 등)를 기록하여 스케줄러가 다음 실행할 프로세스를 결정하는 데 사용 → 문맥 교환에 핵심 도구
  2. 스케줄러가 프로세스들을 효율적으로 관리하도록 지원

1-3. PCB에 저장되는 주요 정보

Process Control Block (PCB)
 ├─ Process ID: 1032
 ├─ Process State: Running
 ├─ Program Counter: 0x0045AF20
 ├─ CPU Registers: {EAX=5, EBX=10, ...}
 ├─ Memory Info: Base=0x1000, Limit=0x5FFF
 ├─ I/O Info: File descriptor table, I/O queue pointers
 └─ Accounting Info: CPU time=12ms, Priority=3

OS마다 구조는 다르지만, 일반적으로 다음 항목들을 포함함
다음의 정보들이 있어야 중단된 프로세스가 나중에 정확하게 이어서 실행할 수 있음

  1. 프로세스 식별 정보 (Process Identification)
  • 프로세스 식별자 (PID, Process D): 각 프로세스를 구분하는 고유 ID (번호)
  • Parent Process ID: 해당 프로세스를 생성한 부모 프로세스의 ID
  1. 프로세스 상태 정보 (Process State)
  • 프로세스 상태 (State): 현재 프로세스가 어떤 상태인지 나타냄
    생성(New), 실행 중(Running), 대기(Waiting), 준비(Ready), 종료(Terminated)
  • 프로그램 카운터 (PC, Program Counter): 다음에 실행한 명령어의 주소
  • CPU 레지스터 값: CPU 내 산술 레지스터, 인덱스 레지스터, 스택 포인터 등 현재 값
    이 값들이 있어야 프로세스가 중단되기 전과 동일한 환경에서 재개될 수 있음
  1. 프로세스 제어 정보 (Process Control)
  • 스케줄링 정보: 프로세스의 우선순위, 스케줄링 큐 포인터 등 CPU 할당 순서를 결정하는데 사용
  • 메모리 관련 정보: 프로세스가 사용하는 메모리영역(코드, 데이터, 스택 등)의 시작 주소, 경계 레지스터 값, 페이지 테이블 정보 등
  • 계정 정보 / 자원 정보: CPU 사용 시간, 우선 순위, 사용자 ID 등
  • I/O 상태 정보: 파일 드스크립터 목록, 열린 파일, 입출력 장치, 버퍼 등 관련 정보

2. 문맥 교환 (Context Switching)

문맥 교환?

⇒ CPU의 제어권을 현재 실행 중인 프로세스(A)에서 다른 프로세스(B)로 넘기는 과정

하나의 프로세스 실행을 멈추고 다른 프로세스로 CPU 제어권을 넘겨줄 때,
중단된 프로세스의 현재 상태(CPU 레지스터 값, 프로그램 카운터 등의 Context)를 PCB에 저장
이후 해당 프로세스가 다시 CPU를 할당받을 때, PCB에 저장된 정보를 복원하여
중단했던 지점부터 상태를 PCB로부터 불러와 CPU 레지스터에 로드하는 일련의 작업

[목적] 시분할 시스템

단일 코어 CPU 환경에서 여러 프로세스가 짧은 시간 간격으로 CPU를 번갈아 사용하게 하여,
사용자에게 모든 프로그램이 동시에 실행되는 것처럼 느끼게 하기 위함

문맥 교환 과정

  1. 현재 Context 저장 (Context Save)
    1- 인터럽트 / 시스템 호출 발생으로 현재 실행중인 프로세스가 중단됨
    2- 상태 기록: 현재 시점의 CPU 레지스터 값, 프로그램 카운터, 스택 포인터 등 모든 실행 문멕을 PCB에 저장
  2. 다음 프로세스 선택 및 교체
    1 - 스케줄링:
    OS의 스케줄러가 준비 상태에 있는 프로세스들 중에서 다음 실행할 프로세스를 선택
    2- PCB 포인터 변경: CPU가 바라보는 PCB의 포인터를 다음 프로세스로 변경
  3. Context 복원 (Context Restore)
    1 - 상태 로드:
    OS는 선택된 프로세스의 PCB에 저장되어 있던 문맥 정보를 CPU 레지스터로 로드하여 복원
    2- 실행 재개: 복원된 PC가 가리키는 주소부터 실행을 재개

문맥 교환 발생 시점

자발적 / 비자발적

  • 시분할 (Time Sharing) / 타이머 인터럽트: 비자발적 특정 프로세스에 할당된 CPU 사용 시간(Time Slice)이 만료되었을 때,
    다른 프로세스에게 CPU를 넘겨주기 위해 발생
  • 시스템 호출 (System Call) / I/O 대기: 자발적 프로세스가 파일 입출력(I/O)과 같은 느린 작업이 필요하여 운영체제에 요청(시스템 호출)하고, 그 결과가 나올 때까지 대기 상태(Waiting)로 전환될 때 발생
  • 우선순위가 높은 프로세스 등장: 비자발적 현재 실행 중인 프로세스보다 우선순위가 훨씬 높은 새로운 프로세스가 준비 상태로 들어왔을 때, 기존 프로세스를 중단시키고 제어권 넘김

문맥 교환의 오버헤드

  • 시간 비용 (Latency)
    문맥 교환이 일어나는 동안 CPU는 사용자 프로세스의 명령어를 실행하지 않고 PCB에 상태를 저장 및 복원하는 OS 코드를 실행하는 데 시간이 소비
  • 캐시 미스 (Cache miss)
    문맥 교환 발생 시 CPU 캐시 메모리에 들어있던 이전 프로세스의 데이터는 더 이상 필요 없어짐
    새로운 프로세스의 데이터를 위해 캐시를 비우거나 새로운 데이터를 로드하는 과정에서 캐시 미스 발생 확률이 높아짐

0개의 댓글