Context switch란?

  • CPU 코어가 여러 개의 프로세스를 처리하기 위해 프로세스를 전환하는 것
  • 프로세스에게 할당된 Time Quantum이 모두 소진되거나 I/O 호출 같은 Interrupt에 의해 발생
    • Time Quantum : 프로세스가 한 번에 처리될 수 잇는 시간 총량. 사용자가 체감하지 못할 정도로 작음
    • Interrupt : CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용하는 기능
  • Context switch의 발생은 기존 수행하던 작업에서 새로운 작업으로 넘어가는 것을 의미함
    • 새로운 작업을 불러올 수 있어야 할 뿐만 아니라 기존 수행하던 작업도 이어서 할 수 있도록 저장해야함
    • 커널의 Dispatcher이라는 곳에서 담당하며 PCB(Process Control Block)이라는 자료구조를 이용함
  • Context switch는 프로세스 간 발생하는 것이지만 쓰레드 간의 전환인 Thread switch도 이와 비슷함

Context switch의 동작 과정

  • 위 그림에서 Context switch는 Interrupt에 의해 발생하지만 프로세스의 기록 자체는 시스템 콜에 기반함
    • 시스템 콜의 호출에 따라 이전 프로세스의 내용을 PCB에 기록
    • 다음 처리해야 하는 프로세스의 기록을 PCB에서 가져와 다음 프로세스를 실행
  • Context switch는 Dispatcher에 의해 처리됨
    • Dispacher의 호출은 Interrupt에 의해 발생
    • Interrupt는 Preemptive SchedulingNon-Preemptive Scheduling으로 나뉨
      • Preemptive Scheduling : Time Quantum을 모두 소진하여 운영체제 권한으로 프로세스의 권한을 뺏으면서 발생하는 Interrupt
      • Non-Preemptive Scheduling : I/O 호출과 같이 프로세스가 스스로 CPU의 점유를 포기하면서 발생하는 Interrupt

PCB 자료구조

  • PCB(Process Control Block)
  • PCB는 프로세스마다 가지고 커널이 사용하는 메모리 공간에 위치함
  • Context switch에 의해 PCB에 저장하는 내용들은 한 프로세스의 상태(State) 정보들
    • State의 저장은 여러 차례의 메모리 참조를 요구하기 때문에 많은 CPU 연산을 요구함
    • State의 크기가 크면 클수록 Context switch를 위한 CPU 연산 손해가 더욱 커짐
    • State 정보를 읽어오는 시간만큼 프로세스 처리에 사용할 수 있는 자원이 줄어드는 것
  • 프로세서의 종류에 따라(CISC 구조, RISC 구조) Context switch의 연산 소모량이 다를 수 있음
    • 하지만 Context switch는 결고 가벼운 작업이 아님
    • 시스템 콜 도중에는 Context switch가 발생하지 않음