A deadlock is a situation wherein two or more competing
actions are each waiting for the other to finish, and thus neither ever does.
It is often seen in a paradox like the "chicken or the egg". The concept of a Catch-22 is similar.
In
computer science, Coffman deadlock refers to a specific condition when two or more processes are each
waiting for the other to release a resource, or more than two processes are
waiting for resources in a circular chain (see Necessary conditions). Deadlock is a common problem in multiprocessing where many processes share a specific type of mutually exclusive
resource known as asoftware lock or soft lock. Computers intended for
the time-sharing and/or real-time markets are often equipped with a hardware lock (or hard lock) which guarantees exclusive access to processes, forcing serialized access.
Deadlocks are particularly troubling because there is no general solution to avoid (soft) deadlocks.
The
telecommunications description of deadlock is weaker than Coffman deadlock
because processes can wait for messages instead of resources. A deadlock can be
the result of corrupted messages or signals rather than merely waiting for
resources. For example, a dataflow element that has been directed to receive
input on the wrong link will never proceed even though that link is not
involved in a Coffman cycle.
“
|
When two trains approach each
other at a crossing, both shall come to a full stop and neither shall start
up again until the other has gone.
|
”
|
An
example of a deadlock which may occur in database products is the following. Client applications using the database
may require exclusive access to a table, and in order to gain exclusive access
they ask for a lock. If one client application holds a lock on a
table and attempts to obtain the lock on a second table that is already held by
a second client application, this may lead to deadlock if the second
application then attempts to obtain the lock that is held by the first
application. (This particular type of deadlock could be prevented, by using an all-or-none resource allocation algorithm.)
Necessary conditions
2.
Hold and Wait: processes
already holding resources may request new resources held by other processes
3.
No Preemption: No resource can be forcibly removed from a
process holding it, resources can be released only by the explicit action of
the process.
4.
Circular Wait: two or more processes form a circular chain where each process
waits for a resource that the next process in the chain holds. When circular
waiting is triggered by mutual exclusion operations it is sometimes called lock inversion.[2]
Prevention
§ Removing the mutual exclusion condition means
that no process may have exclusive access to a resource. This proves impossible
for resources that cannot be spooled, and even with spooled resources deadlock could
still occur. Algorithms that avoid mutual exclusion are called non-blocking
synchronization algorithms.
§ The "hold and wait" conditions may be
removed by requiring processes to request all the resources they will need
before starting up (or before embarking upon a particular set of operations);
this advance knowledge is frequently difficult to satisfy and, in any case, is
an inefficient use of resources. Another way is to require processes to release
all their resources before requesting all the resources they will need. This
too is often impractical. (Such algorithms, such as serializing tokens, are known as the all-or-none algorithms.)
§ A "no preemption" (lockout) condition may also be difficult
or impossible to avoid as a process has to be able to have a resource for a
certain amount of time, or the processing outcome may be inconsistent or thrashing may occur. However, inability to enforce
preemption may interfere with a priority algorithm. (Note: Preemption of a "locked
out" resource generally implies a rollback, and is to be avoided, since it is very costly
in overhead.) Algorithms that allow preemption include lock-free
and wait-free algorithms and optimistic concurrency
control.
§ The circular wait condition: Algorithms that
avoid circular waits include "disable interrupts during critical
sections", and "use a hierarchy to determine a partial ordering of resources" (where no obvious hierarchy exists, even the
memory address of resources has been used to determine ordering) and Dijkstra's solution.
Avoidance
Deadlock can be avoided if certain information
about processes are available in advance of resource allocation. For every
resource request, the system sees if granting the request will mean that the
system will enter an unsafe state, meaning a state that could result in
deadlock. The system then only grants requests that will lead to safe states. In order for the system to be able to determine whether
the next state will be safe or unsafe, it must know in advance at any time the
number and type of all resources in existence, available, and requested. One
known algorithm that is used for deadlock avoidance is the Banker's algorithm, which requires resource usage limit to be
known in advance.
Detection:
deadlock
detection and process restart are used by employing an algorithm that tracks
resource allocation and process states, and rolls back and restarts one or more
of the processes in order to remove the deadlock. Detecting a deadlock that has
already occurred is easily possible since the resources that each process has
locked and/or currently requested are known to the resource scheduler or OS.
Livelock
A livelock is similar to a deadlock, except that the states of the processes
involved in the livelock constantly change with regard to one another, none
progressing. Livelock is a special case ofresource starvation; the general definition only states that a
specific process is not progressing.A real-world example of livelock occurs when two people meet in a narrow corridor,
and each tries to be polite by moving aside to let the other pass, but they end
up swaying from side to side without making any progress because they both
repeatedly move the same way at the same time.ock is a risk with some algorithms that detect and recover
from deadlock. If more than one process takes action, the deadlock detection
algorithm can be repeatedly triggered. This can be avoided by ensuring that
only one process (chosen randomly or by priority) takes action
Comments
Post a Comment