实验一、编制银行家算法通用程序,并检测所给状态的系统安全性。假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其它进程抢占。进程申请的资源不能满足时,必须等待。
设计的要求:
(1) 程序中使用的数据结构及主要符号说明;
(2) 资源的种类和数目可以变化的
(3) 进程可以任意的顺序创建和变化
#!/usr/bin/env python
# -*- coding: utf-8 -*
'''
该模块实现了银行家算法,可以有效地避免死锁。
算法思想:
每一个进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型地最大单元数目
1) 其数目不应超过系统所拥有地资源总量
2)当请求资源时,系统必须首先确定是否有足够的资源分配给进程
3)计算将这些资源分配给进程后,是否会使系统处于不安全状态
模块功能:
在用户可视化界面上,用户可以根据自己的需求,输入请求资源的进程名称和进程请求的资源数,
点击CHECK按钮,系统会提示用户请求资源的结果。其中,资源的种类和数目是可以变化的,进程
可以任意的创建和变化,资源可以任意的顺序创建和变化。
'''
import numpy as np
import sys
from PyQt5.QtWidgets import QDesktopWidget, QHBoxLayout, QVBoxLayout
from PyQt5.QtGui import QBrush,QPixmap,QPalette,QIcon
from PyQt5.QtWidgets import (QLabel, QGridLayout)
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, QApplication)
def safeAlgorithm():
#安全性检查算法
global safeList, system_security
safeList= []
work = Available
Finish=[False]*length_progress
#在进程集合中找到一个 Finish[i] = false 且 need[i,j] < Work[j] 的进程
while False in Finish:
for i in range(0,length_progress):
for j in range(0,length_Avalable):
if (Finish[i] == False) and (Need[i]<=work).all():
for