현재 진행하고 있는
Task(Process, Thread)
의 상태를 저장하고
다음 진행할Task의 상태 값
을 읽어 적용하는 과정보통
인터럽트가 발생
하거나,실행 중인 CPU 사용 허가시간을 모두 소모
하거나,
입출력을 위해 대기해야 하는 경우
에Context Switching이 발생
한다.
즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting처럼 상태 변경 시 발생!
컴퓨터가 매번 하나의
Task
만 처리할 수 있다면
해당Task
가 끝날 때까지 다음Task
는 기다릴 수 밖에 없다.이렇게 되면
반응 속도가 매우 느려진다.
따라서
동시에 여러 작업을 할 수 있도록 Multitasking 을 도입
하여 반응 속도를 올린다.
Multitasking
은 여러 작업을 빠른 속도로 바꿔가며 실행하기 때문에
사람의 눈으로는 여러 작업이 동시에 일어나는 것처럼 보인다.그래서
Multitasking의 도입
으로 Task를 바꾸는 작업이 필요하게 되었다.
Task
의 대부분의 정보는Register에 저장되고 PCB(Process Control Block)로 괸리
한다.- 현재 실행하고 있는
Task
의PCB
의 정보를 저장한다.다음 실행할 Task의 PCB 정보를 읽어 Register에 적재
하고 CPU가 이전에 진행했던 과정을 이어 수행한다.
Context Switching
이 발생하면 많은 비용이 소요된다.
- 캐시 초기화 : 하는 이유?
- Memory Mapping 초기화 : 하는 이유?
- 메모리 접근을 위해 Kernel 이 반드시 실행되고 있어야한다.
Process Context Swiching 비용 > Thread Context Switching 비용
Thread
는Stack 영역을 제외한 모든 메모리를 공유
하므로
Context Switching
수행 시Stack 영역만 변경
하면 되기 때문에 비용이 적게든다.