How to test banker algorithm and show other ordering has problem

Viewed 231
1 Answers

Introduction

Let's consider a very simple example. Let's say there are 2 processes - P0 and P1, and there's only one type of resource A. The system allocates 10 units of A to P0 and 0 to P1, and it still has 1 unit of A left. Moreover, in total , P0 may request up to 11 units during the execution, and P1 - 5.

Let's quickly build up tables and vectors used to determine safe or unsafe sequences for these processes.

Allocation table

Allocation table shows how many resources of each type are allocated to processes. In your example, it looks as follows:

Process A
P0 10
P1 0

Availability vector

Availability vector shows how many units the system can still offer if it decides so.

A
1

Maximum table

Maximum table shows how many units of A each process may request during the execution (in total).

Process A
P0 11
P1 5

Need table

Need table shows how many units of A each process may additionally request during the execution

Process A
P0 1
P1 5

Safe sequence

Now, let's say we ran the Banker's algorithm for our configuration and got the following sequence:

P0 -> P1

Why is it safe?

Case 1 - processes are executed in sequence

P0 starts executing, and demands and receives the remaining 1 unit. So, the system has 0 available resources left. However, once P0 completes, it releases 11 units of A, and it's more than enough to run P1 and for it to complete.

Case 2 - processes are executed in parallel

P0 starts executing, and demands and receives the remaining 1 unit. Then, during its execution, P1 starts too and asks for 5 units. However, its request gets postponed because the system has none. So, the request is put on a waiting list. Later, when P0 releases at least 5 units, P1 finally gets 5. Obviously, no deadlock can happen because if P0 needs resources again, it will either wait for P1 or just ask the system and vice versa.

Unsafe sequence

P1 -> P0

P1 starts executing and demands 5 units from the system. It gets denied and its request is put on a waiting list because the system has only 1 unit. Then, P0 starts and demands 1 unit. It also gets denied because P1 is waiting for 5 units already. The request from P0 is put on the waiting list too. So, we have a deadlock situation because neither of the requests can ever go through.

Related