第三章 处理机调度与死锁

news2024/10/6 12:34:38

目录

一、调度的概念、层次

2.1 调度的基本概念

2.2 调度的三个层次

2.2.1 高级调度

2.2.2 低级调度

2.2.3 中级调度

2.2.3.1 进程的挂起态

2.2.4 三层调度的联系、对比

二、进程调度的时机、切换与过程、方式

2.1 进程调度的时机

2.2 进程调度的方式

2.2.1 非抢占方式

2.2.2 抢占方式

2.3 进程的切换与过程

2.4 调度程序

三、调度算法的评价指标

3.1 CPU利用率

3.2 系统吞吐量

3.3 周转时间

3.4 等待时间

3.5 响应时间

四、调度算法

4.1 先来先服务(FCFS, First Come First Serve)

4.2 短作业优先(SJF, Shortest Job First)

4.2.1 非抢占式

4.2.2 抢占式

4.3 高响应比优先(HRRN, Highest Response Ratio Next)

4.4 时间片轮转(RR, Round-Robin)

4.5 优先级调度算法

4.5.1 非抢占式

4.5.2 抢占式 

4.6 多级反馈队列调度算法

4.7 六种算法对比 

4.8 多级队列调度算法

五、死锁的概念

5.1 什么是死锁 

5.2 死锁、饥饿、死循环的区别

5.2.1 死锁

5.2.2 饥饿

5.2.3 死循环

5.2.4 三者间的异同

5.3 死锁产生的必要条件

5.3.1 互斥条件

5.3.2 不剥夺条件

5.3.3 请求和保持条件

5.3.4 循环等待条件 

5.4 什么时候会发生死锁

5.5 死锁的处理策略

5.5.1 预防死锁

5.5.2 避免死锁

5.5.3 死锁的检测和解除

六、死锁的处理策略

6.1 预防死锁

6.1.1 破坏互斥条件

6.1.1.1 互斥条件

6.1.1.2 策略缺点

6.1.2 破坏不剥夺条件

6.1.2.1 不剥夺条件

6.1.2.2 策略缺点

6.1.3 破坏请求和保持条件

6.1.3.1 请求和保持条件

6.1.3.2 采取方法

6.1.3.3 策略缺点

6.1.4 破坏循环等待条件

6.1.4.1 循环等待条件

6.1.5.2 采取策略

6.1.5.3 策略缺点

6.2 避免死锁​编辑

6.2.1 安全序列、不安全状态、死锁的联系

6.2.2 安全性算法步骤

6.2.3 银行家算法

6.2.3.1 背景知识

6.2.3.2 核心思想

6.2.3.3 银行家算法步骤

6.3 检测和解除

6.3.1 死锁的检测

6.3.2 死锁的解除


一、调度的概念、层次

2.1 调度的基本概念

2.2 调度的三个层次

2.2.1 高级调度

2.2.2 低级调度

2.2.3 中级调度

2.2.3.1 进程的挂起态

暂时调到外存等待的进程状态为挂起状态。挂起态,suspend 挂起态又可以进一步细分为就绪挂起阻塞挂起两种状态。

2.2.4 三层调度的联系、对比

 

二、进程调度的时机、切换与过程、方式

2.1 进程调度的时机

2.2 进程调度的方式

2.2.1 非抢占方式

2.2.2 抢占方式

2.3 进程的切换与过程

2.4 调度程序

三、调度算法的评价指标

3.1 CPU利用率

3.2 系统吞吐量

3.3 周转时间

3.4 等待时间

3.5 响应时间

四、调度算法

4.1 先来先服务(FCFS, First Come First Serve)

4.2 短作业优先(SJF, Shortest Job First)

4.2.1 非抢占式

4.2.2 抢占式

4.3 高响应比优先(HRRN, Highest Response Ratio Next)

4.4 时间片轮转(RR, Round-Robin)

4.5 优先级调度算法

4.5.1 非抢占式

4.5.2 抢占式 

4.6 多级反馈队列调度算法

4.7 六种算法对比 

4.8 多级队列调度算法

五、死锁的概念

5.1 什么是死锁 

5.2 死锁、饥饿、死循环的区别

5.2.1 死锁

各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

5.2.2 饥饿

由于长期得不到想要的资源,某进程无法向前推进的现象。如在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。

5.2.3 死循环

某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑 bug 导致的,有时是程序员故意设计的。

5.2.4 三者间的异同

5.3 死锁产生的必要条件

5.3.1 互斥条件

只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。

5.3.2 不剥夺条件

进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。

5.3.3 请求和保持条件

进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。

5.3.4 循环等待条件 

存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被下一个进程所请求。

注意:发生死锁时一定有循环等待,但是发生循环等待时未必死锁(循环等待是死锁的必要不充分条件)。如果同类资源数大于1,则即使有循环等待,也未必发生死锁。但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了。

5.4 什么时候会发生死锁

对不可剥夺资源的不合理分配,可能导致死锁:

  • 对系统资源的竞争。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU的竞争是不会引起死锁的。
  • 进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。例如,并发执行的进程P1、P2分别申请并占有了资源R1、R2,之后进程P1又紧接着申请资源R2,而进程P2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。
  • 信号量的使用不当也会造成死锁。如生产者-消费者问题中,如果实现互斥的P操作在实现同步的P操作之前,就有可能导致死锁。(可以把互斥信号量、同步信号量也看做是一种抽象的系统资源)。

5.5 死锁的处理策略

5.5.1 预防死锁

破坏死锁产生的四个必要条件中的一个或几个。

5.5.2 避免死锁

用某种方法防止系统进入不安全状态,从而避免死锁,如银行家算法。

5.5.3 死锁的检测和解除

允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

六、死锁的处理策略

6.1 预防死锁

6.1.1 破坏互斥条件

6.1.1.1 互斥条件

只有对必须互斥使用的资源的争抢才会导致死锁。

6.1.1.2 策略缺点

并不是所有的资源都可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。

6.1.2 破坏不剥夺条件

6.1.2.1 不剥夺条件

进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。

6.1.2.2 策略缺点

  • 实现起来比较复杂。
  • 释放已获得的资源可能造成前一阶段工作的失效。因此这种方法一般只适用于易保存和恢复状态的资源,如CPU。
  • 反复地申请和释放资源会增加系统开销,降低系统吞吐量。

6.1.3 破坏请求和保持条件

6.1.3.1 请求和保持条件

进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。

6.1.3.2 采取方法

可以采用静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。

6.1.3.3 策略缺点

有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。另外,该策略也有可能导致某些进程饥饿。

6.1.4 破坏循环等待条件

6.1.4.1 循环等待条件

存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被下一个进程所请求。

6.1.5.2 采取策略

  • 可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源)一次申请完。
  • 原理分析:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。

6.1.5.3 策略缺点

  • 不方便增加新的设备,因为可能需要重新分配所有的编号;
  • 进程实际使用资源的顺序可能和编号递增顺序不一致,会导致资源浪费;
  • 必须按规定次序申请资源,用户编程麻烦。

6.2 避免死锁

6.2.1 安全序列、不安全状态、死锁的联系

  • 安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个
  • 如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。
  • 如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)。
  • 因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。

6.2.2 安全性算法步骤

  • 检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。
  • 不断重复上述过程,看最终是否能让所有进程都加入安全序列。

6.2.3 银行家算法

6.2.3.1 背景知识

银行家算法是荷兰学者 Dijkstra 为银行系统设计的,以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。后来该算法被用在操作系统中,用于避免死锁。

6.2.3.2 核心思想

在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

6.2.3.3 银行家算法步骤

  • 检查此次申请是否超过了之前声明的最大需求数
  • 检查此时系统剩余的可用资源是否还能满足这次请求
  • 试探着分配,更改各数据结构
  • 用安全性算法检查此次分配是否会导致系统进入不安全状态

6.3 检测和解除

6.3.1 死锁的检测

 

6.3.2 死锁的解除

 

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

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

相关文章

计网复习题

一、单项选择题 OSI参考模型的物理层负责()。 A.格式化报文 B.为数据选择通过网络的路由(网络层) C.定义连接到介质的特性 D.提供远程文件访问能力(应用层) 下列选项中,不属于网络体系结构中所…

常用git操作总结

文章目录 一、git 分支命名规范(1)master 主分支(2)develop 开发分支(3)feature 分支(一般简写为feat)(4)hotfix 分支(一般简写为fix)…

如何用canvas实现一个富文本编辑器

富文本编辑器相信大家都用过,相关的开源项目也很多,虽然具体的实现不一样,但是大部分都是使用DOM实现的,但其实还有一种实现方式,那就是使用HTML5的canvas,本文会带大家使用canvas简单实现一个类似Word的富…

分布式系统学习第四天 fastcgi学习

目录 1. Nginx作为web服务器处理请求 2. http协议复习 3. fastCGI 3.1 CGI 3.3 fastCGI和spawn-fcgi安装 3.4 nginx && fastcgi 3.5我的总结 其他知识点 1. Nginx作为web服务器处理请求 nginx不能处理动态请求 因此把请求发送给fastCGI对动态请求进行处理 静态…

区块链基础之密码学及安全技术

1.2 密码学及安全技术 1.2.1 密码学知识 1.2.1.1 Hash函数 Hash(哈希) 哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为 固定长度的输出值,并且是不可逆的。其输出值称为哈希值,也称为散列值。 哈希算法…

越权漏洞学习-做你做不了的事情

(一)、什么是越权漏洞 1、了解越权漏洞: 越权漏洞是指一个用户或者一个攻击者通过利用系统中某一漏洞,可以获得超过其正常权限的权限。也就是说,越权漏洞会使攻击者能够执行未经授权的操作或访问受保护的资源 简单来…

从开发人员的视角面对c盘容量紧缺的一些方案

前言 随着时代的发展,固态价格不断地下降,电脑硬盘容量水平线在不断地上升,近几年新出的主流笔记本自带固态容量也基本上在256G以上。所以通常不会有容量不够而带来的烦恼。个人用户往往是因为视频、游戏等文件占用了大量容量,针…

mmrotate调研

mmrotate调研 MMrotate是什么? ​ 在真实场景中,我们见到的图像不都是方方正正的,比如扫描的图书和遥感图像,需要检测的目标通常是有一定旋转角度的。这时候就需要用到旋转目标检测方法,对目标进行精确的定位&#x…

第三方库介绍——mosquitto

文章目录 概述程序(指令)说明安装服务端与客户端服务端指令配置配置文件:mosquitto.conf认证配置:pwfile权限配置:aclfile启动服务器,选择配置文件:mosquitto.conf 测试发布指令:订阅…

基于立创EDA的原理图设计进阶(实战开发一个小项目)

目录 学习目标 原理图设计进阶——空气质量检测仪 项目需求 1、功能性需求分析 2、非功能性需求 硬件框架图 元器件选型 MCU sensor LCD WIFI KEY PWOER 原理图设计 元件PCB封装设计-DIP,SOP 理论知识 直插式 贴片式 学习目标 1、熟悉电子产品设…

网络编程详细讲解

网络编程 网络通信 网络 ip 地址 1.概念:用于唯一标识网络中的每台计算机/主机 2.查看ip地址:ipconfig 3.ip地址的表示形式:点分十进制XX.XX.XX.XX 4.每一个十进制数的范围:0~255 5.ip地址的组成网络地址主机地址&#xff0…

团体程序设计天梯赛-练习集L2篇①

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

Python3学习之列表

目录 1.访问列表中的值 2.更新列表 3.删除列表元素 4.Python列表脚本操作符 5.Python列表截取与拼接 6.嵌套列表 7.列表比较 8.Python列表函数&方法 序列是 Python 中最基本的数据结构。序列中的每个值都有对应的位置值,称之为索引,第一个索…

Go语言doc

1、Go语言doc go doc 命令可以打印附于 Go 语言程序实体上的文档,我们可以通过把程序实体的标识符作为该命令的参数来 达到查看其文档的目的。 所谓Go语言的程序实体,是指变量、常量、函数、结构体以及接口,而程序实体的标识符即是代表它们…

JDBC 和数据库连接

JDBC 和数据库连接 基本介绍 JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题。Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作。JDBC的基本原理图[重要&#xff…

CSDN 个性化推荐系统的设计和演进

个性化推荐项目 个性化推荐的设计和演进项目概览项目梳理依赖管理实现代码的重构和改进持续演化 个性化推荐的设计和演进 CSDN 的个性化推荐系统,是从既有的推荐项目中剥离出来的一个子项目,这个项目随后移交到了我们AI组。在近一年的时间内&#xff0c…

机器学习实战|第5周|第3章:无监督学习与数据预处理|3.3降维|16:00~17:55

目录 一、降维的动机 (1)数据压缩 (2)数据可视化 (3)降维的弊端 二、什么是维度的诅咒? 三、数据集被降维后能否逆转 四、降维的主要方法 (1)投影 (2)流形学习 五、PCA PCA可以用来给高度非线性数据集降维吗? 假设在一个1000维数据集上执行P…

最优化理论中的惩罚函数法:概念、推导和应用

目录 1. 引言 2. 惩罚函数法的概念 2.1 惩罚函数法的基本思想 2.2 惩罚函数的定义 2.2.1 符号性质 2.2.2 惩罚性质 2.2.3 连续性质 2.3 惩罚函数法的推导 2.4 惩罚函数法的特点 2.4.1 灵活性 2.4.2 通用性 2.4.3 近似解 2.4.4 收敛性 3. 推导过程 3.1 问题建模 …

Redis实战案例6-缓存穿透及其解决案例

1. 缓存穿透 缓存穿透是指在缓存中查找一个不存在的值,由于缓存一般不会存储这种无效的数据,所以每次查询都会落到数据库上,导致数据库压力增大,严重时可能会导致数据库宕机。 解决方案: 方法一:缓存空对象…

【Python】异常处理 ② ( 捕获所有类型的异常 | 默认捕获所有类型异常 | 捕获 Exception 异常 )

文章目录 一、Python 默认捕获所有类型异常1、默认捕获所有类型异常 - 无法获取异常类型2、代码实例 - 默认捕获所有类型异常 二、Python 捕获所有类型异常 - 捕获 Exception 异常1、捕获 Exception 类型异常 - 可获取异常类型2、代码实例 - 捕获 Exception 异常 一、Python 默…