📖Context Switching
📖CPU 스케줄링
다중 프로세서 운영체제에서 CPU 이용률을 최대화하며 프로세스 작업을 수행하기 위해서 다음에 어떤 프로세스를 처리할지(CPU에 어떤 프로세스를 배정할지)를 결정하는 운영체제 커널의 모듈

Note
CPU Scheduler Context Switching이 너무 자주 발생하면 오히려 CPU 성능이 떨어질 수 있기 때문에 Context Switching을 필요한 순간에 적절하게 하도록 하는 알고리즘이 필요한데, 이 알고리즘을 사용하는 주체 즉, CPU를 할당받을 프로세스를 결정하는 역할
Dispatcher CPU를 할당할 때, CPU 스케줄러가 선택한 프로세스에 실제로 CPU 코어의 제어를 할당하는 모듈
- CPU 이용률을 최대화하기 위해서는 좋은 스케줄링 알고리즘이 필요
📖CPU 스케줄링 발생 상황
| 프로세스 상태 | 예시 | 방식 |
|---|---|---|
| Running → Waiting | I/O 발생 | 비선점 |
| Running → Reday | 인터럽트 발생 | 선점 |
| Waiting → Ready | I/O 완료 | 선점 |
| Terminate | 프로세스 종료 | 비선점 |
📖CPU 스케줄링 Criteria(성능 척도)
- CPU Utilization : CPU가 쉬고 있지 않게 해야 함
- Throughput : 단위 시간 당 처리량
- Turnaround Time : 수행을 요청한 후 작업이 끝날 때까지 걸린 시간
- Waiting Time : 수행을 요청한 후 작업이 시작될 때까지 걸린 시간
- Response Time : 요청한 후 응답이 올 때까지 걸린 시간
일반적으로 CPU Utilization, Throughput ↑ & Turnaround, Waiting, Response Time ↓일 때 성능 good:)
📖선점형(Preemptive) 스케줄링
프로세스가 CPU를 할당받아 실행 중이더라도 운영체제가 강제로 CPU를 빼앗을 수 있는 방식
📎장점
- CPU 처리 시간이 매우 긴 프로세스가 CPU 사용 독점을 막을 수 있어 효율적인 운영이 가능
- 높은 우선순위를 가진 프로세스를 빠르게 처리하는 시스템에 유용
- 빠른 응답시간을 요구하는 시분할 시스템에 유용
📎단점
- 높은 우선 순위를 가진 프로세스들만 들어오는 경우 잦은 Context Switching이 일어나 오버헤드가 많이 발생
📎종류
1. SRT(Shortest Remaining Time)
가장 짧은 실행시간을 가진 프로세스이 생길 때마다 해당 프로세스가 먼저 실행되는 방식

- 현재 CPU에서 실행 중인 프로세스의 실행시간보다 더 짧은 실행시간을 가진다고 판단되는 프로세스가 Ready Queue에 생기면 언제라도 프로세스가 선점됨 (SJF와의 차이점)
2. RR(Round Robin)
시분할 시스템의 성질을 활용한 방식

- 프로세스마다 같은
Time Quantum(CPU 할당 시간)을 할당하여 프로세스가 할당된 시간 내에 처리 완료를 못하면 Ready Queue의 가장 뒤로 보내지고, CPU는 대기 중인 다음 프로세스로 넘어감 - 균등한 CPU 점유 시간을 보장하며, 시분할 시스템을 사용
Time Quantum가 클 경우에는 비선점 스케줄링 방식 중 하나인 FCFS 방식과 비슷해짐
3. Multi Level Queue
프로세스들을 여러 종류 그룹으로 분할하여 각 그룹마다 다른 Ready Queue를 이용하며 상위 단계의 작업이 CPU를 선점하는 방식

- 큐마다 다른 스케줄링 알고리즘을 사용
4. Multi Level Feedback Queue ദ്ദിᐢ•ᗜ•ᐢ₎ go go
기존 Multi Level Queue에 에이징 기법을 적용한 방식
에이징(Aging) 기법
기다린 시간에 비례하여 우선순위를 높이는 기법

- 기본 개념은 Multi Level Queue와 동일하지만, 프로세스가 다른 큐로 이동 가능
- 모든 새로운 프로세스는 가장 높은 우선순위를 가진 Ready Queue에 들어가는데,
Time Quantum를 다 채운 프로세스는 한단계 낮은 우선순위의 Ready Queue로 이동 - Ready Queue의 우선순위가 낮을 수록
Time Quantum을 크게 줌으로써 보완 - 가장 마지막 Ready Queue는 보통 FCFS 방식을 채택
- 유연성이 뛰어나며,
Turnaround Time과Response Time에 최적화
📖비선점형(Non-Preemptive) 스케줄링
프로세스가 CPU를 점유하고 있다면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 CPU를 점유할 수 없는 방식
📎장점
- 모든 프로세스들에게 공정
- 응답 시간 예측 가능
📎단점
- 짧은 작업을 수행하는 프로세스라도 긴 작업이 종료될 때까지 기다려야 함(상황에 따라 효율성 차이 多)
📎종류
1. FCFS(First Come First Served)
프로세스가 Ready Queue에 도착한 순서에 따라 CPU를 할당받는 방식
2. SJF(Shortest Job First)
가장 짧은 실행시간을 가진 프로세스가 종료 시까지 CPU를 할당받는 방식

- Ready Queue에 있는 프로세스들 중 가장 작은 실행시간을 가진 프로세스가 종료 시까지 CPU 할당받음
- CPU 요구시간이 긴 작업과 짧은 작업 간의 불평등이 심하여, CPU 요구시간이 긴 프로세스는 기아 현상 발생
3. HRN(Highest Response Ratio Next)
대기 중인 프로세스 중 현재 Response Ratio가 가장 높은 것을 선택하는 방식
- 에이징 기법 적용
- 긴 작업과 짧은 작업 간의 불평등을 완화 → SJF의 단점 보완
HRN이 선점형(Preemptive) 스케줄링으로 구현된다면?
우선순위가 높은 다른 프로세스들이 너무 자주 생김 → Context Switching이 너무 자주 발생 → 스케줄러의 일이 너무 늘어남
