Context Switching
Context Switching이란
Context Switching은 CPU가 현재 실행 중인 프로세스(또는 스레드)를 중단하고 다른 프로세스로 전환하는 과정이다. 운영체제는 이 메커니즘을 통해 여러 프로세스가 동시에 실행되는 것처럼 보이게 하는 멀티태스킹을 구현한다.
Context Switching이 발생하면 현재 프로세스의 실행 상태를 저장하고, 다음에 실행할 프로세스의 상태를 복원하여 중단된 지점부터 계속 실행할 수 있게 한다.
Context Switching이 발생하는 시점
운영체제는 다음과 같은 상황에서 Context Switching을 수행한다:
1. 시간 할당량 초과 (Time Slice Expiration)
프로세스에게 할당된 CPU 시간이 끝나면 스케줄러가 다른 프로세스에게 CPU를 할당한다. 이는 선점형 스케줄링에서 발생한다.
2. I/O 요청 (I/O Request)
프로세스가 파일 읽기, 네트워크 통신 등 I/O 작업을 요청하면, CPU를 양보하고 Waiting 상태로 전환된다. 운영체제는 CPU를 다른 프로세스에게 할당한다.
3. 인터럽트 (Interrupt)
하드웨어 인터럽트(타이머, I/O 완료 등)나 소프트웨어 인터럽트(시스템 콜)가 발생하면 현재 프로세스를 중단하고 인터럽트 핸들러를 실행한다.
4. 우선순위 높은 프로세스 도착
더 높은 우선순위를 가진 프로세스가 Ready 상태가 되면, 현재 실행 중인 프로세스를 선점하고 CPU를 할당받을 수 있다.
5. 프로세스 생성 및 종료
새로운 프로세스가 생성되거나 현재 프로세스가 종료될 때도 Context Switching이 발생할 수 있다.
Context Switching 과정

단계별 상세 설명
1단계: 현재 프로세스 중단
- 인터럽트, 시스템 콜, 또는 시간 할당량 초과로 프로세스 A가 중단된다
2단계: Context 저장
- 프로세스 A의 CPU 레지스터 값, 프로그램 카운터, 스택 포인터 등 현재 상태를 PCB에 저장한다
- 프로세스 A의 상태를 Running에서 Ready 또는 Waiting으로 변경한다
3단계: 다음 프로세스 선택
- 스케줄러는 스케줄링 알고리즘에 따라 다음에 CPU를 할당할 프로세스를 결정한다.
- 이 과정에서 디스패처(Dispatcher)가 실행되어 선택된 프로세스에 실제로 CPU 제어권을 넘겨준다.
4단계: Context 복원
- 프로세스 B의 PCB에서 저장된 상태 정보를 읽어온다
- 프로세스 B의 CPU 레지스터 값, 프로그램 카운터, 스택 포인터 등을 복원한다
- 프로세스 B의 상태를 Ready에서 Running으로 변경한다
5단계: 프로세스 재개
- 프로세스 B가 이전에 중단되었던 지점부터 실행을 계속한다
Context Switching 오버헤드
Context Switching은 오버헤드를 발생시킨다. 이 시간 동안 CPU는 실제 작업을 수행하지 못하고 프로세스 전환 작업만 수행한다.
오버헤드의 원인
- Context 저장 및 복원 시간: 수십~수백 개의 레지스터 값을 메모리에 저장하고 읽어오는 시간이 소요된다
- 캐시 지역성 저하: 프로세스 전환 시 CPU 캐시가 무효화될 수 있어 캐시 미스가 증가, 메모리 접근 시간이 늘어난다
- 스케줄링 오버헤드: 다음 프로세스를 선택하는 스케줄링 알고리즘 실행 시간이 추가된다
Context Switching 빈도와 성능
Context Switching이 너무 자주 발생하면:
- CPU가 실제 작업보다 프로세스 전환에 더 많은 시간을 소비한다
- 컨텍스트 스위칭 오버헤드로 인해 시스템 전체 성능이 저하된다
Context Switching이 너무 드물게 발생하면:
- 응답 시간이 길어져 사용자 경험이 나빠진다
- 멀티태스킹 효과가 감소한다
운영체제는 이 둘의 균형을 맞춰야 한다.
프로세스 vs 스레드의 Context Switching
프로세스 Context Switching
특징:
- 메모리 공간이 완전히 분리되어 있어 메모리 관리 정보(페이지 테이블)도 전환해야 한다
- PCB에 저장해야 할 정보가 많다
스레드 Context Switching
특징:
- 같은 프로세스 내 스레드 간 전환은 메모리 공간을 공유하므로 페이지 테이블 전환이 불필요하다
- 스택과 레지스터만 전환하면 되므로 저장할 정보가 적다
비교
| 구분 | 프로세스 Context Switching | 스레드 Context Switching |
|---|---|---|
| 메모리 전환 | 필요 (페이지 테이블 전환) | 불필요 (공유 메모리) |
| 오버헤드 | 큼 | 작음 |
| 속도 | 느림 | 빠름 |
이것이 멀티스레드가 멀티프로세스보다 Context Switching 측면에서 효율적인 이유다.