⭐ Scheduling이란?
- 어떻게 Process에게 CPU의 사용을 할당할 것인가
Multiprogramming에 기반함
- Memory 내의 실행 준비된 (Ready State)의 Process들 가운데 하나에게 CPU를 할당함
- CPU Scheduling의 목표
- CPU 사용률과 처리량(Throughput) 의 최대화
🧩 Process 수행 사이클의 구성
- CPU-I/O Burst Cycle
CPU Burst: CPU로 연산을 수행하는 시간
I/O Burst: I/O 처리를 위해 기다리는 시간
- 일반적인 프로세스는 두 Burst를 번갈아가며 수행함
- Process 분류에 따른 CPU Burst의 특징
- CPU-Bound Process: 짧은 주기의 긴 CPU Burst (CPU 연산 많이)
- I/O-Bound Process: 긴 주기의 짧은 CPU Burst (I/O 처리 많이)
- 어떤 종류의 Process가 많은지에 따라 스케줄링 기법의 효율성이 달라짐
서로 다른 Process, System에도 불구하고, 대체적으로 아래와 같은 경향을 보임
해석:
CPU Burst의 대부분은 매우 짧다 (0~2ms 구간 최고 빈도)
- X축에서 0~2ms 근처에서 빈도가 제일 높음(약 150 이상)
- 즉 대부분의 프로세스는 CPU를 아주 잠깐만 사용하고 다시 I/O로 넘어간다는 뜻.
→ 현대 운영체제의 일반적인 패턴과 동일
- 많은 프로세스가 짧은 CPU 작업 + 긴 I/O 대기를 반복한다.
🧩 Scheduling의 종류
- CPU Scheduling의 결정은 다음 시점에 따라이루어짐 (Process의
context switching 시점)

- “Running”에서 “Waiting” 상태로
- “Running”에서 “Ready” 상태로
- 수행종료
- “Ready” 에서 “Running” 상태로
- 비선점형스케줄링(Non-preemptive Scheduling) - 1과 4 (손, 발이 묶여버림)
- 1과 4의 상황에서만 수행되는 Scheduling 기법
- Multiprogramming의 기본 Scheduling – OS가 강제로 CPU 사용을 해제하지 못함
- 선점형스케줄링(Preemptive Scheduling) - 2 (강제로 Ready로 변경)
- 그 외의 다른 Scheduling 기법
- OS가 현재 CPU를 사용하고 있는 Process의 수행을 정지할 수 있음
2의 상태 변이가 일어남
🧩 Scheduling Criteria
CPU 사용률 (CPU Utilization) - 시스템 시간 중 CPU 작업 처리 시간의 비율
처리량(Throughput) - CPU가 단위 시간당 처리하는 프로세스의 개수
응답시간(Response Time)- Interactive System에서 요청 후 첫 응답이 올 때까지의시간
대기시간(Waiting Time) - Process가 Ready Queue 내에서 대기하는 시간의총합
Turnaround Time - Process가 시작해서 끝날때까지 걸리는 시간
🧩 Scheduling Algorithms
- First-Come, First-Served (FCFS) Scheduling : FIFO
- Shortest-Job-First (SJF) Scheduling : 작은 것 우선
- Priority Scheduling : 우선 순위
- Round-Robin (RR) Scheduling : 시분할
- Multilevel Queue Scheduling : 긴 Job에 더 많은 CPU 자원 할당
- Multilevel Feedback Queue Scheduling : 긴 Job에 더 많은 CPU 자원 할당
🧩 FCFS (First-Come, First-Served) : 비선점형 스케줄링
먼저CPU할당을요청한 Process에 CPU를 먼저 할당한다.
- FIFO Queue를 사용하여 간단하게구현가능
- 작업의 수행 순서에 따라 대기시간이 변할 수 있음
문제 1)
문제 2)
🧩 Shortest Job First Scheduling : 비선점형 스케줄링, 선점형 스케줄링
- 다음 CPU Burst Time이 가장 짧은 Process에 CPU를 먼저 할당한다.
- 비선점형방식
- 한번CPU를할당받으면자신의CPU Burst Time이끝나기전에는놓지않는다.
- 선점형방식
- CPU를 할당받아수행중이더라도 CPU Burst Time이 자신의 현재 남은 시간보다 짧은 시간을
가진 프로세스가 새로 생성되면 CPU를 양보한다.
- Shortest Remaining Time First Scheduling (SRTF)
문제 1)
🧩 Priority Scheduling : 비선점형 스케줄링, 선점형 스케줄링
- 미리 주어진 Priority에 따라 CPU를 할당
- 비선점형 방식
- 한 번 CPU를 할당 받으면 자신의 CPU Burst Time이 끝나기 전에는 놓지 않는다.
- 선점형 방식
- 새로 생성된 Process가 현재 실행되는 Process보다 높은 Priority를 가지고 있을 경우, CPU를 양보한다.
- 문제점
- 기아 상태(Starvation)
- 낮은Priority를 가진 Process는 전혀 수행되지않을수있다.
- 해결 방법
- Aging 기법
- 할당을 기다리는 시간에 따라 Priority를 증가시켜 주는 방법
🧩 Round Robin Scheduling : 선점형 스케줄링
- CPU를 시간 단위(Time Quantum)로 할당
- 선점형Scheduling 방식
- 보통Time Quantum은 10 – 100 milliseconds
- Time Quantum만큼 수행 한 Process는 Ready Queue의 끝으로 들어가 다시 할당을 기다림
- Ready Queue 내의 Process
- Time Quantum
- 각각의Process가할당받는시간
- 1/n 만큼의 CPU 시간을 q로 쪼개어 할당받음
- 각Process의 다음 Time Quantum이돌아오기까지의 대기시간
- 성능
- q가 클 경우: FCFS
- q가 작을 경우: 문맥전환(Context Switching)에 필요한 시간보다 낮다면 효율이 매우 떨어짐
🧩 Multilevel Queue Scheduling
- Ready Queue를 여러 개의 Queue로 분리하여, 각각에 대해 다른 Scheduling Algorithm을 사용하는 기법
Foreground Queue
- Interactive한 동작이 필요한 Process를 위한 Queue
- Round Robin 기법 사용
Background Queue
- CPU 연산 작업을주로수행하는Process를위한Queue
- FCFS 기법 사용
- 각 Queue에 CPU를 어떻게 할당할 것인지를 결정해야 함
- Queue에 대한 Priority 또는 Time Slice를 사용할 수 있음

🧩 Multilevel Feedback Queue Scheduling - Aging의 한 방법
- Multilevel Queue에서 Process들이 서로 다른 Queue로 이동할 수 있도록 한 Scheduling 기법
- 필요한 요소들
- Queue의 개수
- 각 Queue마다의 Scheduling 기법
- 언제 Process를 한 단계 높은 Queue로 옮길 것인가
- 언제 Process를 한 단계 낮은 Queue로 옮길 것인가
- 어떤 Process가 특정한 Service를 필요로 할 때 그것을 제공하는 Queue로 옮겨줄 방법

🧩 Multilevel Feedback Queue Scheduling 예
- 3 Level Feedback Queue Scheduling
- Q0 – Time Quantum 8 Miliseconds
- Q1 – Time Quantum 16 Miliseconds
- Q2 - FCFS
- 새로운 Process가 들어오면,
- Q0에서8 ms 동안 수행됨
- 1에서종료되지않았다면Q1으로이동, 16 ms 동안수행됨
- 2에서도종료되지않으면, Q2으로이동, FCFS로수행됨
- 즉, 생성되고8 + 16 ms 동안 종료되지않은 Process는 많은 CPU 작업을 필요로
하는 Process로 간주하여 FCFS기법을 이용해 충분한 CPU Time을 할당해주는
Scheduling 방법이다.
🧩 4 Multiple Processor Scheduling의 구분
🧩 비대칭 멀티 프로세싱 vs. 대칭 멀티 프로세싱
비대칭 멀티 프로세싱 (Asymmetric Multiprocessing)
프로세서들간에 master-slave 관계가 있다. 마스터 프로세서가 슬레이브 프로세서에 작업을 할당하고 관리한다.
- 하나의 CPU만이 시스템 자료구조(Scheduling, I/O 작업, 등) 관리
- 모든 CPU가 접근할 경우보다 데이터공유가 간단히 이루어짐
- Kernel Multithread 지원이 안 되는 경우
대칭 멀티 프로세싱(Symmetric Multiprocessing)
주종 관계가 없이, 모든 프로세서들이 동일한 peer로 동작한다. 각 프로세서는 다른 프로세서의 간섭 없이 각자 자신의 작업을 수행한다. N개의 cpu가 있으면 성능을 크게 저하하지 않으면서 N개의 프로세스를 실행한다.
⭐ iOS에서의 CPU 스케줄링
🧩 XNU 커널
iOS는 XNU(X is Not Unix) 커널을 사용한다. macOS와 동일한 커널로, Mach 마이크로커널과 BSD를 결합한 하이브리드 구조다. CPU 스케줄링은 Mach 레이어에서 담당하며, 약 128개의 우선순위 레벨을 내부적으로 관리한다.
🧩 iOS는 어떤 스케줄링을 사용할까?
iOS(XNU 커널)는 Multilevel Feedback Queue 기반의 스케줄링을 사용한다. 이를 QoS(Quality of Service)라는 형태로 개발자에게 제공한다.
| QoS | 대응되는 개념 | 용도 |
|---|
.userInteractive | Foreground Queue (높은 우선순위) | UI 업데이트, 애니메이션 |
.userInitiated | Foreground Queue | 사용자가 즉시 결과를 기대하는 작업 |
.default | 중간 Queue | 일반적인 작업 |
.utility | Background Queue | 프로그레스 바가 있는 작업 |
.background | Background Queue (낮은 우선순위) | 백업, 동기화 |
🧩 Main Thread와 스케줄링
Main Thread는 기본적으로 .userInteractive 우선순위를 가진다. CPU 스케줄러가 항상 최우선으로 처리하기 때문에, Background 작업이 많아도 UI가 버벅이지 않는다.
[Main Thread] QoS: .userInteractive → CPU 우선 할당
[Background Thread] QoS: .background → CPU 여유 있을 때 실행
🧩 선점형 스케줄링과 iOS
iOS는 선점형 스케줄링을 사용한다. 높은 우선순위의 작업이 들어오면 낮은 우선순위 작업을 중단하고 CPU를 양보하게 된다. 덕분에 Background에서 무거운 연산을 돌려도 사용자 터치 반응은 즉각적으로 처리된다.
🧩 실무에서의 활용
DispatchQueue.global(qos: .utility).async {
let data = processLargeFile()
DispatchQueue.main.async {
self.updateUI(with: data)
}
}
우선순위가 낮으면 CPU 시간을 덜 받아서 작업이 느려질 수 있다. 하지만 그게 의도된 동작이다. 사용자 입장에서는 UI가 버벅이는 게 더 불쾌하고, 백그라운드 작업이 조금 더 걸리는 건 체감하기 어렵기 때문이다.