CPU调度 操作系统笔记整理系列
Posted 雨宙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU调度 操作系统笔记整理系列相关的知识,希望对你有一定的参考价值。
CPU调度
CPU调度是多道程序操作系统的基础
基本概念
- 多道程序的目标是,始终允许某个进程运行以最大化CPU利用率
- 当一个进程等待时,操作系统就从该进程接管CPU控制,并将CPU交给另一进程,这种方式不断重复
- CPU-I/O执行周期:进程执行由一个CPU执行周期和I/O等待组成。
- CPU调度程序:CPU调度程序(或短期调度程序)从内存中准备执行的进程中选择一个进程,并将CPU分配给它
(1)短期调度程序必须经常为CPU选择一个进程
(2)由于执行间隔时间很多,所以短期调度程序必须速度快
(3)需要进行CPU调度的情况可分为以下四种:
a. 当一个进程从运行状态切换到等待状态(I/O请求)
b. 当一个进程从运行状态切换到准备状态(发生中断)
c. 当一个进程从等待状态切换到准备状态(I/O完成)
d. 当一个进程终止时
如果调度只能发生在第一种和第四种情况下,则调度方案为非抢占的,否则,调度方案为抢占的 - 在非抢占调度下,一旦某个进程分配到CPU,该进程就会一直使用CPU,直到它终止或切换到等待状态
- 调度程序:调度程序是一个模块,用来将CPU控制交给由短期调度程序选择的进程,功能包括:
(1)切换上下文
(2)切换到用户模式
(3)跳转到用户程序的合适位置,以便程序重新启动 - 调度程序延迟:调度程序停止一个进程并启动另一个进程所花费的时间
调度准则
CPU利用率
吞吐量:一定时间完成进程数量
周转时间:在ready队列等待时间+CPU上跑的时间 另一种说法:从进程提交到进程完成的时间
等待时间:在ready队列等待时间
响应时间:从提交请求到产生第一响应的时间
最大化CPU利用率、最大化吞吐量、最小化周转时间、最小化等待时间、最小化响应时间
调度算法
FCFS算法(先到先服务调度)
- 核心思想:先到先服务
- FCFS是最简单的CPU调度算法,首先请求CPU的进程被优先分配CPU
- FCFS策略可以通过FIFO队列容易地实现,当一个进程进入ready队列,它的PCB链接到队列的尾部,当CPU空闲时,它被分配给队列头部的进程
- 护航效果:其他进程都等待一个大进程释放CPU
SJF算法(最短作业优先调度)
- 当CPU变为空闲时,它会被赋给具有最短CPU执行的进程,如果两个进程具有同样长度的CPU执行,那么可以由FCFS算法来处理
- SJF算法的真正困难是如何知道下次CPU执行的长度,对于批处理系统的长期调度,可以将用户提交作业时指定的进程时限作为长度,对于短期调度,没有办法知道长度,只能通过计算近似值来预测其值
- 利用以前的CPU执行来预测下一个CPU执行
- SJF调度有两种方案,分别是非抢占和抢占。
(1)非抢占:一旦将CPU分配给进程,它就不能被抢占,直到完成CPU执行
(2)抢占:如果一个新进程到达CPU时CPU执行长度小于当前执行进程的剩余时间,则抢占,这种方案被称为最短剩余时间优先(SRTF)
- SJF是最优的,为一组给定的进程提供最小的平均等待时间
优先级调度
- 每个进程都有一个优先级与其关联,CPU被分配给具有最高优先级的进程,一般来说,数越小优先级越高
- 优先级调度可以是抢占的或非抢占的,当一个进程达到ready队列时,比较它的优先级与当前运行进程的优先级,如果新到达进程的优先级高于当前运行进程的优先级,那么抢占优先级调度算法就会抢占CPU
- SJF是特殊的优先级调度算法
- 缺点:饥饿,低优先级的进程可能永远不会执行,可以用老化的方法解决,逐渐增加在系统中等待时间很长的进程的优先级
轮转调度(Round Robin)
- 每个进程得到一个很小的CPU时间单位,通常是10到100毫秒
- 保持ready队列作为进程的FIFO队列,新进程被添加到ready队列的尾部,CPU调度程序从ready队列中选择第一个进程,将定时器设置在一个时间片后中断,最后分派这个进程
- 进程可能只需少于时间片的CPU执行,在这种情况下,进程本身自动释放CPU
- 进程需要多余一个时间片的CPU执行,那么一个时间片后,定时器中断,进而中断操作系统,然后进行上下文切换,再将进程添加到ready队列的尾部,接着CPU调度程序会选择ready队列内的下一个进程
- 时间片需大于上下文切换时间
以上是关于CPU调度 操作系统笔记整理系列的主要内容,如果未能解决你的问题,请参考以下文章