前言:

大二第一学期学习了操作系统,期末实验课题要求模拟算法。遂根据自己学习的python写下此文。以此锻炼自己编码能力。虽说是重复造轮子,但还是自己的思路体现

代码及注释如下(银行家算法不再赘述):

 #-*- coding: UTF-8 -*-
#@author:若鸟
#@version: 2.0 .
#@date : 2016-12-18
#function:命令行界面实现对各进程请求通过银行家算法实现分配资源
import numpy as np #导入numpy模块 #初始化各数据结构
Available = np.array([3,3,2]) #可利用各资源总数
Max = np.array([[7,5,3],[3,2,2],[9,0,2],[2,2,2],[4,3,3]]) #各进程最大需求资源数
Allocation = np.array([[0,1,0],[2,0,0],[3,0,2],[2,1,1],[0,0,2]]) #已分配各进程的资源数
Need = np.array([[7,4,3],[1,2,2],[6,0,0],[0,1,1],[4,3,1]]) #各进程尚需的资源数
safeList=[] #安全进程执行序列
Request=[] #各进程对各资源的请求
Request_name="" #进程名称 def input_Request():
global Allocation,Available,Max,Need,safeList,Request,Request_name
try:
Request_name=input("请输入请求线程的编号:\n0 1 2 3 4\n")
Request_name=int(Request_name)
Request_new=input("请输入P{}的请求资源数(如:* * *) :\n".format(Request_name))
Request_new=list(Request_new) for x in range(0,5,2): #去除输入的空格
i=int(Request_new[x])
Request.append(i) Request=np.array(Request)
except:
print("输入错误,请重新输入")
input_Request() def BankerAlgorithm():
global Allocation,Available,Max,Need,safeList,Request,Request_name
input_Request() if ((Request<=Need[Request_name]).all()):
if ((Request<=Available).all()):
Available -=Request #可利用资源减少 Need[Request_name] -= Request #尚需的资源数减少
Allocation[Request_name] +=Request #已分配资源增加
safeAlgorithm() #执行安全算法
else:
print("请求超出可利用的资源,请等待")
else:
print("线程请求超出所需总资源数") def safeAlgorithm():
work = Available #分配work向量
Finish=[False]*5 #分配Finish向量 while False in Finish:
for i in range(0,5):
for j in range(0,3):
if ((Finish[i]==False) and ((Need[i]<=work).all())):
for m in range(3):
work[m] =work[m]+ Allocation[i][m]
Finish[i]=True
safeList.append(i)
else:
break if False in Finish:
print("*"*45)
print("您输入的请求资源数:{}".format(Request))
print("您输入的请求进程是{}".format(Request_name))
print("系统安全性:不安全状态")
print("*"*45)
else:
print("*"*45)
print("您输入的请求进程是{}".format(Request_name))
print("您输入的请求资源数:{}".format(Request))
print("系统安全性:系统安全")
print("安全序列为:",safeList)
print("*"*45) if __name__ =="__main__": BankerAlgorithm()

python模拟银行家算法的更多相关文章

  1. 用python实现银行家算法

    编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性. 进程 已占资源 最大需求数 资源种类 A B C D A B C D P0 0 0 1 2 0 0 1 2 P1 1 0 0 0 ...

  2. linux多线程模拟银行家算法

    题外话: 这应该是最近有点难度的作业了,起码比之前的理发师,读写,哲学家问题要难. 但是做好程序的结构,自顶向下,就还是不难的. 银行家算法简介:                 代码: init() ...

  3. C程序模拟实现银行家算法

    C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...

  4. 使用python模拟实现KNN算法

    一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...

  5. 操作系统,银行家算法模拟实现(Windows 环境 C++)

    计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...

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

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

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

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

  8. c++银行家算法

    #include <iostream> #include<string> #define False 0 #define True 1 using namespace std; ...

  9. 朝韩危机-Python模拟导弹互射

    萨德系统是麻省理工学院的林肯实验室牵头开发的.林肯实验室可以说是美军方手中的一张王牌.二个反导系统(末段高空区域导弹防御(THAAD)系统,和 国家导弹防御系统(NMD))均由实验室牵头.它既是技术支 ...

随机推荐

  1. SSM框架接收处理安卓端的json数据

    最近项目上与安卓端做JSON数据交互,使用的SSM框架,刚开始的时候感觉很简单,想着不就是把安卓端的JSON数据封装为Bean类对象吗? 于是就这样写了 可是这样一直报400,百度原因是因为请求url ...

  2. Appium 如何模拟按键

    from appium.webdriver import Remote driver.keyevent(4) python中点击返回键是这样写的 附录 keycode 电话键 KEYCODE_CALL ...

  3. Jmeter 自动化测试报告扩展

    首先了解下生成测试报告的过程,我们看到的测试报告是由.jtl格式转换为.html,html报告的样式由extras目录下xsl文件决定.优化测试报告需要分为两部分内容,首先我们要优化输出的测试内容,其 ...

  4. linux:安装并使用activeMQ

    1.下载安装包:curl -O https://archive.apache.org/dist/activemq/5.14.0/apache-activemq-5.14.0-bin.tar.gz 2. ...

  5. python列表1

    List (列表)List(列表) 是 Python 中使用最 频繁的数据类 型.列表 可以 完成大 多数集 合类 的数据 结构 实现. 列表中 元素 的类型 可以 不相同 ,它支 持数 字,字 符串 ...

  6. 用Photoshop扭曲滤镜工具打造旋转的光束效果

    原文:https://www.w3cschool.cn/photoshopgjjc/dthfn1.html 教程与已往的不同,作者加上了一些新的步骤如锐化等,出来的效果也有所改进.大致过程:先用滤镜制 ...

  7. 学习笔记: 反射应用、原理,完成扩展,emit动态代码

    using Ruanmou.DB.Interface; using Ruanmou.DB.MySql; using Ruanmou.DB.SqlServer; using Ruanmou.Model; ...

  8. haoi2018

    题解: 题目相对其他省难一点 不过弱省省选知识点都这么集中的么.. 4道数学题... 1.[HAOI2018]奇怪的背包 这题考场做就gg了... 其实我想到了那个性质.. 就是这个一定要是gcd的倍 ...

  9. 清北合肥day1

    题目: 1.给出一个由0,1组成的环 求最少多少次交换(任意两个位置)使得0,1靠在一起 n<=1000 2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1 求a变成b的最小代价 n& ...

  10. 【bzoj4631】踩气球 线段树

    题解: 真是很zz 我都想到线段树分治的思路了... 不过还是一道好题 首先跟线段树分治一样将区间投射到线段树上去 每次修改如果该个区间修改为0,则对他们对应的特定区间-1 这样每个区间会有一次变0, ...