热门标签 | 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 实时系统

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





推荐阅读
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 探讨如何通过编程技术实现100个并发连接,解决线程创建顺序问题,并提供高效的并发测试方案。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • MySQL 高性能实战教程
    本课程深入探讨 MySQL 的架构、性能调优、索引优化、查询优化及高可用性等关键领域。通过实际案例和详细讲解,帮助学员掌握提升 MySQL 数据库性能的方法与技巧。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
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社区 版权所有