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> |
||