본문 바로가기
CS/운영체제

8. 프로세스 제어 블록 (PCB, Process Control Block)

by D.O.T 2024. 4. 21.
PCB란?

 

프로세스 제어 블록은 프로세스 정보를 담고 있는 하나의 단위이다.

PCB 하나에는 프로세스 정보(PID, PPID, Process Status, ... )를 가지고 있다.

해당 내용은 외우고 있을 필요는 없다. 실제 시스템 프로그래밍을 하게 될 때, 이 정보를 컨트롤하게 된다.

 

PCB가 왜 필요할까?

 

다중 프로그래밍 기법을 생각해보자. 중간에 인터럽트가 발생해서 CPU가 처리하고 있던 프로세스를 잠시 인터럽트 처리하고 다른 프로세스를 발생해야한다. 그 이유는 CPU Idle Time을 줄이기 위해서이다.

이 때, 다른 프로세스를 실행하고 interrupt가 종료되면 기존의 프로세스를 이어서 처리해야한다. 

여기서 기존의 프로세스로 전환하는 과정을 컨텍스트 스위칭(Context Switching)이라고 한다.

 

컨텍스트는 현재 실행중인 프로세스의 정보를 담고있는 내용이다. 적재중인 메모리의 시작 주소, 처리중인 CPU의 레지스터 값(현재 처리 중인 메모리의 주소) 등의 내용을 담고있다.

 

프로세스의 상태

 

컨텍스트 스위칭이 발생하는 시점과 과정을 알려면 프로세스의 상태를 알고 있어야 한다.

 

1. 우리가 exe 파일을 더블클릭해서 목적 프로그램이 메모리에 적재될 때, 생성 상태(New)라고 한다.

2. 기존의 처리중인 프로세스가 있을테고 추가로 실행된 프로세스를 처리하기 위해 실행한 프로세스를 Ready Queue에 삽입한다.이 때, PCB 자료구조로 프로세스 정보가 저장되어 Ready Queue에 삽입되고 대기 상태(Ready)라고 한다.

3. 이전 프로세스 처리가 끝났거나 Time Slice에 의해 Ready 상태인 PCB를 꺼내어 CPU에게 처리를 맡긴다. 이 과정을 실행 상태 (Running) 이라고 한다. 이 때, 처리 중인 PCB의 시간 할당량이 다되면 현재까지 처리한 CPU 상태 (컨텍스트)를 다시 PCB로 저장하여 Ready 상태로 변경한 뒤 ReadyQueue에 삽입한다.

4. 3번 과정 중 Interrupt가 발생한다면 프로세스의 상태는 블록 상태(Blocked/Wait)가 된다. Interrupt 처리가 끝나게 되면 다시 Ready 상태로 바뀌어 2번 과정으로 돌아가는데 정확히는 System Call과 Interrupt를 처리하고있다.

5. 프로세스는 자식을 생성하는데 만약, 부모 프로세스보다 자식 프로세스가 먼저 종료되었다면 부모 프로세스가 자식 프로세스의 정보를 확인하기 전까지 좀비 상턔(Terminated/Zombie)가 된다. 이 때, 좀비 프로세스는 자원은 모두 반납하고 PCB에 종료코드를 남기고 있다.

6. 부모 프로세스가 Zombie 상태인 자식 프로세스 정보를 읽었을 때, 종료 상태(Terminated/Out)가 된다. 이 때, PCB는 완벽하게 제거 되었다.

 

즉, PCB는 생성 당시 만들어지고 컨텍스트 스위칭은 3번과정에서 발생하게 된다.

 

프로세스 테이블

 

PCB 정보는 프로세스 테이블에서 확인할 수 있는데 windows의 경우 cmd에서 tasklist나 작업 관리자에서 확인할 수 있다.

cmd - tasklist
작업 관리자 - 자세히

 

'CS > 운영체제' 카테고리의 다른 글

10. 스레드 (Thread)  (0) 2024.04.21
9. 프로세스 계층 구조  (1) 2024.04.21
7. 프로세스 (Process)  (0) 2024.04.21
6. 커널 (Kernal)  (0) 2024.04.21
5. 운영체제의 역할  (1) 2024.04.21