操作系统之进程调度

来源:互联网 发布:mac用flash 编辑:程序博客网 时间:2024/05/16 08:17

世界上很多问题都是跟资源分配和任务调度有关,而学会了操作系统的进程调度算法,我觉得也会给你在做事的时候带来一些启发吧。
在现代的操作系统中,有很多进程在内存中。有的正在运行,有的正等待某个事件的发生(比如等待用户敲击键盘)。那么操作系统作为一个大佬,就必须管理这些进程,让它们按照规则来,不能乱了套。

进程调度的类型

按照每个阶段的执行时间的相对比例来分,进程的调度类型包括一下三类:
(1)长程调度:每当创建一个新的进程的时候,都会执行一次长程调度,它决定是否把进程添加到待执行的进程池中。
(2)中程调度:它决定是否把待执行的进程池中的进程加入到部分/全部在内存中的进程集合中去。
(3)短程调度:决定哪一个进程可以获得CPU资源并执行。
一个进程执行要经历的过程可以用下图来表示:
这里写图片描述
图例:首先,进程会进入作业队列,然后进入就绪队列,最后才获得CPU资源并执行;如果进程需要进行I/O操作,还会进入等待I/O的队列,一旦对应事件发生,就会重新进入就绪队列。

调度需要考虑的问题

对于操作系统而言,他自己也不能随便调度,不然别人会投诉他,因此它必须要考虑以下几个指标:

  • CPU资源的利用率:CPU是计算机最重要的资源之一,必须要让CPU忙起来,这样利用率才高。
  • 吞吐量:单位时间内,CPU处理完的进程数量。
  • 周转时间:进程创建到进程结束的时间。
  • 等待时间:进程在就绪队列待的时间。
  • 响应时间:指我创建进程到得到操作系统的响应(给我提供CPU资源)的时间。

一般说来,不能使上面所有的指标都达到很好,它们之间往往是冲突的,好的操作系统需要权衡它们,并达到一个理想的状态。

调度策略

在排队的时候,有插队和不插队的情况。同样操作系统调用也有这两种模式:
(1)非抢占式:一旦进程进入运行状态,就会一直运行到结束,不会被其他进程干扰。
(2)抢占式:当前正在运行的进程可能被操作系统中断进入就绪状态。
与非抢占的方式相比,抢占式可能会导致比较大的开销,但是也可以避免其中一个进程长时间占用处理器资源的情况。如果使用有效的进程切换机制,提供较大的内存,让大部分程序都在内存中,可以使得抢占式的代价比较低。

单处理器短程调度算法

其实每个阶段执行的调度算法差不多(我个人觉得),只是执行的频率不一样,因此下面将讲解常用的短程调度算法,一通百通。
(1)先来先服务(FCFS):这种算法十分简单,就是先到先得,否则就排队。这种算法有利于CPU繁忙型作业,有利于长时间作业。但是对于短时间作业、I/O繁忙型作业、紧迫性作业都不好。
(2)短作业优先(SJF):从就绪队列里面,选择一个预计执行时间最短的作业。因为执行时间比较短的作业能够很快得到执行,系统的吞吐量以及响应时间可能比较好。但是这种方法有一个问题,预计执行时间如何确定?如果用户进程欺骗操作系统说我很快就执行完,先让我执行吧怎么办?此外,我们考虑下面场景:一个长作业在等待,后面源源不断有短作业进来插队,那这个长作业就一直等待了。
(3)高响应比优先调度算法(HRN):定义响应时间(已等待时间+要求服务时间)/要求服务时间为响应比,每次调度的时候,操作系统会计算就绪队列里面的每个进程的响应比,响应比高的就执行。这种做法结合了(1)、(2)的优点,是一种比较好的做法。因为短作业的响应比会比较高,而且也不会出现长作业一直等待的尴尬场景。缺点在于需要计算响应比,增加开销,没有考虑作业的紧迫程度,而且运行时间是无法提前准确预知的。
(4)最高优先权调度算法(HPF):从后备队列中,选一个优先权最高的作业。优先权高低的规则可以是进程的响应比、到达时间、紧迫程度等。这样的算法考虑到进程的紧迫性,但是要计算优先级,增加系统开销。
(5)时间片轮转调度算法(RR):为了公平,每一个进程从就绪状态转为执行状态,执行一段时间又到就绪状态(插入到就绪队列的尾部),直到进程执行结束。这种算法有利于提高用户的交互性,有利于事务性、I/O繁忙型的进程。缺点在于切换进程时开销大。
(6)多级反馈队列调度算法:设置多个就绪队列,从低到高赋予不同的优先级。每个队列采用FCFS算法,时间片长度从高优先级到低优先级依次增加。这样做的好处在于无需预测短作业的长度就自动判断出作业的长短了(短的作业比较快执行完)。
这里写图片描述

参考链接:进程调度

完,感谢阅读!

0 0
原创粉丝点击