操作系统期末速成(二)
·
死锁
-
定义
-
区分
-
产生死锁的必要条件 (必须同时满足以下四个条件, 不然死锁不会发生)
-
死锁预防
-
破坏互斥条件
-
破坏不剥夺条件
-
破坏请求和保持条件
-
破坏循环等待条件
-
死锁的避免 (属于事先预防策略)
-
是在资源动态分配过程中, 防止系统进入不安全的状态, 以避免发生死锁
-
系统安全状态
-
在避免死锁方法中, 把系统的状态分为安全状态和不安全状态
-
安全序列
-
银行家算法
-
核心算法
-
数据结构
-
算法步骤
-
设 Request 是进程 Pi 的请求向量,如果 Requesti[j]=K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:-
①如果 Requesti[ j ] ≤ Need[ i, j ] 便转向步骤②; 否则认为出错,因为它所需要的资源数已超过它所宣布的最大值
-
如果Requesti[j]≤Available[j],便转向步骤③; 否则,表示尚无足够资源,Pi 须等待
-
系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值: Available[j] = Available[j] - Requesti[j], Allocation[i,j] = Allocation[i,j] + Requesti[j], Need[ij]= Need[i,j] - Requesti[j]
-
系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配,否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi 等待
-
-
-
安全性算法
-
安全算法举例
-
假定系统中有5个进程 {Po,P,P2,P3,P4} 和3类资源 {A,B,C},各类资源的数量分别为10、5、7,在 t0 时刻的资源分配情况如图1所示


-
p1 请求资源: p1 发出请求向量 Request1(1, 0, 2), 系统按银行家算法进行检查-
Request(1,0,2) ≤ Need(1, 2, 2)
-
Request(1,0,2) ≤ Available(3, 3, 2)
-
系统先假定可为 p1 分配资源, 并修改 Available, Allocation1, Need1 向量, 由此形成的资源变化情况如图1 的圆括号所示
-
再利用安全性算法检查此时系统是否安全, 如图3所示

-
-
由此进行的安全性检查得知, 可以找到一个安全序列 {p1, p3, p4, p2, p0}, 因此, 系统是安全的, 可以立即将 p1 所申请的资源分配给它 -
p4 请求资源: p4 发出请求向量 Request4(3, 3, 0), 系统按银行家算法进行检查 -
p0 请求资源: P0 发出请求向量 Request0(0, 2, 0), 系统按银行家算法进行检查 -
进行安全检查: 可用资源 Available(2, 1, 0) 已不能满足任何进程的需要, 故系统进入不安全状态, 此时系统不分配资源
-
-
-
-
-
-
死锁的检测与解除
内存管理
-
内存管理的概念
-
覆盖与交换
-
连续分配存储管理方式
-
单一连续分配
-
固定分区分配
-
动态分区分配
-
表格
算法 算法思想 分区排列顺序 优点 缺点 首次适应 从头到尾找适合的分区 空闲分区以地址递增次序排列 综合看性能最好。算法开销小,回收分区后一般不需要对空闲分区队列重新排序 最佳适应 优先使用更小的分区,以保留更多大分区 空闲分区以容量递增次序排列 会有更多的大分区被保留下来,更能满足大进程需求 会产生很多太小的、难以利用的碎片;算法开销大,回收分区后可能需要对空闲分区队列重新排序 最坏适应 优先使用更大的分区,以防止产生太小的不可用的碎片 空闲分区以容量递减次序排列 可以减少难以利用的小碎片 大分区容易被用完,不利于大进程;算法开销大(原因同上) 临近适应 由首次适应演变而来,每次从上次查找结束位置开始查找 空闲分区以地址递增次序排列(可排列成循环链表) 不用每次都从低地址小分区开始检索。算法开销小(原因同首次适应算法) 会使高地址的大分区也被用完
-
-
非连续分配存储管理方式
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐






所有评论(0)