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

🌸章节汇总 

一、第一章——操作系统的概念

二、第二章——【进程】

二、第二章——【线程】​编辑

二、第二章——【进程调度】

二、第二章——【进程同步与互斥】

二、第二章——【锁】

三、第三章——内存管理

四、第四章——文件管理

五、第五章——输入输出管理

​​​​​​​🚀 学习心得

目录

二、第二章——【锁】

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.mfbz.cn/a/89632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学习笔记|认识蜂鸣器|控制原理|电磁炉LED实战|逻辑运算|STC32G单片机视频开发教程(冲哥)|第八集(上):蜂鸣器应用

文章目录 1.认识蜂鸣器区别 2.控制原理实现蜂鸣器控制原理 3.蜂鸣器实战应用需求分析代码编写步骤一代码编写及分析test.h的固定模板Tips:提示:“test\test.c(14): error C16: unprintable character 0xA3 skippedTips:“test\test.c(14): warning C137:…

R语言如果列表中有列表,且每个子列表有一个向量:如何转变为仅仅一个列表里面含有向量

引言 有些时候,比如批量读取表格中的某一列的时候,最终你会得到列表里面装列表,且每个列表里面只有一个向量的情况。我们的目标是不要中间这一层列表,而是直接变成列表-向量这种简单的结构,如何完成呢。我觉得有很多方…

Linux Ubuntu系统安装OpenVPN服务

OpenVPN Ubuntu/Linux 服务端安装 官方文档:https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage 介绍 嘿,今天我们要探讨的话题是OpenVPN——那个让你在互联网上以安全又私密的方式冲浪的神奇工具。 首先,你可能会问&#xff…

用正则处理Unicode 编码的文本

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字进行了整理、编码。Unicode 使计算机呈现和处理文字变得简单。 现在的 Unicode 字符分为 17 组编排,每组为一个平面&…

什么是住宅ip,静态和动态怎么选?

上文我们介绍了数据中心代理,这次我们来介绍下住宅代理ip,住宅代理ip分类两种类型:静态住宅代理和动态住宅代理,他们有什么区别又能用在什么场景呢?我们先从他们是如何运作开始。 一、什么是住宅代理ip isp住宅代理i…

C++内存模型

目录 内存模型分类 堆和栈的区别 C中new的工作过程 堆和栈的区别 为什么堆区要比栈区大 内存模型分类 文本段(ELF)(数据区):主要用于存放我们编写的代码,但是不是按照代码文本的形式存放,而…

打开软件提示msvcp140.dll丢失的解决方法,msvcp140主要丢失原因

今天,我将为大家介绍一种非常常见的问题——msvcp140.dll丢失。这个问题可能会导致许多应用程序无法正常运行,甚至崩溃。但是,请不要担心,我会为大家提供5种解决方法,帮助大家轻松解决问题。 首先,我们来看…

分布式搜索引擎----elasticsearch

目录 1、初识elasticsearch 1.1、什么是elasticsearch 1.2.ELK技术栈 2、正向索引和倒排索引 2.1、正向索引 2.2、倒排索引 2.3、正向索引和倒排索引的区别 3、elasticsearch中的概念理解 3.1、文档和字段 3.2、索引和映射 3.3、mysql与elasticsearch 1、初识elasti…

【C++11】future和async等

C11的future和async等关键字 1.async和future的概念 std::async 和 std::future 是 C11 引入的标准库功能,用于实现异步编程,使得在多线程环境中更容易处理并行任务。它们可以帮助你在不同线程中执行函数,并且能够方便地获取函数的结果。 在…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【二】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【二】的,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文…

命令全局安装 ts

1.全局安装 typeScript编译 npm install -g typescript2.查看版本 tsc-v安装成功的画面

Spring与Mybatis整合aop整合pageHelper分页插件

前言 Spring与MyBatis整合的意义在于提供了一种结合优势的方式,以便更好地开发和管理持久层(数据库访问)代码。 这里也是总结了几点主要意义 简化配置:Spring与MyBatis整合后,可以通过Spring的配置文件来管理和配置M…

31、springboot 配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口

配置HTTP服务端口及如何通过WebServer实例动态获取项目中的HTTP端口 ★ 设置HTTP服务端口: - server.port或者SERVER_PORT环境变量——总结来说,其实就是要配置server.port外部配置属性。▲ 同样遵守如下优先级: 这些都是外部配置源&#x…

基于javaweb的新生报到系统

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&…

Vue路由(详解)

目录 路由原理 路由到底有什么作用? 路由安装和使用(vue2) 路由跳转 跳转实例: 路由的传值和取值 传值实例: 查询参和路由参的区别: 嵌套路由 嵌套实例: 路由守卫 守卫实例&#xff1…

如何使用CSS实现一个响应式轮播图?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式轮播图的示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…

EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器

EMR(Electronic Medical Record)指的是电子病历。它是一种基于电子文档的个人医疗记录,可以包括病人的病史、诊断、治疗方案、药物处方、检查报告和护理计划等信息。EMR采用计算机化的方式来存储、管理和共享这些信息,以便医生和医…

在Linux中使用gcc/g++编译代码

gcc/g 1.方法速记2.具体过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4链接阶段2.4.1 链接的细节 gcc和g的操作一样,g的方法就仅需把gcc换成g即可。 1.方法速记 直接编译语法:将text.c文件或者text.cpp文件直接编译成text文件。 gcc text.c -o text /…

ElementUI中的日历组件加载无效的问题

在ElementUI中提供了一个日历组件。在某些场景下还是比较有用的。只是在使用的时候会有些下坑&#xff0c;大家要注意下。   官网提供的信息比较简介。我们在引入到项目中使用的时候可以能会出现下面的错误提示。 Unknown custom element: <el-calendar> - did you …

git通过fork-merge request实现多人协同

一、问题 对于一个项目&#xff0c;如果需要多人协同开发&#xff0c;大家都在原始仓库中进行修改提交&#xff0c;经常会发生冲突&#xff0c;而且一不小心会把别人的代码内容覆盖掉。为了避免这样的问题&#xff0c;git提供了fork-merge request这样的协同方式。 二、仓库框…
最新文章