[시스템 프로그래밍]


컨텍스트 스위칭

(Context Switching)




컨텍스트 스위칭(Context Switching)이 무엇일까요? 우리가 전에 보았던 '시스템 프로그래밍: 프로세스 스케줄링(Process Scheduling)'이라는 글에서 프로세스는 총 5개의 상태로 구분할 수 있다고 말했었습니다. 그 중에서 준비(Ready) 상태인 프로세스들 중에서 스케줄러의 선택을 받은 하나의 프로세스가 실행 중(Running) 상태로 상태가 전이됩니다. 

컨텍스트 스위칭(Context Switching)

예를 들어서, Ready 상태인 A 프로세스와 Running 상태인 B 프로세스가 있고 인터럽트 요청에 의해 서로 상태가 전이된다고 가정합니다. 이 때, A 프로세스가 Ready 상태로 전이되고, B 프로세스가 Running 상태가 될 때 A 프로세스의 상태 또는 레지스터 값 등이 PCB(Process Control Block)에 저장되고, A 프로세스의 정보를 PCB에서 CPU로 적재시킵니다.


● PCB(프로세스 제어 블록: Process Control Block): PCB에는 프로세스 상태 또는 레지스터의 값 등과 같은 관련 데이터들이 저장됩니다. 프로세스 생성 시 만들어지며, 프로세스마다 고유한 PCB를 가집니다.


간단하게 말해서, 컨텍스트 스위칭은 위에서 가정했듯이, Ready 상태인 A 프로세스가 존재하고, Running 상태인 B 프로세스가 존재하는데 인터럽트 요청에 의해 서로 상태가 전이되는 상황을 생각해봅시다.


CPU 내의 레지스터들(Register Set)에는 현재 실행중인 프로세스의 관련 데이터들이 들어가는데, B 프로세스가 Ready 상태가 되면 현재 레지스터에 저장된 A 프로세스의 데이터들을 메모리 공간에 저장해두고, B 프로세스의 레지스터 값을 메모리에서 CPU로 적재합니다. 그런데 이 컨텍스트 스위칭이 일어나는 동안 CPU는 아무런 일을 하지 못하며, 컨텍스트 스위칭은 CPU에 많은 부하를 가져다 줍니다. 이는 멀티 프로세스 운영체제의 단점이며, 이러한 컨텍스트 스위칭의 시간은 레지스터의 수나 메모리의 속도 등에 좌우됩니다.