![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/02018901-067e-42ee-9a02-3ec31d57006a/Untitled.png)
컨텍스트 스위칭이란 여러 프로세스를 처리해야 하는 상황에서, 현재 진행중인 Task(프로세스, 스레드)의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정을 말합니다.
즉, 다른 프로세스에게 CPU를 할당해 작업을 수행하는 과정을 의미합니다.
과정
- Task의 정보를 Register에 저장하여, PCB로 관리한다
- 현재 실행하고 있는 Task의 PCB정보를 저장한다
- 다음 실행할 Task의 PCB정보를 읽어, 레지스터에 적재한 후 CPU가 이전에 진행했던 과정을 연속적으로 수행한다.
비용
- 컨텍스트 스위칭에는 많은 비용이 소모됩니다.
- 캐시를 초기화하고, 메모리 매핑을 초기화하여야 합니다.
- Context Swiching의 비용은 스레드보다 프로세스가 더 많이 듭니다. 이유는 스레드는 Stack영역을 제외한 모든 메모리를 공유하기에 Stack영역만 변경을 진행하면 되기 때문이죠.
PCB에 저장되는 정보
- 프로세스의 상태 : 생성, 준비, 수행, 대기 등의 상태
- 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소입니다.
- 레지스터 : 누산기, 스택, 색인 레지스터가 이에 해당됩니다.
- PID : 프로세스의 고유 ID입니다.
특징
- 컨텍스트 스위칭을 하는 과정에서 CPU는 아무런 일을 하지않습니다. 즉, 컨텍스트스위칭이 잦을수록 오버헤드가 발생하고 성능이 감소합니다.
- 컨텍스트 스위칭을 하는 주체는 스케쥴러입니다.
- 커널이 항상 실행되어야, 컨텍스트 스위칭을 할 수 있습니다.