- 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 레지스터에 적재하는 과정을 말합니다.
OS : Interrupt driven
- 프로세스 P0와 P1이 존재할 때, P0가 CPU를 점유중(excuting)이었고 P1이 대기중(idle)이었는 상태이다가 얼마후에는 P1이 실행이 되고 P0가 대기가 되는 상태가 찾아온다.
- 이때 P0가 실행중에서 대기로 변하게 될 때는 지금까지 작업해오던 내용을 모두 어딘가에 저장해야하는데 그것이
PCB
라는 곳이다.- 즉, P0는
PCB
에 저장해야하고 P1이 가지고 있던 데이터는PCB
에서 가져와야한다.
⇒ 이러한 과정 즉, P0와 P1이 서로 대기
<->실행
을 번갈아가며 하는 것을 Context Switching이라고 한다.
- 해당 Task가 끝날때까지 다음 Task는 기다릴 수 밖에 없습니다.
- 또한 반응속도가 매우 느리고 사용하기 불편합니다.
- Computer multitasking을 통해 빠른 반응속도로 응답할 수 있습니다.
- 빠른 속도로 Task를 바꿔 가며 실행하기 때문에 사람의 눈으론 실시간처럼 보이게 되는 장점이 있습니다.
- CPU가 Task를 바꿔 가며 실행하기 위해 Context Switching이 필요하게 되었습니다.
- Task의 대부분 정보는 Register에 저장되고 PCB(Process Control Block)로 관리되고 있습니다.
- 현재 실행하고 있는 Task의 PCB 정보를 저장하게 됩니다. (Process Stack, Ready Queue)
- 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행을 할 수 있습니다.
이때 스레드가 프로세스보다 빠른 이유도 컨텍스트 스위칭
이 한몫한다.
스레드는 컨텍스트 스위칭 될때 text, data, heap 영역은 프로세스 것이기에 자신의 PCB에는 스택 및 간단한 정보만 저장하기에 프로세스 컨텍스트 스위칭 보다 훨씬 바르다.
- P0 가 excute 에서 idle이 될때 P1이 바로 Excute가 되지 않고 좀더 idle 하다가 Excute가 된다.
- P0상태를 PCB에 저장하고 P1 상태를 PCB에서 가져와야 하기 때문임
- 따라서 Context Switching이 잦으면 오버헤드가 발생하여 (비용이 높아) 성능이 떨어짐OverHead란?
- overhead는 과부하라는 뜻으로 보통 안좋은 말로 많이 쓰인다.
하지만 프로세스 작업 중에는 OverHead를 감수해야 하는 상황이 있다.
Context Switching에서 OverHead 감수가 필요하다.
CPU에 계속 프로세스를 수행시키도록 하기 위해서 다른 프로세스를 실행시키고 Context Switching 하는 것
즉, CPU가 놀지 않도록 만들고, 사용자에게 빠르게 일처리를 제공해주기 위한 것이다.
- I/O interrupt
- CPU 사용시간 만료
- 자식 프로세스 Fork
.. 등등이 있다.
이러한 컨텍스트 스위칭이 일어날 때 다음번 프로세스는 스케줄러
가 결정하게 된다.
즉, 컨텍스트 스위칭을 하는 주체는 스케줄러
이다.