编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。

进程

已占资源

最大需求数

资源种类

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实现银行家算法的更多相关文章

  1. python模拟银行家算法

    前言: 大二第一学期学习了操作系统,期末实验课题要求模拟算法.遂根据自己学习的python写下此文.以此锻炼自己编码能力.虽说是重复造轮子,但还是自己的思路体现 代码及注释如下(银行家算法不再赘述): ...

  2. 多任务-python实现-死锁,银行家算法(2.1.5)

    @ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系 ...

  3. c/c++多线程模拟系统资源分配(并通过银行家算法避免死锁产生)

    银行家算法数据结构 (1)可利用资源向量Available 是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目.如果Available[j]=K,则表示系统中现有Rj类资源K个. (2) ...

  4. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  5. Round() 四舍五入 js银行家算法(转)

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  6. 【转】你真的理解Python中MRO算法吗?

    你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...

  7. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  8. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  9. Python实现ID3算法

    自己用Python写的数据挖掘中的ID3算法,现在觉得Python是实现算法的最好工具: 先贴出ID3算法的介绍地址http://wenku.baidu.com/view/cddddaed0975f4 ...

随机推荐

  1. Touch Bar 废物利用系列 | 在触控栏上显示 Dock 应用图标

    都说 Intel 第八代 CPU 对比上代是牙膏不小心挤多了,而配备第八代 CPU 的 MacBook Pro,只有 Touch Bar 版本,虽然贵了一点,但就一个字 -- 买! 收到电脑后,兴冲冲 ...

  2. Fiolki题解

    问题 B: Fiolki 时间限制: 3 Sec  内存限制: 128 MB 题目描述 化学家吉丽想要配置一种神奇的药水来拯救世界. 吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第 ...

  3. 搭建Spring Initializr服务器

    前言 按照网上很多教程,出错特别多.首先是GitHub和maven仓库的网络环境比较差,踩了很多坑:其次是SpringInitializr更新迭代几个版本,0.7.0我也没能弄成功.索性就用了旧版本0 ...

  4. 一道简单的for循环面试题(数字龙形排序)

    本道题是我从网上见到的,因为是一道很久没做的循环题,自己的思路也是陷入了一些思维陷阱中,后来经过把大脑放空,重新看这道题后,思路立马就出来了. 题目就是完成如下图所示的效果: 我一开始是想着将它按照奇 ...

  5. Netty使用Google Protocol Buffer完成服务器高性能数据传输

    一.什么是Google Protocol Buffer(protobuf官方网站) 下面是官网给的解释: Protocol buffers are a language-neutral, platfo ...

  6. csv文件数据导出到mongo数据库

    from pymongo import MongoClientimport csv# 创建连接MongoDB数据库函数def connection(): # 1:连接本地MongoDB数据库服务 co ...

  7. Baozi Leetcode solution 1036: Escape a Large Maze

    Problem Statement In a 1 million by 1 million grid, the coordinates of each grid square are (x, y) w ...

  8. php_review_day1

    php中的小知识点(小白笔记整理):-----------------------------------------------------读取本地文件内的数据: file_get_contents ...

  9. 十三、asp.net中Repeater控件用法笔记

    大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用 repeater作为我们的数据绑定控件了.Repeater控件与DataGrid (以及DataList)控件的主要区 ...

  10. Windows系统配置java环境

    1:下载jdk  网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2:下载 ...