프로세스 제어 블록(PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조임, 운영 체제가 프로세스를 표현한 것이라고 볼 수 있음
운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스라고 볼 수 있음
각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됨
프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행할 수 있게 됨
PCB는 프로세스의 중요한 정보를 포함하고 있어서, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남음
아래와 같이 프로세스 테이블을 사용하여 각 프로세스의 PCB를 관리함
위와 같이 PCB에는 다양한 정보가 들어있음
프로세스 식별자(Process ID)
프로세스 상태(Process State) : 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태가 있음
프로그램 카운터(PC) : 프로그램 카운터는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킴
CPU 레지스터 및 일반 레지스터
CPU 스케줄링 정보 : 우선 순위, 최종 실행시각, CPU 점유시간 등
메모리 관리 정보 : 해당 프로세스의 주소 공간
프로세스 계정 정보 : 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
입출력 상태 정보 : 프로세스에 할당된 입출력장치 목록, 열린 파일 목록
포인터 : 부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등
Context Switching은 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전의 프로세스의 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말함(한 프로세스의 Context는 그 프로세스의 PCB에 기록되어 있음)
여기서 인터럽트 요청 역시 이런 상황에 똑같이 적용됨
이 Context Swithcing은 먼저 작업에 대한 대부분 정보는 Register의 저장되고 PCB로 관리되고 있음, 그럼 현재 실행하고 있는 작업의 PCB 정보를 저장하고 다음 실행할 작업의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있음
여기서 Context Switching의 경우 발생시 Cache 초기화, Memory Mapping 초기화, Kernel은 항상 실행되어야 하는 많은 비용이 소모됨, 어떻게 보면 이 시점 동안은 유용한 작업을 수행하기가 힘듬, 그래서 일종의 오버헤드라고도 볼 수 있음, 상황에 따라 비효율일 수 있음
그리고 Thread보다 Process가 비용이 더 많이 듬