因为有进程间通信,就会涉及到多个进程竞争CPU,操作系统要决定哪一个进程先运行。
调度介绍
由于我们不知道每次作业什么时候到来,每个作业需要运行多久,因此不太可能有绝对完美的调度算法。
许多进程调度的处理方式对进程和线程都适用。这里首先讨论进程调度问题。
我们可以把调度算法分为两类:非抢占式调度以及抢占式调度。
非抢占式调度算法
这种算法挑选一个进程运行,并一直运行到阻塞(可能是I/O阻塞或等待另外一个进程)或自愿退出。
抢占式调度算法
挑选一个进程并运行,这个进程所运行的最大时间是固定的。如果到了最大时间依然在运行,进程将会被挂起,调度器将会挑选另外的进程运行。
由于操作系统可以分为批处理、交互式、实时系统三部分,在不同的系统中,调度器的优化目标是不同的,因此分开介绍。
调度算法目标
为了设计一个调度算法,应该首先明确一个好的调度算法必须做什么。
所有系统都要求
公平
给每个进程公平的CPU份额
策略强制执行
执行所规定的策略
平衡
保持系统所有的部分都忙碌
批处理系统
吞吐量
最大化每小时作业数
周转时间
最小化从提交到完成的时间间隔(衡量了用户等待一个输出的平均时间)
CPU利用率
保持CPU始终忙碌
交互式系统
响应时间
快速响应请求
均衡性
满足所有用户需求
实时系统
满足截止时间
避免丢失数据
可预测性
在多媒体系统中避免失真
批处理系统中的调度
先来先服务(FCFS)
在这个算法中,进程按照他们请求CPU的顺序使用CPU,维持一个就绪进程的单一队列。
当一个作业从外部进入系统,就马上运行并可以运行任意长时间。当其他作业到来时,就被插入队列尾端。
当运行的进程阻塞时,队列里的第一个进程调度运行,当这个阻塞的进程转为就绪时,再次插入队列尾端。
算法的优点很明显:易于实现。但缺点是在I/O密集型进程和计算密集型进程交替执行时,效率很低。
最短作业优先(SJF)
这也是很容易想到的贪心算法。当一批作业同时到来时,我们先处理作业最短的。
可以证明,当所有作业同时启动时,最短作业优先算法是最优的。这能够使得平均等待时间最短,最大化吞吐量。
但这种算法也只能在批处理系统中有用。因为在实际的其他系统中,每个作业的到达时间、执行时间都是未知的。
最短剩余时间优先
使用这种调度算法,调度器总是挑选其剩余时间最短的那些进程运行,同样,运行时间必须预知。
当一个新作业到来时,它所需的总时间与当前运行进程的剩余时间进行比较,如果新作业需要比当前进程更少的时间完成,那么当前进程被挂起,新作业运行。
这种方式可以使得新到来的短作业得到较好的服务。
最高响应比优先(HRRN)
HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法,既考虑作业等待时间又考虑作业运行时间,既照顾短作业又不使长作业等待时间过长,改进了调度性能。
响应比 =(等待时间+要求服务时间)/ 要求服务时间
即RR=(w+s)/s=1+w/s,因此响应比一定是大于1的。
CPU每次计算所有作业的响应比,选择最高响应比再进行作业。
三级调度
准入调度器
当作业到来时,首先被放入存储在磁盘上的输入队列中。
准入调度器决定哪些作业允许进入系统,其他作业被选中之前就保存在输入队列中。
内存调度器
决定哪个进程留在内存而哪个进程换出到磁盘。在内存中保留的进程数称为多道程序的道数。
CPU调度器
实际在内存中选取下一个将要运行的进程。任何合适的抢占式和非抢占式调度算法都可以在CPU调度器中使用。
交互式系统中的调度
时间片轮转调度
每个进程被分配一个时间段,称为它的时间片(Quantum),即该进程允许运行的时间。
时间片轮转调度中最有趣的一点就是时间片的长度。
从一个进程切换到另一个进程需要进行上下文切换(context switch),但这个过程需要overhead,因此,如果时间片设计的过短,单位时间的上下文切换消耗过大。而时间片设置得比平均CPU突发时间长,抢占会很少发生,使得交互请求的相应变差。
通常来说时间片设置为20~50ms。
优先级调度
每个进程被赋予优先级,率先运行优先级最高的就绪进程。
我们可以设计多个优先级队列,在同类进程内部采用时间片轮转调度。
彩票调度算法
算法为进程发放针对系统各种资源的彩票,当调度器需要作出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源。
如果一个新进程创建并得到一些彩票,则下次抽奖时,它中奖的机会与其持有的彩票成正比。因此,彩票调度的反映非常迅速。
实时系统调度
分为硬实时和软实时。
软实时允许偶尔超过时间限制,而硬实时必须满足时间限制。
按照要响应的时间进一步分为周期性和非周期性。一个系统必须响应多个周期的事件流。
例如,有 个周期性的事件,事件 的周期为 ,其中每个事件需要 秒的CPU时间来处理,则必须满足:
才可能处理所有的负载。满足该条件的实时系统是可调度的(schedulable)。
参考资料
- Operating System:Design and Implementation,Third Edition
- 操作系统调度算法