컨텍스트 스위칭에 대해서 알아보자.
먼저, PC(Program Counter)와 SP(Stack Pointer)을 다시 알아보자.
프로그램 카운터는 CPU의 레지스터 중 하나를 지칭하는데, 메모리로부터 다음 실행할 명령의 주소를 저장하는 역할을 한다.
스택 포인터 또한 레지스터 중 하나이며, 스택에서 가장 최근 요청의 명령 주소를 저장하는 역할을 한다.
Process A 와 Process B가 있다고 가정하자.
먼저, Process A를 실행하면 스케쥴러에 A가 담기고 스케쥴러는 A의 상태를 running 상태로 변경하고 runnig 상태인 A를 CPU에서 실행을 한다.
A를 실행하다가 어느 시점이되면, 스케쥴러가 다음 실행할 프로세스인 B로 바꿔주는 작업을 컨텍스트 스위칭이라고 부른다.
(컨텍스트 스위칭은 실행이 많은 동작이기 때문에 컨텍스트 스위칭 코드는 어셈블리어로 작성되어 있다.)
A를 B로 전환하기 전에, 메모리에 PCB라고 하는 저장 공간을 만들어 A에 해당하는 Context(PC값과 SP값)값을 저장해둔다.
프로세스의 흐름이 B로 전환이 되면, 프로그램 B의 첫 실행 코드의 주소가 PC에 저장되고 stack의 가장 최상단의 저장 공간 주소를 SP에 저장한다.
(PC와 SP의 값은 프로그램 실행이 진행됨에 따라 동적으로 변한다.)
장황하하게 설명했지만 큰 흐름을 살펴보면
CPU context => PCB context => 전환 => CPU context => PCB context => 전환 => PCB context => CPU context 업데이트
이 흐름의 반복이다.