实验四 避免死锁实验(实验题目)

班级
学号
姓名

课程目标 目标3得分(功能实现情况) 目标4得分(自主学习和解决问题能力情况)
自评分
批阅分

注:实验报告

1.〔重庆理工大学〕操作系统实验报告【实验四 死锁解决实验】

一、实验目的

  1. 理解死锁的概念和产生条件

  2. 掌握银行家算法的基本原理

  3. 学会应用银行家算法进行资源分配的安全性检查

  4. 培养自主学习解决实际资源分配问题的能力

二、实验原理

死锁产生的四个必要条件(请填写):

  1. ____________________:资源不能被共享

  2. ____________________:进程持有资源并等待其他资源

  3. ____________________:资源不能被强制剥夺

  4. ____________________:存在进程资源的循环等待链

银行家算法核心概念:

  • 可用资源向量: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)

  1. 检查 Request ≤ Need? □是 □否

  2. 检查 Request ≤ Available? □是 □否

模拟分配后的状态

Available = ( ) - (0, 2, 0) = ( )

Allocation[2] = ( ) + (0, 2, 0) = ( )

Need[2] = ( ) - (0, 2, 0) = ( )

执行安全性检查

□ 系统处于安全状态 □ 系统处于不安全状态

安全序列:⟨ ⟩

决策:□ 同意分配 □ 拒绝分配

场景2:T0时刻后进程P3请求资源 Request = (0, 4, 0)

  1. 检查 Request ≤ Need? □是 □否

  2. 检查 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;
}

四、实验结果分析

  1. 实验运行验证情况:

  2. 初始状态安全性

    • 安全序列:_________________

    • 系统是否安全:□是 □否

  3. 资源请求分析

请求场景 是否安全 安全序列 分配决策
P2(0,2,0) □是 □否 ______________ □同意 □拒绝
P3(0,4,0) □是 □否 ______________ □同意 □拒绝

五、讨论

  1. 除了银行家算法,还有哪些死锁处理策略?

  2. 请讨论在实际系统中死锁处理的工程权衡

六、实验题目

1.操作系统实验题目【实验四 死锁解决实验】

操作系统实验题目【实验四 死锁解决实验】

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐