操作系统备考学习 day5(2.2.5 - 2.3.1)

2023-09-22 11:35:39

第二章 进程与线程

2.2 处理机调度

2.2.5 调度算法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

先来先服务(FCFS)

周转时间 = 完成时间
带权周转时间 = 周转时间 / 运行时间
等待时间 = 周转时间 - 运行时间
按照到达的先后顺序调度,等待时间越久的越优先得到服务

等待时间 = 周转时间 - 运行时间 - I/o操作
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

短作业优先(SJF)

每次调度时悬着当前已到达且运行时间最短的作业/进程
严格来说,用于进程调度的应该称为短进程优先调度算法(SPF)
在这里插入图片描述
在这里插入图片描述

对比FCFS算法的结果,显然SPF算法的平均等待/周转/带权 周转时间都要更低

抢占式的短作业优先算法。又称“最短剩余时间优先算法(SRTN)”
每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度。
在这里插入图片描述
在这里插入图片描述
对比非抢占式的短作业优先算法,显然抢占式的这几个指标又要更低

注意:

  1. 如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的
  2. 在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少;或者说,在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少
  3. 2中没有第一句的条件时,抢占式的效率更高

在这里插入图片描述

高响应比优先(HRRN)

高响应比优先算法:非抢占式的调度算法,只有当前运行的进程主动放弃CPU时(正常/异常完成,或主动阻塞),才需要进行调度,调度时计算所有就绪进程的响应比,选响应比最高的进程上处理机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这三种算法一般使用与早期的批处理系统

时间片轮转(RR)

在这里插入图片描述
常用于分时操作系统,更注重“响应时间”,因而此处不计算周转时间
时间片轮转调度算法:轮流让就绪队列中的进程一次执行一个时间片(每次选择的都是排在就绪队列队头的进程)
时间片为2的情况:
在这里插入图片描述
时间片为5的情况:
在这里插入图片描述
如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间。因此时间片不能太大。
另一方面,进程调度、切换都有时间代价的(保存、恢复运行环境),因此如果时间片太小,会导致进程切换过于频繁,系统会花大量时间来处理进程切换,从而导致实际用于进程执行的时间比例减少。可见时间片也不能太小。
一般来说,设计时间片时要让切换进程的开销占比不超过1%
在这里插入图片描述

优先级调度算法

在这里插入图片描述
注:优先数越大,优先级越高。部分题目可能相反,注意判别
非抢占式的优先级调度算法:每次调度时选择当前已到达优先级最高的进程。当前进程主动放弃处理机时发生调度。
在这里插入图片描述
抢占式的优先级调度算法:每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。另外,当就绪队列发生改变时也需要检查是否会发生抢占。
在这里插入图片描述
补充
就绪队列未必只有一个,可以按照不同优先级来组织。另外,也可以把优先级高的进程排在更靠近队头的位置。
根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。
静态优先级:创建进程时确定,之后一直不变
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级

如何合理地设置各类进程的优先级:
通常
系统进程优先级高于用户进程
前台进程优先级高于后台进程
操作系统更偏好I/O型进程(或称I/O繁忙型进程)
注:与I/O型进程相对的是计算型进程(或称CPU繁忙型进程)
I/O设备和CPU可以并行工作。如果优先让I/O繁忙型进程优先运行的话,则越有可能让I/O设备尽早地投入工作,则资源利用率、系统吞吐量都会得到提升

如果采用的是动态优先级,什么时候应该调整?
可以从追求公平、提升资源利用率等角度考虑
如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
如果某进程占用处理机运行了很长时间,则可适当降低其优先级
如果发现一个进程频繁地进行I/O操作,则可适当提升其优先级
在这里插入图片描述

多级反馈队列调度算法

在这里插入图片描述
设置多级就绪队列,各级队列优先级高到低时间片小到大
新进程到达时先进入第一级队列,按照FCFS原则排队等待分配时间片。若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经在最下级的队列,则重新放回最下级队列队尾。
只有第k级队列为空时,才会为k+1级队头的进程分配时间片
被抢占处理机的进程重新放回原队列队尾
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

多级队列调度算法

系统中按照进程类型设置多个队列,进程创建成功后插入某个队列
队列之间可采取固定优先级或时间片划分
固定优先级:高优先级空时低优先级进程才能被调度
时间片划分:如三个队列分配时间50%、40%、10%
在这里插入图片描述

各队列可采用不同的调度策略,如:
系统进程队列采用优先级调度
交互式队列采用RR
批处理队列采用FCFS

2.3 同步与互斥

2.3.1 同步与互斥的基本概念

进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们工作次序而产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作

在这里插入图片描述
我们把一个时间段内只允许一个进程使用的资源成为临界资源。许多物理设备都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源
对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。

对临界资源的互斥访问,可以在逻辑上分为如下四个部分:

在这里插入图片描述
注:
临界区是进程中访问临界资源的代码段
进入区和退出区是负责实现互斥的代码段
临界区也可称为“临界段”

为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循一下原则:

  1. 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区
  2. 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待
  3. 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)
  4. 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待
更多推荐

LeetCode解法汇总2591. 将钱分给最多的儿童

目录链接:力扣编程题-解法汇总_分享+记录-CSDN博客GitHub同步刷题项目:https://github.com/September26/java-algorithms原题链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台描述:给你一个整数money,表示你总共有的钱数(单位为美元)和另一个整数chi

工业物联网大数据解决方案:排水设备远程监控和大数据统计系统

一、项目背景给排水系统,作为城市的基础设施建设,是居民生产生活的必要保障。由于给排水系统通常站点零散分布,运维管理涉及的区域广泛,水位、流量、机泵运行等运行参数的测报,目前采取人工测量的,上令下达的方式也相对落后,调度管理工作比较被动,很难做到调度的科学性、及时性。因此采取高科技手段,为给排水设施建立全方位二十四小时的

【lesson8】操作系统的理解和类比

文章目录操作系统是什么?为什么要有操作系统?怎么做?学校的例子(理解管理)银行的例子(类比操作系统)操作系统是什么?操作系统是一款软件,是为了进行软硬件资源管理的软件。为什么要有操作系统?操作系统是为了给用户提供一个良好,安全,简单的运行环境。这就是操作系统的目的。怎么做?上面的两个话题我们在Linux发展史这篇博客中

设计模式之代理模式的懂静态代理和动态代理

目录1概述1.1如何实现?1.2优点1.3缺点1.4适用场景2静态代理实现3JDK动态代理实现4CGlib动态代理实现5总结1概述代理模式(ProxyPattern)是一种结构型设计模式,它的概念很简单,它通过创建一个代理对象来控制对原始对象的访问。代理模式主要涉及两个角色:代理角色和真实角色。代理类负责代理真实类,为

mybatis简介&idea导入mybatis

mybatis简介Mybatis是Apache的一个Java开源项目,是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中。与JDBC相比:1)Mybatis通过参数映射方式,可以将参数灵活的配置在SQL语句中的配置文件中,避免在Java类中配置参

设计模式:解释器模式

目录组件代码示例优缺点总结解释器模式(InterpreterPattern)是一种行为型设计模式,它定义了一种语言的文法,并且定义了该语言中各个元素的解释器。通过使用解释器,可以解析和执行特定的语言表达式。解释器模式的核心思想是将一个语言的文法表示为一个类的层次结构,并使用该类的实例来表示语言中的各个元素。每个元素都有

优化代码,提升代码性能

文章目录一、方法1.尽量指定类、方法的final修饰符二、变量1.循环内不要不断创建对象引用2.基本类型转换成字符串3.如果变量的初值会被覆盖,就没有必要给变量赋初值4.尽量使用基本数据类型,避免不必要的装箱、拆箱和空指针判断三、常量1.将常量声明为staticfinal,并以大写命名2.禁止使用JSON转化对象四、对

nvme prp模型代码处理流程分析

以下函数是prp相关的源码。/**prp模型,除了第一个dmaaddr不是page_size对齐的其余的dmaaddr都要求是page_size对齐的*/staticblk_status_tnvme_pci_setup_prps(structnvme_dev*dev,structrequest*req,structnv

Google Data Fusion构建数据ETL任务

Google云平台提供了一个DataFusion的产品,是基于开源的CDAP做的一个图形化的编辑工具,可以很方便的来完成数据处理的任务,而无需编写代码。假设我们现在要构建一个ETL的任务,从Kafka中消费一些数据,经过处理之后把数据存放到Bigquery中。首先我们要准备一些测试数据发送到Kafka。这里我是在GKE

2023年腾讯云轻量应用服务器16核32G28M配置测评

腾讯云轻量应用服务器16核32G28M配置优惠价3468元15个月(支持免费续3个月/送同配置3个月),轻量应用服务器具有100%CPU性能,系统盘为380GBSSD盘,28M带宽下载速度3584KB/秒,月流量6000GB,折合每天200GB流量,超出月流量包的流量按照0.8元每GB的价格支付流量费,地域节点可选广州

【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

restful是web编程里重要的概念–一种接口规范也是一种接口设计风格设计接口:要考虑:数据返回、接收数据的方式、url、方法统一风格rest–表现层状态转移web–每一类数据–资源资源通过http的动作来实现状态转移GET、PUT、POST、DELETEpath组成:/{version}/{resources}/{

热文推荐