프로세스는 컴퓨터에서 연속적으로 실행되고 있는 동적인 상태의 컴퓨터 프로그램, 즉 하나의 작업 단위이다. 프로세스는 여러 가지 특징을 가지고 있는데, 이러한 특징을 Process Metadata라고 한다.
- process-id : 새로운 프로세스에 시스템이 할당해주는 고유 id
- process- state : 프로세스의 라이프 타임과 관련된 상태로, waiting, running, ready, blocked, end, suspend-wait, suspend-ready 가 있다
- priority : 프로세스 스케줄링을 위한 우선순위이다
- Process Accounting Information : CPU를 사용한 시간, CPU 할당 시간 등이 있다
- Program Counter : 이전에 배운 PC로 다음 작업할 명령어 위치를 기억한다
- List of Open Files : 실행 중에 프로그램에 필요한 모든 파일의 정보를 포함한다
- Process I/0 status information : 해당 프로세스가 실행 중에 할당을 요구한 I/O 장치에 대한 정보를 담는다
- CPU 레지스터 : context switch가 발생하면 이 때의 레지스터 정보를 기억해서 다시 프로세스가 CPU 할당을 받으면 사용한다. accumulator, index, stack pointer 와 같은 레지스터의 값이 저장된다
- PCB Pointer : 준비중인 다음 프로세스의 주소를 가리킨다. 준비 상태나, 대기 상태의 큐를 구현할 때 다음을 가리키는 포인터로 사용된다
- Memory management information : 메모리 관리 정보로 프로세스가 메모리의 어디에 있는 지 나타내는 메모리 정보와 메모리 보호를 위한 경계 레지스터, 한계 레지스터 값등이 저장된다. 또한, segmentation table , page table 등 정보도 보관한다
- PPID, CPID : 부모 프로세스를 가리키는 PPID, 자식 프로세스를 관리하는 CPID가 저장된다.
운영체제가 프로세스를 제어하기 위해 프로세스 메타데이터들을 저장해 놓는 곳이다. 하나의 PCB 안에는 하나의 프로세스의 정보가 담겨있다.
- 프로그램 실행
- 프로세스 생성 (프로그램을 메모리에 적재)
- 프로세스 메타 데이터 생성
- 메타 데이터를 PCB에 저장
이때, 한 PCB에는 한 프로세스의 정보가 담긴다.
Process State : 프로세스 상태(Create, Ready, Running, Block, terminated)
Process Counter : 다음 실행할 명령어의 주솟값
CPU Registers : accumulator, index register, stack pointers, general purpose registers.
CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에서 읽어서 레지스터에 적재하는 과정
보통 인터럽트가 발생하거나, 실행 중인 CPU 사용 허가시간을 모두 소모하거나, 입출력을 위해 대기해야 하는 경우에 Context Switching이 발생한다.
Task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리가 되고 있습니다.
현재 실행하고 있는 Task의 PCB 정보를 저장하게 됩니다.(Process Stack, Ready Queue)
다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있게 됩니다.
Context Switching이 발생하게 되면 다음과 같은 Cost가 소요됩니다.
Cache 초기화
Memory Mapping 초기화
메모리의 접근을 위해서 Kernel은 항상 실행되어야 합니다.
따라서 잦은 Context Switching은 성능 저하를 가져옵니다.
PCB에는 프로세스 ID, 각종 메모리나 중간값과 같은 프로세스 메타 데이터를 저장하는 공간이다. PCB에 저장된 정보를 통해 CPU는 각 프로세스를 구분하고 관리할 수 있으며, Context Switching이 발생하였을 때 이를 이용한다.
CPU는 한 번에 하나의 프로세스만 수행할 수 있지만, 실생활에서 우리는 여러 개의 프로세스를 동시에 수행하고자 한다. 따라서 CPU는 여러 개의 프로세스를 번갈아가면서 수행함으로써 동시에 수행하는 것처럼 보이게 하기 위하여 Context Switching을 사용한다.