最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

操作系统作业之银行家算法(c语言实现)

业界 admin 6浏览 0评论

银行家算法分析:

银行家算法数据结构:

进程数 processNum
资源类数 resourceNum
系统剩余可利用资源Available,为一个含有m个元素的数组;
最大需求矩阵Max,为一个processNum*resourceNum数组
进程当前已分配资源数Allocation,为一个processNum*resourceNum数组
进程尚需要的资源数Need,为一个processNum*resourceNum数组
所以有关系如下: Need[i,j] + Allocation[i,j] = Max[i,j]

算法大致模块含:安全性检测模块,数据初始化模块,数据显示模块;
其中安全性检测为主要模块:

1.系统对进程轮流进行检查,找到可以尝试(意味着请求失败还需要还回)分配资源的进程:

此时需要一个新的数据,**Request[j]**记录当前进程的资源申请向量;
条件如下:

Request[j] + Allocation[i,j] <= Max[i,j];
Request[j] <= Available[j];

如果满足条件则对当前进程开始进行资源分配,更新当前数据结构中的值

2.检测当前系统是否会处于安全状态,是则记录安全序列

此时需要一个一维数组work记录等同于Available
(因为当前暂且属于尝试分配状态,不能改变系统资源状态,否则最后如果判断进程死锁的话,系统资源状态不好恢复)

bool类型Finish[processNum]:表示进程是否有足够资源运行完成
(想要可以运行完成,必定要满足Need[i,j]<Available[j]

如果最后判断进程死锁,则需要把尝试分配阶段的资源归还!

尚待改进:

银行家算法分析:

银行家算法数据结构:

进程数 processNum
资源类数 resourceNum
系统剩余可利用资源Available,为一个含有m个元素的数组;
最大需求矩阵Max,为一个processNum*resourceNum数组
进程当前已分配资源数Allocation,为一个processNum*resourceNum数组
进程尚需要的资源数Need,为一个processNum*resourceNum数组
所以有关系如下: Need[i,j] + Allocation[i,j] = Max[i,j]

算法大致模块含:安全性检测模块,数据初始化模块,数据显示模块;
其中安全性检测为主要模块:

1.系统对进程轮流进行检查,找到可以尝试(意味着请求失败还需要还回)分配资源的进程:

此时需要一个新的数据,**Request[j]**记录当前进程的资源申请向量;
条件如下:

Request[j] + Allocation[i,j] <= Max[i,j];
Request[j] <= Available[j];

如果满足条件则对当前进程开始进行资源分配,更新当前数据结构中的值

2.检测当前系统是否会处于安全状态,是则记录安全序列

此时需要一个一维数组work记录等同于Available
(因为当前暂且属于尝试分配状态,不能改变系统资源状态,否则最后如果判断进程死锁的话,系统资源状态不好恢复)

bool类型Finish[processNum]:表示进程是否有足够资源运行完成
(想要可以运行完成,必定要满足Need[i,j]<Available[j]

如果最后判断进程死锁,则需要把尝试分配阶段的资源归还!

尚待改进:

发布评论

评论列表 (0)

  1. 暂无评论