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

目录

二、第二章——【锁】

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、互斥锁

 操作系统-笔记-第二章-锁_第1张图片

2、信号量机制

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

操作系统-笔记-第二章-锁_第2张图片

 

PV操作——proberen —— verhogen        

操作系统-笔记-第二章-锁_第3张图片

 

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

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

操作系统-笔记-第二章-锁_第4张图片

 

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

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

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

操作系统-笔记-第二章-锁_第5张图片

 

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

操作系统-笔记-第二章-锁_第6张图片

 

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

操作系统-笔记-第二章-锁_第7张图片

 

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

操作系统-笔记-第二章-锁_第8张图片

 

(2)前V后P——同步

PV操作——P拿,V释放

如果实现的同步?

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

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

这样就是实现了同步~

操作系统-笔记-第二章-锁_第9张图片

 

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

这样就实现同步啦~

操作系统-笔记-第二章-锁_第10张图片

 

(4)总结

操作系统-笔记-第二章-锁_第11张图片

 

4、生产者-消费者问题

(1)画出前驱图

操作系统-笔记-第二章-锁_第12张图片

 

(2)写代码——PV操作

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

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

操作系统-笔记-第二章-锁_第13张图片

 

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

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

操作系统-笔记-第二章-锁_第14张图片

 

(4)总结

操作系统-笔记-第二章-锁_第15张图片

 

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

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

操作系统-笔记-第二章-锁_第16张图片

 

(2)写代码——PV操作

操作系统-笔记-第二章-锁_第17张图片

 

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

操作系统-笔记-第二章-锁_第18张图片

 

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

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

操作系统-笔记-第二章-锁_第19张图片

 

6、吸烟者问题

(1)问题分析

操作系统-笔记-第二章-锁_第20张图片

 

操作系统-笔记-第二章-锁_第21张图片

 

(2)问题解决

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

操作系统-笔记-第二章-锁_第22张图片

 

7、读者-写者问题

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

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

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

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

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

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

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

  1. 写优先
  2. 读共享

(1)解决方案

操作系统-笔记-第二章-锁_第23张图片

 

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

(2)思考

操作系统-笔记-第二章-锁_第24张图片

 

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

(1)问题分析

操作系统-笔记-第二章-锁_第25张图片

 

(2)方案实现

操作系统-笔记-第二章-锁_第26张图片

 

(3)考点

操作系统-笔记-第二章-锁_第27张图片

 

9、管程

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

操作系统-笔记-第二章-锁_第28张图片

 

(2)定义 & 特征

操作系统-笔记-第二章-锁_第29张图片

 

(3)具体实现

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

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

操作系统-笔记-第二章-锁_第30张图片

 

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

操作系统-笔记-第二章-锁_第31张图片

 

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

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

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

2、然后设置同步方法

3、调用同步方法

操作系统-笔记-第二章-锁_第32张图片

 

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

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

操作系统-笔记-第二章-锁_第33张图片

 

(5)总结

操作系统-笔记-第二章-锁_第34张图片

 

10、死锁

操作系统-笔记-第二章-锁_第35张图片

 

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

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

操作系统-笔记-第二章-锁_第36张图片

 

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

操作系统-笔记-第二章-锁_第37张图片

 

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

操作系统-笔记-第二章-锁_第38张图片

 

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

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

K:进程数量

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

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

操作系统-笔记-第二章-锁_第39张图片

操作系统-笔记-第二章-锁_第40张图片 

 

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

操作系统-笔记-第二章-锁_第41张图片

 

(3)总结

操作系统-笔记-第二章-锁_第42张图片

 

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

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

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

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

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

操作系统-笔记-第二章-锁_第43张图片

 

 

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

操作系统-笔记-第二章-锁_第44张图片

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

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

操作系统-笔记-第二章-锁_第45张图片

 

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

操作系统-笔记-第二章-锁_第46张图片

 

(5)总结——王道版

操作系统-笔记-第二章-锁_第47张图片

操作系统-笔记-第二章-锁_第48张图片

(5)总结——清华版

操作系统-笔记-第二章-锁_第49张图片

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

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

操作系统-笔记-第二章-锁_第50张图片

 

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

操作系统-笔记-第二章-锁_第51张图片

 

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

操作系统-笔记-第二章-锁_第52张图片

 

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

操作系统-笔记-第二章-锁_第53张图片

 

13、死锁的检测 & 解除

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

操作系统-笔记-第二章-锁_第54张图片

操作系统-笔记-第二章-锁_第55张图片

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

       

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

操作系统-笔记-第二章-锁_第56张图片

 

(4)总结

操作系统-笔记-第二章-锁_第57张图片

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

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

你可能感兴趣的:(笔记)