Context Switching ⁉️
- CPU는 한번에 하나의 프로세스만 처리할 수 있다.
- 여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스,스레드)의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정이다.
- 다른 프로세스에게 CPU를 할당해 작업을 수행하는 과정이다.
Context Switching 과정
- Task의 대부분 정보는 Register에 저장되고 PCB로 관리된다.
- 현재 실행하고 있는 Task의 PCB 정보를 저장한다.
- 다음 실행할 Task의 PCB 정보를 읽어 Register에 적재하고 CPU가 이전에 진행했던 과정을 연속적으로 수행할 수 있다.
아래의 그림을 보자.
P1, P2라는 2개의 프로세스가 있고 CPU에 올라갔다 내려갔다하는 과정을 보여준다.
- Process P1을 실행하다가 PCB1에 상태를 저장한다.
- 저장되어있는 PCB2를 재로드 해서 실행 시킨다.
- 다시 PCB2 상태를 저장한다.
- PCB1을 재로드 하여 실행 시킨다.
많은 비용이 소모되는 Context Switching
- Cache 초기화
- 메모리 매핑 초기화
- 커널은 항상 실행되어야한다.
프로세스가 스레드보다 더 많은 비용이 든다.
➡️ 스레드는 Stack영역을 제외한 모든 메모리를 공유하기에 Context Switching 발생 시에 Stack 영역만 변경을 진행하면 된다.
➡️ 프로세스는 공유하는 메모리가 없기에 캐시 메모리 초기화 등의 무거운 작업을 해야한다.
(자세한 이야기는 여기서 보자.)