操作系统 ch5 cpu调度 CPU Scheduling
基本概念
采用多道程序设计,多个进程同时处于内存中。当一个进程必须等待时,os将CPU给其他进程。
CPU-I/O 区间周期 Burst Cycle
cpu-io burst cycle包含:
- CPU执行
- IO等待
When a process begins an I/O burst, another process can use the CPU for a CPU burst。
CPU调度程序 CPU scheduler
CPU空闲时,OS通过CPU scheduler在ready queue中选择一个进程执行。
CPU调度时机
- A process switches from the running state to the waiting state (e.g., doing for I/O)
- A process switches from the running state to the ready state (e.g., an interrupt occurs)
- A process switches from the waiting state to the ready state (e.g., I/O completion)
- A process terminates
Preemptive、Non-preemptive(抢占式、非抢占式调度方案)
Non-preemptive:一个进程执行后,不会被优先级更高的进程打断。
分派程序 Dispatcher
将 CPU 的控制交给被短期调度程序选择的进程。
功能包括:
- 上下文切换
- 切换到用户态
- 跳转至用户程序合适位置(PC 寄存器所指示的位置)以重新启动程序
分派延迟(Dispatcher latency)分派程序停止一个进程而启动另一个进程所花的时间。
Scheduling Criteria 调度准则
CPU utilization (CPU利用率 ↑
使 CPU 尽可能的忙。
CPU utilization ranges from 0 to 100 percent. Normally 40% is lightly loaded(轻负荷) and 90% or higher is heavily loaded(重负荷).
Throughput (吞吐量 ↑
每单位时间处理的进程。
However, for long processes, this rate may be one job per hour, and, for short jobs, this rate may be 10 per minute.
Turnaround time (周转时间 ↓
从进程提交到完成的时间。
是所有时间的和:
- waiting time before entering the system
- waiting time in the ready queue
- waiting time in all other events (e.g., I/O)
- time the process actually running on the CPU
Waiting time等待时间 ↓
在就绪队列中等待所花费时间之和。会被 CPU 调度算法影响。
Response time ↓
提交请求到第一次响应的时间。
调度算法 Scheduling Algorithms
先到先服务调度 First-Come, First-Served (FCFS)
The process that requests the CPU first is allocated the CPU first. 先到先服务,非抢占式
question
convoy effect(护航效应):
所有进程等待一个大进程去释放CPU,CPU 和设备的利用率很低。
最短作业优先调度 Shortest-Job-First (SJF)
当要从就绪队列中选择进程时,选择 CPU 区间最短的进程。有抢占式、非抢占式两种。抢占式当有新进程进入时从就绪队列中选择进程;非抢占式当一个进程执行完毕时从就绪队列中选择进程。SJF算法是最佳的。但也存在一些问题。
问题1:如何知道下一个 CPU 区间长度
无法得知,只能预测CPU区间长度,不能确切知道。
预测方法:
问题2:饥饿starvation
SJF 优先选择短作业,结果长作业无法被执行。
优先级调度 Priority scheduling
优先选择高优先级进程去执行。有抢占式、非抢占式。
也会有饥饿现象
老化 aging 克服饥饿现象
逐渐增加在系统中等待时间很长的进程的优先级。
轮转法调度 Round-Robin
每个进程有一个time quantum(时间片),进程在ready queue里先入先出。一个进程最多运行一个时间片的时间,然后移到最后。是可抢占的。
- 时间片过长,reduces to FCFS
- 过短,变成了处理器共享 备注-processor sharing,上下文切换频繁,影响性能
In general, 80% of the CPU bursts should be shorter than the time quantum。
多级队列调度 Multilevel Queue
将就绪队列划分成多个独立队列,每个队列有自己的调度算法。进程根据自身属性被永久分配到对应的一个队列。队列之间有如下两种方法调度。
固定优先级抢占调度 (fixed-priority preemptive scheduling)
每个队列相比更低层队列有绝对的优先级。对于一个队列,只有高层队列都为空时该队列内进程才可运行;如果有新进程进入高层队列则 CPU 会被抢占。[通常采用]
时间片
在队列间划分 time-slice – 每个队列有固定的 CPU 时间(每个队列的 cpu 时间可以不相等),在自己的 CPU 时间内可调度队列内进程。
多级反馈队列调度 Multilevel Feedback Queue
对比多级队列调度–允许进程在队列之间移动,开销更大,更灵活。
如果进程使用过多 CPU 时间则转移到更低队列,在低优先级队列中等待时间过长的进程可被转移到高低优先级队列(aging 的一种形式)。
可由以下参数定义:
- 用于确定进程需要服务时应进入哪个队列的方法。
- 队列数量;
- 每个队列的调度算法;
- 用于确定何时升级到更高优先级队列的方法;
- 用于确定何时降级到更低优先级队列的方法;
多处理器调度 Multiple-Processor Scheduling
方法
非对称多处理 asymmetric multiprocessing
让一个处理器(主服务器)处理所有的调度决定、I/O 处理及其他系统活动。其他处理器只执行用户代码。减轻了数据共享的需要。
对称多处理 symmetric multiprocessing SMP
每个处理器自我调度。
处理器亲和性 affinity
努力让一个进程在同一个处理器上运行。
负载平衡 load balancing
负载平衡试图将工作负荷平均分配到所有处理器上。
超线程技术 hyperthreading
又名对称多线程 SMT。在一个物理处理器上生成多个逻辑处理器来实现同时运行几个线程。
本文来自博客园,作者:流云轻响,转载请注明原文链接:https://www.cnblogs.com/wozra/p/16257874.html