Context switch란?
- CPU 코어가 여러 개의 프로세스를 처리하기 위해 프로세스를 전환하는 것
- 프로세스에게 할당된 Time Quantum이 모두 소진되거나 I/O 호출 같은 Interrupt에 의해 발생
- Time Quantum : 프로세스가 한 번에 처리될 수 잇는 시간 총량. 사용자가 체감하지 못할 정도로 작음
- Interrupt : CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용하는 기능
- Context switch의 발생은 기존 수행하던 작업에서 새로운 작업으로 넘어가는 것을 의미함
- 새로운 작업을 불러올 수 있어야 할 뿐만 아니라 기존 수행하던 작업도 이어서 할 수 있도록 저장해야함
- 커널의 Dispatcher이라는 곳에서 담당하며 PCB(Process Control Block)이라는 자료구조를 이용함
- Context switch는 프로세스 간 발생하는 것이지만 쓰레드 간의 전환인 Thread switch도 이와 비슷함
Context switch의 동작 과정

- 위 그림에서 Context switch는 Interrupt에 의해 발생하지만 프로세스의 기록 자체는 시스템 콜에 기반함
- 시스템 콜의 호출에 따라 이전 프로세스의 내용을 PCB에 기록
- 다음 처리해야 하는 프로세스의 기록을 PCB에서 가져와 다음 프로세스를 실행
- Context switch는 Dispatcher에 의해 처리됨
- Dispacher의 호출은 Interrupt에 의해 발생
- Interrupt는 Preemptive Scheduling과 Non-Preemptive Scheduling으로 나뉨
- Preemptive Scheduling : Time Quantum을 모두 소진하여 운영체제 권한으로 프로세스의 권한을 뺏으면서 발생하는 Interrupt
- Non-Preemptive Scheduling : I/O 호출과 같이 프로세스가 스스로 CPU의 점유를 포기하면서 발생하는 Interrupt
PCB 자료구조

- PCB(Process Control Block)
- PCB는 프로세스마다 가지고 커널이 사용하는 메모리 공간에 위치함
- Context switch에 의해 PCB에 저장하는 내용들은 한 프로세스의 상태(State) 정보들
- State의 저장은 여러 차례의 메모리 참조를 요구하기 때문에 많은 CPU 연산을 요구함
- State의 크기가 크면 클수록 Context switch를 위한 CPU 연산 손해가 더욱 커짐
- State 정보를 읽어오는 시간만큼 프로세스 처리에 사용할 수 있는 자원이 줄어드는 것
- 프로세서의 종류에 따라(CISC 구조, RISC 구조) Context switch의 연산 소모량이 다를 수 있음
- 하지만 Context switch는 결고 가벼운 작업이 아님
- 시스템 콜 도중에는 Context switch가 발생하지 않음
