操作系统银行家算法python简单模拟
40个进程随机申请资源,满足则分配资源。
import numpy as np
import time
import random as rd
class PCB:safe_seq=[]#安全序列X=0def __init__(self, ID,ID_request, still_request,ab_resource):self.ID_request=ID_request#该进程所需总资源self.ID=ID#进程IDself.still_request=still_request#任需资源self.ab_resource=ab_resource#可用资源self.X=len(self.ID)def applican(self):#随机进程申请资源,并判断是否满足,不满足,则返回-1,满足则返回进程号,用于下一步分配app_ID=rd.sample(self.ID,1)#挑选随机进程print(app_ID[0],"号进程正在申请资源")z=self.ab_resource-self.still_request[app_ID[0]]#print(z)min_r=min(z)if min_r<0:print("当前资源分配后会进入不安全状态,申请失败")return -1else:print("满足资源分配要求,即将分配")return app_ID[0]def fenpei(self,ID):#分配资源self.ab_resource=np.array(self.ab_resource)+np.array(self.ID_request[ID]) #分配完成,资源释放self.safe_seq.append(ID)self.ID.remove(ID)print("分配成功,返还资源,当前可用资源数为:",self.ab_resource) def diaoyong(self):#判断是否分配资源z=PCB.applican(self)if z>=0:PCB.fenpei(self,z)def shuchu(self):print("所以进程已完成\n")print("安全序列为",self.safe_seq)def diaoyong1(self):while(True):#一直申请资源,直到全部完成#for i in range(10):PCB.diaoyong(self)time.sleep(0.5)if len(self.safe_seq)==self.X:#此时已经全部完成PCB.shuchu(self)break
ID=[]#进程ID
ID_request=[]#进程所需要的总资源
ID_divider=[]#已分配资源
avle_source=[2,3,2,2]#每种资源的剩余
#ID_still_request=所需资源-已分配资源=任需资源
#设置40个进程
for i in range(40):#print(i)ID.append(i)for i in range(4):ID_ziyuan=[]fenpei=[]a=rd.randint(2,6)a1=rd.randint(0,2)b=rd.randint(3,4)b1=rd.randint(0,3)c=rd.randint(3,4)c1=rd.randint(0,3)d=rd.randint(3,4)d1=rd.randint(0,3)ID_ziyuan.append(a)ID_ziyuan.append(b)ID_ziyuan.append(c)ID_ziyuan.append(d)fenpei.append(a1)fenpei.append(b1)fenpei.append(c1)fenpei.append(d1)ID_request.append(ID_ziyuan)ID_divider.append(fenpei)for i in range(40):print(i,"号",ID_request[i])
ID_still_request=np.array(ID_request)-np.array(ID_divider)#任需资源数
P=PCB(ID,ID_request,ID_still_request,avle_source)
P.diaoyong1()
操作系统银行家算法python简单模拟相关推荐
- 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)
操作系统--银行家算法 什么是银行家算法 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避 ...
- 用Python简单模拟《原神》抽卡系统
用Python简单模拟<原神>抽卡系统[抽卡模拟器] 简介 代码思想 保底机制 概率 概率公式 代码构建 导入软件包random和os 初始化概率 增加概率 保底机制 创建文件夹 抽卡次数 ...
- 操作系统——银行家算法的模拟实现
一.实验目的 (1)理解银行家算法. (2)掌握进程安全性检查的方法与资源分配的方法. 二.实验内容与基本要求 编制模拟银行家算法的程序,并给出一个例子验证所编写的程序的正确性. 要求例子中包含分配安 ...
- 操作系统银行家算法模拟实现(C语言版)
目录 一.实验目的 二.实验内容 三.实验要点说明 银行家算法实例 程序结构 四.实验代码 五.实验运行结果 一.实验目的 通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的 ...
- python银行家算法_Linux 死锁概念与银行家算法python 实现
一 . 死锁的概念 接上篇 http://shaobaobaoer.cn/archives/680/linux-process-manager-note 在之前的哲学家吃饭的问题中,当每个哲学家都想进 ...
- 操作系统银行家算法计算机四级,【NCRE四级网络工程师】操作系统多选题
友情提示:此篇文章大约需要阅读 7分钟54秒,不足之处请多指教,感谢您的阅读. 保存在进程控制块中的是 进程标识符 进程当前状态 代码段指针 PCB的内容可以分为调度信息和现场信息两大部分.调度信息供 ...
- 操作系统 | 银行家算法及代码实现
参考博客 [操作系统]死锁避免之银行家算法_少侠露飞的学习笔记-CSDN博客 [操作系统]避免死锁--银行家算法_明昕ztoy的博客-CSDN博客_银行家算法避免死锁 实现思路 当一个进程申请使用资源 ...
- 操作系统-银行家算法(Java实现)
一.银行家算法思想 银行家算法是最著名的死锁避免算法,其思想是:将操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款.操作系统按照银行家制定 ...
- 计算机操作系统——银行家算法
1.实验目的: 银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法.本实验通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的必要条件.安全状态等重要概念,并掌握 ...
最新文章
- 比特大陆发布第三代AI芯片,INT8算力达17.6Tops
- URAL 1353 Milliard Vasya's Function DP
- 内核变量——Jiffies
- python基础:条件循环字符串
- 3.1.1 存储器的分类(半导体-磁芯-磁表面-光存储-ROM-RAM-永久非永久-内存-外存-Cache)
- angular js环境配置
- 微信支付 - 构建商户端支付成功的回调接口
- U大师U盘装系统——原版XP系统安装(V1.2.0版)
- 没有工作经验找it_没有工作经验怎么找工作?
- mysql 存储过程
- 记录一次es写入操作
- .NetCore Redis使用及帮助类
- 【优化选址】基于matlab蚁群算法求解电动汽车充电站与换电站选址优化问题【含Matlab源码 1182期】
- 转速环PI参数整定详解(三)——转速环开环传函特性及其整定策略(有最终推导结果公式)
- linux命令 sys,用syslinux引导多个linux系统
- win10关闭杀毒防护
- ThinkPHP5_无限极分类
- vue3—reactive如何更改属性
- 远程桌面连接是什么?远程桌面连接使用教程
- 【IIOT】欧姆龙PLC数采之CJ2系列
热门文章
- 在OpenCV里车牌识别的方法2
- JVM学习笔记——垃圾回收器
- 结构光N步相移+多频外差法之解相位:三频四相
- android版 点击下载,暴雪游戏手机安全令Android版下载与使用说明
- 计算机打印机零件维修明细,维修师傅必看:激光打印机检修详解
- 计算机应用基础闲情赋答案,计算机应用基础网络统考试卷 答案.doc
- 计算机作品画图板软件四年级,四年级下册信息技术《word画图工具》教学设计...
- 怎么查看linux系统中有哪些数据库,linux命令查询mysql的有哪些
- 解决webpack报错:ERROR in multi ./xxx/xxx.js ./xxx/xxx.js Module not found: Error: Can't resolve '.\xxx\
- 【区间dp】关路灯 牛客网题解