清华大学《操作系统》(十一):处理机调度

一、处理机调度概念

进程切换(上下文切换):切换CPU的当前任务,从一个进程/线程到另一个,保存当前在PCB/TCB中的执行上下文,读取下一个的上下文

CPU调度:从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个线程/进程

调度程序:挑选进程/线程的内核函数(通过一切调度策略)使得效率最高,满足用户需求

在进程/线程的生命周期中的什么时候进行调度?

  1. 从一个状态变为另一个状态,特别是和运行(running)相关的状态。
  2. 内核运行调度程序的条件:进程从运行状态切换到等待状态or终结了(done)
  3. 不可抢占调度,调度必须等待事件/进程结束,早期OS。
  4. 现在多为可以抢占的进程,OS决定在何时打断进程,调度程序在中断被响应后执行,当前进程从运行切换到就绪,或者一个进程从等待切换到就绪,可以被换出。

针对的是用户态的进程。

进程在内核中通过系统调用执行,因为系统调用返回时是到发起这个调用的进程继续执行,所以内核中不会切换,抢占。只要进程在系统调用时不存在从运行态到阻塞态的变化,OS可以确保返回正常。

二、调度准则

1、处理机资源的使用模式

CPU的占用率是波状,CPU大量运算是高峰,而读写I/O时是平稳的低值。每个调度决定都是关于下一个CPU突发时将哪个工作交给CPU,在时间分片下,线程可能在结束当前CPU突发前被迫放弃CPU。 

程序在CPU突发和I/O中交替,CPU占用率高说明是在充分地使用CPU。

2、比较调度算法的准则

  1. CPU使用率:CPU处于忙状态的时间百分比
  2. 吞吐量:单位时间内完成的进程数量
  3. 周转时间:一个进程从初始化到结束包括(所有等待时间)所花费的总时间,周转时间=等待时间+服务时间
  4. 等待时间:进程在就绪队列中的总时间,进程从就绪态到运行态的时间。
  5. 响应时间:一个请求被提交到第一次响应所花费的总时间

2、吞吐量与延迟

要求:希望更快的服务。什么是更快?

  • 高带宽:吞吐量高 (传输文件)
  • 低延迟:响应时间快(玩游戏)

3、调度算法的响应时间目标

  • 减少响应时间:及时处理用户的输入请求,尽快发馈给用户
  • 减少平均响应时间的波动:交互系统中,可预测性比高差异低平均更重要
  • 低延迟调度改善用户的交互体验 
  • 响应时间是操作系统的计算延迟

4、调度策略的吞吐量目标

  • 增加吞吐量:减少开销(操作系统开销,上下文切换) 、系统资源的高效利用(CPU,I/O设备)
  • 减少等待时间
  • 操作系统需要保证吞吐量不受用户交互的影响

5、处理机调度的公平性目标

  • 公平的定义:保证每个进程占用相同的CPU时间;保证每个进程的等待时间相同
  • 公平通常会增加平均响应时间

三、先来先服务、短进程优先和最高响应比优先调度算法

1、FCFS first come first served先来先服务算法

依据进程进入就绪状态的先后顺序排列

如果前面的进程运行的时间长,后面的进程就只能等着,导致周转时间慢。如果进程阻塞了,队列中的下一个会得到CPU

优点:简单 

缺点:平均等待时间波动大,花费时间少的可能反而排在后面,可能导致CPU和I/O之间的重叠处理,没考虑抢占,CPU密集的进程导致I/O闲置时,I/O密集型进程也在等。

2、短进程优先算法

选择就绪队列中执行时间最短进程占用CPU进入运行状态,就绪队列按预期的执行时间来排序;

短进程优先算法具有最优平均周转时间

  • 不可抢占:SJF、SPN
  • 可抢占:ready queue中的第一个进程正在运行时,来了一个比它的预测完成时间还短的进程,SPT

优点:最小的平均等待时间和周转时间

缺点:可能导致长任务饥饿,不能保证公平;需要预知未来下一个进程的时间,比如询问用户,如果用户欺骗就杀死进程。

短进程优先算法的执行时间预估:根据执行历史看将来CPU突发的持续时间,递归展开

3、最高响应比优先算法(HRRN)

选择就绪队列中响应比R值最高的进程

  • R=(w+s)/s
  • w:等待时间(waiting time)
  • s:执行时间(service time)

在短进程优先算法的基础上改进;不可抢占;关注进程的等待时间;防止无限期推迟。

四、时间轮转、多级反馈队列、公平共享调度算法和ucore调度框架

1、时间片轮换算法(RR)

时间片:分配处理机资源的基本时间单元

算法思路:用时间切片和抢占来轮流执行,强调了公平。在量子切片/时间切片的离散单元中分配处理器,时间片结束时切换到下一个准备好的进程 

时间片长度

  • 开销: 额外的上下文切换;
  • 时间片太大则等待时间过长会退化成FCFS,
  • 太小反应迅速但吞吐量由于大量的上下文切换开销受影响 ;
  • 选择一个合适的时间片,经验是维持上下文切换开销处于1%以内,现在LINUX是千分之一秒

2、多级队列调度算法(MQ)

就绪队列分为多个相对独立的队列,每个队列拥有自己的调度策略。

队列间的调度:

  1. 固定优先级:先高优先级,再处理低优先级,可能导致饥饿
  2. 时间切片轮转:每个队列都得到一个确定的,调度其进程的CPU总时间,如80%给前台,20%给后台

3、多级反馈队列算法(MLFQ)

  • 时间片大小随优先级增加而增加
  • 若当前时间量子中没有完成就给当前任务则降到下一个优先级

进程调度先是I/O密集型,CPU密集型随着不断消耗时间片就下降到低的优先级,保证I/O密集型任务停留在高优先级 

等待时间越长,优先级越高,服务时间越长优先级越低 ,能动态地根据进程的特征调整队列和调度

4、公平共享调度(FSS)

在用户级别实现公平共享 

FFS 一些用户组比其他组更重要,保证不重要的组无法垄断资源,未使用的资源按照每个组所分配的资源的比例来分配,没有达到资源使用率目标的组获得更高的优先级

5、评价调度方法

确定性建模,对确定的工作量计算每个算法的表现
队列模型:用来处理随机工作负载的数学方法
实现/模拟:建立一个允许算法运行实际数据的系统,最灵活,一般性

五、实时调度和多处理器调度

1、实时调度

  • 定义:正确性依赖于其时间和功能两方面的一种OS
  • 性能指标:时间约束的及时性(deadlines),速度和平均性能相对不重要,
  • 重点是时间约束的可预测性。
  • 实时任务:任务/工作单元(一次计算,一次文件读取,一次信息传递等等) 
  • 任务属性:取得进展所需要的资源和实时参数 
  • 任务请求时间(release time):进程处于就绪态的时间 
  • 相对截止时间(relative deadline): 任务是间隔时间段完成,每个任务有个特定的时间,要在特定的时间段内完成 
  • 绝对截止时间(absolute deadline):最终的结束时间

周期任务:一系列相似的任务,有规律的重复

  • 周期p=任务请求时间间隔 (0 < p) 
  • 执行时间e=最大执行时间,最大执行时间< p 
  • 使用率/利用率:U=e/p

2、类别 

  • 硬实时系统/强实时系统:如果某个任务没完成有严重后果,比须验证在最坏情况下能够满足时限
  • 软实时系统/弱实时系统:重要的进程优先级更高,要尽量完成,如看视频,帧数没控制好会掉帧。

3、实时调度算法

  • 速率单调调度算法(RM):通过周期安排优先级,周期越短优先级越高,执行周期最短的任务;
  • 最早截止时间优化算法(EDF):截止时间越早优先级越高,执行截止时间最早的任务

对于实时系统来说,有两种调度策略,一是静态调度策略,一个是动态调度策略。静态调度策略是指按照进程执行时间长短进行调度,执行时间短的先执行。动态调度策略是按照进程截止时间进行调度,截止时间越早的先执行。

4、多处理器调度 

  • 要考虑:1,任务来了,放在哪个CPU上执行?2,怎么考虑公平性?load balance负载平衡 
  • 多处理器的CPU调度更加复杂,多个相同的单处理器组成一个多处理器,优点是负载共享。对称多处理器(SMP),每个处理器运行自己的调度程序,需要在调度程序中同步

多处理机是指由多个处理机组成一个多处理机系统,处理机之间可以实现负载共享。其中每个处理器有自己的调度程序,调度程序对共享资源的访问需要进行同步。多处理机调度策略中最重要的一点是一个进程应该分配给哪一个处理机。静态进程分配是进程从开始到结束都分配到一个固定的处理机上执行,之后就是在每个处理机上的单处理机调度算法,但这会导致处理机利用率不均。动态进程分配则是一个进程可以分配到任意空闲处理机执行,所有处理机共享一个就绪队列,调度开销较大,但负载均衡。

六、优先级反置

优先级反置是指高优先级进程要请求的资源被低优先级进程占用而被阻塞,此时中优先级进程反而抢占了CPU导致高优先级进程始终无法运行。针对这一现象有两种解决方案:一是优先级继承,导致高优先级进程阻塞的低优先级进程会暂时继承高优先级进程的优先级,避免被中间优先级进程抢占;二是优先级天花板协议,占有资源的进程和所有可能申请该资源的进程的优先级比较,设置成其中最高优先级对应的优先级,这样就不会有进程阻止他使用这个资源,可能会出现优先级滥用的情况。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对称加密与非对称加密

&#xff08;一&#xff09;对称加密&#xff08;Symmetric Cryptography&#xff09; 对称加密是最快速、最简单的一种加密方式&#xff0c;加密&#xff08;encryption&#xff09;与解密&#xff08;decryption&#xff09;用的是同样的密钥&#xff08;secret key&#xff…

清华大学《操作系统》(十二):临界区与锁

多进程并发运行&#xff0c;导致多个进程间有资源共享&#xff0c;比如CPU、内存&#xff0c;因此存在不确定性和不可重现&#xff0c;可能导致多次运行结果不一致。因此操作系统需要利用同步机制在并发执行的同时&#xff0c;保证一些操作是原子操作。 互斥是指一个进程占用了…

清华大学《操作系统》(十八):管程于信号量

信号量与管程也是进程间通信的方式。信号量是与锁在同一层级实现的&#xff0c;是操作系统提供的一种协调共享资源访问的方法。信号量由操作系统管理&#xff0c;操作系统作为管理者地位是高于进程的。 一、信号量 1、信号量&#xff08;semaphore&#xff09;&#xff1a;是操…

Iptalbes自动封杀暴力破解(Qmail邮件系统)者的IP地址

今天发现Qmail邮件系统的maillog里面有大量的“user not found”信息&#xff0c;通过下面的日志不难发现&#xff0c;是来自同一IP的很多不同的用户连接Qmail邮件系统认证失败的信息。黑客试图通过这种方式来破解Qmail邮件系统的用户名和密码&#xff0c;从而来发送大量的垃圾…

安装Postman

在web和移动端开发时&#xff0c;常常会调用服务器端的restful接口进行数据请求&#xff0c;为了调试&#xff0c;一般会先用工具进行测试&#xff0c;通过测试后才开始在开发中使用。 这里介绍一下如何在chrome浏览器利用postman应用进行restful api接口请求测试。 因为&#…

清华大学《操作系统》(二十):死锁和进程通信

一、死锁 死锁&#xff1a;一组阻塞的进程&#xff08;两个或多个&#xff09;&#xff0c;持有一种资源&#xff0c;等待获取另一个进程所占有的资源&#xff0c;而导致谁都无法执行。 可重复使用的资源&#xff1a; 在一个时间只能一个进程使用&#xff0c;且不能被删除。…

清华大学《操作系统》(二十二):文件系统

文件系统和文件&#xff1a; 文件系统是操作系统中管理持久性数据的子系统&#xff0c;提供数据存储和访问功能&#xff0c;组织、检索、读写访问数据。文件是具有符号名&#xff0c;由字节序列构成的数据项集合&#xff0c;是文件系统的基本数据单位&#xff0c;文件名是文件…

卡巴绿杀6 By Moshow魔手

卡巴绿杀6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)【这是卡巴斯基绿色移动版本推荐用于u盘】By Moshow魔手 [url]Http://Hi.baidu.com/MoshowGame[/url]祝o(∩_∩)o...天下无毒)拥有全球最全的病毒库)拥有最快的全球剿毒反应速度) 基于稳定…

清华大学《操作系统》(二十三):I/O子系统

常见设备接口类型&#xff1a; 1、字符设备&#xff1a;键盘鼠标、串口 a.以字节为单位顺序访问 b.I/O命令通常使用文件访问接口和语义 2、块设备&#xff1a;磁盘、磁带、光驱 a.均匀的数据块访问 b.I/O命令通常使用文件系统接口&#xff0c;也可以使用内存映射访问 3、网络…

百度地图 Android SDK - 个性化地图

什么是百度个性化地图Android SDK&#xff1f; 百度个性化地图Android SDK是一套基于Android 2.2及以上版本号设备的应用程序接口&#xff0c;您能够通过该套接口实现主要的地图功能&#xff0c;而且能够定制地图样式&#xff0c;实现个性化地图。 该接口提供下面功能&#xff…

mysql读写分离_MySQL基于amoeba读写分离实验

主从复制只是一个同步数据的方式读写分离&#xff1a;只在主的上面写&#xff0c;只在从的上面读读写分离方案&#xff1a;【1】基于程序代码内部 (生产环境中应用最广泛&#xff0c;性能最好&#xff0c;需要开发人员来实现)【2】基于中间代理层的实现amoeda 是阿里巴巴使用的…

Django models模型

Django models模型 一. 所谓Django models模型&#xff0c;是指的对数据库的抽象模型&#xff0c;models在英文中的意思是模型&#xff0c;模板的意思&#xff0c;在这里的意思是通过models&#xff0c;将数据库的借口抽象成python自己的一个类。然后在python Django框架其他代…

Python内存管理以及垃圾回收机制

垃圾回收&#xff1a;用通俗点的语言解释就是内存管理和垃圾回收的过程. 大管家refchain 在Python的C源码中有一个名为refchain的环状双向链表&#xff0c;这个链表就比较厉害了&#xff0c;因为Python程序中一旦创建对象都会把这个对象添加到refchain这个链表中。也就是说他…

【Ext.Net学习笔记】01:在ASP.NET WebForm中使用Ext.Net

Ext.NET是基于跨浏览器的ExtJS库和.NET Framework的一套支持ASP.NET AJAX的开源Web控件&#xff0c;包含有丰富的Ajax运用&#xff0c;其前身是Coolite。 下载地址&#xff1a;http://www.ext.net/download/ 示例地址&#xff1a;http://examples.ext.net/ 1.首先下载Ext.Net,地…

面试之操作系统

基本特征 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序&#xff0c;而并行则指同一时刻能运行多个指令。并行需要硬件支持&#xff0c;如多流水线、多核处理器或者分布式计算系统。操作系统通过引入进程和线程&#xff0c;使得程序能够并发运行。 2. 共享 共享是指…

mysql新增列并同时增加数据_图解MySQL | [原理解析] MySQL 为表添加列 是怎么quot;立刻quot;完成的...

在上一期图解 图解MySQL | MySQL DDL为什么成本高&#xff1f;中&#xff0c;我们介绍了&#xff1a;传统情况下&#xff0c;为表添加列需要对表进行重建腾讯团队为 MySQL 引入了 Instant Add Column 的方案(以下称为 "立刻加列" 功能)可以快速完成 为表添加列 的任务…

GCC for Win32开发环境介绍

GCC for Win32开发环境介绍(1) 第一章 在视窗操作系统下的GCC 第一节GCC家族概览 GCC是一个原本用于Unix-like系统下编程的编译器。不过&#xff0c;现在GCC也有了许多Win32下的移植版本。所以&#xff0c;也许对于许多Windows开发者来说&#xff0c;GCC还是一个比较陌生的东西…

reg型变量怎么赋值_UiPath变量介绍和使用

1 变量变量主要用于存储数据&#xff0c;它在RPA中扮演重要的数据传递角色&#xff0c;是RPA编程不可或缺的一部分。它包括变量名称和变量的值&#xff0c;变量的值支持多种数据类型&#xff0c;包括从通用值&#xff0c;文本&#xff0c;数字&#xff0c;数据表&#xff0c;时…

深度学习之概述

深度学习的应用场景 1、图像应用&#xff1a; 1.1 大规模(大数据量)图片识别(聚类/分类)&#xff0c;如人脸识别&#xff0c;车牌识别&#xff0c;OCR等。人脸识别算法&#xff1a;① faceID ② faceNet 1.2 以图搜图&#xff0c;图像分割 1.3 目标检测&#xff0…

如何根据对象获取到对应的表名_Excel VBA 常用对象二

下面继续讲解上一节中未讲完的内容&#xff1a;Excel VBA编程中常常使用的那些对象到底是什么&#xff0c;如何在代码中表示它们。Worksheet对象Worksheet对象代表工作表。工作簿中的每个工作表都是一个Worksheet对象&#xff0c;所有Worksheet对象构成了Worksheets集合。我们使…