728x90
반응형

컨텍스트 스위칭(Context Switching)이란?

멀티 프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 PCB에 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)을 PCB에서 가져와 교체하는 작업

 

그림으로 나타내면 아래와 같다.

그림 1. 프로세스 실행 중 다른 프로세스의 CPU 사용을 위해 작업상태를 보관하고 새 프로세스 상태를 불러와 실행

그림 1을 통해 컨텍스트 스위칭이 일어나는 과정을 확인해보자.

단계 절차 설명
1 인터럽트/시스템 호출 운영체제에서 프로세스 스케쥴러에 의해 인터럽트 발생
2 커널 모드 전환 프로세스 P0이 사용자 모드(executing)에서 커널 모드(idle)로 전환 (프로세스 P0이 CPU 점유 -> 대기로 상태변경)
3 현재 프로세스 상태 PCB에 저장 P0 프로세스 정보를 PCB에 저장
4 다음 실행 프로세스 로드 PCB에 있는 다음 실행 프로세스 P1 상태 정보 복구
5 사용자 모드 전환 P1 프로세스 커널 모드에서 사용자 모드로 전환하여 실행

간단하게 말하면 컨텍스트 스위칭이란, P0과 P1처럼 서로 대기 <-> 실행을 번갈아가며 하는 것이다.

이러한 컨텍스트 스위칭을 통해 멀티 프로세싱, 멀티 스레딩 운영이 가능하다.

 

그럼 컨텍스트 스위칭은 언제 일어날까?

1. I/O interrupt

2. CPU 사용시간 만료

3. 자식 프로세스 Fork

4. 인터럽트 처리를 기다릴 때 등등

이고 컨텍스트 스위칭이 일어날 때 다음번 프로세스는 스케쥴러가 결정하게 된다.

즉, 컨텍스트 스위칭을 하는 주체는 스케쥴러이다.

 

단점

컨텍스트 스위칭이 너무 잦으면 오버헤드가 발생하여(비용이 높아) 성능이 떨어진다.

왜냐하면, 그림 1처럼 기존 상태(P0)를 PCB에 저장하고 다음 상태(P1)를 PCB에서 가져와야 하는데 이러한 작업을 할 때에는 CPU가 아무런 일도 하지 못하게 되기 때문이다.

 

PCB (Process Control Block)

그림 2. PCB구조

PCB란 프로세스의 정보를 저장하는 Block을 의미한다.

PCB에 저장되는 정보로는 프로세스 번호, 포인터, 프로세스 상태(생성, 준비, 수행, 대기, 중지), 레지스터, 프로그램 카운터(코드 위치) 등등이 저장된다.

 

오버헤드 해결방안

해결방안 설명
프로그램 다중화 수준 낮춤 - 다중 프로그래밍 수준을 낮춰 컨텍스트 스위칭 발생 빈도 줄이기
스레드 이용 - Light Weight 프로세스인 스레드를 이용하여 컨텍스트 스위칭 부하 최소화
- 스레드의 text, data, heap 영역은 프로세스의 것이기 때문에 자신의 PCB에는 스택 및 간단한 정보만 저장하기에 프로세스 컨텍스트 스위칭보다 빠름
스택포인터 활용 - 스택 이용 프로그램의 경우 스택 포인터를 이용하여 컨텍스트 스위칭 부하 최소화

 

728x90
반응형