other.bankers_algorithm¶
The Banker’s algorithm is a resource allocation and deadlock avoidance algorithm developed by Edsger Dijkstra that tests for safety by simulating the allocation of predetermined maximum possible amounts of all resources, and then makes a “s-state” check to test for possible deadlock conditions for all other pending activities, before deciding whether allocation should be allowed to continue. [Source] Wikipedia [Credit] Rosetta Code C implementation helped very much.
Attributes¶
Classes¶
Module Contents¶
- class other.bankers_algorithm.BankersAlgorithm(claim_vector: list[int], allocated_resources_table: list[list[int]], maximum_claim_table: list[list[int]])¶
- __available_resources() list[int] ¶
Check for available resources in line with each resource in the claim vector
- __need() list[list[int]] ¶
Implement safety checker that calculates the needs by ensuring that max_claim[i][j] - alloc_table[i][j] <= avail[j]
- __need_index_manager() dict[int, list[int]] ¶
This function builds an index control dictionary to track original ids/indices of processes when altered during execution of method “main”
Return: {0: [a: int, b: int], 1: [c: int, d: int]}
>>> index_control = BankersAlgorithm( ... test_claim_vector, test_allocated_res_table, test_maximum_claim_table ... )._BankersAlgorithm__need_index_manager() >>> {key: [int(x) for x in value] for key, value ... in index_control.items()} {0: [1, 2, 0, 3], 1: [0, 1, 3, 1], 2: [1, 1, 0, 2], 3: [1, 3, 2, 0], 4: [2, 0, 0, 3]}
- __pretty_data()¶
Properly align display of the algorithm’s solution
- __processes_resource_summation() list[int] ¶
Check for allocated resources in line with each resource in the claim vector
- main(**kwargs) None ¶
Utilize various methods in this class to simulate the Banker’s algorithm Return: None >>> BankersAlgorithm(test_claim_vector, test_allocated_res_table, … test_maximum_claim_table).main(describe=True)
Allocated Resource Table
P1 2 0 1 1 <BLANKLINE> P2 0 1 2 1 <BLANKLINE> P3 4 0 0 3 <BLANKLINE> P4 0 2 1 0 <BLANKLINE> P5 1 0 3 0 <BLANKLINE>
System Resource Table
P1 3 2 1 4 <BLANKLINE> P2 0 2 5 2 <BLANKLINE> P3 5 1 0 5 <BLANKLINE> P4 1 5 3 0 <BLANKLINE> P5 3 0 3 3 <BLANKLINE> Current Usage by Active Processes: 8 5 9 7 Initial Available Resources: 1 2 2 2 __________________________________________________ <BLANKLINE> Process 3 is executing. Updated available resource stack for processes: 5 2 2 5 The process is in a safe state. <BLANKLINE> Process 1 is executing. Updated available resource stack for processes: 7 2 3 6 The process is in a safe state. <BLANKLINE> Process 2 is executing. Updated available resource stack for processes: 7 3 5 7 The process is in a safe state. <BLANKLINE> Process 4 is executing. Updated available resource stack for processes: 7 5 6 7 The process is in a safe state. <BLANKLINE> Process 5 is executing. Updated available resource stack for processes: 8 5 9 7 The process is in a safe state. <BLANKLINE>
- __allocated_resources_table¶
- __claim_vector¶
- __maximum_claim_table¶
- other.bankers_algorithm.test_allocated_res_table = [[2, 0, 1, 1], [0, 1, 2, 1], [4, 0, 0, 3], [0, 2, 1, 0], [1, 0, 3, 0]]¶
- other.bankers_algorithm.test_claim_vector = [8, 5, 9, 7]¶
- other.bankers_algorithm.test_maximum_claim_table = [[3, 2, 1, 4], [0, 2, 5, 2], [5, 1, 0, 5], [1, 5, 3, 0], [3, 0, 3, 3]]¶