python模拟银行家算法
前言:
大二第一学期学习了操作系统,期末实验课题要求模拟算法。遂根据自己学习的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模拟银行家算法的更多相关文章
- 用python实现银行家算法
编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性. 进程 已占资源 最大需求数 资源种类 A B C D A B C D P0 0 0 1 2 0 0 1 2 P1 1 0 0 0 ...
- linux多线程模拟银行家算法
题外话: 这应该是最近有点难度的作业了,起码比之前的理发师,读写,哲学家问题要难. 但是做好程序的结构,自顶向下,就还是不难的. 银行家算法简介: 代码: init() ...
- C程序模拟实现银行家算法
C程序模拟实现银行家算法 上周又做操作系统实验,题目是用程序模拟实现银行家算法,写了半天还真有点晕,主要是因为想尽可能符合课本上的描述,所以写出来的程序就比较恶心了,好了,银行家算法就不多说了,不了解 ...
- 使用python模拟实现KNN算法
一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...
- 操作系统,银行家算法模拟实现(Windows 环境 C++)
计算机操作系统课设需要,写了两个下午的银行家算法(陷在bug里出不来耽误了很多时间),参考计算机操作系统(汤子瀛) 实现过程中不涉及难度较大的算法,仅根据银行家算法的思想和步骤进行实现.以下为详细步骤 ...
- 多任务-python实现-死锁,银行家算法(2.1.5)
@ 目录 1.死锁 2.避免死锁的方式-银行家算法 1.死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系 ...
- 【转】你真的理解Python中MRO算法吗?
你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...
- c++银行家算法
#include <iostream> #include<string> #define False 0 #define True 1 using namespace std; ...
- 朝韩危机-Python模拟导弹互射
萨德系统是麻省理工学院的林肯实验室牵头开发的.林肯实验室可以说是美军方手中的一张王牌.二个反导系统(末段高空区域导弹防御(THAAD)系统,和 国家导弹防御系统(NMD))均由实验室牵头.它既是技术支 ...
随机推荐
- 外部引入的js 判断js脚本加载是否完成,完成后执行 相应的动作(以引入百度地图js为例)
可以使用JQuery的 $.getScript(url,function(){});方法 $.getScript("http://api.map.baidu.com/getscript?v= ...
- 支持向量机-完整Platt-SMO算法加速优化
完整版SMO算法与简单的SMO算法: 实现alpha的更改和代数运算的优化环节一模一样,唯一的不同就是选择alpha的方式.完整版应用了一些能够提速的方法. 同样使用Jupyter实现,后面不在赘述 ...
- Spring Cloud、Spring Boot与Docker 学习资料汇总
使用Spring Cloud与Docker实战微服务https://gitee.com/itmuch/spring-cloud-bookhttps://eacdy.gitbooks.io/spring ...
- ElasticSearch简要总览
今天看了一下ElasticSearch的相关文档,我做了如下总结: 发现越来越喜欢画图归纳总结知识了,看图说话 集群特性说明 健康状况的说明 如何配置分片? 接下来一张图总结下操作相关的总结 接下来, ...
- C 语言的 GCC 扩展
GNU 编译器(GCC)提供了很多 C 语言扩展,编译器会使用该信息生成更高效的机器代码. 内联函数 static inline __attribute__ ((always_inline)) int ...
- mysql 一张表的多个字段关联另外一张表
SELECT vtiger_orderitem.orderid, ( SELECT vtiger_users.last_name FROM vtiger_users WHERE vtiger_orde ...
- [转]Oh My Zsh,安装,主题配置
https://swp-song.com/2017/08/20/Tools/OhMyZsh%E5%AE%89%E8%A3%85%E5%92%8C%E4%B8%BB%E9%A2%98%E9%85%8D% ...
- .Net core2.0+Mysql5.7部署到CentOS7.5完整实践经验
本文为本人最近学习将.Net Core部署到Linux的一些经验总结,也提供点也和我一样对Linux接触不多的.Net Core开发者. 一.部署用到的环境和工具 1.Linux采用最新的CentOS ...
- Js计算时间差,天数,小时数,余数
var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); //begintime 为开始时间 v ...
- Python_冒泡排序
从小到大的排序:(最前面的数和一步步和后面的数比较,如果大于则交换,如果不大于则继续循环) 方法1: data = [65, 1, 45, 77, 3, 9, 43, 23, 7, 53, 213, ...