문제1
1. 프로세스는 CPU를 점유하여 작업을 처리하다가도 상태가 전이되면, 진행중인 작업 내용들을 모두 정리하고 CPU를 반환해야 한다.
2. 이때, 진행하던 작업들을 모두 저장하지 않으면 다음에 자신의 순서가 왔을 때 어떤 작업을 해야하는 지 알 수 없는 사태가 발생한다.
3. 이러한 사태를 막기 위해 운영체제가 프로세스를 식별할 수 있도록 프로세스에 관한 모든 정보가 있어야 한다.
문제2
운영체제의 스케줄링을 생각해보자.
1. 스케줄링은 큐(queue) 자료구조를 이용하는데, 큐 안에 각 프로세스에 대한 모든 정보를 넣는 것은 비효율적이며 메모리 소모가 클 수 있다.
2. 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 큐에는 PCB 주소를 저장한다.
3. 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행할 수 있게 된다.
프로세스에 관한 정보를 담는 PCB에는 어떤 정보들이 담길까?
PCB의 구성 요소에 대해 알아보자.

프로세스 식별자(PID, Process ID)
: 유닉스, 맥 OS X 또는 마이크로소프트 윈도우 등의 운영 체제 커널이 사용되는 번호
프로세스 상태(Process State)
: 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태가 저장된다.
유예준비상태(suspended ready), 유예대기상태(suspended wait)는 주기억장치(스택)가 아닌 보조기억장치(디스크)에 저장된다.
프로그램 계수기(Program Counter)
: 프로세스가 다음에 실행할 명령어의 주소를 가리키는 것
CPU 레지스터 및 일반 레지스터(CPU Registers)
: 프로세스의 레지스터 상태를 저장하는 공간
CPU 스케줄링 정보(Scheduling Information)
: 우선순위, 최종 실행시각, CPU 점유시간 등
메모리 관리 정보(Memory Management Information)
: 해당 프로세스의 주소 공간
프로세스 계정 정보(Accounting Information)
: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
입출력 상태 정보(I/O Status Information)
: 프로세스에 할당된 I/O 디바이스 정보, 열린 파일 목록 등
문맥 저장 영역(Context Save Area)
: 프로세스의 레지스터 문맥(register context)를 저장하는 공간
포인터(Pointer)
: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등
참고
운영체제, Abraham Silberschatz
PCB(Process Control Block)란?
Process Identifier
Program Counter