进程调度介绍

因为有进程间通信,就会涉及到多个进程竞争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。

优先级调度

每个进程被赋予优先级,率先运行优先级最高的就绪进程。

我们可以设计多个优先级队列,在同类进程内部采用时间片轮转调度。

彩票调度算法

算法为进程发放针对系统各种资源的彩票,当调度器需要作出决策时,随机选择一张彩票,持有该彩票的进程将获得系统资源。

如果一个新进程创建并得到一些彩票,则下次抽奖时,它中奖的机会与其持有的彩票成正比。因此,彩票调度的反映非常迅速。

实时系统调度

分为硬实时软实时

软实时允许偶尔超过时间限制,而硬实时必须满足时间限制。

按照要响应的时间进一步分为周期性非周期性。一个系统必须响应多个周期的事件流。

例如,有 m 个周期性的事件,事件 i 的周期为 P i ,其中每个事件需要 C i 秒的CPU时间来处理,则必须满足:

i = 1 m C i P i 1

才可能处理所有的负载。满足该条件的实时系统是可调度的(schedulable)

参考资料

  1. Operating System:Design and Implementation,Third Edition
  2. 操作系统调度算法

猜你喜欢

转载自blog.csdn.net/crazy_scott/article/details/79979131