进程调度介绍

原创 2018年04月17日 19:00:43

因为有进程间通信,就会涉及到多个进程竞争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的周期为Pi,其中每个事件需要Ci秒的CPU时间来处理,则必须满足:

i=1mCiPi1

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

参考资料

  1. Operating System:Design and Implementation,Third Edition
  2. 操作系统调度算法
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/crazy_scott/article/details/79979131

Struts原理与应用(三)

Chapter 5: Struts Work Flow Struts principle and practice  上图是Struts的工作流程,前边我们提到,所有的请求都提交给ActionServ...
  • icecloud
  • icecloud
  • 2003-12-07 22:38:00
  • 2130

CFS 调度

Linux支持三种进程调度策略,分别是SCHED_FIFO 、 SCHED_RR和SCHED_NORMAL。Linux支持两种类型的进程,实时进程和普通进程。实时进程可以采用SCHED_FIFO ...
  • u011279649
  • u011279649
  • 2015-05-28 07:44:55
  • 743

作业调度和进程调度的区别

  • u014181676
  • u014181676
  • 2014-03-25 21:50:30
  • 1337

进程调度java编写含界面

  • 2013年01月13日 10:46
  • 71KB
  • 下载

抢占进程调度的原则

(1)时间片原则:各进程按系统分配给的一个时间片运行,当该时间片用完或由于该进程等待某事件发生而被阻塞时,系统就停止该进程的执行而重新进行调度。   (2)优先级原则:每个进程均赋于一个调度优先级,...
  • wae_gossip
  • wae_gossip
  • 2012-05-16 09:48:25
  • 1189

C#基于动态级优先的进程调度实验

  • 2014年11月15日 23:17
  • 122KB
  • 下载

读书笔记--深入分析Linux内核源码-第五章进程调度

 深入分析Linux内核源码-第五章进程调度Sailor_forever 整理 sailing_9806@163.com 转载请注明http://blog.csdn.net/sailor_8318/a...
  • sailor_8318
  • sailor_8318
  • 2008-05-16 22:11:00
  • 4164

进程调度模拟(C语言)

在CSDN里的第一篇,从之前UNIX程序设计课的学期作业里找了个当时的模拟进程调度的代码贴上。不足之处,请见谅。   #include #include using namespace std...
  • pangshensen
  • pangshensen
  • 2014-02-27 12:35:01
  • 3337

进程调度详细总结

一、概念: 无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于...
  • kavensu
  • kavensu
  • 2012-10-16 10:17:14
  • 3987

一顿饭让你学会作业调度和进程调度

场景:毕业师兄请我们去凤雏吃饭。 流程:菜由后厨做好,然后由服务员端上饭桌,接着我们吃饭。 服务员调度算法:后厨的菜做好,由服务员选择端哪个菜上桌,这个服务员是兼洗碗的,她今天晚上还有个约会,所以...
  • qq_34525938
  • qq_34525938
  • 2017-09-30 08:39:48
  • 138
收藏助手
不良信息举报
您举报文章:进程调度介绍
举报原因:
原因补充:

(最多只允许输入30个字)