基于银行家算法的进程安全序列改进算法

2022-12-08 版权声明 我要投稿

Ubuntu12.0作为一种自由操作系统广为流行.它不仅源码开放, 而且是一套完全免费的操作系统, 大多数程序都可以Ubuntu12.0上编译和运行。目前Linux环境下多进程资源调度应用广泛, 并且Linux基础上开发的系统进程的并发执行和优化在计算机领域需要重点研究。微软公司的Windows操作系统虽然是大众化产品, 在高校也得到广泛的应用, 相对其而言, Linux操作系统安全性和可靠性都有较大提高。Linux操作系统环境中, 在网络通信和数据库系统应用领域, 进程之间的并发执行, 操作系统对于资源的调度和共享的时候, 当多进程推进顺序不合理, 或者Linux系统资源分配顺序造成系统死锁, 处于死锁状态的系统, 严重地影响了系统的可靠性和安全性, 改进后的银行家算法, 避免进程之间过多的等待资源, 可以保证多进程合理的继续向前推进。

一、多资源死锁问题分析

在Ubuntu12.0操作系统、MySql6.3数据库系统以及局域网络通信中, 由于进程并发执行和资源调度共享, 多进程之间对于资源的竞争, 推进顺不合理永远不能继续向前推进, 进程处于死锁状态的时候, 严重地影响了系统的可靠性和安全性。

(一) 在Ubuntu12.0操作系统中, 多资源调度情况下, 进程死锁的产生的四个必要条件:

1.互斥

操作系统环境中当前资源只能调度给某个特定的进程或是空闲。资源不能同时分配给多个进程。

2.占用并等待

操作系统环境中某个资源的进程请求新的资源, 而这些资源被其他进程所占据, 得不到释放。

3.循环等待

Linux操作系统环境中某一时间, 有N个资源P1, P2, P3, ……, Pn, Pn等待P1占有的资源, P2等待P3占有的资源, P1等待P2占有的资源。

4.非抢占

是指资源不可剥夺, 只能被占用它的进程自愿释放 (进程的状态为阻塞或就绪状态) 。

(二) 操作系统中解决死锁常用的策略

(1) 死锁预防:通过破坏死锁的四个必要条件之一, 使死锁不可能出现。

(2) 死锁的检测和恢复:在系统中当资源被请求或被释放时, 需要检查当前状态是否存在死锁。若存在死锁, 则需要采用相应的策略, 将系统从死锁中恢复过来。

(3) 死锁避免:银行家算是一种在运行过程中避免死锁的算法, 在操作系统环境中, 通过动态地资源分配, 进行安全性检测算法, 这样来保证操作系统环境不会到达死锁状态。

所谓安全状态, 是在操作系统环境中, 进程能按某种进程次序p1, p2, …, pn, 按照可以推进的合理顺序, 为每个进程分配其所需要的资源数量, 直到满足进程pi对资源的最大需求量, 使每个进程pi可顺利地完成, 在这种状态下, 系统处于安全状态, 这种进程推进序列p1, p2, …, pn为安全序列。

二、银行家算法总体设计

(一) 算法说明

本文研究的算法是对现有银行家算法的改进算法, 当一个新进程声明其最大资源需求量时, 在Linux操作系统环境中, 如果有其它进程申请资源, 操作系统可使用的资源数量可能会发生变化, 在这种情况下, 原来安全的系统环境变得不安全, 笔者针对这个问题对银行家算法进行研究, 在操作系统资源分配之前, 将进程申请的资源数量与系统可用资源重新进行比较, 保证操作系统在安全序列状态下分配可用的资源。确保系统在安全状态下分配资源。

(二) 银行家算法的的数据结构

银行家算法中有重要的三个矩阵, 分别是最大需求矩阵Max[M, N], 已经分配矩阵Allocation[M, N], 需求矩阵Need[M, N], 它们的关系是需求矩阵Need[M, N]=Max[M, N]-Allocation[M, N], 银行家算法的数据结构描述如下:

1.最大需求矩阵Max[M, N], 操作系统环境中Max[i][j]表示为进程Pi对Rj类资源的最大需求数量, 其中最大需求矩阵Max[M, N]是一个M行N列的矩阵;

2.分配矩阵Allocation[M, N], 操作系统环境中Allocation[i][j]表示为进程Pi已经获得R j类资源的数量, 其中分配矩阵Allocation[M, N]是一个M行N列的矩阵;

3.需求矩阵Need[M, N], 操作系统环境中Need[i][j]表示为进程Pi剩余需要R j类资源的数量, 其中需求矩阵Need[M, N]是一个M行N列的矩阵;

4.可利用资源向量Available, 一个含有M个元素的数组向量, 数组向量的值表示某类可用资源的数量;

5.Finish[i]表示资源够否标识向量, Linux操作系统环境中表示系统是否有足够资源分配给进程Pi;

6.Work[i]表示资源数目向量, Linux操作系统环境中表示统可供给进程Pi继续运行所需要的Rj类资源数目.设Requesti

是进程的Pi请求向量.

(三) 银行家算法代码实现

三、算法有效性验证

银行家算法应用举例:假设操作系统中有A, B, C三种资源, A类资源的数量为17个, B类资源的数量为5个, C类资源的数量为20个, 操作系统中5个进程分别为p0, p1, p2, p3, p4。在T0的状态如下矩阵所示。

在Linux操作系统上运行安全性检测算法, 能够得到一个安全进程序列p3, p1, p2, p4, p0, 因此可以得出操作系统T0时刻是安全的。

假设p1进程发出新的资源申请, 请求向量Request= (0, 3, 4) 。由于Request= (0, 3, 4) ≤Need= (1, 3, 4) , 因而请求合法, 进一步Request= (0, 3, 4) 〉Available= (2, 3, 3) , p1阻塞, P1申请资源被拒绝, 资源不能够试分配, 不需要执行安全检测算法。

T0时刻假设进程P3又请求Request= (2, 0, 1) , Request= (2, 0, 1) <=Need= (2, 2, 1) , Request<=Available= (2, 3, 3) , 系统可用资源充足, 执行安全性检查算法。

四、结束语

本文提出了一种应用在Linux操作系统中死锁避免算法。这个算法是对现有银行家算法的改进算法, 当一个新进程声明其最大资源需求量时, 在Linux操作系统环境中, 如果另外一个进程Pi申请资源, 操作系统的资源数量会发生变化, 笔者针对这个课题对银行家算法进行改进, 在操作系统将资源分配给进程Pi之前, 将进程Pi申请的资源数量与Linux操作系统现有可用资源重新进行对比, 获取安全序列之后, 保证Linux操作系统在安全序列状态下分配可用的资源。通过系统仿真和实验验证表明, 此算法保证系统不会出现死锁, 提高了系统的安全和可靠性。

摘要:通过分析银行家算法的核心思想以及安全状态的本质涵义, 文章提出了一种应用在Ubuntu12操作系统上, 针对某一时刻进程申请多资源的算法, 并利用面向对象编程语言C++实现了该算法.通过分析安全序列和多进程申请资源数量, 不但能够对进程调度优化提供支持.而且可以对系统的资源分配进行合理分配, 该基于安全序列改进算法也可以作为死锁检测算法, 提高了操作系统的资源利用率。

关键词:银行家算法,安全序列,死锁,多资源调度

参考文献

[1] 何炎祥, 李飞, 李宁.计算机操作系统[M].修订版.北京:清华大学出版社, 2001.

[2] 门维江, 杨延娇.设计计算机网络操作系统的方法[J].甘肃科学学报, 2004, 16 (1) :84-86.

[3] 王晓东, 计算机算法设计与分析[M].第2版.北京:电子工业出版社, 2004.

[4] 李婧, 陈旺虎.基于广义表的银行家算法[J].西北师范大学学报 (自然科学版) , 2002, 38 (3) :30-33.

[5] 徐刚, 吴智铭.银行家算法在柔性制造系统中的改进和应用[J].计算机集成制造系统, 2004, 10 (1) :70-76.

[6] 侯刚.深入解析银行家算法[J].潍坊学院学报, 2006, 6 (2) :46-48.

[7] 帖军, 蒋天发.银行家算法中的安全序列分析[J].武汉理工大学学报, 2007, 29 (6) :114-117.

[8] 左万利, 王拉柱.银行家算法的改进[J].吉林大学自然科学学报, 1997 (1) :35-37.

[9] 汤子瀛, 哲凤屏, 汤小丹.计算机操作系统[M].第2版.西安:西安电子科技大学出版社.1996.

[10] Smith J E, Nair R.虚拟机系统与进程的通用平台[M].北京:机械工业出版社, 2009.

[11] 张弢, 刘青昆, 阴元友等.基于PXE的Linux并行机群快速自动部署与配置[J].辽宁师范大学学报:自然科学版, 2008 (1) :51-53.

[12] 黄冠利, 金岩, 勾传静等.基于PXE技术的动态分布式无盘网络存储安全研究[J].计算科学学, 2010 (9) :297-301.

上一篇:基于慕课背景下的分析化学课程改革与实践下一篇:10kV配电线路故障排除及处理措施