视频地址:https://www.bilibili.com/video/BV1YE411D7nH

P0 0.0 课程白嫖指南

P2 1.11操作系统的概念、功能和目标

P3 1.12操作系统的特征

P4 1.13操作系统的发展与分类

P5 1.14操作系统的运行机制与体系结构

P6 1.15中断和异常

P7 1.16系统调用

P8 2.11进程的定义、组成、组织方式、特征

P9 2.12进程的状态与转换

P10 2.13进程控制

P11 2.14进程通信

P1 22.15线程概念和多线程模型

P13 2.21处理机调度的概念、层次

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

P15 2.23调度算法的评价指标

P16 2.2_4_FCFS、SJF、HRRN调度算法

P17 2.25调度算法:时间片轮转、优先级、多级反馈队列

P18 2.31进程同步、进程互斥

P19 2.32进程互斥的软件实现方法

P20 2.33进程互斥的硬件实现方法

P21 2.34信号量机制

P22 2.35用信号量实现进程互斥、同步、前驱关系

P23 2.36生产者-消费者问题

P24 2.37多生产者-多消费者问题

P25 2.38吸烟者问题

P26 2.39读者-写者问题

P27 2.310哲学家进餐问题

P28 2.311管程

P292.41死锁的概念(1)

image.png
image.png

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

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

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

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

image.png

共同点 区别
死锁 都是进程无法顺利推进的现象(故意设计的死循环除外) 死锁一定是“循环等待对方手里的资源”导致的,因此如果有死锁现象,那至少有两个或两个以上的进程同时发生死锁。另外,发生死锁的进程一定处于阻塞态
饥饿 可能只有一个进程发生饥饿。发生饥饿的进程即可能阻塞态(如长期得不到需要的I/O设备),也可能是就绪态(长期得不到处理机)
死循环 可能只有一个进程发生死循环。死循环的进程可以上处理机运行(可以是运行态),只不过无法像期待的那样顺利推进。死锁和饥饿问题是由于操作系统分配资源的策略不合理导致的,而死循环是由代码逻辑的错误导致的。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。

死锁产生的必要条件

image.png

产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生

互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)一个线程使用了其他线程就无法使用

不剥夺条件:进程锁获得的资源再未使用完之前,不能由其他进程强行夺走,只能主动释放。

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

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

注意!发送死锁时一定有循环等待,但是发生循环等待时未必死锁(循环等待是死锁的必要不充分条件)

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

什么时候会发生死锁

image.png

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

视频学习 | 2019 王道考研 操作系统 - 图6

死锁的处理策略

image.png

  1. 预防死锁。破坏死锁产生的四个必要条件中的一个或几个。
  2. 避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  3. 死锁的检测和解除。允许死锁的发发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

image.png

视频学习 | 2019 王道考研 操作系统 - 图9

P30 2.42死锁的处理策略—预防死锁

image.png
知识回顾:死锁的产生必须满足四个必要条件,只要其中一个或者几个条件不满足,死锁就不会发生 视频学习 | 2019 王道考研 操作系统 - 图11

破坏互斥条件

image.png

破坏不剥夺条件

image.png

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

破坏不剥夺条件

方案一:当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时候再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏不可剥夺条件。(大白话就是主动放弃)
方案二:当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各进程的优先级(比如:剥夺调度方式,就是将处理机资源强行剥夺给优先级更高的进程使用)

该策略的缺点:

  1. 实现起来比较复杂
  2. 释放已获得的资源可能造成前一阶段工作的失效。因此这种方法一般只适用于易保存和恢复状态的资源,如CPU。
  3. 反复地申请和释放资源会增加系统开销,降低系统吞吐量。
  4. 若采用方案一,意味着只要暂时得不到某个资源,之前获得的那些资源就需要放弃,以后再重新申请。如果一直发生这样的情况,就会导致进程饥饿。

破坏请求和保持条件

image.png

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

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

该策略实现起来简单,但也有明显的缺点:

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

破坏循环等待条件

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

可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源)一次申请完。

原理分析:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。

该策略的缺点:

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

image.png

P31 2.43死锁的处理策略—避免死锁

image.png

image.png

image.png

image.png
image.png

所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺序完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。

如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是考虑到最坏的情况。

如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)

因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。

image.png

image.png

image.png

image.png
image.png
image.png

P32 2.44死锁的处理策略—检测和解除

image.png

如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,系统应当提供两个算法:

1 死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁。
2 死锁解除算法:当认定系统中已经发生了死锁,利用该算法可以将系统从死锁状态中解脱出来。

image.png

image.png

image.png

image.png

死锁的检测

image.png
检测死锁的算法:

死锁的解除

image.png
image.png

P33 3.11内存的基础知识

P34 3.12内存管理的概念

P35 3.13覆盖与交换

P36 3.14连续分配管理方式

P37 3.15动态分区分配算法

P38 3.16基本分页存储管理的基本概念

P39 3.17基本地址变换机构

P40 3.18具有快表的地址变换机构

P41 3.19两级页表

P42 3.110基本分段存储管理方式

P43 3.111段页式管理方式

P44 3.21虚拟内存的基本概念

P45 3.22请求分页管理方式

P46 3.23页面置换算法

P47 3.24页面分配策略

P48 4.11初识文件管理

P49 4.12文件的逻辑结构

P50 4.13文件目录

P51 4.14文件的物理结构(上)

P52 4.14文件的物理结构(下)

P53 4.15文件存储空间管理

P54 4.16文件的基本操作

P55 4.17文件共享

P56 4.18文件保护

P57 4.19文件系统的层次结构

P58 4.21磁盘的结构

P59 4.22磁盘调度算法

P60 4.23减少磁盘延迟时间的方法

P61 4.24磁盘的管理

P62 5.1_1_I-O设备的概念和分类

P63 5.1.2_I-O控制器

P64 5.1.3_I-O控制方式

P65 5.1_4_I-O软件层次结构

P66 5.1_5_I-O核心子系统

P67 5.16假脱机技术

P68 5.17设备的分配与回收

P69 5.18缓冲区管理