import tkinter as tk
from tkinter import messagebox
from tkinter import *
max = []
need = []
alloc = []
request = []
available = []
num_resources = 0
num_process = 0
num_available = 0
num_request = 0
ans = []
def create_Matrix():
global num_process, num_resources, num_available, alloc, available, need, request, max
try:
num_process = int(processentry.get())
num_resources = int(resentry.get())
num_available = int(availentry.get())
num_request = int(reqentry.get())
if num_resources == num_available and (num_request > 0 and num_request <= num_process):
max = [[0 for i in range(num_resources)] for j in range(num_process)]
alloc = [[0 for i in range(num_resources)] for j in range(num_process)]
need = [[0 for i in range(num_resources)] for j in range(num_process)]
available = [0] * num_available
request = [0] * num_available
enable_entry()
for i in range(num_process):
row_entries_max = []
row_entries_alloc = []
for j in range(num_resources):
entry_max = tk.Entry(formax, width=5, bd=4)
entry_max.grid(row=i + 4, column=j + 1, padx=5, pady=5)
row_entries_max.append(entry_max)
entry_alloc = tk.Entry(foralloc, width=5, bd=4)
entry_alloc.grid(row=i + 4, column=j + 10, padx=5, pady=5)
row_entries_alloc.append(entry_alloc)
max[i] = row_entries_max
alloc[i] = row_entries_alloc
entry_available = []
for i in range(num_available):
entry_avail = tk.Entry(foravail, width=5, bd=4)
entry_avail.grid(row=0, column=0 + i, padx=5, pady=5)
entry_available.append(entry_avail)
available = entry_available
entry_request = []
for i in range(num_available):
entry_req = tk.Entry(forreq, width=5, bd=4)
entry_req.grid(row=0, column=0 + i, padx=5, pady=5)
entry_request.append(entry_req)
request = entry_request
else:
messagebox.showerror("oops error occurred")
except ValueError as e:
messagebox.showerror("Something's Wrong")
def store_vals_for_max():
try:
for i in range(num_process):
for j in range(num_resources):
max[i][j] = int(max[i][j].get())
messagebox.showinfo("Success", "Values stored in MAX matrix successfully.")
except ValueError as e:
messagebox.showerror("Validation Error", str(e))
def store_vals_for_alloc():
try:
for i in range(num_process):
for j in range(num_resources):
alloc[i][j] = int(alloc[i][j].get())
messagebox.showinfo("Success", "Values stored in ALLOC matrix successfully.")
except ValueError as e:
messagebox.showerror("Validation Error", str(e))
def store_avail():
try:
for i in range(num_resources):
available[i] = int(available[i].get())
messagebox.showinfo("Successfully stored")
except ValueError as e:
messagebox.showerror("Error", f"Invalid value: {e}")
def store_req():
try:
for i in range(num_resources):
request[i] = int(request[i].get())
messagebox.showinfo("Successfully stored")
except ValueError as e:
messagebox.showerror("Error", f"Invalid value: {e}")
def bankers():
global ans
f = [0] * num_process
ans = [0] * num_process
ind = 0
for k in range(num_process):
f[k] = 0
for i in range(num_process):
for j in range(num_resources):
need[i][j] = max[i][j] - alloc[i][j]
y = 0
for k in range(5):
for i in range(num_process):
if f[i] == 0:
flag = 0
for j in range(num_resources):
if need[i][j] > available[j]:
flag = 1
break
if flag == 0:
ans[ind] = i
ind += 1
for y in range(num_resources):
available[y] += alloc[i][y]
f[i] = 1
messagebox.showinfo("Success", "Banker's algorithm completed successfully.")
print_sequence()
def print_sequence():
global ans
if not ans:
messagebox.showinfo("Empty Sequence", "No safe sequence found.")
else:
sequence_str = "Following is the SAFE Sequence:\n"
for i in range(num_process - 1):
sequence_str += f" P{ans[i]} ->"
sequence_str += f" P{ans[num_process - 1]}"
messagebox.showinfo("Safe Sequence", sequence_str)
def requestt():
global need
global request
global available
for i in range(num_resources):
if (request[i] > need[num_request][i]) :
messagebox.showerror('unexpected error occurred!')
for i in range(num_resources):
available[i] -= request[i]
alloc[num_request][i] += request[i]
need[num_request][i] -= request[i]
bankers()
my bankers function is giving me accurate result on the first go but when i am implementing request resource function its giving abnormal behaviour it is always giving like p0->p1->p2->p3->p4 and that is wrong kindly can anyone help me i thinke the problem is the matrix are not updating properly after the requestt function