목차
PCB
프로세스 제어 블록(Process Control Block, PCB)은 운영 체제에서 프로세스에 대한 정보를 관리하는 데이터 구조입니다.
이 정보에는 프로세스 식별자, 프로세스 상태, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 메모리 관리 정보, 입출력 상태 정보 등이 포함됩니다.
PCB의 역할
1. 프로세스 식별
•
역할 : 각 프로세스는 고유한 식별자(Process ID, PID)를 가지며, 이를 통해 운영 체제는 각기 다른 프로세스를 구별할 수 있습니다.
•
예시 : 프로세스가 생성될 때, 운영 체제는 각 프로세스에 대한 PCB를 생성하고, 고유한 PID를 할당합니다. 예를 들어, 운영 체제가 프로세스 A를 생성할 때 PID 101을, 프로세스 B를 생성할 때 PID 102를 할당할 수 있습니다.
2. 프로세스 상태 관리
•
역할 : PCB는 프로세스의 현재 상태(생성, 실행, 준비, 대기, 종료)를 기록하여, 운영 체제가 CPU 스케줄링 및 프로세스 간 동기화를 적절히 할 수 있도록 합니다.
•
예시 : 프로세스 A가 CPU를 사용하고 있을 때, I/O 작업을 요청하면 그 상태는 실행 중에서 대기 상태로 변경됩니다. 운영 체제는 PCB를 확인하여 프로세스 A의 상태를 대기로 변경하고, CPU가 사용 가능해짐에 따라 다른 프로세스를 실행 상태로 전환할 수 있습니다.
프로세스 상태 관리에 대한 부분은 CPU 스케줄링을 다루는 페이지에서 자세히 설명하겠습니다.
3. 프로세스 실행 정보 관리
•
역할 : PCB는 프로그램 카운터, CPU 레지스터 값, 메모리 관리 정보, 입출력 상태 정보 등 프로세스 실행에 필요한 모든 정보를 저장합니다.
•
예시 : 프로세스가 실행되는 도중에 시스템이 다른 프로세스로 전환(컨텍스트 스위칭)해야 할 경우, 현재 실행 중인 프로세스의 CPU 레지스터 값과 프로그램 카운터 값을 PCB에 저장합니다. 이를 통해 나중에 해당 프로세스가 다시 CPU를 할당받았을 때, 마지막에 중단된 지점부터 실행을 재개할 수 있습니다.
4. CPU 스케줄링 정보 관리
•
역할 : PCB는 프로세스 우선순위, 스케줄링 큐 정보 등 CPU 스케줄링에 필요한 정보를 포함합니다.
•
예시 : 운영 체제가 여러 프로세스 중 어떤 프로세스에 CPU를 할당할지 결정할 때, PCB에 저장된 우선순위 정보를 참조합니다. 예를 들어, 실시간 작업을 수행하는 프로세스는 높은 우선순위를 부여받아, CPU를 더 빈번하게 할당받을 수 있습니다.
컨텍스트 스위칭에서의 PCB
컨텍스트 스위칭 과정
1.
현재 프로세스의 상태 저장
•
현재 CPU에서 실행 중인 프로세스를 중단하기 전에, 그 프로세스의 현재 상태를 저장해야 합니다. 이 상태에는 CPU 레지스터 내용, 프로그램 카운터, 스택 포인터, 프로세스 상태, 메모리 관리 정보 등이 포함됩니다.
•
예를 들어, 프로세스 A가 실행 중이라고 가정해봅시다. 운영 체제는 프로세스 A의 PCB에 CPU 레지스터 값들과 프로그램 카운터 값을 저장합니다. 이 정보는 프로세스 A가 나중에 다시 실행될 때, 마지막으로 실행되던 지점부터 계속될 수 있게 해줍니다.
2.
CPU 레지스터와 프로그램 카운터의 저장
•
프로그램 카운터는 다음에 실행할 명령어의 주소를 가리키며, CPU 레지스터는 현재 실행 중인 프로세스의 중간 계산 결과, 변수 등을 저장합니다.
•
이 단계에서 운영 체제는 현재 프로세스 A의 프로그램 카운터와 레지스터 값을 PCB에 기록합니다.
3.
새 프로세스의 상태 복원
•
다음에 실행할 프로세스의 PCB에서 상태 정보를 읽어와 CPU 레지스터와 프로그램 카운터에 로드합니다. 이 과정을 통해 프로세스 B는 마지막으로 실행되던 지점부터 작업을 재개할 수 있습니다.
4.
실행 전환
•
모든 상태 정보가 새 프로세스로 복원되면, CPU는 새 프로세스의 실행을 시작합니다. 이 때, 운영 체제는 새 프로세스의 PCB를 기반으로 프로세스 B의 실행 환경을 완전히 복구합니다.
예시
1.
운영 체제는 프로세스 A가 현재 사용 중인 CPU 레지스터의 값과 프로그램 카운터값을 프로세스 A의 PCB에 저장합니다.
2.
PCB에는 프로세스 A의 메모리 할당 정보, 열린 파일 목록, I/O 상태 정보 등도 저장됩니다.
3.
운영 체제는 스케줄러를 통해 프로세스 B를 다음 실행 대상으로 선택합니다.
4.
프로세스 B의 PCB에서 CPU 레지스터 값, 프로그램 카운터, 메모리 상태 등을 복원하여 CPU에 로드합니다.
5.
이제 CPU는 프로세스 B의 마지막 실행 지점부터 명령어 실행을 재개합니다.
PCB의 구성 요소
1. 프로세스 식별자(Process Identifier, PID)
•
프로세스의 고유한 식별 번호입니다. 이를 통해 운영 체제는 각각의 프로세스를 구분하고 관리할 수 있습니다.
2. 프로세스 상태(Process State)
•
프로세스의 현재 상태를 나타냅니다. 상태에는 생성, 준비, 실행, 대기, 종료가 있습니다.
3. 프로그램 카운터(Program Counter)
•
프로세스가 다음에 실행할 명령어의 주소를 가리킵니다. 이를 통해 프로세스가 현재 어디에 위치해 있는지 알 수 있습니다.
4. 레지스터 정보
•
CPU 레지스터의 현재 값을 저장합니다. 이는 프로세스의 현재 작업 상태를 나타내며, 컨텍스트 스위칭 시 저장되어 후에 프로세스가 재개될 때 중요합니다.
레지스터의 각 정보들에 대해선 다음 레지스터 페이지에서 자세히 설명하겠습니다.
5. 메모리 관리 정보
•
프로세스가 사용하는 메모리 주소 공간에 대한 정보를 포함합니다. 베이스 레지스터, 한계 레지스터, 페이지 테이블, 세그먼트 테이블 등이 이에 해당합니다.
이 부분에서는 레지스터의 정보뿐만 아니라 가상 메모리에 대한 페이지를 자세히 설명하겠습니다.
현재로서는 프로세스 별로 이전에 설명했던 코드, 데이터, BSS, 힙, 스택 메모리 영역을 따로 관리한다는 것만 알고 계시면 됩니다.
6. 계정 정보(Accounting Information)
•
프로세스 실행에 소요된 CPU 시간, 제한 시간, 프로세스 ID, 프로세스가 시작된 시간 등의 실행 통계 정보를 포함합니다.
7. I/O 상태 정보
•
프로세스에 할당된 입출력 장치, 열린 파일 목록, 입출력 요청의 상태 등 프로세스의 입출력 관련 정보를 포함합니다.
8. CPU 스케줄링 정보
•
프로세스 우선순위, 스케줄링 큐에 대한 포인터, 스케줄링에 관련된 다른 파라미터 등 CPU 스케줄링 결정에 필요한 정보를 포함합니다.