운영체제(OS)에서 여러 프로세스나 스레드가 CPU 자원을 공유할 때, 현재 실행 중인 프로세스 또는 스레드의 상태를 저장하고 새로운 프로세스나 스레드로 전환하는 과정
각 작업을 순차적으로 실행하면서도 동시에 여러 작업이 진행되는 것처럼 보이게 하는 핵심 메커니즘
다음 실행할 프로세스의 상태를 로드하여 이어서 실행
컨텍스트 스위칭은 멀티태스킹 환경에서 필수적인 작업이지만, '전환 과정에서 시간이 소요'되기 때문에 잦은 스위칭은 시스템 성능에 영향
레지스터 저장
메모리 관리 정보 저장
- 프로세스 간 스위칭 시에는 레지스터 외에도 프로세스의 메모리 매핑 정보나 페이지 테이블 등의 메모리 관련 정보도 저장
- 프로세스가 사용하는 메모리 주소 공간을 복구하기 위해 필요하며, 이를 통해 프로세스는 전환 후에도 동일한 메모리 위치를 참조
상태변경
- 현재 실행 중인 프로세스나 스레드는 '실행 중(Running)' 상태에서 '준비(Ready)' 또는 '대기(Waiting)' 상태로 변경
- 프로세스가 입출력 작업을 기다려야 하는 경우 '대기' 상태가 되고, 단순히 CPU 점유 시간이 끝났다면 '준비' 상태로 변경
스케줄러
- 운영체제의 스케줄러(Scheduler)는 현재 프로세스/스레드의 상태를 평가하고, 우선순위에 따라 다음 실행할 프로세스를 선택
- 스케줄링 방식은 우선순위 기반, 라운드 로빈(Round Robin), 선점형 등 다양한 알고리즘을 사용할 수 있으며, 이를 통해 CPU 자원을 최적화
PCB/TCB 로드
- 스케줄러가 다음에 실행할 프로세스나 스레드를 결정하면, 선택된 프로세스의 PCB 또는 TCB에 저장된 레지스터 값, 프로그램 카운터, 스택 포인터 등의 정보를 CPU에 로드
- 이를 통해 새롭게 선택된 작업은 중단된 시점부터 다시 실행
메모리 매핑 복구
- 프로세스 간 스위칭에서는 페이지 테이블과 같은 메모리 매핑 정보도 복구
- 이를 통해 새로운 프로세스는 자신의 고유한 메모리 공간을 사용할 수 있으며, 다른 프로세스의 메모리에 접근하지 않도록 격리
캐시 플러싱
- 프로세스 간 스위칭이 일어날 때는 이전 프로세스의 데이터가 CPU 캐시(Cache)에 남아 있을 수 있음
- 이 데이터를 제거하고 새로운 프로세스의 데이터를 캐시에 적재해야 하며, 이러한 과정은 캐시 미스(Cache Miss)를 유발, 오버헤드를 발생시키는 주요 요인
파이프라인 플러싱
- CPU는 파이프라인 구조를 갖추고 있어 명령어를 단계별로 실행하는데, 스레드나 프로세스가 바뀌면 기존 명령어 파이프라인을 비우고 재구성되어 성능 저하의 원인이 됨