您的位置:首页 > 运维架构 > Linux

和Linux大魔王一起愉快的玩耍(四)常用进程调度算法

2016-06-09 21:46 267 查看
进程的调度算法主要要达到以下目标:
公平性考量: 让每个进程尽量平均的占用CPU
效率考量: 尽量增大CPU的吞吐率,让CPU在所有时间基本上处于忙碌状态
响应时间考量: 让交互用户之间的响应时间达到最小
回转(TurnAround): 让批处理用户等待输出的时间尽可能的小
吞吐率(ThroughPut): 让一段时间内CPU尽可能多的处理任务
但在实际情况下基本上无法同时满足上述几个条件,所做的只能在其中寻找平衡。
进程的调度方式:
非剥夺方式:end、申请IO,这种方式不利于“及时性”较高的实时系统和分时系统,主要用于批处理系统。
剥夺方式:时间片完、优先级低。用于实时、分时、要求较高的批处理系统。
调度类型:
1.批处理调度、分时调度、实时调度和多处理机调度
2. 长程调度、中程调度、短程调度

长程调度:作业调度(从外存调度到内存),创建了进程后,可能等待短程调度和中程调度。选择多少个作业进入内存取决于多道程序的度,选择哪些作业取决于长程调度算法
短程调度:进程调度
中程调度:挂起状态进程的调度,目的是提高内存利用率和系统吞吐量
3.I/O调度

常用进程调度算法

一、先来先服务

最简单的调度算法是先来先服务(FCFS),也称为先进先出(First-In-First-Out,FIFO)或严格排队方案。当每个进程就绪后,它加入就绪队列。当前正在运行的进程停止执行时,选择在就绪队列中存在时间最长的进程运行。
FCFS算法在单处理机系统中很少作为主要的调度算法,但经常与其他调度算法结合使用,形成更为有效的调度算法。

二、轮转法
这是一种基于时钟的抢占策略,以一个周期性间隔产生时钟中断,当中断发生时,当前正在运行的进程被置于就绪队列中,然后基于FCFS策略选择下一个就绪作业的运行。这种技术也称时间片,因为每个进程在被抢占前都给定一片时间。

进程切换会增加系统开销,需要综合考虑系统的最大用户数、响应时间、系统效率等因素。 这种算法的平均周转时间比较长,常用于分时系统及事务处理系统,合理的时间片会带来满意的响应时间,能让%80左右的进程在一个时间片内完成。,对于短的、计算型的进程有利,不适合批处理系统。,不利于IO型进程。(可以将IO型放在较高优先权的队列)
三、短作业优先调度算法

[align=left]由于在实际情况中,短作业有很大的比例,为了能使他们能比长作业优先执行,产生了短作业优先调度算法。短作业优先调度算法(SJF或SPF),是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。[/align]

SJF算法虽然较之FCFS算法有了明显的改进,但仍然存在不容忽视的缺点:

1)必须预知作业的时间。

2)对长作业非常不利,长作业的周转时间会明显的增长,更严重的是忽略了作业的等待时间,可能使长作业等待时间过长,出现饥饿现象。

3)在采用SJF算法时,人--机无法实现交互。

4)该调度算法完全未考虑作业紧迫程度,故不能保证紧迫作业能得到及时的处理。
四、最短剩余时间
最短剩余时间(Shortest Remaining Time,SRT)是针对SPN增加了抢占机制的版本。在这种情况下,调度程序总是选择预期剩余时间最短的进程。当一个进程加入就绪队列时,它可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就可能抢占当前正在运行的进程。像SPN一样,调度程序在执行选择函数时必须有关于处理时间的估计,并且存在长进程饥饿的危险。
五、最高响应比优先
根据比率:R=(w+s)/s (R为响应比,w为等待处理的时间,s为预计的服务时间)
如果该进程被立即调用,则R值等于归一化周转时间(周转时间和服务时间的比率)。R最小值为1.0,只有第一个进入系统的进程才能达到该值。
调度规则为:在当前进程完成或被阻塞时,选择R值最大的就绪进程,它说明了进程的年龄。当偏向短作业时,长进程由于得不到服务,等待时间不断增加,从而增加比值,最终在竞争中胜了短进程。
和STR,SPN一样,使用最高响应比(HRRN)策略需要估计预计服务时间。
六、反馈法
如果没有关于各进程相对长度的任何信息,则SPN,SRT和HRRN都不能使用。另一种导致偏向短作业的方法是
4000
处罚运行时间较长的作业,换句话说,如果不能获得剩余的执行时间,那就关注已经执行了的时间。
方法为:调度基于抢占原则(按时间片)并且使用动态优先级机制。当一个进程第一次进入系统中时,它被放置在一个优先级队列中,当第一次被抢占后并返回就绪状态时,它被放置在下一个低优先级队列中,在随后的时间里,每当被抢占时,它被降级到下一个低优先级队列中。一个短进程很快会执行完,不会在就绪队列中降很多级,一个长进程会逐渐降级。因此新到的进程和短进程优先于老进程和长进程。在每个队列中,除了在优先级最低的队列中之外,都是用简单的FCFS机制,一旦一个进程处于优先级最低的队列中,它就不可能再降级,但会重复的返回该队列,知道运行结束。因此,该队列可按照轮转方式调度。

在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于多数人机交换所需要的时间是时,能较好的满足各种类型用户的需求。

1)终端型用户。由于终端型用户提交的作业多属于交互性作业,通常较小,系统只要能是这些作业在第一队列规定的时间内完成,便可以使终端用户干点满意。

2)短批处理作业用户。对于这类作业,如果可以在第一队列中执行完成,便获得与终端型作业一样的响应时间。对于稍长的短作业,也只需在第二第三队列中各执行一段时间片完成,其周转时间仍然比较短。

3)长批作业处理用户。对于场作业他们将在第1,2,3,4...n个队列中运行,然后再按照轮转方式运行,用户不必担心长作业长期得不到处理。
七、有保证的调度算法
在一个单用户操作系统中,有n个进程在运行,那么每个进程只能获得CPU处理能力的1/n,为了进行这个保证,系统必须记录每个进程创建开始到现在使用CPU的时间数量Th,每个进程被保证的占用CPU的时间总数T。那么Th/T就是当前进程占用其保证时间的比例,选取当前比例最小的进程执行。

八、乐透调度
原理是为系统中的进程发放彩票,中奖后的奖励就是某种系统资源,比如CPU时间,当调度程序运行的时候,某张彩票被随机选择为中奖,持有该彩票的用户占用该种资源。某些更加重要的进程会被给予更多的彩票以增加其获得调度的概率。形式化的说法是: 当一个进程占用彩票总数的f(0<=f<=1)时,那么进程久获得相应比例的CPU执行时间。
乐透调度的一个有趣的原理是: 协作进程之间可以互相赠与彩票。
九、实时调度
在许多场合下,得到一个延迟的答案和得到一个错误的答案的效果是一样的,因为在这些场合中时间处于一个相当重要的位置。
实时调度系统又分为硬实时和软实时,硬实时系统表示每个进程都必须在截止时间之前执行完毕。软实时指的是超过这个截止时间也是被容许的,这个截止时间只是一个标准,一个进程最好在这个截止时间之前完成,但没有完成也不会出现什么问题。
周期性实时调度系统,假设系统中有m个周期性的时间,那么就有m个周期性的进程来处理这m个事件,假设每个事件i的周期是Pi,CPU的处理时间是Ci,那么只有满足  Ci / Pi 总和  < 1   条件时这个事件流才会被处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: