python对于银行家算法的实现
近段时间在搞操作系统的课程设计,其中要求做一个银行家算法,下面的代码是一个最基础的算法实现,如果想要增加功能比如划分不同的资源种类,可以再此代码上进行改进。
pcb=[]
n=int(input('请输入你的进程数:'))
Available = int(input("请输入系统已有的资源数"))
#输入函数
def inputFun():
i = 0
while(i<n):
print("--------------------------------")
pName = input("请输入第%d个进程名:"%(i+1))
Max = int(input("请输入该进程运行所需的资源数"))
Allocation = int(input("请输入该进程已有的资源数"))
Finish = "false"
Need = Max - Allocation
pcb.append([pName,Max,Allocation,Need,Finish])
i+=1
#银行家算法:
def BA():
ba_pcb = pcb
ba_Available=Available
ba_pcb.sort(key = lambda x:x[3],reverse = False)#对进程的所需资源数进行降序排序
i = 0
while(i<n):
if(ba_Available>ba_pcb[i][3]):
ba_Available+=ba_pcb[i][2]
ba_pcb[i][4] = "true"
print("--------------------------------")
print("进程%s向系统申请资源."%ba_pcb[i][0])
print("进程%s已运行结束."%ba_pcb[i][0])
print("进程%s向系统释放资源."%ba_pcb[i][0])
print("当前系统已有的资源数为%d."%ba_Available)
i+=1
if(i == n):
print("--------------------------------")
print("当前系统是安全的.")
else:
print("--------------------------------")
printf("系统无法满足任何进程的资源申请.")
printf("系统当前状态是不安全的.")
break
if __name__ =='__main__':
inputFun()
BA()
运行结果如下