프로세스 스케줄링 은 운영체제에서 프로세스에게 CPU를 선택, 할당하는 작업을 말합니다.
프로세스 스케줄링은 프로세스의 우선순위, 작업량을 고려하여 배치하기에 스케줄링은 멀티 태스킹 작업의 핵심적인 부분입니다.
스케줄링은 CPU의 선점, 비선점 기법에 따라 다양한 알고리즘 방식으로 동작하고 대표적으로 FCFS(First-Come, First-Served), SJF(Shortest-Job-First), Priority, RR(Round-Robin), Multilevel Queue 등이 있습니다.
프로세스 상태란 프로세스가 실행되는 동안 변경되는 상태를 의미합니다. 프로세스는 생성부터 종료까지 여러 상태가 있으며 일반적으로는 5가지 상태를 가집니다.
생성(new)준비(ready)실행(running)대기(waiting)종료(terminated)프로세스 상태 전이란 프로세스가 실행되는 동안 OS에 의해 프로세스 상태가 변경되는 것을 말합니다.
운영체제는 프로세스의 상태를 감시하고 상태를 기반으로 프로세스 스케줄링(프로세스 관리, 제어)을 합니다.
출처:https://wansook0316.github.io/
addmitted(new -> ready)dispatch(ready -> running)interrupt(running -> ready)I/O or event wait(running -> waiting)I/O or event Completion(waiting -> ready)
대략적인 스위칭 과정은 아래와 같습니다.
1. CPU가 프로세스P1을 실행합니다.
2. interrupt 또는 System call 발생시 P1의 상태를 PCB1에 저장합니다.
3. 실행할 P2를 선택합니다(CPU 스케줄링)
4. P2의 상태를 PCB2에서 불러와 실행합니다.
5. 일정시간이 지나 interrupt 또는 System call 발생시 P2의 현재 상태를 PCB2에 저장합니다.
6. 다시 P1 실행 할 차례가 온다면 PCB1에서 불러옵니다.
7. CPU는 P1의 저장한 작업 내역부터 수행합니다.
출처:https://mycareerwise.com/content/context-switch-and-dispatcher/content/exam/nta-net/computer-science
위에서 설명한 컨텍스트 스위칭은 빠른 응답, 동시성을 제공하지만 프로세스 스위칭되는 과정에서 프로세스의 상태, 레지스터 값 등이 저장되고 불러오는 작업이 이뤄지기에 시스템에 많은 부담을 주게 됩니다.
위 사진의 task 사이를 확인해보면 프로세스가 바로 실행되지 않고 cpu idle 상태가 이뤄지는데(보라색 박스) 이 간극을 컨텍스트 스위칭 오버헤드(overhead)입니다.
이러한 오버헤드는 아래와 같은 이유에서 주로 발생합니다.
1. PCB 저장, 복원 비용
2. CPU 캐시 메모리 무효화 비용
3. 프로세스 스케줄링 비용
PCB 저장 및 복원 비용은 본 글에서 충분히 설명했기에 생략하겠습니다.
CPU 캐시 메모리 무효화는 프로세스 자체가 스위칭되기에 CPU 캐시 메모리에 저장된 데이터가 무효화가 됩니다. 이 과정에서 메모리 접근 시간이 늘어나고 성능 저하가 발생합니다.
PCB(프로세스 제어 블록)이란 프로세스에 대한 모든 정보가 모여있는 자료구조를 말합니다.
CPU는 프로세스 컨텍스트 스위칭할때 기존 프로세스의 상태를 저장하고 기존 프로세스의 작업 정보를 가져오는 곳인 PCB가 필요합니다.

출처:https://prepinsta.com/operating-systems/process-control-block/
PCB 아키텍처는 OS마다 다릅니다.
pointerstageprocess IDPrivilegesProgram counterRegisters스레드 스케줄링(Thread Scheduling)은 프로세스 스케줄링과 마찬가지로 운영체제에서 다중 스레드를 관리하며 CPU를 사용할 수 있는 스레드를 선택하고 CPU를 할당하는 작업을 말합니다.
출처:https://javagoal.com/thread-scheduler-in-java/
스레드 스케줄링은 프로세스 스케줄링과 다르게 하나의 프로세스 내에서 다수의 스레드가 동작하고 프로세스 공유 자원을 공유한다는 특징 때문에 스레드 간의 상호작용과 동기화 문제를 고려해야 합니다.
newrunableblockedterminated
출처:https://velog.io/@curiosity806
TCB는 PCB처럼 각 스에드마다 운영 체제에서 유지하는 스레드에 대한 정보를 담고 있습니다.
프로세스가 생성되면 PCB가 메모리에 함께 생성되는 것처럼, TCB도 스레드가 생성될 때 운영체제에 의해 생성됩니다.
출처:https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jhc9639&logNo=221707378026
프로세스 컨텍스트 스위칭, 스레드 컨텍스트 스위칭 두 가지 방법에는 차이점이 존재합니다.
이미 앞선 PCB, TCB 설명때 설명했던 내용들과 동일합니다.
이를 스레드 간에 경쟁조건이라고 합니다.