CPU调度
- 调度算法
- 评价指标
- 多处理调度
- 实时调度
- 调度案例
- 评估调度算法
调度的基础:
- CPU与I/O操作并行执行(由硬件决定)
- 任何进程中都是CPU与I/O交替执行(使得进行I/O操作时,CPU可以让其它进程先运行)
I/O操作完成之后,一定需要内核处理一下,才可以产生下一个I/O操作
所有陷入到操作系统以后的工作,都可能发生调度(从内核返回时)
不可抢占型调度,合作型(都处于运行态,但进程自身进行不下去了):
- 当一个进程从运行态切换到等待态
- 当一个进程终止时
抢占型调度,可剥夺型(可能产生“竞争条件”):
- 当一个进程从运行态切换到就绪态
- 当一个进程从等待态切换到就绪态
对于非抢占调度,一旦CPU分配给一个进程,那么该进程会一直使用CPU直到进程终止或切换到等待状态。
短期调度:在内存作业中选择就绪执行的作业,并为它们分配CPU
中期调度:作为一种中等程度的调度程序,尤其被用于分时系统,一个交换方案的实施,将部分运行程序移出内存,之后从中断处继续执行
长期调度(作业调度程序):确定哪些作业调入内存以执行。
三者主要的不同是执行的频率,短期调度必须经常调用一个新进程,由于在系统中,长期调度处理移动的作业时,并不频繁被调用,可能在进程离开系统时才被唤起。
调度算法
- 先到先服务调度(FCFS)
会产生护航效果,该算法是非抢占的。一旦CPU被分配给了一个进程,该进程就会保持CPU直到释放CPU为止,即程序终止或是请求I/O。 - 最短作业优先调度(SJF)
对于给定的一组进程,SJF算法的平均等待时间最小。经常用于长期调度。困难在于如何知道下一个CPU区间的长度。
该算法可能是抢占的或非抢占的。抢占SJF调度有时称作最短剩余时间优先调度。 - 优先级调度
可以分为抢占型或非抢占型;
内部定义优先级使用一些测量数据以计算进程优先级,如时间极限、内存要求、打开文件的数量和平均I/O区间与平均CPU区间之比都可以用于计算优先级
外部定义优先级是通过操作系统之外的准则来定义的,如进程重要性、用于支付使用计算机的费用类型和数量、赞助工作的单元、其它(通常为政治)因素。
可能会出现无穷阻塞或饥饿(可以利用老化来解决) - 轮转法调度(RR):为分时系统设计,可以抢占
通过时钟中断(而不是进程告诉内核)得知时间片用完了
时间片过大相当于先进先出调度,时间片过小的话进程切换开销大 - 多级队列调度
优先级(从高到低):系统进程、交互进程、交互编辑进程、批处理进程、学生进程 - 多级反馈队列调度:允许进程在队列之间移动。主要思想是根据不同CPU区间的特点以区分进程。如果进程使用过多CPU时间,那么它会被转移到更低优先级队列
参数有:队列数量、每个队列的调度算法、用以确定何时升级到更高优先级队列的方法、用以确定何时降级到更低优先级队列的方法、用以确定进程在需要服务时应进入哪个队列的方法
评价指标
- CPU利用率:所有进程使用CPU的时间/CPU的时间
- 吞吐量:单位时间内完成的进程个数
- 周转时间:从进程提交到进程完成的时间(从创建到结束),包括等待进入内存、在就绪队列中等待、在CPU上执行和I/O执行;周转时间通常受输出设备速度的限制。
- 等待时间(在就绪状态的等待时间,而非在等待态的时间):CPU调度算法并不影响进程运行和执行I/O的时间,它只影响进程在就绪队列中等待所花的时间。
- 响应时间:从用户提出请求到给出反馈的时间
需要使CPU使用率和吞吐量最大化,而周转时间、等待时间、响应时间最小化。
多处理调度
- 非对称多处理
- 对称多处理
实时调度
- 软实时
- 硬实时:有严格的时间约束,不满足则失败
调度案例
- Solaris调度
- Windows XP调度
- Linux调度
评估调度算法
准则包括:
- 最大化CPU使用率
- 最大化吞吐量
评估方法
- 确定模型法
- 排队模型法
Little公式:描述了就绪队列在稳定时的任务情况 - 模拟法