Context Switching(컨텍스트 스위칭)은 여러 프로세스를 처리해야 하는 멀티 프로세스 상황에서 인터럽트(interrupt)에 의해 현재 진행중인 Task(Process, Thread)의 상태 또는 레지스터 값(Context)을 PCB(Process Control Block)에 저장하고 CPU가 다음 프로세스를 처리할 수 있도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 작업이다.
🤔 Context가 무엇인가?
OS에서의 컨텍스트란 CPU가 해당 프로세스를 실행하기 위한 프로세스의 정보를 말하는 것이다.
다음의 3가지 경우에 일어난다.
1. Multi-Tasking(멀티태스킹)
여러 프로세스들이 번갈아 수행되는데, 이때 프로세스가 번갈아 CPU를 할당 받는 경우이다.
이 속도가 매우 빠르기 때문에 사용자는 여러 프로세스가 동시에 처리되는 것처럼 느낀다.
 2. Interrupt Handling(인터럽트 핸들링)
인터럽트(Interrupts)에 대응하여 발생한 이벤트를 처리하는 과정이다. 인터럽트는 CPU가 현재 수행 중인 작업을 멈추고 특정 이벤트를 처리할 필요가 있을 때 발생한다.
인터럽트 핸들링은 인터럽트 발생 > 현재 상태 저장 > 인터럽트 서비스 루틴 실행 > 현재 상태 복원의 순서로 진행된다.
인터럽트 종류
- I/O request: 입출력 요청
- time slice expired: CPU 사용시간 만료
- fork a child: 자식 프로세스 생성
- wait for an interrupt: 인터럽트 처리 대기
🤔 인터럽트 요청이 왜 필요한가?
CPU 당 하나의 Task만 실행할 수 있기 때문에 사용자에게 멀티 태스킹을 지원하기 위해서는 Task를 바꾸어가며 구동되어야 하기 때문이다.
 3. User and Kernal mode Switching(사용자와 커널 모드 전환)
운영 체제에는 크게 User mode와 Kernal mode가 있는데, 운영 체제에 따라 모드 전환에서 발생할 수 있다.
다음 그림은 프로세스 P1과 프로세스 P2 간의 context switching process이다.

처음에 P1이 실행 상태이고, P2가 준비 상태임을 알 수 있다. 이제 일부 중단이 발생하면, context를 저장한 후에 P1을 실행 상태에서 준비 상태로 전환하고, P2를 준비 상태에서 실행 상태로 전환해야 한다.
Context Switching은 멀티태스킹, 즉 타임 쉐어링과 같은 다양한 작업을 수행하기 위해 사용된다. 멀티태스킹은 사용자에게 여러 프로세스가 동시에 실행되는 것처럼 보이는 환상을 제공한다. 실제로는 특정 시점에서 프로세서가 하나의 작업만을 실행한다. 여기서 컨텍스트 스위칭은 매우 빠르게 이루어져 사용자는 CPU가 동시에 여러 작업을 수행하는 것처럼 느낀다.
컨텍스트 스위칭의 단점은 컨텍스트 스위칭에 소요되는 시간, 즉 컨텍스트 스위칭 시간이다. 하나의 프로세스의 컨텍스트를 저장하고 다른 프로세스의 컨텍스트를 불러오는 데 시간이 소요된다. 이 동안에는 사용자 관점에서는 CPU가 유용한 작업을 수행하지 않으며, 이로 인해 컨텍스트 스위칭은 사용자에게 부가적인 작업으로 인식된다.
참고
What is Context Switching in Operating System?
Context switch
Interrupt