| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- R 그래프
- 비트필드를 이용한 dp
- 비트마스킹
- Binary Lifting
- Express.js
- ccw 알고리즘
- localstorage
- Strongly Connected Component
- DP
- 벨만-포드
- 트라이
- Prisma
- trie
- JavaScript
- LCA
- 분리 집합
- Spin Lock
- 이분 탐색
- map
- 강한 연결 요소
- 게임 서버 아키텍처
- 최소 공통 조상
- MongoDB
- Behavior Design Pattern
- 그래프 탐색
- 2-SAT
- PROJECT
- Github
- 자바스크립트
- SCC
Archives
- Today
- Total
dh_0e
[OS] CPU Scheduling 본문
CPU Scheduling
- 어떻게 Process에게 CPU의 사용을 할당할 것인가
- Multiprogramming에 기반함 - Memory 내의 실행 준비된(Ready State)의 Process들(in Ready Queue) 가운데 하나에게 CPU를 할당
- Multiprogramming: 컴퓨터가 여러 프로그램을 동시에 실행하는 것처럼 보이게 하는 기술
- Multiprogramming에 기반함 - Memory 내의 실행 준비된(Ready State)의 Process들(in Ready Queue) 가운데 하나에게 CPU를 할당
- 목표: CPU 사용률과 처리량(Throughput)의 최대화
CPU, I/O Burst Cycle
- CPU Burst: CPU로 연산을 수행하는 시간
- I/O Burst: I/O 처리를 위해 기다리는 시간
- 일반적인 프로세스는 두 Burst를 번갈아 가며 수행함
- Process 분류에 따른 CPU Burst의 특징
- CPU-Bound(Intensive: 집중적인) Process: 짧은 주기로 길게 이어지는 CPU Burst
- I/O-Bound(Intensive: 집중적인) Process: 긴 주기로 짧게 이어지는 CPU Burst
- 어떤 종류의 Process가 많은지에 따라 스케줄링 기법의 효율성이 달라짐

Scheduling의 종류
- CPU Scheduling의 결정은 다음 시점에 따라 이루어짐 (어느 시점에 Process를 Context Switch 할 것인지)
- "Running" → "Waiting" 상태: I/O에 접근 후 대기할 때
- "Running" → "Ready" 상태: 다른 Process에게 CPU를 선점당할 때
- 수행 종료: 수행이 종료됐을 때
- "Ready" → "Running" 상태: 비선점형 스케줄링

- 비선점형 스케줄링 (Non-preemptive Scheduling)
- 1, 4의 상황에서만 수행되는 스케줄링 기법
- I/O를 수행하는 단계가 속해있어야 함
- Multiprogramming의 기본 스케줄링 - OS가 강제로 CPU 사용을 해제하지 못함
- 현재는 잘 사용되지 않음
- 선점형 스케줄링 (Preemptive Scheduling)
- 그 외의 다른 Scheduling 기법
- 대부분의 OS가 하고있는 CPU Scheduling 기법
- OS가 현재 CPU를 사용하고 있는 Process의 수행을 정지할 수 있음 (2의 상태 변이 발생)
Scheduling Criteria(스케줄링 기준)
- CPU 사용률(CPU Utilization): 전체 시스템 시간 중 CPU가 작업을 처리하는 시간의 비율
- 처리량(Throughput): CPU가 단위 시간당 처리하는 프로세스의 기준
- 응답 시간(Response Time): Interactive System에서 요청 후 첫 응답이 올 때까지의 시간
- 대기 시간(Waiting Time): Process가 Ready Queue 내에서 대기하는 시간의 총합(Waiting Queue가 아님)
- Turnaround Time: Process가 시작해서 끝날 때까지 걸리는 시간
- 이상적인 Scheduling Criteria
- 최대의 CPU 사용률
- 최대의 처리량
- 최소의 응답 시간
- 최소의 대기 시간
- 모든 조건을 만족시키는 Scheduler를 만드는 것은 현실적으로 불가능
- 시스템의 용도에 따른 요구사항이 달라짐
- 슈퍼 컴퓨터: CPU 사용률
- 개인용 컴퓨터: 응답 시간
- 워크 스테이션: 처리량
Scheduling Algorithms
- First-Come, First-Served (FCFS) Scheduling: 단체 주문 도중 작은 주문이 와도 단체 주문 이후에 처리함
- Shortest-Job-First (SJF) Scheduling: 단체 주문 도중 작은 주문이 들어오면 먼저 처리해 줌
- Priority Scheduling: 우선순위가 높은 프로세스부터 실행
- ex) 시스템에 전원이 나갔을 때, 재빨리 가장 높은 Priority인 백업 프로세스가 실행됨, 자율 주행 자동차에서 안전이 최우선시됨
- 범용 시스템에서 사용
- Round-Robin (RR) Scheduling: 10ms만 프로세스를 사용하고 프로세스 교체 (공평하게 시간 분배)
- Multilevel Queue Scheduling: 세분화하여 긴 작업은 더 많은 CPU 자원을 동적으로 할당
- Multilevel Feedback Queue Scheduling : 세분화하여 긴 작업은 더 많은 CPU 자원을 동적으로 할당
1. FCFS Scheduling
- 먼저 CPU 할당을 요청한 Process에 CPU를 먼저 할당
- FIFO Queue를 사용하여 간단하게 구현 가능
- 비선점형 스케줄링

- 범용 시스템에서 잘 사용되지 않음
- Multilevel Queue에서 사용될 수 있지만 FCFS로만 스케줄링하지 않음
2. Shortest Job First Scheduling
- CPU Burst Time이 가장 짧은 Process에 CPU를 먼저 할당
- 최소의 평균 대기 시간을 제공
- 비선점형 방식: 한 번 CPU를 할당받으면 자신의 CPU Burst Time이 끝나기 전에는 놓지 않음
- 선점형 방식: Shortest Remaining Time First Scheduling(SRTF)
- CPU를 할당받아 수행 중이더라도 CPU Burst Time이 자신의 현재 남은 시간보다 짧은 시간을 가진 프로세스가 새로 생성되면 CPU를 양보함


3. Priority Scheduling
- 미리 주어진 Priority에 따라 CPU를 할당
- 비선점형 방식
- 한 번 CPU를 할당받으면 자신의 CPU Burst Time이 끝나기 전에는 놓지 않음
- 선점형 방식
- 새로 생성된 Process가 현재 실행되는 Process보다 높은 Priority를 가지고 있을 경우, CPU를 양보
- 문제점
- 기아 상태(Starvation): 낮은 Priority를 가진 Process는 전혀 수행되지 않을 수 있음
- 해결 방법
- Aging 기법: 할당을 기다리는 시간에 따라 Priority를 증가시켜 주는 방법
- 시스템 별로 Priority가 필요한 경우(생명, 안전과 집결된 시스템)에서 적용됨
4. Round Robin Scheduling
- CPU를 시간 단위(Time Quantum)로 할당
- 선점형 Scheduling 방식
- 보통 Time Quantum은 10-100 milliseconds
- Time Quantum만큼 수행한 Process는 Ready Queue의 끝으로 들어가 다시 할당을 기다림

- Ready Queue 내의 Process: n개
- Time Quantum: q시간
- 각각의 Process가 할당받는 시간: 1/n 만큼의 CPU 시간을 q로 쪼개어 할당받음
- 각 Process의 다음 Time Quantime이 돌아오기까지의 대기 시간: 최대 $(n-1)*x$
- 성능
- q가 클 경우: FCFS (Starvation 발생)
- q가 작을 경우: 문맥 전환(Context Switching)에 필요한 시간보다 낮다면 효율이 매우 떨어짐(Overhead 증가)
- 일반적으로 10ms 미만의 Burst를 가진 process들이 많기 때문에 q를 10ms로 잡음
5. Multilevel Queue Scheduling
- Ready Queue를 여러 개의 Queue로 분리하여, 각각에 대해 다른 Scheduling Algorithm을 사용하는 기법
- Foreground Queue
- Interactive 한 동작이 필요한 Process를 위한 Queue
- ex) User Process(게임, 웹서핑 등)
- Round Robin 기법 사용
- Interactive 한 동작이 필요한 Process를 위한 Queue
- Background Queue
- CPU 연산 작업(짧은 연산)을 주로 수행하는 Process를 위한 Queue
- FCFS 기법 사용: Context Switch Overhead를 줄이기 위해 짧은 CPU 연산을 FCFS로 처리
- 각 Queue에 CPU를 어떻게 할당할 것인지를 결정해야 함
- Queue에 대한 Priority 또는 Time Slice를 사용할 수 있음

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

- 즉, 생성된 후로 Q0, Q1에서 8+16ms 동안 종료되지 않는 Process는 많은 작업을 필요로 하는 Process로 간주하여 FCFS 기법을 이용해 충분한 CPU Time을 할당해 주는 Scheduling 방법
4 Multiple Processor Scheduling의 기본
- more CPU, more Complex for Scheduling: CPU 여러 개를 사용하는 System의 경우, CPU Scheduling이 더욱 복잡해짐
- 각각의 CPU에 서로 다른 I/O 장치가 연결되어 있다면?
- 각각의 CPU가 서로 다르다면? (명령어 셋, 처리 속도)
- 1. 비대칭 멀티프로세싱 (Asymmetric Multiprocessing)
- 하나의 CPU가 시스템 자료 구조(Scheduling, I/O 작업 등) 관리
- 나머지 CPU에게 프로세스 할당해줌
- 모든 CPU가 접근할 경우보다 데이터 공유가 간단히 이루어짐
- Kernel Multithread 지원이 안 되는 경우
- ex) Master CPU가 나머지 Slave CPU를 관리
- 하나의 CPU가 시스템 자료 구조(Scheduling, I/O 작업 등) 관리
- 2. 대칭 멀티프로세싱(Symmetric Multiprocessing)
- CPU가 쭉 펼쳐져 Process가 실행되면 특성에 따라 아무 CPU를 할당받음
- 3. 프로세서 친화성(Processor Affinity)
- 과거에 수행하던 CPU(성능을 알고있는)에 Process를 배정하는 방법
- ex) ARM CPU에서 성능(P > B > L), 저전력(P < B < L)을 참고하여 배정
- 4. Load Balancing
- CPU가 동일할 경우, 동일한 Process들을 수행할 수 있음
- CPU 마다 각각의 Ready Queue를 둘 경우
- 일부 CPU에 Process가 집중될 수 있음
- CPU 모두에(전체 CPU에) 하나의 Ready Queue만을 둘 경우
- 사용 가능한 CPU에 차례대로 Process를 배정

- in Linux
- 방식: Completely Fair Scheduling (CFS)
- 각 프로세스가 CPU를 사용할 수 있는 시간을 균등하게 보장
- 작동 방식: CFS는 특정 프로세스에게 고정된 시간 슬라이스(Time Slice)를 할당하기보다는, 각 프로세스가 CPU를 얼마나 사용했는지 가상 런타임 (Virtual Runtime, vruntime)을 추적
- 범용적으로 쓸 수 있는 OS로 역할을 수행하기 위해 사용
- 리눅스는 데스크톱, 서버, 임베디드 등 다양한 환경에서 사용되므로, 모든 상황에서 적절한 성능과 응답성을 제공하기 위해 CFS와 같은 공정하고 유연한 스케줄링 기법을 사용
- 방식: Completely Fair Scheduling (CFS)
'Operating System' 카테고리의 다른 글
| [OS] Thread (0) | 2025.11.28 |
|---|---|
| [OS] IPC(Inter Process communication) (0) | 2025.11.14 |
| [OS] Basic H/W Mechanisms (Bus, I/O Event, Handling and Device Access Mechanisms) (0) | 2025.11.08 |
| [OS] Process, Context Switch (0) | 2025.11.06 |
| [OS] Operating System Structure, Kernel Designs (Monolithic, Micro, Hypervisor) (0) | 2025.11.03 |
