1. 컨텍스트 스위칭이란?
컴퓨터 운영체제에서 CPU는 한 번에 하나의 프로세스만 실행할 수 있다. 하지만 현대의 컴퓨터는 멀티태스킹(Multitasking) 환경을 지원하기 때문에, 여러 개의 프로그램이 동시에 실행되는 것처럼 보인다. 그러나 실제로는 운영체제가 빠르게 여러 프로세스를 번갈아가며 실행하는 방식으로 멀티태스킹을 구현한다. 이 과정에서 CPU는 현재 실행 중인 프로세스를 일시 중단하고, 다른 프로세스를 실행해야 하는 경우가 발생하는데, 이를 위해 기존 프로세스의 상태를 저장하고 새로운 프로세스의 상태를 불러오는 작업이 필요하다. 이때, CPU가 현재 실행 중인 프로세스의 정보를 저장하고 새로운 프로세스의 정보를 복원하는 과정을 **컨텍스트 스위칭(Context Switching)**이라고 한다.
1-1. 컨텍스트 스위칭이 필요한 이유
운영체제는 CPU 자원을 최대한 활용하고, 여러 개의 프로그램을 원활하게 실행할 수 있도록 하기 위해 컨텍스트 스위칭을 수행하여 프로세스를 효율적으로 관리한다. 컨텍스트 스위칭이 필요한 주요 이유는 다음과 같다.
- 멀티태스킹(Multitasking) 지원
- 여러 개의 응용 프로그램(예: 웹 브라우저, 음악 플레이어, 문서 편집기)을 동시에 실행할 수 있도록 하기 위해 필요
- CPU 활용 극대화
- 하나의 프로세스가 입출력(I/O) 작업을 수행하면서 CPU를 사용하지 않는 동안,
다른 프로세스가 CPU를 사용할 수 있도록 컨텍스트 스위칭을 수행
- 하나의 프로세스가 입출력(I/O) 작업을 수행하면서 CPU를 사용하지 않는 동안,
- 사용자의 원활한 작업 전환
- 사용자가 여러 개의 프로그램을 동시에 실행하면서 부드러운 작업 전환 경험을 제공하기 위해 필요
1-2. 컨텍스트 스위칭의 실생활 예시
컨텍스트 스위칭의 개념을 쉽게 이해할 수 있도록 실제 생활에서의 예시를 들어보자.
예제 1: 요리하는 과정
- 한 명의 요리사는 한 번에 하나의 요리만 할 수 있다.
- 하지만, 요리사가 스프를 끓이는 동안(대기 상태), **샐러드를 만드는 작업(다른 프로세스 실행)**을 수행할 수 있다.
- 요리사는 스프의 상태를 **기억(컨텍스트 저장)**해 두고,
샐러드를 만드는 동안에는 **샐러드 레시피로 전환(컨텍스트 스위칭)**한다. - 스프가 다 끓을 시간이 되면, 다시 스프 요리로 돌아가 작업을 이어간다(컨텍스트 복원).
예제 2: 스마트폰에서 앱 전환
- 사용자가 YouTube로 영상을 시청하다가, 메시지 앱을 실행하여 친구에게 답장을 보낸다.
- YouTube 앱은 **일시 중단(컨텍스트 저장)**되고, 메시지 앱이 실행된다.
- 답장을 보내고 다시 YouTube로 돌아가면, 영상이 이어서 재생된다. (컨텍스트 복원)
이처럼 운영체제는 컨텍스트 스위칭을 통해 여러 작업을 원활하게 전환하면서도,
사용자가 끊김 없이 작업을 수행할 수 있도록 관리한다.
2. 컨텍스트 스위칭의 원리
2-1. 컨텍스트(Context)란?
**컨텍스트(Context)**란 프로세스가 실행 중에 가지고 있는 모든 정보를 의미하며, 다음과 같은 요소로 구성된다.
- 프로세스 상태(Process State): 현재 프로세스의 실행 상태 (준비, 실행, 대기 등)
- 프로그램 카운터(PC, Program Counter): 다음에 실행될 명령어의 메모리 주소
- CPU 레지스터(Registers): 연산에 필요한 임시 저장 공간 (일반 레지스터, 스택 포인터 등)
- 메모리 관리 정보: 프로세스가 사용 중인 메모리 영역 (코드, 데이터, 스택, 힙)
- 프로세스 제어 블록(PCB, Process Control Block): 운영체제가 프로세스를 관리하기 위해 저장하는 정보
이 컨텍스트 정보를 저장하고, 새로운 프로세스의 정보를 로드하는 과정이 컨텍스트 스위칭의 핵심이다.
2-2. 컨텍스트 스위칭이 발생하는 상황
컨텍스트 스위칭은 다음과 같은 경우에 발생한다.
1️⃣ 프로세스 스케줄링(Process Scheduling)
- 운영체제의 **스케줄러(Scheduler)**가 CPU를 사용 중인 프로세스를 변경할 때 발생
- 예시: 라운드 로빈(RR) 스케줄링에서 정해진 시간(Time Quantum)이 지나면 CPU를 다른 프로세스에 할당
2️⃣ 인터럽트(Interrupt)
- 프로세스가 실행 중일 때, I/O 요청, 시스템 호출, 외부 장치 이벤트 등이 발생하면 CPU가 현재 실행 중인 프로세스를 중단하고 다른 작업을 수행
- 예시: 키보드 입력이 발생하면, 현재 실행 중인 프로그램을 멈추고 입력 처리를 위해 OS가 컨텍스트 스위칭 수행
3️⃣ 커널 모드 전환(Kernel Mode Switching)
- 사용자 프로그램이 운영체제의 기능을 호출할 때 유저 모드(User Mode)에서 커널 모드(Kernel Mode)로 전환되면서 발생
- 예시: 파일을 저장할 때, 사용자 프로세스가 운영체제의 파일 시스템 기능을 사용하기 위해 커널 모드로 변경
3. 컨텍스트 스위칭 과정
컨텍스트 스위칭은 다음과 같은 과정으로 이루어진다.
1️⃣ 현재 실행 중인 프로세스의 컨텍스트 저장
- 운영체제는 현재 실행 중인 프로세스의 CPU 레지스터, 프로그램 카운터(PC) 등 실행 상태를 PCB(Process Control Block)에 저장
2️⃣ 새로운 프로세스 선택
- 운영체제의 **스케줄러(Scheduler)**가 준비 큐(Ready Queue)에서 실행할 새로운 프로세스를 선택
3️⃣ 새로운 프로세스의 컨텍스트 복원
- 새로운 프로세스의 PCB에서 저장된 CPU 레지스터, 프로그램 카운터 등의 정보를 불러와 실행 준비
4️⃣ 새로운 프로세스 실행
- CPU가 새로운 프로세스를 실행하면서 컨텍스트 스위칭이 완료됨
4. 컨텍스트 스위칭의 성능 영향
컨텍스트 스위칭은 필수적인 과정이지만, 과도하게 발생하면 성능 저하의 원인이 될 수 있다.
4-1. 컨텍스트 스위칭의 비용
컨텍스트 스위칭이 발생하면 CPU는 저장 및 복원 작업을 수행해야 하므로 성능 저하가 발생할 수 있다.
- CPU 자원 낭비: 컨텍스트를 저장하고 복원하는 동안 유용한 작업이 수행되지 않음
- 캐시 리셋(Cache Reset) 문제: 프로세스 변경 시 CPU 캐시가 무효화되어 다시 데이터를 불러와야 함
- 메모리 접근 비용 증가: 새로운 프로세스의 데이터가 메모리에서 로드되는 동안 대기 시간이 발생
4-2. 컨텍스트 스위칭 성능 최적화 방법
- 스레드를 활용한 경량 컨텍스트 스위칭(Thread Switching) 적용
- 프로세스 간 컨텍스트 스위칭보다 스레드 간 컨텍스트 스위칭이 비용이 낮음
- 예시: 웹 브라우저에서 각 탭을 개별 프로세스로 실행하는 대신, 하나의 프로세스에서 여러 개의 스레드를 활용
- 스케줄링 알고리즘 최적화
- 라운드 로빈(Round Robin) 방식에서는 타임 슬라이스를 최적화하여 불필요한 컨텍스트 스위칭을 방지
- 예시: 타임 슬라이스(Time Quantum)를 너무 짧게 설정하면 컨텍스트 스위칭이 과도하게 발생할 수 있음
- 멀티코어 활용 극대화
- 프로세스를 효율적으로 코어에 배분하여 한 코어에서 실행 중인 프로세스를 다른 코어로 이동하지 않도록 최적화
- 예시: 운영체제의 CPU 바인딩(Affinity) 설정을 활용하여 특정 프로세스를 특정 코어에서 실행
- 커널 모드 전환 최소화
- 유저 모드와 커널 모드 간 전환 비용이 크므로, 시스템 호출을 최소화하는 방식으로 설계
- 예시: 대용량 파일을 읽을 때, 작은 블록 단위가 아닌 큰 블록 단위로 읽어 I/O 호출 횟수를 줄임
5. 컨텍스트 스위칭 vs 멀티태스킹 vs 멀티스레딩
구분 | 설명 |
컨텍스트 스위칭(Context Switching) | 실행 중인 프로세스를 변경할 때 발생하는 과정 |
멀티태스킹(Multitasking) | 여러 개의 프로세스를 실행하여 사용자에게 동시에 실행되는 것처럼 보이게 함 |
멀티스레딩(Multithreading) | 하나의 프로세스 내에서 여러 개의 작업을 실행 |
'컴퓨터공학' 카테고리의 다른 글
프로세스 스케줄링(Process Scheduling)이란? 선점형 vs 비선점형 스케줄링 비교 (0) | 2025.03.06 |
---|---|
인터럽트(Interrupt)란? 하드웨어 인터럽트 vs 소프트웨어 인터럽트 (0) | 2025.03.06 |
프로세스 상태: 생성, 실행, 대기, 종료 (0) | 2025.03.06 |
가상 메모리(Virtual Memory)의 개념과 작동 원리 (0) | 2025.03.05 |
운영체제의 스케줄링 알고리즘: 개념과 종류 (0) | 2025.03.05 |