进程调度算法(Short-Term)

1.先来先服务(FCFS)

该方法按照进程到达的先后顺序排队,每次调度队首的进程(就像超市中购物付款一样)。
FCFS算法属于非剥夺调度方式,实现简单,看似公平。但是对于那些后进入队列而运行时间较短的进程,或I/O型的进程而言,可能需要长时间等待(对短进程以及I/O型进程不公平)。

1.1 幼儿园小孩喂食问题

如果采用FCFS方法,让全部小孩排成一个先进先出的队列,老师从队首开始逐个给小孩喂食,只有当前一个小孩吃饱了,才喂食下一个小孩。那么,排在队列后面的的小孩将长时间不能被喂食而饥饿。
特别地,如果排在队列前面的某些小孩需要喂食的时间较长,而排在队列后面的某些小孩只需进食很少的饭量,却需要等待很长的时间。因此,该方法对这样的小孩不公平。

1.2 FCFS调度算法实例

假设:就绪队列中从队首开始依次排列有四个进程P1,P2,P3和P4(假设它们同时到达就绪队列),它们的预计执行时间分别为16,12,4和3个单位时间。若采用FCFS方法调度,试计算P1,P2,P3和P4的周转时间分别为多少?平均周转时间是多少?

1.3 FCFS调度算法综合评价

A: 对短进程不公平。
B: 由于长进程可能排在队列前面,必将增加队列后部进程的等待时间,从而将增加平均周转时间。
C: 不利于I/O型进程,未有效利用系统资源。
D: 一般地,FCFS与其他调度算法混合使用。例如,系统可以按照不同的优先级维护多个就绪队列,每个队列内部按照FCFS算法调度。
E: FCFS算法同时适合于长程、中程和短程调度三种调度类型。

2.短进程优先调度算法

当需要调度进程(或作业)时,通过计算判断就绪进程队列中哪一个进程的预期执行时间最短,或后备作业队列中哪一个或几个作业的预期执行时间最短,就调度谁。

2.1 如何预判断时间最短???

进程还没有执行,如何才能预测进程(或作业)的执行时间呢???操作系统内核的统计功能,进程终止没有退出系统还要停留一段时间,此时,就是操作系统的统计模块在执行功能。这样操作系统利用统计模块根据同类进程执行历史,来估计本进程的执行时间。该方法并不是十分精准的。

2.2 内容与实例

属于非剥夺调度算法。当某进程获得处理机,直到其执行完成,或需要等待某事件而阻塞时,才自动释放处理机。系统又调度新的进程(或作业)。
若采用短进程优先算法调度上例的4个进程,按照进程预期执行时间排序(升序)为P4,P3,P2,P1,试分别计算4个进程的周转时间和他们的平均周转时间。

2.3 综合评价

与FCFS算法比较,短进程优先调度算法改善了系统的性能,降低了系统的平均等待时间,提高了系统的吞吐量。但是,该算法也存在一些问题:
⑴ 很难准确预测进程的执行时间;
⑵ 可能导致长进程饥饿,这对长进程不公平;
⑶ 采用非剥夺调度方式,未考虑进程的紧迫程度,不适合于分时系统和事务处理系统。 

3.时间片轮转调度法

在一个分时联机系统中,同时有n个人通过各自的终端共享一台主机(服务器)。终端完成输入/输出操作,主机负责处理从终端发来的请求,为之建立进程、协调各进程的运行、调度各个进程等,并尽量满足每个终端用户对响应时间的要求。
在分时联机系统中,n个进程循环地获得时间片而执行。从系统中来看它们是交替执行的,但就每个终端用户而言,都感觉到自己独占了一台主机,不受其他用户的影响。这是通过进程并发执行实现的。
如果用户数太多,主机处理的进程将会急剧增加,进程排队等待的时间也会很长,进程的响应时间也可能增长,用户将明显感觉到主机的速度变慢而不满意。
时间片的大小也会影响进程的响应时间。(重点讨论时间片大小对CPU性能的影响)

3.1 时间片的设置

进程切换将会增加系统的额外开销(保护现场、恢复现场等)。 
时间片设定得太短,进程切换会非常频繁,从而降低处理机的效率;时间片设定得太长,将无法满足交互式用户对响应时间的要求。
因此,时间片大小的确定应综合考虑系统的最大用户数、响应时间、系统效率等多种因素。 

3.2例题分析

采用基于时间片轮转调度算法调度上例的4个进程,并分别按照两种时间片大小轮转调度(1个单位时间和4个单位时间),分析该算法的性能。
首先按照进程到达的先后顺序组织就绪队列,即P1,P2,P3,P4。从队首开始调度,首先调度P1,执行一个时间片,强行中断P1,P1回到就绪队列队尾排队;切换到P2,执行一个时间片,强行中断P2,P2回到就绪队列队尾排队(排在P1之后)… 
计算等待时间以及周转时间:
注意:    
1.为了简单,图中忽略了进程切换时的系统开销,而实际操作系统中,这类系统额外开销是客观存在的。
2.采用基于时间片轮转调度法,进程的周转时间和平均周转时间并不比采用FCFS和短进程优先调度算法小。
3. 加上进程切换所需的系统开销时间,该算法的平均周转时间还会增长。                                       

3.3 综合评价

1. 常用于分时系统及事务处理系统,合理的时间片大小将带来满意的响应时间。
2. 通常,合理的时间片指,能让80%左右的进程在一个时间片内完成
3. 对于短的、计算型的进程较有利。
4. 不适合于批处理系统的进程调度(任务量太大、中断太多、系统开销太大)
5. 不利于I/O型的进程。
改进的方法之一,可以将I/O阻塞事件完成的进程单独组织一个就绪队列,该队列进程的时间片可以设置的小一些,且优先调度。

4.基于优先级的调度算法

基于时间片轮转调度法循环式地为每个被调度的进程分配一个时间片,对每个进程都是公平的。
然而,实际应用中,进程的性质可能是不同的。例如,一个与用户进行交互的前台进程急迫地需要对用户的输入作出响应,而一个后台打印进程的迫切性也许就不那么重要。
因此,可以为每个进程定义一个优先级,优先级越高的进程将优先获得处理机的调度。 

4.1 如何设定进程的优先级?

1. 进程完成功能的重要性  (用户与系统)
2. 进程完成功能的急迫性  (前台比后台急迫)
3. 为均衡系统资源的使用,指定进程(作业)优先级
4. 进程对资源的占用程度  例如,可以为短进程(或作业)赋予较高的优先级。

4.2 静态优先级与动态优先级

静态优先级:
一旦确定,则进程运行期间优先级一直不改变(管理简单,但是太死板)。
动态优先级:
系统首先赋予进程一个初始优先级,该优先级将随着进程的运行而改变
典型的动态优先级变化方式为:
  A - 优先级随着进程运行的剩余时间的减少而上升,使将要执行结束的进程尽快完成;
  B - 随着进程排队等待时间的增长而上升,使等待时间越长的进程优先得到调度,不至于长时间饥饿。
具体实现方法,可以在每个时钟中断时,或需要进程切换时,重新计算就绪队列中各进程的优先级,并优先调度高优先级的进程。
采用动态优先级的两种调度算法:剩余时间最短者优先和响应比高者优先。

4.3优先级调动(剩余时间最短者优先调度算法)

为了使将要结束的进程尽早结束,释放系统资源,让别的进程执行。可以在每个时钟中断时,根据就绪队列中各进的剩余执行时间动态调整其优先级,剩余时间最短的进程优先级最高。
显然,该算法是剥夺型的短进程优先调度算法,调度程序总是选择剩余执行时间最短的进程调度执行。
算法评价:
1. 与短进程优先调度算法一样,该调度算法很难准确估计进程的剩余执行时间。
2. 长进程在未执行时,或刚开始执行的一段时间内,其剩余执行时间都不会最短,该算法对长进程不公平
3. 但是,它不象FCFS算法偏袒长进程,也不象轮转调度算法会产生很多中断而增加系统负担。
4. 短进程提前完成,故采用剩余时间最短者优先的调度算法获得的平均周转时间比采用短进程优先算法短。 

4.4优先级调动(响应比高者优先调度算法)

进程的等待时间w进程的预期执行时间s纳入优先级的计算,进程(预期执行时间)越长优先级越低,而随着进程的等待时间增长优先级上升,即进程的优先级与等待时间成正比,与进程执行时间成反比。则响应比:
R = (W+S)/S = W/S + 1; R的最小值为1
调度方法:
若当前执行进程执行完毕,或需要阻塞等待某事件而释放处理机,调度程序选择就绪队列中响应比最大的进程执行。若等待时间相同,短进程因为s较小,R较大而优先调度。若进程的预期执行时间相同,则等待时间长的进程优先调度,相当于FCFS。随着等待时间的增加,长进程的响应比不断增大,在某个时刻,也必然被调度。 
缺点:
同短进程优先和剩余时间最短者优先调度算法一样,很难准确估计进程的预期执行时间S。
每次调度之前都需要计算响应比,增加了系统开销。

5.反馈调度法

前面介绍的几种调度算法都存在各自不同的问题,尤其是短进程优先、剩余时间最短者优先以及响应比高者优先调度算法都需要估计进程的预期执行时间,如果估计不准确,将影响调度结果和系统性能。如果根据进程执行历史,而非未来,进行调度,将解决这个问题。反馈调度法就是一种根据进程执行历史调整调度方式的调度方法,它结合了优先级和时间片轮转调度思想。

5.1原理示意图

5.2 反馈调度法综合评价

1. 有利于交互型短进程或短批处理作业,因为它们一般只需要一个或很少的几个时间片即可完成,
2. 可能使长进程的周转时间急剧增加。
3. 如果不断地有新进程到来,还可能出现长进程长期饥饿现象。
4. 可以为各队列设置不同的时间片,优先级愈低时间片愈长。

6.进程调度算法总结

6.1 如何选择进程调度算法?

如何选择进程调度算法与系统设计的目标有关。交互式多任务系统,主要考虑联机用户对响应时间的要求,一般采用基于时间片轮转调度算法,同时,根据进程的性质设置不同的优先级;批处理系统,往往以作业的平均周转时间来衡量调度性能,常选用基于优先级的短进程(或作业)优先调度算法。

6.2 实时系统

能及时响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行的计算机系统.分为实时控制系统和实时信息处理系统。
实时控制系统:
主要用于生产过程的控制,实时采集现场数据,并对所采集的数据进行及时处理,进而自动地控制相应的执行机构,使某些(个)参数(如温度、压力、方位等)能按预定的规律变化,以保证产品的质量和提高产量。也可用于武器的控制,如火炮的自动控制系统,飞机的自动驾驶系统,以及导弹的制导系统等。
实时信息处理系统:
该系统由一台或多台主机通过通信线路连接成百上千个远程终端,计算机接收从远程终端发来的服务请求,根据用户提出的问题,对信息进行检索和处理,并在很短的时间内为用户做出正确的回答。典型的实时信息处理系统有:飞机订票系统、情报检索系统等。

[OS复习]进程管理4相关推荐

  1. [OS复习]进程管理2

    问题:多个进程竞争内存资源 1.解决方法 方案一:采用交换技术,换出一部分进程到外存,以腾出内存空间 方案二:采用虚拟存储技术,每个进程只能装入一部分程序和数据(存储管理部分) 2.对换技术(交换技术 ...

  2. [OS复习]进程管理5

    线程 1.多线程 操作系统中引入进程的目的: 为了描述和实现多个程序的并发执行,以改善资源利用率及提高系统的吞吐量. 操作系统引入线程的目的: 这是为了减少程序并发执行时系统所付出的额外开销(减少管理 ...

  3. [OS复习]进程管理3

    进程调度方式及类型 1.进程调度方式 根据执行进程的处理机是由进程自己释放,还是被强行剥夺,可以将进程调度方式分为非剥夺方式和剥夺方式两种. 1.1非剥夺方式 执行进程只有在执行完毕,或因申请I/O阻 ...

  4. OS X进程管理之launchctl

    OS X进程管理之launchctl Apple官方文档 如果 Mac 无法完成启动,请尝试安全模式 如果 Mac 无法开机应如何处理 在 Mac OS X 中设置固件密码保护 如何重置 Mac 上的 ...

  5. python中的os abort_Python::OS 模块 -- 进程管理

    这里我们介绍os模块中的进程管理相关的操作. os模块提供给了我们访问操作系统功能的接口,我们可以通过os模块提供给我们的进程管理接口,编写多进程程序,这对编写高效.并发的程序提供了方便. 下面是一个 ...

  6. python os模块进程管理

    2019独角兽企业重金招聘Python工程师标准>>> 有两种方式来实现并发性,一种方式是让每个"任务"或"进程"在单独的内在空间中工作,每个 ...

  7. Python之OS模块进程管理介绍--os.fork()

    转自:http://davidbj.blog.51cto.com/4159484/1240586 有两种方式来实现并发性,一种方式是让每个"任务"或"进程"在单 ...

  8. [OS复习]进程互斥与同步2

    互斥与同步的解决策略 当前,利用软件方法.硬件方法.信号量方法.管程方法.消息传递方法都可以有效地解决进程间的互斥与同步,其中信号量的方法更具有优势(目前已经通用). 1. 软件方法: 软件方法是指由 ...

  9. [OS复习]进程互斥与同步1

    进程互斥与同步 1.引言:多道程序设计存在的问题? 采用多道程序设计技术的操作系统,允许多个进程同时驻留内存并发执行.思考: A.如何协调多个进程对系统资源,如内存空间.外部设备等的竞争和共享? B. ...

最新文章

  1. 解决wubi安装ubuntu时要下载系统映像文件问题
  2. Direct3D Draw函数 异步调用原理解析
  3. 中台之上(十一):企业级业务架构设计的“五难”
  4. java常用工具类_java(二):工作中常用到的工具类
  5. python exit 0_python中 os._exit() 和 sys.exit(), exit(0)的用法和区别
  6. Python 集合定义及运算
  7. ubuntu15.04在安装完vmware11后打开提示 VMware Kernel Module Updater
  8. 数据库索引键uk_数据库SQLServer
  9. I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking
  10. 如何删除git本地分支
  11. InVest模型的安装及应用说明
  12. Python:人工智能库如何选择,百度图像识别入门
  13. Debian和Ubuntu版本比较
  14. 基于C语言设计的唐诗三百首
  15. 程序猿生存指南-57 故友来京
  16. VSPD 串口调试工具!!
  17. 开篇词:“桌面应用”是一顶璀璨的王冠
  18. Linux | 运行虚拟电脑时发生严重错误,应将其关闭
  19. 2021Q3展锐智能手机芯片全球市占率达10%
  20. Gym102870 2020-2021 “Orz Panda” Cup Programming Contest 补题记录

热门文章

  1. eclipse整体替换
  2. 《编写可读代码的艺术》读书笔记
  3. CodeForces 416B
  4. NYOJ 49 开心的小明
  5. Linux系统swap虚拟内存的增加,删除,修改
  6. 【旧文章搬运】Windows中全局钩子DLL的加载过程
  7. Image and video pencil sketch with OpenCV 3.X and CUDA
  8. sublime使用技巧总结
  9. myeclipse 没有任何问题,可偏偏还报这错。
  10. JAVA基础:Hibernate外键关联与HQL语法