热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

[OS复习]进程管理4

进程调度算法(Short-Term)1.先来先服务(FCFS)该方法按照进程到达的先后顺序排队,每次调度队首的进程(就像超市中购物付款一样

进程调度算法(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 实时系统

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





推荐阅读
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 本文详细介绍了进程、线程和协程的概念及其之间的区别与联系。进程是在内存中运行的独立实体,具有独立的地址空间和资源;线程是操作系统调度的基本单位,属于进程内部;协程则是用户态下的轻量级调度单元,性能更高。 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 在iOS开发中,多线程技术的应用非常广泛,能够高效地执行多个调度任务。本文将重点介绍GCD(Grand Central Dispatch)在多线程开发中的应用,包括其函数和队列的实现细节。 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
author-avatar
约醉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有