用python实现银行家算法
编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。
|
进程 |
已占资源 |
最大需求数 |
|
资源种类 |
A B C D |
A B C D |
|
P0 |
0 0 1 2 |
0 0 1 2 |
|
P1 |
1 0 0 0 |
1 7 5 0 |
|
P2 |
1 3 5 4 |
2 3 5 6 |
|
P3 |
0 6 3 2 |
0 6 5 2 |
|
P4 |
0 0 1 4 |
0 6 5 6 |
现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按银行家算法回答:
1、 现在系统是否处于安全状态?
2、 如果现在进程P1提出需要(0、4、2、0)个资源的请求,系统能否满足它的请求?
#coding: utf-8
#已经拥有的资源个数
have = [[0,0,1,2],[1,0,0,0],[1,3,5,4],[0,6,3,2],[0,0,1,4]]
#需要的资源个数
need = [[0,0,1,2],[1,7,5,0],[2,3,5,6],[0,6,5,2],[0,6,5,6]]
#系统拥有的资源个数
resource = [1,5,2,0]
#请求的资源个数
request = [0,4,2,0]
#请求的进程
p = 1
for i in range(len(resource)):
if request[i]<=need[p][i] and request[i]<=resource[i]:#如果请求的资源少于系统拥有的则分配
resource[i] -= request[i]
need[p][i] -= request[i]
else:#否则不分配并结束
exit('[-]request more than system have')
#安全检查
Fina = [False]*5 #5为进程个数 len(have)或len(need) False表示没有分配资源
queue = []#用于存储已经分配资源的进程
#q用于判断循环条件,如果循环过后的结果与前一次相同则表示没有进程被分配资源循环结束
q = queue
while True:
for i in range(len(have)):
flag = True
for j in range(len(have[i])):
if need[i][j] > resource[j]:
flag = False
break
if flag == True:
Fina[i] = True#如果满足条件则将False改为True表示给i进程分配了资源
queue.append(i)
for j in range(len(have[i])):
resource[j] += have[i][j]#将i进程占有的所有资源释放
if q == queue:
break
else:
q = queue
if False in Fina:
print '[-]Don\'t have safe order'
print Fina
else:
print '[+] have safe order'
print queue

用python实现银行家算法的更多相关文章
- python模拟银行家算法
前言: 大二第一学期学习了操作系统,期末实验课题要求模拟算法.遂根据自己学习的python写下此文.以此锻炼自己编码能力.虽说是重复造轮子,但还是自己的思路体现 代码及注释如下(银行家算法不再赘述): ...
- 多任务-python实现-死锁,银行家算法(2.1.5)
@ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系 ...
- c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)
银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Round() 四舍五入 js银行家算法(转)
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python实现ID3算法
自己用Python写的数据挖掘中的ID3算法,现在觉得Python是实现算法的最好工具: 先贴出ID3算法的介绍地址http://wenku.baidu.com/view/cddddaed0975f4 ...
随机推荐
- intel FPGA CLKn pin 是否能直接进PLL?
原创 by DeeZeng FPGA的时钟需要从专用的时钟管脚输入,那CLKn 作为Single-End时钟pin时是否能直接进 PLL呢? 通过查看对应FPGA型号的手册,得出以下结论 1. Cyc ...
- c++学习书籍推荐《C和C++安全编码》下载
<华章程序员书库:C和C++安全编码(原书第2版)>致力于解决C和C++中已经导致危险的.破坏性的常见软件漏洞的基本编程错误,这些漏洞自CERT 1988年创立以来就记录在案.针对导致这些 ...
- django项目中遇到要实现定时任务
django项目中遇到要实现定时任务,所以选用了简单易用的django-crontab插件. 1.安装 django-crontab pip install django-crontab 2.定时要执 ...
- Q&A-Ray-20180710
Q: 如果集群多个客户端订阅会不会重复接收消息? A: 集群环境用,有另外一个参数. NodeManager类没有在框架里面: public interface INodeManager : IGra ...
- SpringBoot | 第三十八章:基于RabbitMQ实现消息延迟队列方案
前言 前段时间在编写通用的消息通知服务时,由于需要实现类似通知失败时,需要延后几分钟再次进行发送,进行多次尝试后,进入定时发送机制.此机制,在原先对接银联支付时,银联的异步通知也是类似的,在第一次通知 ...
- 第一届合天杯河北科技大学网络安全技术大赛 web6 writeup
- 小白开学Asp.Net Core 开篇
开学Asp.Net Core 开篇 一.准备工作 1.操作环境:Win10 2.开发工具:VS2019 3.运行环境:.Net Core 2.2 4.数据库:SqlServer2012 二.项目搭建 ...
- sql注入篇2
一.前言 上一篇:sql注入篇1 二.基于回显的注入类型判断 1.有结果的注入 例如下图: (sqlllab less-1)可以看到有正常结果返回,对于的利用方式就是老套路了,先order by查询出 ...
- 【转】DataTable 中数据筛选
转自:http://blog.163.com/yangxw_2009/blog/static/155255217201032931755646/ 对DataTable进行过滤筛选的一些方法Select ...
- 【MySQL】(四)表
本篇文章将从InnoDB存储引擎表的逻辑存储及实现开始进行介绍,然后将重点分析表的物理存储特征,即数据在表中是如何组织存放的.简单来说,表就是关于特定实体的数据集合,这也是关系型数据库模型的核心. 1 ...