컨텍스트 스위칭(Context Switching)은 CPU가 실행 중인 프로세스(또는 스레드)를 중단하고, 다른 프로세스로 전환하는 작업.
선점형 스케줄링은 운영체제가 실행 중인 프로세스를 강제로 중단하고, 다른 프로세스를 실행하는 방식입니다. 새로운 프로세스가 높은 우선순위를 가지거나, 현재 실행 중인 프로세스의 타임 슬라이스(Time Slice)가 끝나면 발생함.
graph TD;
A[현재 프로세스 실행 중] --> B{스케줄러가 새로운 프로세스 실행 필요?}
B -->|Yes| C[현재 프로세스의 컨텍스트 저장]
C --> D[새로운 프로세스의 컨텍스트 복원]
D --> E[새로운 프로세스 실행]
E --> F{새로운 프로세스 실행 완료?}
F -->|Yes| G[프로세스 종료 또는 Ready Queue로 이동]
F -->|No| B
B -->|No| A
프로그램 카운터(PC)란?
컨텍스트 스위칭 시 운영체제(OS)는 실행 중이던 프로세스의 상태(문맥)를 저장하고, 다음 프로세스가 실행될 때 이전 상태를 복원합니다.
| 저장 데이터 | 설명 | 저장 위치 |
|---|---|---|
| 프로그램 카운터(PC) | 실행 중이던 명령어의 위치 | PCB (커널 메모리) |
| CPU 레지스터 | 연산 중이던 값들 | PCB (커널 메모리) |
| 스택 포인터(SP) | 함수 호출 시 사용되는 위치 | PCB (커널 메모리) |
| 프로세스 상태 | 실행 중, 대기 중 등의 상태 정보 | PCB (커널 메모리) |
| 페이지 테이블 정보 | 프로세스의 메모리 매핑 정보 | PCB (커널 메모리) |
(1) Ready Queue(준비 큐)로 대기
새로운 프로세스들이 생성되면 Ready Queue(준비 큐) 에 추가됨
CPU 스케줄러(Scheduler) 가 적절한 알고리즘(예: FCFS, RR, Priority)을 사용해 다음 실행할 프로세스를 선택
준비 큐의 길이가 길어지면 CPU 부하가 증가하고 대기 시간이 길어짐
(2) 선점형 스케줄링 발생 (Preemptive Scheduling)
현재 실행 중인 프로세스가 더 높은 우선순위의 프로세스에게 선점당할 수 있음
운영체제는 우선순위(priority) 또는 타임 슬라이스(time slice) 를 기준으로 실행 순서를 조정
예를 들어, 라운드 로빈(RR) 방식에서는 각 프로세스가 일정 시간(CPU Time Slice)만 사용 후 교체됨
(3) 인터럽트 처리 (Interrupt Handling)
많은 요청이 들어오면 인터럽트(Interrupt)가 발생하여 CPU의 실행 흐름이 변경될 수 있음
하드웨어 인터럽트(예: 키보드 입력, 네트워크 요청) 또는 소프트웨어 인터럽트(예: 시스템 호출)가 발생하면 운영체제가 인터럽트를 우선 처리
인터럽트 서비스 루틴(ISR, Interrupt Service Routine)이 실행되어 요청을 처리하고 다시 프로세스로 복귀
(4) CPU 과부하 및 Context Switching 증가
문맥 교환(Context Switching)이 빈번하게 발생하면 CPU 성능이 저하됨
특히 프로세스가 많아질수록 CPU는 스케줄링 오버헤드가 증가
너무 많은 프로세스가 동시에 실행되면 CPU가 처리하지 못하고 대기 시간이 길어질 수 있음
| 대응 방법 | 설명 |
|---|---|
| 프로세스 수 제한 | 시스템이 감당 가능한 수준까지만 프로세스 허용 |
| 스케줄링 최적화 | Round Robin, Priority Scheduling 등 효율적인 정책 사용 |
| 스왑 아웃 | 오래 기다리는 프로세스는 디스크로 이동시켜 RAM 확보 |
| 컨텍스트 최소화 | 쓰레드(thread)를 사용해 스위칭 비용을 줄이기도 함 (lightweight process) |