하나의 컴퓨터에서 여러 개의 프로세스를 구동할 때, CPU 스케줄링을 통해 프로세스를 관리하는 것
Process Metadata: 프로세스 식별에 필요한 각 프로세스의 정보(특징)
Process Metadata에 포함된 정보
- Process ID(PID) : Process Identification Number, 프로세스 고유 식별 번호
- Process State (프로세스 상태) : Ready, Execute, Wait 등 프로세스의 현재 상태
- Program Counter(PC) : 현재 프로세스가 다음으로 수행할 명령의 주소
- Register Information (CPU 레지스터) : CPU 내부의 범용 레지스터(AX, BX, CX, DX), 데이터 레지스터(SP, BP, SI, DI), 세그먼트 레지스터(CS, DS, ES, SS) 등이 갖고 있는 값
- Scheduling Information (스케줄링 정보) : 프로세스의 우선순위(priority), 최종 실행 시간, 스케줄링 큐를 가리키는 포인터 등
- Memory Related Information (메모리 관련 정보) : Page Table, Segment Table의 Base, Limit 값
- Accounting Information (계정 정보) : CPU 사용 시간, 시간 제한 등
- I/O Status Information (입출력 정보) : 프로세스에 할당된 I/O 디바이스 관련 정보
Process Metadata는 각 프로세스의 PCB에 저장된다.
Process Metadata를 저장하는 공간. 하나의 PCB 안에 한 프로세스의 정보가 저장된다.
CPU에서는 프로세스 교체 작업이 이루어지는 경우가 있는데, 이 때 현재 프로세스의 상태를 PCB에 저장하면 다음에 프로세스가 실행될 때 PCB에 저장된 데이터를 기반으로 작업을 연속적으로 수행할 수 있다.
CPU가 현재 실행중인 프로세스/스레드의 상태를 저장하고, 다음에 실행할 프로세스/스레드의 Context(문맥 - 상태 및 Register 값 정보)를 읽어 새로운 Context 정보로 교체하는 과정
CPU가 이전의 프로세스 상태를 PCB에 저장하고, 다른 프로세스의 정보를 PCB에서 읽어서 Register에 로드하는 과정
Context Switching이 일어나는 경우: 다른 프로세스에 의해 Interrupt 발생 / 실행 중인 프로세스가 CPU 사용 허가 시간을 모두 소모 / 입출력을 위해 대기해야 하는 경우
Ready -> Running / Running -> Ready / Running -> Block 등 프로세스의 상태 변화가 필요할 때 발생
- 프로세스 P1에서 Interrupt 발생
- 실행 중인 프로세스 P0의 상태 정보를 P0의 PCB에 저장
- P0을 Running -> Waiting 상태로 변경
- P1을 Wating/Ready -> Running 상태로 변경
- P1의 PCB에 저장된 데이터를 기반으로 작업 수행
- 작업을 수행한 후, P1의 상태 정보를 P1의 PCB에 저장
- P1을 Running -> Wating 상태로 변경
- P0을 Waiting -> Running 상태로 변경
- P0의 PCB에 저장된 데이터를 기반으로 작업 수행
Context Switching 발생 시 소요되는 비용
1. Cache, Register 초기화
2. Memory Mapping 초기화
3. 메모리에 접근하기 위해 Kernel 실행
=> Context Switching이 빈번하게 일어나는 경우 성능 저하 가능성
Context Switching 시 Overhead가 발생하지만, I/O 이벤트 대기 등으로 프로세스가 다음 작업을 수행할 수 없는 상황인 경우 CPU가 다른 작업(다른 프로세스 실행)을 함으로써 효율성을 높이기 위해 overhead를 감수하고 Context Switching을 수행한다.
하지만 Context Switching이 너무 자주 발생하는 경우 성능이 저하될 수 있기 때문에, Time quantum 등을 적절하게 설정하여 Overhead를 관리하는 것이 필요하다.