==== Start Lecture #14
====
Remark: An optimistic resource manager is one
that grants every request as soon as it can. To avoid deadlocks with
all four conditions present, the manager must be smart not optimistic.
6.5.2: Safe States
Avoiding deadlocks given some extra knowledge.
- Not surprisingly the resource manager knows how many units of each
resource it had to begin with.
- Also it knows how many units of each reasource it has given to
each process
- It would be great to see all the programs in advance and thus know
all future requests, but that is asking for too much.
- Instead, each process when it starts gives its maximum usage.
That is each process at startup gives for each resource the maximum
number of units it can possibly ask for.
- If during the run the process asks for more than its claim,
abort it.
- If it claims more than it needs, the result is that the
resource manager will be more conservative than need be and there
will be more waiting.
Definition: A state is safe
if there one can find an ordering of the processes such that if the
processes are run in this order, they will all terminate (assuming
none exceeds its claim).
A manager can determine if a state is safe.
- Since the manager know all the claims, it can determine the maximum
amount of additional resources each process can request.
- The manager knows how many units of each resource it has left.
- If there is a process whose max additional requests is less than
what remains (for each resource), if this process is run first it will
terminate.
- Once this process has terminated, the supply of resources
is increased by how many the process has now.
- The manager then determines if, with this additional pile of
resources the manager can satisfy the maximum possible future requests
for another process.
- If this proceedure results in all processes terminating, the state is safe.
- If the procedure comes to a point where it cannot satisfy any of
the remaining processes the state is not safe.
Example 1
- One resource type R with 22 unit
- Three processes X, Y, and Z with claims 3, 11, and 19 respectively.
- Currently the processes have 1, 5, and 10 units respectively.
- Hence the manager currently has 6 units left.
- Also max additional needs for processes are 2, 6, 9
- This state is safe
- Use 2 units to satisfy X; now the manager has 7 units.
- Use 6 units to satisfy Y; now the manager has 12 units.
- Use 9 units to satisfy Z; done!
Example 2
Assume that Z now requests 2 units and we grant them.
- Currently the processes have 1, 5, and 12 units respectively.
- The manager has 4 units.
- The max additional needs are 2, 6, and 7.
- This state is unsafe
- Use 2 unit to satisfy X; now the manager has 5 units.
- Y needs 6 and Z needs 7 so we can't guarantee satisfying either
Remark: An unsafe state is not necessarily
a deadlocked state. Indeed, if one gets lucky all processes may
terminate successfully. A safe state means that the manager can
guarantee that no deadlock will occur.
6.5.3: The Banker's Algorithm (Dijkstra) for a Single Resource
The algorithm is simple: Stay in safe states.
- Check before any process starts that the state is safe (this means
that no process claims more than the manager has). If not, then this
process is trying to claim more than the system has so cannot be run.
- When the manager receives a request, it pretends to grant it and
checks if the resulting state is safe. If it is safe the request is
granted, if not the process is blocked.
- When a resource is returned, the manager checks to see if any of
the pending requests can be granted (i.e., if the result would now be
safe). If so the request is granted and the manager checks to see if
another can be granted.
6.5.4: The Banker's Algorithm for Multiple Resources
At a high level the algorithm is identical: Stay in safe states.
- What is a safe state?
- The same definition (if processes are run in a certain order they
will all terminate).
- Checking for safety is the same idea as above. The difference is
that to tell if there enough free resources for a processes to
terminate, the manager must check that for all
resources, the number of free units is at least equal to the max
additional need of the process.
Limitations of the banker's algorithm
- Often processes don't know their max needs. They can estimate
conservatively (i.e. big numbers) but then the manager becomes very
conservative.
- New processes arriving cause a problem (but not so bad as
tannenbaum suggests).
- Assume the process's claims is less than the total number in
the system (else reject the process as hopeless).
- Since the state without the new process is safe, so is the
state with the new process! Just use the order you had originally
and put the new process at the end.
- Insuring fairness (starvation freedom) needs a little more
work, but isn't too hard either (once an hour stop taking new
processes until all current processes finish).
- A process becoming unavailable (tape drive breaking), can result
in an unsafe state.
Homework: 11, 14 (not to be handed in).
6.6: Deadlock Prevention
Attack one of the coffman/havender conditions
6.6.1: Attacking Mutual Exclusion
Idea is to try to use spooling instead of mutual exclusion. Not
possible for many kinds of resources
6.6.2: Attacking Hold and Wait
Require processes to ask for all resources in the beginning (or
first release what they have and ask for it back plus new resources
all at once). This is often called One Shot.
6.6.3: Attacking No Preempt
Normally not possible.
6.6.4: Attacking Circular Wait
Establish a fixed ordering of the resources and require that they
be requested in this order. So if a process holds resources #34 and
#54, it can request only resources #55 and higher.
It is easy to see that a cycle is now not possible.
6.7: Other Issues
6.7.1: Two-phase locking
This is covered (MUCH better) in a database text. We will skip it.
6.7.2: Non-resource deadlocks
You can get deadlock from semaphores as well as resources. This is
trivial. Semaphores can be considered resources. P(S) is request S
and V(S) is release S. The manager is the module implementing P and
V, when the manager returns from P(S), it has granted the resource S.
6.7.3: Starvation
As usual FIFS is a good cure. Often this is done by priority aging
and picking the highest priority process to get the resource. Also
can periodically stop accepting new processes until all old ones
get the resources.