task control block 이라고도 불리며, 특정한 프로세스에 대한 정보를 포함하는 운영체제 커널의 자료구조. 물리적 저장공간이 아님.
CPU는 여러 프로세스들을 번갈아가며 처리하는데, 이때 프로세스가 전환되는 과정을 context switching 문맥전환이라 한다. context switching이 일어날 때 작업중이던 프로세스는 어디까지 작업이 되었는지에 대한 정보를 저장해두어야 다음에 다시 작업을 재개할 때 이어서 작업할 수 있다. 이러한 정보를 담아두는 곳이 PCB 이다.
각 프로세스가 생성될 때 마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
프로세스 고유 식별자
프로세스 상태 정보: new, running, waiting, halted etc.
해당 프로세스에서 다음에 실행되어야 할 명령어의 주소값을 가리킴
컴퓨터 아키텍쳐에 따라 그 숫자와 종류가 달라진다.
accumulators, index register, stack pointers, general-purpose registers 와 그 외에도 condition-code information을 포함한다.
program counter와 마찬가지로, 인터럽트가 발생하면 상태가 저장되어야 다음에 프로세스의 작업이 이어서 이루어진다.
CPU 스케줄링 정보: 우선순위, 최종 실행시각, CPU 점유시간 등
메모리 관리 정보: 해당 프로세스의 주소 공간 등
프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
프로세스에 할당된 입출력 장치 목록, 열린 파일 목록 등
부모 프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때, 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.
context switching을 하는 주체는 OS 스케줄러로, 이 일어나는 동안 CPU는 아무일도 할 수 없다. 따라서 잦은 문맥교환은 overhead를 발생시켜 효율/성능이 떨어지게 된다.
현재 실행하고 있는 Task의 PCB정보를 저장 (Process Stack, Ready Queue)
Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있게 됨
cache 초기화
memory mapping 초기화
메모리 접근을 위해 kernel은 항상 실행
process vs. thread
: context switching 비용은 process가 thread보다 많이 듬. thread는 stack영역을 제외한 모든 메모리를 공유하기때문에 context switching 시 stack영역만 변경하면 되기 때문