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))均由实验室牵头.它既是技术支 ...
随机推荐
- Jenkins删除或替换All view
一.Jenkins删除All view “系统管理”→“系统设置”页面,更改“Default view”的下拉选项.(前提你已经新建了新的view) 二.My Views删除All view “用户” ...
- python修改hosts
#coding=utf-8 host = ['192.168.10.240 store.wondershare.com', '192.168.10.240 store.wondershare.jp', ...
- Android 第一波
1. Devik进程,Linux进程,线程的区别 说一说对 SP 频繁操作有什么后果? SP 能存储多少数据? SP 的底层其实是由xml文件来实现的,操作 SP 的过程其实就是xml的序列化和反序列 ...
- idea svn配置报错:Can't use Subversion command line client:svn
1. 在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svnSubversion command ...
- 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
- node.js vue-axios和vue-resource
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 次小生成树(POJ1679/CDOJ1959)
POJ1679 首先求出最小生成树,记录权值之和为MinST.然后枚举添加边(u,v),加上后必形成一个环,找到环上非(u,v)边的权值最大的边,把它删除,计算当前生成树的权值之和,取所有枚举加边后生 ...
- sdoi2017苹果树
题解: 非常奇妙的一题.. 没有免费操作我都不会$nk$....考试打个暴力就可以走人了 树上有依赖背包问题的正确做法是(为啥我之前学的不是这样的啊) 按照后续遍历做背包 做到一个点的时候 枚举它选不 ...
- ubuntud安装Adobe Flash Player / Plugin
1.https://get.adobe.com/flashplayer/ , select tar.gz for other Linux, download 2.Unpack the tar.gz f ...
- 1. ELK 之elasticsearch 简介、获取、安装
简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...