〔重庆理工大学〕操作系统实验题目【实验四 死锁解决实验】
摘要 本实验通过模拟计算机系统资源分配场景,研究死锁问题及其解决方案。实验重点在于理解死锁产生的四个必要条件(互斥、请求与保持、不可抢占、循环等待),并应用银行家算法进行资源分配的安全性检查。实验内容包括:计算初始Need矩阵和Available向量、执行安全性算法、处理资源请求场景(P2和P3的不同请求)、编写伪代码实现安全性检查,以及编程验证算法正确性。通过分析不同请求场景下的系统安全状态和安
实验四 避免死锁实验(实验题目)
班级:
学号:
姓名:
| 课程目标 | 目标3得分(功能实现情况) | 目标4得分(自主学习和解决问题能力情况) |
|---|---|---|
| 自评分 | ||
| 批阅分 |
CQUT操作系统实验题目【实验四 死锁解决实验】
注:实验报告
1.〔重庆理工大学〕操作系统实验报告【实验四 死锁解决实验】
一、实验目的
-
理解死锁的概念和产生条件
-
掌握银行家算法的基本原理
-
学会应用银行家算法进行资源分配的安全性检查
-
培养自主学习解决实际资源分配问题的能力
二、实验原理
死锁产生的四个必要条件(请填写):
-
____________________:资源不能被共享
-
____________________:进程持有资源并等待其他资源
-
____________________:资源不能被强制剥夺
-
____________________:存在进程资源的循环等待链
银行家算法核心概念:
-
可用资源向量:Available
-
最大需求矩阵:Max
-
分配矩阵:Allocation
-
需求矩阵:Need = Max - Allocation
三、实验内容
实验场景:计算机系统资源分配模拟,用银行家算法分析避免死锁
初始系统状态:
系统资源:A(3)、B(7)、C(11)
T0时刻进程资源情况:(请填写下表)
| 进程 | 最大需求(Max) | 已分配(Allocation) | 需求(Need) | 完成状态 |
|---|---|---|---|---|
| P0 | (0, 0, 4) | (0, 0, 3) | ( ) | □ |
| P1 | (1, 7, 5) | (1, 0, 0) | ( ) | □ |
| P2 | (2, 3, 5) | (1, 3, 5) | ( ) | □ |
| P3 | (0, 6, 4) | (0, 0, 2) | ( ) | □ |
| P4 | (0, 6, 5) | (0, 0, 1) | ( ) | □ |
| 当前可用资源:Available = ( ) |
实验步骤(请填写完整每一步)
第一步:计算初始Need矩阵和Available向量
计算过程:
Need[i] = Max[i] - Allocation[i]
P0: Need = (0-0, 0-0, 4-3) = ( , , )
P1: Need = ( , , )
P2: Need = ( , , )
P3: Need = ( , , )
P4: Need = ( , , )
Available = 总资源 - ∑Allocation[i]
Available = (3- , 7- , 11- ) = ( , , )
第二步:执行安全性算法
安全性检查表:
| 步骤 | 进程 | Work | Need(≤ Work?) | Work + Allocation | 完成状态 |
|---|---|---|---|---|---|
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
| 安全序列:⟨ ⟩ |
第三步:资源请求处理
场景1:T0时刻后进程P2请求资源 Request = (0, 2, 0)
-
检查 Request ≤ Need? □是 □否
-
检查 Request ≤ Available? □是 □否
模拟分配后的状态:
Available = ( ) - (0, 2, 0) = ( )
Allocation[2] = ( ) + (0, 2, 0) = ( )
Need[2] = ( ) - (0, 2, 0) = ( )
执行安全性检查:
□ 系统处于安全状态 □ 系统处于不安全状态
安全序列:⟨ ⟩
决策:□ 同意分配 □ 拒绝分配
场景2:T0时刻后进程P3请求资源 Request = (0, 4, 0)
-
检查 Request ≤ Need? □是 □否
-
检查 Request ≤ Available? □是 □否
模拟分配并检查安全性:
决策:□ 同意分配 □ 拒绝分配
理由:
思考:T0时刻系统处于安全状态的系统资源最小值是:
第四步:伪代码填空
请补充完整银行家算法的安全性检查部分:
函数 安全性检查():
工作向量 = 可用资源
完成标记 = [假, 假, 假, …]
循环 直到没有进程可执行为止:
找到这样一个进程i:
完成标记[i] = 假
需求[i] ______ 工作向量 # 填空
如果找到:
工作向量 = 工作向量 ______ 分配[i] # 填空
完成标记[i] = ______ # 填空
加入安全序列
否则:
跳出循环
如果所有进程都完成:
返回 ______ # 填空
否则:
返回 ______ # 填空
第五步:编程验证
#include <stdio.h>
#define N 5 //进程数
#define M 3 //资源类型数
int main() {
// 初始数据代码
// 计算需求矩阵
printf("计算Need矩阵:\n");
for(int i=0; i<N; i++) {
printf("P%d: ", i);
for(int j=0; j<M; j++) {
Need[i][j] = Max[i][j] - Allocation[i][j];
printf("%d ", Need[i][j]);
}
printf("\n");
}
// 在此处补充安全性算法代码
// 和资源请求处理代码
return 0;
}
四、实验结果分析
-
实验运行验证情况:
-
初始状态安全性:
-
安全序列:_________________
-
系统是否安全:□是 □否
-
-
资源请求分析:
| 请求场景 | 是否安全 | 安全序列 | 分配决策 |
|---|---|---|---|
| P2(0,2,0) | □是 □否 | ______________ | □同意 □拒绝 |
| P3(0,4,0) | □是 □否 | ______________ | □同意 □拒绝 |
五、讨论
-
除了银行家算法,还有哪些死锁处理策略?
-
请讨论在实际系统中死锁处理的工程权衡
六、实验题目
1.操作系统实验题目【实验四 死锁解决实验】
更多推荐



所有评论(0)