Context Switch
프로세스(Process)
프로그램을 실행해서 메모리를 할당 받고, 그 메모리에 코드를 올린 인스턴스
하나의 프로세스는 여러 개의 스레드를 가질 수 있다
스레드(Thread)
실질적으로 CPU를 점유하는 실행 흐름의 최소 단위
같은 프로세스 안의 스레드들은 코드, 데이터, 힙 영역을 공유하고 각자의 스택 영역을 가진다
CPU 스케줄링
CPU의 개수는 한정적이고 여러 프로세스 혹은 스레드를 실행하고자 할 때 CPU를 할당하는 순서와 방법을 결정하는 것
비선점 스케줄링
한번 CPU를 점유한 스레드가 작업이 끝나거나 Block되기 전까지 계속해서 CPU를 차지하는 방식
FCFS(First Come First Serve), SJF(Shortest Job First)
선점 스케줄링
스케줄링 방식에 따라 정해진 우선순위에 따라 CPU를 점유하고 있던 스레드가 밀려날 수도 있는 방식
SRTF(Shortest Remaining Time First), Priority 스케줄링, Round Robin, MQ(Multilevel Queue),
MFQ(Multilevel Feedback Queue)
작업이 끝나지 않았지만 스케줄링에 의해서 CPU를 반환할 경우에 Context Switch가 일어난다
Context Switch
점유하고 있던 CPU를 반환할 경우 자신이 작업하던 Context를 따로 저장해 두어야 다시 CPU를 점유했을 때 작업을 이어서 할 수 있다
Context는 CPU가 프로세스 혹은 스레드를 실행시키 위해 필요한 정보들을 말한다
프로세스 번호, 프로세스의 상태, PC(Program Counter), 레지스터 등
스케줄링에 의해 CPU를 점유한 스레드가 바뀔 때 나가는 스레드의 Context를 저장하고, 들어오는 스레드의 Context를 CPU에 세팅하는 것이 Context Switch이다
스레드의 Context는 TCB(Thread Control Block)에 저장이 되고 프로세르의 Context는 PCB(Process Control Block)에 저장이 된다
프로세스와 스레드의 Context Switch
프로세스에 비해 스레드가 공유하는 영역이 많기 때문에 Context Switch 비용이 적다
페이지 테이블, 캐시, 스택을 제외한 영역 정보 등은 프로세스 Context에만 포함된다