Context Switching(문맥 교환) 은 CPU가 한 프로세스(또는 스레드)의 실행 상태를 저장하고, 다른 프로세스(또는 스레드)의 상태를 불러와 실행을 전환하는 작업이다.
운영체제가 멀티태스킹을 구현할 수 있도록 해주는 핵심 메커니즘으로, 동시에 여러 프로세스가 실행되는 것처럼 보이게 만드는 핵심 기술이다.

Context(문맥)는 프로세스나 스레드의 현재 실행 상태를 구성하는 정보의 집합이다. 주요 내용은 다음과 같다:
| 항목 | 설명 |
|---|---|
| Program Counter (PC) | 다음에 실행할 명령어의 주소 |
| CPU 레지스터 값들 | 연산 중인 값들이 저장되어 있음 |
| Stack Pointer (SP) | 함수 호출 스택의 현재 위치 |
| 메모리 관리 정보 | 페이지 테이블, 세그먼트 정보 등 |
| 파일 디스크립터 정보 | 열린 파일 목록 등 |
운영체제는 Context를 저장하고 복원함으로써 실행 흐름을 중단하고, 나중에 다시 이어서 실행할 수 있게 만든다.
1. 현재 실행 중인 프로세스의 Context 저장
2. 스케줄러가 다음 실행할 프로세스를 선택
3. 선택된 프로세스의 Context를 복원
4. CPU가 새 프로세스를 실행
→ 이 과정을 수 μ초(마이크로초) 단위로 빠르게 반복하며, 사용자는 여러 작업이 동시에 실행되는 듯한 착각을 하게 된다.
Context Switching은 유용하지만, 성능 측면에서 비용이 존재한다.
| 항목 | 설명 |
|---|---|
| 오버헤드 발생 | 저장/복원 과정이 CPU 시간을 소모 |
| 캐시 무효화 | CPU 캐시가 다른 프로세스 데이터로 오염될 수 있음 |
| 전환 시간 | 레지스터, 스택, 메모리 등의 복원에 따른 시간 지연 |
스레드 간 전환이 프로세스 간 전환보다 가볍다 (메모리 공간 공유 여부 차이 때문)
멀티스레딩 환경에서도 Context Switching은 발생한다.
| 항목 | 프로세스 전환 | 스레드 전환 |
|---|---|---|
| 메모리 공간 | 서로 다름 | 공유 |
| 전환 비용 | 높음 | 낮음 |
| 캐시 영향 | 큼 | 상대적으로 작음 |
즉, 스레드는 메모리를 공유하므로 전환 비용이 줄어든다. 그래서 동시성 처리에서 많이 사용된다.
| 운영체제 | 스케줄링 방식 | Context Switching 방식 |
|---|---|---|
| Linux | Preemptive + Time Slicing | task_struct 저장/복원 |
| Windows | Round Robin + 우선순위 기반 | Thread Context 구조체 사용 |
| macOS | Hybrid 방식 | Mach thread 상태 저장 |