Consider the subsequent resource-allocation policy. Requests as well as releases for resources are allowed at any time. If a request for resources can't be satisfied because the resources aren't available then we check any processes that are blocked waiting for resources. If they have the desired resources after that these resources are taken away from them and are given to the requesting process. The vector of the resources for which the process is waiting is increased to include the resources that were taken away. For instance consider a system with three resource types and the vector Available initialized to (4,2,2). If process P0 asks for (2, 2, 1) it gets them. If P1 asks for (1,0,1) it gets them. After that if P0 asks for (0, 0, 1), it is blocked (resource not available). If P2 now asks for (2, 0, 0) it gets the available one (1,0,0) in addition to one that was allocated to P0 (since P0 is blocked). P0's Allocation vector goes down to (1, 2, 1) and its Need vector goes up to (1, 0, 1).
a. Can deadlock take place? If you answer "yes" give an instance and If you answer "no," specify which necessary condition cannot occur.
b. Can indefinite blocking take place? Describe your answer.
a. Deadlock cannot take place because pre-emption exists.
b. Yes A process may never obtain all the resources it needs if they are continuously pre-empted by a series of requests such as those of process C.