进程调度算法(下)

交互式系统中的调度

轮转调度
最古老,最简单,最公平使用最广泛的算法。每个进程被分配一个时间片,时间片结束之后,如果还在运行,则强制结束,并分配时间片给另一个进程。进程如果时间片结束前被阻塞或结束。则CPU立即切换到下一个进程。
实现轮转调度很简单,只要维护一张可运行的进程列表,如下图所示。图a,进程A正在使用时间片。图B,进程A时间片使用结束,被调到链表尾部,进程B获得时间片开始运行。
在这里插入图片描述
但是该算法关键的地方在于时间片大小的确定。众所周知,进程切换会消耗CPU时间,如果时间片设置的太短,那大量的时间都会消耗在进程切换上。如果设置的时间片太长,那么设想这样的情况,一个服务器在很短的时间内接受了100个请求。时间片是100ms。那么响应者这100个请求需要10s,而第一百个请求从发出请求到被响应一共等了十秒钟!这对于用户来说是无法接受的。实际上使用轮转调度,将时间片设为20-50ms是比较合适的。

优先级调度
轮转调度中不讨论进程之间的优先级关系,然而优先级在现实中很多系统里扮演关键角色。比如一所大学里,等级顺序可能是教务长优先,然后是教授,秘书,后勤人员,最后是学生。即使是个人PC中也存在优先级问题,比如正在播放的电影和接受电子邮件相比。肯定是播放电影的优先级更高。将这种外部因素考虑在内就导致了优先级调度。其基本思想就是,每个进程赋予一个优先级,允许优先级最高的可运行进程先运行。
但是这种调度存在一个问题。优先级低的进程进程可能永远都无法运行,为了防止这种情况发生,调度算法可以随着进程运行时间的累积,降低当前进程的优先级,这样高优先级的进程就不会无止境的运行下去。除此之外,还有一种方法:给每个进程赋予一个允许运行的最大时间片,当用完这个时间片之后,次高优先级的进程就会获得机会。

多级队列
多级队列最开始出现是基于这样的场景。MIT在IBM7094上开发的分时兼容系统“CTSS”是最早使用优先级调度的系统之一。但是由于该机器内存中只能存放一个进程,所以切换速度太慢。所以开发CTSS的人员意识到需要减少进程切换的频率,应该给CPU密集型的进程分配较大的时间片。另一方面,较大的时间片又会影响响应时间。
其解决方案是设立优先级类。优先级最高的进程获得一个运行时间片,此高优先级获得2个运行时间片,再次一级获得4个运行时间片,以此类推。当一个进程使用完被分配的时间片之后,其优先级就被降到下一类。这样再保证响应速度的同时,减少了进程的切换频率。
举个栗子,假设一个进程需要100个运行时间片才能执行结束。按照多级队列的方式,它会先获得1个时间片,然后优先级降一级,下一次运行的时候获得2个时间片,然后是4,8,16,32,64个时间片。当然最后一次的64个时间片只需要37个便可以运行结束,一共造成了7次进程切换。而如果采用纯粹的轮转调度或者优先级调度,则需要100次切换。

保证调度
一种完全不同的调度算法,向用户作出明确的性能保证,然后去实现它。比如有n个用户登录,则每个用户将获得CPU处理能力的1/n。类似的,在单用户系统中运行n个进程,则每个进程获得1/n的CPU时间。

彩票调度
给用户一个保证,然后兑现,这是个好想法,但是很难去实现。不过,有一个既可以给出类似预测结果而又非常简单的实现方法,该算法称为彩票调度法
其基本思想就是给进程提供系统资源的彩票。一旦需要做出一项调度决策的时候,就随机抽一张彩票,拥有该彩票的进程获得该资源。在应用到CPU调度时,系统可以掌握每秒钟50次的一种彩票,这样每个进程可以获得20ms的CPU时间。

公平分享调度
到现在为止,我们假设被调度的都是各个进程自身,并不关注其所有者是谁。这样做的后果是,如果用户1启动了9个进程,用户2启动了1个进程,那么用户1将会获得90%的CPU时间,用户2获得10%的CPU时间,可以看出,用户1获得多少CPU时间取决于他开了多少进程。
为了避免这种情形,某些系统在调度处理之前考虑谁拥有进程这一因素。在这种模式中,每个用户分配到CPU时间的一部分,而调度程序以一种强制的方式选择进程。假设每个用户分配50%的CPU时间,用户1有ABCD四个进程,用户2只有E一个进程。那调度程序可能会以:AEBECEDEAEBECEDEAEBECEDE……的方式强制调度。如果用户1获得用户2两倍的CPU时间,那调度程序可能会以:ABECDEABECDEABECDE的方式进行强制调度。
至于具体每个用户获得多少CPU时间,取决于“公平”的含义。

实时系统中的调度

实时系统是一种时间起着主导作用的系统。一种或多种外部物理设备发给计算机一个服务请求,计算机必须在一个确定的时间范围内做出恰当反应。例如,在CD播放器中的计算机获得从驱动器而来的位流,然后必须在非常短的时间间隔内将位流转换为音乐。如果计算时间过长,那么音乐听起来就会有异常。
实时系统分为硬实时软实时。前者是必须满足绝对的截止时间。后者是虽然不希望偶尔错失截止时间,但是可以容忍。 在这两种情形中,实时性能都是通过把程序划分为一组进程而实现的,其中每个进程的行为是可预测和提前掌握的。这些进程一般寿命较短,并且极快的运行完成。在检测到一个外部信号时,调度程序的任务就是按照满足所有截至时间的要求调度进程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值