目录

  • 1 绪论
    • 1.1 课程引入
    • 1.2 操作系统的发展过程
    • 1.3 操作系统的基本类型
    • 1.4 操作系统的特征
    • 1.5 操作系统的功能
    • 1.6 操作系统的组织结构
    • 1.7 章节测验
    • 1.8 考研真题讲解
  • 2 操作系统的关键技术
    • 2.1 操作系统的硬件环境
    • 2.2 中央处理器
    • 2.3 系统调用
    • 2.4 存储系统
    • 2.5 中断机制
    • 2.6 缓冲技术
    • 2.7 章节测验
    • 2.8 考研真题讲解
  • 3 进程的描述与控制
    • 3.1 进程概述
    • 3.2 进程状态及转换
    • 3.3 进程控制
    • 3.4 进程互斥
    • 3.5 进程同步
    • 3.6 经典互斥与同步
    • 3.7 进程通信
    • 3.8 线程
    • 3.9 章节测验
    • 3.10 考研真题讲解
  • 4 资源分配与死锁
    • 4.1 资源管理概述
    • 4.2 进程死锁
    • 4.3 死锁预防
    • 4.4 死锁避免
    • 4.5 死锁的检测和解除
    • 4.6 章节测验
    • 4.7 考研真题讲解
  • 5 处理机管理
    • 5.1 处理机的多级调度
    • 5.2 作业调度与进程调度
    • 5.3 调度算法
    • 5.4 两道批处理调度
    • 5.5 实时调度
    • 5.6 章节测验
    • 5.7 考研真题讲解
  • 6 存储管理
    • 6.1 存储管理概述
    • 6.2 分区存储管理
    • 6.3 页式存储管理
    • 6.4 页面置换算法
    • 6.5 段式存储管理
    • 6.6 段页式存储管理
    • 6.7 “抖动”与工作集
    • 6.8 章节测验
    • 6.9 考研真题讲解
  • 7 文件管理
    • 7.1 文件和文件系统
    • 7.2 文件的逻辑结构与存取方法
    • 7.3 文件的物理结构
    • 7.4 文件存储空间管理
    • 7.5 文件目录
    • 7.6 文件共享与安全
    • 7.7 磁盘调度算法
    • 7.8 章节测验
    • 7.9 考研真题讲解
  • 8 设备管理
    • 8.1 设备管理概述
    • 8.2 设备数据传输方式
    • 8.3 设备分配
    • 8.4 设备驱动程序
    • 8.5 章节测验
    • 8.6 考研真题讲解
死锁避免

死锁避免的相关定义

1. 死锁避免:在系统运行过程中,对进程发出资源申请进行动态检查,根据检查结果决定是否分配。若分配后系统可能发生死锁,则不予分配,否则予以分配。

2. 安全状态:如果存在一个由系统中所有进程构成的安全序列P1Pn,则系统处于安全状态。

3. 安全序列:一个进程序列{P1,…,Pn}是安全序列,需要满足:如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和,系统处于安全状态,不会发生死锁。

4. 不安全状态:系统不存在任何一个安全序列。注意:不安全状态不一定导致死锁。




与死锁预防的区别

死锁预防是破坏产生死锁的必要条件,严格防止死锁的发生。死锁避免没有这么严格,是一种动态策略。


银行家算法的思路

1. 在安全状态下收到进程的资源请求后,先把资源试探性分配给它。

2. 在进程集合中找到剩余资源能满足其需求量的进程,保证这个进程运行完毕并归还全部资源。

3. 把这个进程从集合中去掉,剩余资源更多了,反复执行上述步骤。

4. 检查进程集合,若为空表明系统处于安全状态,实施本次分配。

5. 否则,有进程执行不完,系统处于不安全状态,本次资源分配暂不实施,申请进程等待。


算法流程

(1)若request[i,j]>need[i,j],报错并中止进程的执行。

(2)若request[i,j]>available[j],Pi进入等待资源状态,转进程调度。

(3)假设Pi的申请被满足,修改系统状态:

    available[j]= available[j] - request[i,j]

    allocation[i,j]= allocation[i,j] +request[i,j]

    need[i,j]= need[i,j] -request[i,j]

(4)调用安全状态检查算法

(5)若结果为安全状态,返回调用者。否则,恢复系统状态,Pi进入等待资源状态,转进程调度。

    available[j]=available[j]+request[i,j] 

    allocation[i,j]=allocation[i,j]-request[i,j]

    need[i,j]=need[i,j]+request[i,j]


安全状态检查算法流程

  • work[m]:系统提供给进程继续运行所需的资源数

  • finish[n]:记录每个进程已获得足够资源可以执行完毕

1work[j]= available[j] finish[i]= false

(2)寻找 x∈N,满足finish[x] = false,且need[x,j] ≤ work[j],若不存在这样的x,则转(4);

(3)work[j]=work[j]+ allocation[x,j] ,finish[x]= true,转(2)

(4)若对所有的x,finish[x]=true,则返回安全状态,否则返回不安全状态


本节资料