컨텍스트 스위칭 : CPU/코어에서 실행중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것
쓰레드 : CPU나 코어에서의 실행되는 기본 단위
컨텍스트 : 프로세스/스레드의 상태(CPU(resisters 등), 메모리 등)
컨텍스트 스위칭은 왜 필요한가? 여러 프로세스/스레드를 동시에 실행하기 위함
컨텍스트 스위칭은 언제 발생하는가? 주어진 time slice(quantum)을 다 사용했거나 IO 작업을 해야하거나, 다른 리소스를 기다려야 하거나 등
컨텍스트 스위칭은 OS 커널(각종 리소스를 관리/감독하는 역할)
-> 커널 : OS의 핵심적인 기능 담당(여러 리소스 관리 감독)
컨텍스트 스위칭 과정
1) 다른 프로세스끼리 스위칭(프로세스 컨텍스트 스위칭)
2) 같은 프로세스의 스레드들끼리 스위칭(쓰레드 컨텍스트 스위칭)
공통점
1) 커널 모드에서 실행
2) CPU의 레지스터 상태를 교체
차이점 : 프로세스 컨텍스트 스위칭(다른 프로세스에 있는 스레드 간)은 가상 메모리 주소 관련 처리를 추가로 수행
-> MMU(Memory Manage Unit) : 새로운 프로세스의 주소체계를 바라볼 수 있도록
-> TLB : 가상 메모리 주소와 실제 물리적 메모리 주소 맵핑 정보를 가지고 있는 캐시를 비워줘야 함
스레드 컨텍스트 스위칭이 더 빠른 이유는 ? 메모리 주소 관련 처리는 하지 않기 때문(같은 메모리 공간 공유, CPU 상태정보만 바꿔주면 됨)
컨텍스트 스위칭이 미치는 간접적인 영향 : 캐시 오염
-> 컨텍스트 스위칭된 직후에 캐시에 접근해도 필요한 정보가 없을 가능성이 큼(같은 프로세스에 속한 스레드 간 컨텍스트 스위칭의 경우 가능성이 조금 큼)
-> 프로세스 컨텍스트 스위칭을 할 때 캐시 자체를 날리는 CPU도 있음
유저 관점에서 컨텍스트 스위칭? 순수한 오버헤드