문맥 교환 (Context Switching)
문맥 교환 (Context Switching)
운영체제는 다수의 프로세스를 관리하며, 이들이 효율적으로 실행되도록 지원합니다. 이러한 다중 작업 환경에서, 문맥 교환(Context Switching)은 프로세스 간 전환을 가능하게 하는 중요한 메커니즘입니다. 이 글에서는 문맥 교환의 정의, 과정, 작동 원리, 장점과 단점을 상세히 다룹니다.
문맥 교환이란?
문맥 교환(Context Switching)은 CPU가 실행 중인 프로세스의 상태를 저장하고, 다른 프로세스의 상태를 복구하는 과정입니다. 이 과정은 다음 두 상황에서 발생합니다:
- 타이머 인터럽트: 프로세스가 할당된 CPU 시간을 모두 소진한 경우.
- 인터럽트 또는 시스템 호출: 프로세스가 입출력(I/O) 작업을 기다리거나, 예기치 못한 이벤트가 발생한 경우.
문맥 교환은 다중 작업 환경에서 필수적입니다. 이를 통해 여러 프로세스가 번갈아 가며 CPU를 사용하게 되고, 사용자에게는 마치 여러 작업이 동시에 실행되는 것처럼 보이게 됩니다.
문맥(Context)의 정의
문맥(Context)은 프로세스의 실행 상태를 나타내는 정보를 말합니다. 문맥에는 다음과 같은 중요한 정보들이 포함됩니다:
- 프로그램 카운터 (Program Counter): 실행 중인 명령의 위치.
- 레지스터 값 (Register Values): 계산의 중간 상태, 변수 값 등.
- 메모리 관리 정보: 페이지 테이블, 세그먼트 테이블 등.
- 열려 있는 파일 정보: 프로세스가 사용하는 파일 및 I/O 장치 상태.
- 스케줄링 정보: 프로세스 우선순위, 스케줄링 큐의 상태.
운영체제는 이러한 문맥 정보를 프로세스 제어 블록(PCB: Process Control Block)에 저장합니다. 프로세스가 실행을 중단하거나 다시 실행될 때, PCB의 문맥 정보를 사용해 해당 프로세스의 상태를 복구합니다.
문맥 교환의 과정
문맥 교환은 운영체제가 다중 프로세스를 효율적으로 관리하기 위해 수행됩니다. 이 과정은 크게 세 단계로 나눌 수 있습니다:
1. 현재 프로세스의 문맥 저장
- 실행 중인 프로세스(예: 프로세스 A)의 문맥 정보를 PCB에 저장합니다.
- 프로세스의 레지스터 값, 프로그램 카운터, 메모리 상태 등이 저장됩니다.
- 이를 통해 프로세스가 중단된 시점의 상태를 복원할 수 있습니다.
2. 새로운 프로세스의 문맥 복구
- 실행할 프로세스(예: 프로세스 B)의 PCB에서 문맥 정보를 불러옵니다.
- 레지스터 값과 프로그램 카운터 등을 복구하여, 프로세스 B가 중단된 위치에서부터 실행을 이어갑니다.
3. 프로세스 전환
- CPU가 새로운 프로세스(B)로 전환되며 실행이 시작됩니다.
- 이전 프로세스(A)는 대기 상태로 이동하거나, 필요한 경우 입출력 작업을 수행합니다.
(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)
문맥 교환의 원리
문맥 교환은 하드웨어와 소프트웨어의 협력을 통해 이루어집니다:
- 하드웨어 인터럽트:
- 타이머 인터럽트나 입출력 인터럽트가 발생하면, CPU는 현재 프로세스의 작업을 중단합니다.
- 인터럽트 핸들러가 호출되어 현재 프로세스의 문맥 정보를 PCB에 저장합니다.
- 커널 모드 전환:
- 운영체제는 커널 모드로 전환되어 새로운 프로세스의 문맥을 복구합니다.
- PCB의 정보를 읽어 CPU 레지스터와 메모리 상태를 설정합니다.
- 프로세스 스케줄링:
- 운영체제의 스케줄러는 다음에 실행할 프로세스를 선택합니다.
- 선택된 프로세스의 문맥이 복구되며 실행이 재개됩니다.
문맥 교환의 장점
- 멀티태스킹 지원:
- 문맥 교환을 통해 여러 프로세스가 동시에 실행되는 것처럼 보입니다.
- 사용자 경험이 크게 향상됩니다.
- 공정한 CPU 사용:
- 모든 프로세스가 일정 시간 동안 CPU를 사용할 수 있습니다.
- CPU 자원의 효율적인 분배가 가능해집니다.
- 프로세스 독립성:
- 각 프로세스의 상태가 독립적으로 저장되므로, 프로세스 간 충돌을 방지합니다.
문맥 교환의 단점
- 성능 오버헤드:
- 문맥 저장 및 복구 과정은 CPU 시간을 소비합니다.
- 문맥 교환이 빈번할수록 성능 저하가 발생할 수 있습니다.
- 캐시 무효화:
- 프로세스가 전환될 때 CPU 캐시가 무효화됩니다.
- 이는 메모리 접근 속도에 부정적인 영향을 줄 수 있습니다.
- 복잡성 증가:
- 운영체제는 문맥 교환과 관련된 하드웨어 및 소프트웨어를 복잡하게 관리해야 합니다.
문맥 교환의 시각적 이해
(그림 출처: 혼자 공부하는 컴퓨터 구조 + 운영체제)
위 그림은 문맥 교환의 과정을 간단히 시각화한 예입니다. 프로세스 A에서 B로의 전환 과정에서 PCB가 핵심적인 역할을 하며, CPU는 이 정보를 기반으로 작업을 이어나갑니다.
요약
문맥 교환은 운영체제가 다중 작업 환경에서 필수적으로 사용하는 메커니즘입니다. 이를 통해 여러 프로세스가 CPU를 효율적으로 공유할 수 있으며, 사용자에게는 여러 작업이 동시에 실행되는 것처럼 보이게 합니다.
그러나 문맥 교환은 오버헤드와 성능 저하를 유발할 수 있기 때문에, 운영체제는 이를 최소화할 수 있는 스케줄링 정책과 최적화를 신중히 설계해야 합니다.
추가 자료
- 혼자 공부하는 컴퓨터 구조 + 운영체제
- Modern Operating Systems, Andrew S. Tanenbaum