컨택스트 스위칭에 대해서 알아보기 이전에 PCB에 대해서 알아보자
PCB는 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말하며 프로세스 제어블록이라고도 한다. 프로세스가 생성되면 운영체제는 해당 PCB를 생성한다.
프로그램이 실행되면 프로세스가 생성되고 스택, 힙 등의 구조를 기반으로 메모리가 할당된다. 그리고 이 프로세스의 메타데이터들이 PCB에 저장되어 관리된다. 이는 프로세스의 중요한 정보를 포함하고 있기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.
PCB는 프로세스 스케쥴링 상태, 프로세스 ID등의 다음과 같은 정보로 이루어져 있다.
이외에도 PCB는 프로그램 카운터, CPU 레지스터 등 다양한 정보를 지닌다.
Context Switching(문맥 교환)이란 CPU에 실행할 프로세스를 교체하는 기술을 말한다.(PCB를 교환하는 과정)
한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발행한다. 컴퓨터는 많은 프로그램을 동시에 실행하는 것처럼 보이지만 어떠한 시점에서 실행되고 있는 프로세스는 단 한 개 이며, 많은 프로세스가 동시에 구동되는 것처럼 보이는 이유는 다른 프로세스와의 컨텍스트 스위칭이 매우 빠른 속도로 실행되기 때문이다. (하지만 최근 컴퓨터는 멀티코어 CPU를 가지고 있기 때문에 컨택스트 스위칭을 설명할때는 싱글코어를 가정한다)
위의 그림처럼 한 개의 프로세스 P0가 실행하다 멈추고, 프로세스 P0의 PCB를 저장하고 다시 프로세스 P1을 로드하여 실행한다. 그리고 다시 프로세스 P1의 PCB를 저장하고 프로세스 P0의 PCB를 로드한다.
컨텍스트 스위칭의 동작을 더 자세히 보면 다음과 같다.
Program Counter(PC, 다음 실행할 코드 주소)와 Stack Pointer(SP, 스택최상단 주소)만 바꿔주면 프로세스 저장 상태를 기반으로 실행 가능하다. P0 프로세스를 실행하다가 P1프로세스를 실행후 다시 P0프로세스를 실행하면 P0프로세스의 처음부터 실행되는 것이 아니라 실행이 끝난곳부터 이어서 실행된다.
컨텍스트 스위칭이 일어날 때 앞의 그림처럼 유휴 시간(idle time)이 발생하는 것을 볼 수 있다. 또한, 이 컨텍스트 스위칭 과정에서 드는 비용이 바로 캐시미스이다.