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

🌸章节汇总 

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

二、第二章——【进程】

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

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

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

二、第二章——【锁】

三、第三章——内存管理

四、第四章——文件管理

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

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

目录

二、第二章——【锁】

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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pan_peter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值