Task1: Deadlock Avoidance
Process | Current Allocation | Maximum Allocation | Available | Need |
A B C D | A B C D | A B C D | A B C D | |
P1 | 0 1 2 0 | 0 1 2 0 | 4 2 0 1 | 0 0 0 0 |
P2 | 1 0 0 1 | 7 5 0 1 | 6 5 0 0 | |
P3 | 3 5 4 1 | 3 5 6 2 | 0 0 2 1 | |
P4 | 6 3 2 0 | 6 5 2 0 | 0 2 0 0 | |
P5 | 0 1 4 0 | 6 5 6 0 | 6 4 2 0 |
a)Draw a resource allocation graph for the snapshot of the system
Please reference page 211 of textbook.
for example, P2 is holding one instance of B ,one instance of D and waiting for six instances of A, five instances of B. The figure is as the following:
b)Please reference 7.5.3.1 safety algorithm
Work=Work+Current Allocation
Step is point to the algorithm.
step | Process | Current Allocation | Maximum Allocation | Need | Aviable(work) |
A B C D | A B C D | A B C D | A B C D | ||
4 2 0 1 | |||||
2,3 | P1 | 0 1 2 0 | 0 1 2 0 | 0 0 0 0 | 4 3 2 1 |
2,3 | P3 | 3 5 4 1 | 3 5 6 2 | 0 0 2 1 | 7 8 6 2 |
2,3 | P4 | 6 3 2 0 | 6 5 2 0 | 0 2 0 0 | 13 11 8 3 |
2,3 | P2 | 1 0 0 1 | 7 5 0 1 | 6 5 0 0 | 14 11 8 3 |
2,3 | P5 | 0 1 4 0 | 6 5 6 0 | 6 4 2 0 | 14 12 12 3 |
We can satisfy the requirement of every process, so it's a safe state.
c)Please reference 7.5.3.2 Resource-request algorithm
We can have the two answers:(either of them is right)
(1)If we assume the maximum allocation of P1 is 0120, we get
request[i]>Need[i]
So we will raise a condition error and the request can't be granted.
(2)If we assume the maximum allocation of P1 is 0120+4200=4320, we need to check whether this allocation is safe.
step | Process | Current Allocation | Maximum Allocation | Need | Aviable(work) |
A B C D | A B C D | A B C D | A B C D | ||
4 2 0 1 | |||||
2,3 | P1 | 0 1 2 0 | 4 3 2 0 | 4 2 0 0 | 4 3 2 1 |
2,3 | P3 | 3 5 4 1 | 3 5 6 2 | 0 0 2 1 | 7 8 6 2 |
2,3 | P4 | 6 3 2 0 | 6 5 2 0 | 0 2 0 0 | 13 11 8 3 |
2,3 | P2 | 1 0 0 1 | 7 5 0 1 | 6 5 0 0 | 14 11 8 3 |
2,3 | P5 | 0 1 4 0 | 6 5 6 0 | 6 4 2 0 | 14 12 12 3 |
So if we change the maximum allocation of P1, we can satisfy the request immediately.