Banker's algorithm: Difference between revisions

Content added Content deleted
(Added Wren)
(Banker's algorithm en Python)
Line 1,034: Line 1,034:
Available resources: {3,0,1,2}
Available resources: {3,0,1,2}
The processes are in an unsafe state.
The processes are in an unsafe state.
</pre>

=={{header|Python}}==
<lang python>
def main():
resources = int(input("Cantidad de recursos: "))
processes = int(input("Cantidad de procesos: "))
max_resources = [int(i) for i in input("Recursos máximos: ").split()]

print("\n-- recursos asignados para cada proceso --")
currently_allocated = [[int(i) for i in input(f"proceso {j + 1}: ").split()] for j in range(processes)]

print("\n--- recursos máximos para cada proceso ---")
max_need = [[int(i) for i in input(f"proceso {j + 1}: ").split()] for j in range(processes)]

allocated = [0] * resources
for i in range(processes):
for j in range(resources):
allocated[j] += currently_allocated[i][j]
print(f"\nRecursos totales asignados : {allocated}")

available = [max_resources[i] - allocated[i] for i in range(resources)]
print(f"Recursos totales disponibles: {available}\n")

running = [True] * processes
count = processes
while count != 0:
safe = False
for i in range(processes):
if running[i]:
executing = True
for j in range(resources):
if max_need[i][j] - currently_allocated[i][j] > available[j]:
executing = False
break
if executing:
print(f"proceso {i + 1} ejecutándose")
running[i] = False
count -= 1
safe = True
for j in range(resources):
available[j] += currently_allocated[i][j]
break
if not safe:
print("El proceso está en un estado inseguro.")
break

print(f"El proceso está en un estado seguro.\nRecursos disponibles: {available}\n")


if __name__ == '__main__':
main()
</lang>
{{out}}
<pre>
Cantidad de recursos: 4
Cantidad de procesos: 3
Recursos máximos: 6 5 7 6

-- recursos asignados para cada proceso --
proceso 1: 1 2 2 1
proceso 2: 1 0 3 3
proceso 3: 1 2 1 0

--- recursos máximos para cada proceso ---
proceso 1: 3 3 2 2
proceso 2: 1 2 3 4
proceso 3: 1 3 5 0

Recursos totales asignados : [3, 4, 6, 4]
Recursos totales disponibles: [3, 1, 1, 2]

proceso 1 ejecutándose
El proceso está en un estado seguro.
Recursos disponibles: [4, 3, 3, 3]

proceso 2 ejecutándose
El proceso está en un estado seguro.
Recursos disponibles: [5, 3, 6, 6]

proceso 3 ejecutándose
El proceso está en un estado seguro.
Recursos disponibles: [6, 5, 7, 6]
</pre>
</pre>