操作系统-笔记-第二章-锁

news2024/11/17 10:54:42

目录

二、第二章——【锁】

1、互斥锁​编辑

2、信号量机制

(1)信号量机制——整形信号量

(2)信号量机制——记录信号量

(3)总结(重点——记录信号量)

3、信号量机制——实现互斥、同步

(1)信号量设置为1——互斥

(2)前V后P——同步

(3)前V后P——前驱图

(4)总结

4、生产者-消费者问题

(1)画出前驱图

(2)写代码——PV操作

(3)思考——PV操作的顺序可以换么?

(4)总结

5、多生产者-多消费者问题

(1)画出前驱图(互斥-PV, 同步-VP)

(2)写代码——PV操作

(3)写代码——PV操作(改进:不用互斥信号量)

(4)具体问题,具体分析

6、吸烟者问题

(1)问题分析

(2)问题解决

7、读者-写者问题

(1)解决方案

(2)思考

8、哲学家进餐问题(死锁问题)

(1)问题分析

(2)方案实现

(3)考点

9、管程

(1)来历(PV操作太麻烦)

(2)定义 & 特征

(3)具体实现

(4)拓展1——封装思想

(4)拓展2——Java中的管程思想(sync-同步)

(4)拓展3——Java中的同步+异步(和前端的请求+返回操作差不多)

(5)总结

10、死锁

(1)死锁、饥饿、死循环

(2.1)死锁产生条件——清华笔记

(2.2)死锁产生条件——软考笔记

(2.3)死锁产生条件——王道笔记

(3)总结

11、预防死锁(破坏四个条件之一)

(1)破坏互斥(优缺点)

(2)剥夺资源【破坏不剥夺条件】(优缺点)

(3)破坏请求+保持条件(一次性拿完)

(4)破坏循环等待(按照顺序申请资源)

(5)总结——王道版

(5)总结——清华版

12、银行家算法(避免死锁 ※※※)

(1)清华版——银行家算法

(2)软考版——银行家算法

(3)王道版——银行家算法

13、死锁的检测 & 解除

(1)清华版——检测 & 解除

(2)王道版——检测方法(理解-资源分配图-能够化简!)

(3)王道版——解除方法

(4)总结


二、第二章——【锁】

1、互斥锁

 

2、信号量机制

信号量机制——可以很好的解决【互斥、同步】的问题

 

PV操作——proberen —— verhogen        

 

(1)信号量机制——整形信号量

缺点:如果需要资源被占用,那么会进行忙等

 

(2)信号量机制——记录信号量

用来解决——“忙等”问题

在整形的基础上,创建了一个【等待队列】,当资源不够时,自我阻塞,等待别人唤醒~

 

(3)总结(重点——记录信号量)

 

3、信号量机制——实现互斥、同步

 

(1)信号量设置为1——互斥

 

(2)前V后P——同步

PV操作——P拿,V释放

如果实现的同步?

1、执行在前面的代码段——用V操作(必须让他执行了,才会释放资源)

2、执行在后面的代码段——用P操作(有了资源,才可以跳出等待)

这样就是实现了同步~

 

(3)前V后P——前驱图

这样就实现同步啦~

 

(4)总结

 

4、生产者-消费者问题

(1)画出前驱图

 

(2)写代码——PV操作

其中1个PV是用于——互斥

2个PV是用于同步(有两个同步信号量)

 

(3)思考——PV操作的顺序可以换么?

不能乱改——可能会导致死锁!(具体问题,具体分析!)

 

(4)总结

 

5、多生产者-多消费者问题

(1)画出前驱图(互斥-PV, 同步-VP)

 

(2)写代码——PV操作

 

(3)写代码——PV操作(改进:不用互斥信号量)

 

(4)具体问题,具体分析

当缓冲区大小为1,那么可能不需要设置——【互斥信号量】

 

6、吸烟者问题

(1)问题分析

 

 

(2)问题解决

不需要——互斥信号量~(因为桌子上只能放一个资源!)

 

7、读者-写者问题

读者——共享锁(乐观锁)

写者——互斥锁(悲观锁)

在这个锁的基础上——可以设计的锁的粒度

(粒度大小说明)用生活举例:

你不允许别人进入你的房子,那么就给房子上了锁——【房子锁】

你允许别人进入你的房子,但你不允许别人进入你的房间,就给房间上了锁——【房间锁】

你允许别人进入你的房间,但你不允许别人打开你的柜子,就给柜子上了锁——【柜子锁】

  1. 写优先
  2. 读共享

(1)解决方案

 

写优先——读写公平法(先来先服务)【防止写进程饿死~】

(2)思考

 

8、哲学家进餐问题(死锁问题)

(1)问题分析

 

(2)方案实现

 

(3)考点

 

9、管程

(1)来历(PV操作太麻烦)

 

(2)定义 & 特征

 

(3)具体实现

程序员封装一层——PV操作(实现同步、异步)

然后提供简单的接口,用来之后使用~

 

(4)拓展1——封装思想

 

(4)拓展2——Java中的管程思想(sync-同步)

就比如——下载文件(异步任务——多线程——你得设置线程池的大小!)

1、你需要规定同步队列的大小!

2、然后设置同步方法

3、调用同步方法

 

(4)拓展3——Java中的同步+异步(和前端的请求+返回操作差不多)

异步任务可以设置数量(设置连接池大小),避免有太大的异步任务

 

(5)总结

 

10、死锁

 

(1)死锁、饥饿、死循环

死锁和饥饿——是【操作系统】关心并解决的问题!

 

(2.1)死锁产生条件——清华笔记

 

(2.2)死锁产生条件——软考笔记

 

基本问题:该系统至少需要多少资源?可以不发生死锁?

总资源数 = K * (N -1) + 1

K:进程数量

N:一个进程需要的资源数

死锁 => 四种条件 必然存在

 

 

(2.3)死锁产生条件——王道笔记

 

(3)总结

 

11、预防死锁(破坏四个条件之一)

  1. 互斥(加入buffer——把【互斥资源】变为【共享资源】)
  2. 不剥夺(他在等待资源后,就强行让他休息,夺走他手里的资源)
  3. 请求和保持(占有资源的情况)
  4. 循环等待(给所有资源编号【从小到大】——按顺序申请资源~)

(1)破坏互斥(优缺点)

优点:简单(把互斥资源——变为——共享资源)

缺点:应用点比较少(毕竟很多地方需要互斥性!)

 

 

(2)剥夺资源【破坏不剥夺条件】(优缺点)

(3)破坏请求+保持条件(一次性拿完)

不准持有——一次性拿完!!!(简单,但是资源利用率低)

 

(4)破坏循环等待(按照顺序申请资源)

 

(5)总结——王道版

(5)总结——清华版

12、银行家算法(避免死锁 ※※※)

(1)清华版——银行家算法

 

(2)软考版——银行家算法

 

  1. 求出剩下的资源数
  2. 求出各项进程还需要的资源数
  3. 按照选项——开始推算是否满足!(如果满足,则选择即可)

 

(3)王道版——银行家算法

 

13、死锁的检测 & 解除

(1)清华版——检测 & 解除

(2)王道版——检测方法(理解-资源分配图-能够化简!)

       

(3)王道版——解除方法

 

(4)总结

重点!!!加油吧!!!不能放弃啊!!!

时间:2023年8月20日12:20:10

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

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

相关文章

数仓分类及基本概念

【数仓建设系列之二】数仓分类及基本概念 随着移动互联网的快速发展,数据的生产也成几何式的增长,传统意义上的数据库已经无法满足日益增长的需求,建设一个好的数仓,不仅可以为企业的决策和发展带来具有价值的指导意义&#xff0c…

Python自动化测试代理程序可用性

在网络爬虫和数据采集过程中,代理服务器扮演着重要的角色。然而,代理服务器的可用性经常会受到影响,给爬虫工作带来一定的挑战。本文将介绍如何使用Python自动化测试代理程序的可用性,为您提供具备实际操作价值的解决方案。让我们…

同为科技(TOWE)65W快充插排插线板,快人一步,乐享生活

在现代生活中,手机、平板、笔记本电脑等电子设备已成为人们生活中不可或缺的工具。然而,诸多电子产品在充电方面也出现了许多问题,比如充电过程慢、插口不够用、充电时温度过高等。随着随着技术的更新迭代,满足高功率、多接口且多…

机器学习与模式识别2:KNN(k近邻)

一、简介 首先,随机选择K个对象,而且所选择的每个对象都代表一个组的初始均值或初始的组中心值,对剩余的每个对象,根据其与各个组初始均值的距离,将他们分配各最近的(最相似)小组,然…

Redis原理剖析

一、Redis简介 Redis是一个开源的,基于网络的,高性能的key-value数据库,弥补了memcached这类key-value存储的不足,在部分场合可以对关系数据库起到很好的补充作用,满足实时的高并发需求。 Redis跟memcached类似&#…

会声会影和Pr哪个好?

会声会影是加拿大Corel公司制作的一款功能强大的视频编辑软件,正版英文名:Corel VideoStudio,具有图像抓取和编修功能,可以抓取,转换MV、DV、V8、TV和实时记录抓取画面文件,并提供有超过100 多种的编制功能…

小研究 - Android 字节码动态分析分布式框架(四)

安卓平台是个多进程同时运行的系统,它还缺少合适的动态分析接口。因此,在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架,无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

水电站防雷工程综合解决方案

水电站防雷工程是指为了保护水电站的建筑物、设备和人员免受雷电危害而采取的一系列技术措施。水电站防雷工程的主要内容包括接地装置、引下线、接闪器、等电位连接、屏蔽、综合布线和电涌保护器等分项工程。水电站防雷工程的施工和质量验收应遵循国家标准《建筑物防雷工程施工…

算法leetcode|72. 编辑距离(rust重拳出击)

文章目录 72. 编辑距离:样例 1:样例 2:提示: 分析:题解:rust:二维数组(易懂)滚动数组(更加优化的内存空间) go:c:python&a…

vue引入 import { decode } from ‘js-base64‘

vue引入 import { decode } from ‘js-base64’ package.json 里面加上 需要用的地方 加上 import { decode } from ‘js-base64’ let params decode(loook)最后 npm install

【数据分享】2006-2021年我国城市级别的节约用水相关指标(免费获取\20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标、2006-2021年我国城市级别的各类建设用地面积数…

@Accessors和@Builder区别

目录 Accessors和Builder Accessors(chaintrue)BuilderAccessors和Builder的区别Accessors和Builder使用的坑详细看看Accessors注解 Accessors的源码Accessors属性说明 fluent属性chain属性makeFinal属性prefix属性 Accessors和Builder Accessors(chaintrue) 就是new一个对象…

c语言每日一练(10)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

计算机农业类重点SCIE征稿中

SciencePub学术 刊源推荐: 计算机农业类重点SCIE征稿中!信息如下,录满为止: 一、期刊概况: 计算机农业类重点SCIE 【期刊简介】IF:3.0-3.5,JCR2区,中科院4区; 【版面类型】正刊&a…

传统车间VS数字化车间,以MES为核心打造智能工厂!

传统车间的生产制造场景往往存在着信息沟通不顺畅,传达不到位的情况,导致生产效率受影响。 其次车间数据的“缓存期”偏短,无法进行长时间的复盘总结,从而难以发现企业管理问题,无法持续改善。 随着大数据、工业互联…

Gate相关记录

1 如何在virtual box里面创建共享文件夹 如果没有设置密码,密码就是默认的virtual 需要现在设置-共享文件夹-设置windows的共享路径,然后再执行下面的命令,Gateshare是我自己建的在windows里面的共享文件夹名字 sudo mount -t vboxsf GateS…

中期国际:外汇新手必读:常见的外汇交易误区与避免方法

对于外汇交易的新手来说,了解和避免常见的交易误区是非常重要的。在本文中,我们将带您一起探讨一些常见的误区,并提供一些实用的避免方法,帮助您在外汇市场上取得更好的交易结果。 误区一:盲目跟单 很多新手会犯一个错…

推特营销6大策略助您制霸国际市场

策略一:专业推文中的链接数量 推特群推王研究发现,无链接的推文策略更能激发粉丝互动。因此,并非每条推文都必须附带链接,要保证链接内容与推文实质相关。通过限制带链接推文的数量,能提升粉丝参与度。 策略二&#…

手机直播源码开发,协议讨论篇(三):RTMP实时消息传输协议

实时消息传输协议RTMP简介 RTMP又称实时消息传输协议,是一种实时通信协议。在当今数字化时代,手机直播源码平台为全球用户进行服务,如何才能增加用户,提升用户黏性?就需要让一对一直播平台能够为用户提供优质的体验。…

IntelliJ IDEA下基于Scala实现的Git检查工具

本文使用Scala实现自定义的Git检查工具,读者可以基于本文的示例进行扩展与实现,也可以进行其他应用方向的尝试。 01、Git检查工具 在实现Git检查工具之前需要知道程序究竟要做什么。我们知道,在管理Git分支时可以进行代码合并操作,这样可以将其他开发者提交的内容同步到当前分支…