操作系统银行家算法实训

一、 实验目的
通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。
二、 实验内容

  1. 初始化让系统拥有一定的资源。
  2. 用户用键盘输入的方式请求资源。
  3. 如果预分配后,系统处于安全状态,则修改系统的资源分配情况。
  4. 如果预分配后,系统处于不安全状态,则提示不能满足请求。

三、 算法解释
(1) 基本过程
先对用户提出的请求进行合法性检查,即检查请求的资源是否不大于需求的资源,是否不大于可利用的资源。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查。
若安全,则分配,否则不分配,恢复原来状态,拒绝申请。
2) 数据结构
⚫ 可利用资源向量 int Available[N] N 为资源种类
⚫ 最大需求矩阵 int Max[M][N] M 为进程的数量
⚫ 分配矩阵 int Allocation[M][N]
⚫ 还需资源 int Need[i][j] = Max[i][j] - Allocation[i][j]
⚫ 申请资源数量 int Request[N]
⚫ 工作向量 int Work[N] int Finish[M]
(3) bank()银行家算法
Requesti:进程 Pi 的请求向量。0 <= j <= N-1

  1. 若 Requesti[j] ≤ Need[i,j],转向(2),否则出错。
  2. 若 Requesti[j] ≤ Available[j],转向(3),否则等待。
  3. 系统试探着把资源分配给进程 Pi,修改下面内容:
    Available[j] = Available[j] – Requesti[j];
    Allocation[i,j] = Allocation[i,j] + Requesti[j];
    Need[i,j] = Need[i,j] – Requesti[j];
  4. 试分配后,执行安全性算法,检查此次分配后系统是否处于安全
    状态。若安全,才正式分配;否则,此次试探性分配作废(逆向恢
    复),进程 Pi 等待。

(4) safe()安全性算法

  1. 初始化:设置两个向量 Work(1×N)和 Finish(1×M)。
    Work:系统可提供给进程继续运行所需各类资源数
    (初态赋值:Work[i] = Available[i])
    Finish:系统是否有足够资源分配给进程
    (初值 false)
  2. 从进程集合中找寻满足下面条件进程:
    Finish[i] = false; Need[i,j] ≤ Work[j];
    若找到,执行(3),否则,执行(4)。
  3. 进程 Pi 获得资源,可顺利执行,完成释放所分配的资源。
    Work[j] = Work[j]+Allocation[i,j];
    Finish[i] = true; go to (2);
    注意:以上式子还可以写为:
    Work[k] = Work[k] - Need[i][k];
    Work[k] = Work[k] + Max[i][k];
    Finish[i] = true; go to (2);
  4. 若所有进程 Finish[i] = true,表示系统处于安全状态,否则处
    于不安全状态。
    四、 程序流程
    /* 案例 */
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮困了r

私我发文档版,无水印版

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值