CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는것
현재 하나의 프로세스는 기본적으로 하나의 스레드를 가진다.
스레드 : CPU/CORE의 독립적 작업 단위
CPU 레지스터 : 각종 명령어를 수행하기 위한 임시 데이터를 저장하는 장치.
프로세스/스레드의 상태, CPU, 메모리 등등
여러 프로세스/스레드를 동시에 실행시키기 위해서
주어진 timeslice(작업시간)을 다 사용했거나, I/O작업을 해야하거나, 다른 리소스를 기다려야 하거나 등등.
ex) 멀티 태스킹 시스템에서 컨텍스트 스위칭
여러 프로세스가 아주 짧은 응답시간을 사용하면서 번갈아가면서 실행된다.
OS 커널(kernel) :
1. 운영체제에서도 가장 핵심적인 역할을 한다.
2. 각종 리소스를 관리/감독하는 역할
3. 컨텍스트 스위칭의 주체
다른 프로세스와 스위칭(process context switching)
같은 프로세스의 다른 스레드와 스위칭(thread context switching)
커널 모드에서 실행 : 프로세스1이 하드웨어, 컴퓨터의 리소스를 다뤄야 하는 상황이오면 프로세스가 접근하는것이 아닌 커널이 접근한다. 통제권이 커널로 넘어간다.
-->유저모드로 드라이버, CPU, 메모리에 접근하는것이 불가능하다.
CPU의 레지스터 상태를 교체 : CPU에서 실행되던 프로세스1의 timeslice가 끝이나고, 프로세스2가 실행될때 레지스터 상태가 교체되고, 어딘가에 프로세스1의 레지스터 상태정보를 저장한다.
다시 컨텍스트 스위칭이 발생할때 상태정보를 파악하고 그 이후부터 명령어를 처리할 수 있다.
같은 프로세스의 스레드는 메모리영역을 공유한다. 컨텍스트 스위칭이 일어나도 메모리에 관련한 처리 과정은 필요없다.
다른 프로세스와의 컨텍스트 스위칭 :
메모리 주소체계가 다르기 때문에 가상 메모리 주소 관련 처리를 추가로 수행한다.
MMU 수정, TLB 비워줘야 한다.
스레드1이 작업 중 컨텍스트 스위칭이 발생해야 할때 OS커널의 커널모드가 시작되고, 스레드1의 레지스터 상태정보를 저장하고 스레드2의 상태정보를 로드 후 유저모드로 돌아간다. 즉, CPU의 레지스터 상태정보 저장-로딩 수행.(반복)
서로 다른 프로세스는 독립적인 메모리 영역을 가지고 있다. 각 스레드의 상태정보를 저장 로드 하는것은 같다.
하지만, 메모리 관련 처리를 해주어야 MMU가 P2메모리를 참조, TLB(버퍼) 초기화, 캐시를 비워줘야한다. 이 과정이 일어나야 프로세스간의 컨텍스트 스위칭이 성공적으로 발생한다.
메모리 주소 관련 처리를 하지 않기 때문이다.
캐시 오염(cache pollution) : 컨텍스트 스위칭이 발생 직 후 cache에 존재하는 정보는 이전에 실행했던 프로세스, 스레드의 정보이다.
cache : CPU가 memory에 접근할때 자주 사용하는 데이터는 CPU에 존재하는 cache영역에 저장해 memory에서 가져오는것이 아닌 cache를 사용해서 데이터를 빠르게 사용할 수 있다.
순수한 오버헤드 : 내가 실행중인 애플리케이션과 무관한 cpu비용