프로세스 제어 블록(PCB)
운영체제에서 각 프로세스는 프로세스 제어 블록(PCB, Process Control Block)이라는 데이터 구조로 관리됩니다. PCB는 특정 프로세스와 관련된 모든 중요한 정보를 저장하며, 프로세스의 상태와 작업 흐름을 유지하는 데 핵심적인 역할을 합니다. PCB는 태스크 제어 블록(Task Control Block)으로도 불린다.
//PCB는 프로세스의 상태를 저장하는 데이터 구조(구조체)이지 실제 정보는 아니다.
PCB에 포함된 정보
리눅스 커널에서 PCB(Process Control Block)는 task_struct 구조체로 구현되어 있다. 이 구조체는 프로세스와 관련된 모든 정보를 저장하며, 각 프로세스의 상태를 관리하는 핵심 데이터 구조이다. task_struct는 커널 소스 코드에서 include/linux/sched.h 파일에 정의되어 있다.
항목 | 설명 |
프로세스 식별자 | 프로세스 ID(PID) |
프로세스 상태 | 프로세스의 현재 상태 (New, Ready, Running, Waiting, Terminated 등) |
프로그램 카운터 | 다음 실행할 명령어의 주소를 가리킴
인터럽트(중단) 후 정확히 이어서 실행 가능 |
CPU 레지스터 | CPU의 현재 상태 정보를 저장
Accumulator, General Register 등을 포함한 CPU 레지스터 값을 저장
(누산기, 스택 포인터, 프로그램 상태 레지스터, 조건 코드 등) |
CPU 스케줄링 정보 | 프로세스 우선순위, 스케줄링 큐 포인터, 시간 제한 등 스케줄링 관련 데이터를 저장 |
메모리 관리 정보 | 프로세스의 메모리 공간 정보
(기본/한계 레지스터, 페이지 테이블, 세그먼트 테이블 등) |
I/O 상태 정보 | 프로세스가 사용하는 I/O 장치 및 열린 파일 목록, 현재 I/O 작업 상태 저장 |
계정 정보 | 프로세스 실행 자원 사용량
(CPU 사용량, 실행 시간, PID, 사용자 계정 정보 등) |
PCB 관리 방식
•
PCB는 연결 리스트, 트리 구조, 또는 해시 테이블로 관리된다.
•
스케줄링 시 운영체제는 이러한 구조를 탐색하여 실행할 프로세스를 결정한다.
PCB 역할
프로세스 상태 유지
•
PCB는 프로세스의 실행 중단 시 상태를 저장(save)하고, 실행 재개 시 해당 상태를 복구(reload)한다.
•
이는 멀티태스킹 환경에서 여러 프로세스를 효율적으로 관리하는 데 필수적이다.
운영체제의 프로세스 관리
•
PCB는 운영체제가 프로세스를 스케줄링하고 자원을 할당하는 데 필요한 모든 정보를 제공한다.
•
각 프로세스는 고유한 PCB를 가지며, PCB를 통해 운영체제는 프로세스를 식별하고 제어할 수 있다.
보안 및 안정성
•
PCB는 커널 공간(Kernel Space)에 저장된다.
•
사용자 프로세스가 직접 수정하거나 접근할 수 없으므로 프로세스 간 간섭을 방지한다.
•
사용자 공간(User Space)로부터 보호되어 시스템 안정성을 보장한다.
PCB와 프로세스 상태 간 전환
PCB는 프로세스 상태 변경 시 중요한 정보를 업데이트 하며, 운영체제는 이를 기반으로 프로세스를 적절히 관리한다.
상태 전환 | 발생 조건 |
New → Ready | 프로세스 생성 후 실행 준비 완료 |
Ready → Running | CPU가 프로세스를 할당받아 실행 시작 |
Running → Waiting | I/O 작업 등으로 인해 이벤트 대기 상태로 전환 |
Waiting → Ready | 대기 중인 이벤트 발생 후 실행 준비 상태로 전환 |
Running → Ready | CPU 할당이 다른 프로세스로 넘어가면서 준비 상태로 전환 |
Running → Halted | 프로세스가 종료됨 |
컨텍스트 스위칭(Context Switching) 중, CPU는 현재 실행중인 프로세스의 PCB 정보를 저장하고, 새로운 프로세스의 PCB 정보를 로드한다. 이 과정에서 PCB의 정보(프로그램 카운터, 레지스터 상태 등)는 정확히 보존되어야 한다.
마무리
PCB는 운영체제가 프로세스를 효율적으로 관리하고, 상태를 유지하며, CPU 자원을 효과적으로 스케줄링 할 수 있도록 돕는 핵심 데이터 구조이다. PCB는 프로세스 간 격리와 안정성을 보장하며, 멀티태스킹 시스템에서 필수적인 역할을 수행한다.
Related Posts
Search