CH 3 Deadlock When 2 (or more) processes remain blocked forever!

34
CH 3 Deadlock When 2 (or more) processes remain blocked forever !

Transcript of CH 3 Deadlock When 2 (or more) processes remain blocked forever!

CH 3 Deadlock

When 2 (or more) processes remain blocked forever!

How can this happen?

• Process a– Down x– Gets x

– Down y– Blocks

• Process b

– Down y– Gets y

– Down x– Blocks

Both are blocked forever!

Resources

• Things for which we request exclusive access.

– Ex. db, files, shared memory, printer, cd/dvd writer, tape drive, etc.

• Types1. Preemptable – can be taken away

w/out ill effects

2. Non preemptable – cannot be take away w/out causing a failure

Resource examples

• Memory – preemptable• CPU – preemptable• CD writing – non preemptable• Printing – non preemptable

• We will only consider non preemptable (the harder problem).

Deadlock

• A set of processes is deadlocked if each process in the set is waiting for an event that only another process in the set can cause.

Conditions for deadlock

1. Mutual exclusion

2. Hold and wait

3. No preemption

4. Circular wait

(Need all of these (all necessary).)

Resource allocation graph

process resource

(Directed)Graphs

• A graph G = (V,E) whereV = vertex set and

E = edge set• Ordered pairs of vertices

• Ex. Let G = (V,E) whereV = { C, D, T, U } and

E = { <D,U>, <U,C>, <C,T>, <T,D> }

Dealing w/ deadlock

1. Ignore it (ostrich algorithm).

2. Detect and recover.

3. Avoid by careful resource allocation.

4. Disallow one or more of the conditions necessary for deadlock.

2. Detect and recover

• Detection with one resource of each type

• Detection with multiple resources of each type

Detection with one resource of each type

• Detect cycle in digraph

– For each vertex v in graph,• search the subtree rooted at v• see if we visit any vertex twice (by

keeping a record of already visited vertices).

Detection with multiple resources of each type

• Skip.

Recovery

1. Preemption

2. Rollback (using checkpoints)

3. Kill process

Recovery: preemption

• Temporarily take back needed resource

• Ex. Printer• Pause at end of page k• Start printing other job• Resume printing original job

starting at page k+1

Recovery: rollback

• Checkpoint – save entire process state (typically right before the resource was allocated)

• When deadlock is detected, we kill the checkpointed process, freeing the resource, and then later restart the killed process starting at the checkpoint.– Requires apps that can be restarted in

this manner.

Rdb’s & commit/rollback

From p. 62, http://www.postgresql.org/files/documentation/pdf/8.0/postgresql-8.0-US.pdf

Recovery: kill process

• Requires apps that can be restarted from the beginning.

Deadlock avoidance

• Safe state = not deadlocked and there exists some scheduling order in which every process can run to completion even if all of them suddenly request their max number of resources immediately

• Unsafe != deadlocked

Safe states

Unsafe states

Banker’s algorithm (for single resource type)• Grant only those requests that lead to safe

states.• Requires future information.

Banker’s algorithm• (b) is safe because from (b) we

can give C 2 more (free=0) then C completes (free=4) then give either B or D . . .

Banker’s algorithm• (c) is unsafe because no max

can be satified

Banker’s algorithm (multiple resources)

N:

E=existing (free)

P=possessed (allocated/held)

A=available

Banker’s algorithm (multiple resources)

To check for a safe state:1. Look for a row, R, in N <= A.2. Assume the process of the

chosen row requests all resources, runs to completion, and terminates (giving back all of its resources to A).

3. Repeat steps 1 and 2 until either all processes either terminate (indicating that the initial state was safe) or deadlock occurs.

Banker’s algorithm (multiple resources)

To check for a safe state:1. Look for a row, R, in N <= A.

Deadlock prevention

• Attack:– Mutual exclusion– Hold and wait– No preemption– Circular wait

Deadlock prevention: attack mutex

• Ex. Use spooling instead of mutex on printer

• No all problems lend themselves to spooling

• Still have contention for disk space with spooling

Deadlock prevention: attack hold & wait

• Request (wait for) all resources prior to process execution– Problems:

• We may not know a priori.• We tie up resources for entire time.

• Before requesting a resource, we must first temporarily release all allocated resources and then try to acquire all of them again.

Deadlock prevention: attack no preemption

• Tricky at best.

• Impossible at worst.

Deadlock prevention: attack circular wait

1. Only allow one resource at a time.

2. Request all resources in (some globally assigned) numerical order.

• No numerical ordering may exist.