콘텍스트 스위칭(Context Switching)
˙콘텍스트 스위칭(Context Switching) : OS(Operating System)
프로세스 A와 B가 존재할 때, A는 Running 상태, B는 Ready 상태라고 가정했을 경우에, 이후에 A는 Ready 상태로 바뀔 수 있고, B도 또한 Running 상태로 바뀔 수도 있다.
먼저 실행 중인 A에 대한 데이터는 현재 레지스터에 존재하고, 실행 중이지 않던 Ready 상태인 B는 메모리에 존재하지만, 위의 말대로 상태가 변환하게 된다면 A는 레지스터를 B에게 양보하여야 한다. 이후 A에 대한 데이터는 어떻게 처리하여야 하는지에 대한 부분은 B의 실행을 마친 후에 A가 실행될 수 있도록 하여야 한다. 따라서, 현재 레지스터에 존재하는 A에 대한 데이터는 메모리에 저장되어 있어야 한다.
process P0와 Process P1의 두 개의 프로세스 중 P0가 실행 중인 상태에서 interrupt or system call이 발생한다. P0는 이제 실행 중(running)인 상태가 아닌 ready(idle) 상태로 변환한다. P0가 running(excuting) 상태에서 ready(idle) 상태로 변환될 때, 프로세스와 실행에 대한 데이터는 레지스터에 존재한다. 따라서, 프로세스와 실행에 대한 데이터는 save state into PCB0에 대한 부분처럼 레지스터로 저장한다.
이후, P1이 실행되기 위해서는 메모리에 존재하는 P1에 관련된 데이터가 레지스터에 올라가야 한다. 따라서, reload state from PCB1처럼 P1이 실행되었다가 ready 상태로 변경되면서 자신의 데이터를 메모리에 저장한다. 즉, save state into PCB1의 부분처럼 자신의 데이터는 메모리에 적재한다.
그 다음, process P0이 실행되는데, 앞에서의 P0의 데이터는 메모리에 저장해 둔다. 해당 데이터를 읽어서 레지스터에 올리고 P0에 대한 작업을 이전에 멈추었던 시점으로부터 이어서 실행한다. 프로세스들을 우선순위에 따라서 변경하기 위해서는 이처럼 작업들을 레지스터와 메모리 사이를 이동시키며 복사하는데, 이러한 일련과정들을 context switching(콘텍스트 스위칭)이라고 한다.
메모리와 레지스터 사이의 이동이나 복제 등도 모두 Input/Output(I/O)이기 때문에 빈번한 발생은 Overhead를 발생시킬 수 있다. 따라서, 실행되는 프로세스의 수가 많거나 빈번한 스위칭이 발생한다면 성능 저하는 당연한 결과이다. 계속적으로 대기상태를 유지할 수는 없기 때문에, 스위칭에 대한 부분은 피할 수 없다.