Process Synchronization Solution: 8-Process Dependency Problem
Process Synchronization Solution: 8-Process Dependency Problem
Problem
We have 8 processes with the following dependencies:
- P1 and P2 can execute in arbitrary order
- P3 and P4 must wait for both P1 and P2 to finish
- P5 must wait for both P3 and P4 to finish
- P6 must wait for P5 to finish
- P7 must wait for P6 to finish
- P8 must wait for both P5 and P6 to finish (can run concurrently with P7)
Dependency Graph
flowchart LR
X[" "]
A["P1"]
B["P2"]
A & B --> X
C["P3"]
D["P4"]
X --> C & D
D --> E["P5"]
C --> E
E --> F["P6"] & H["P8"]
F --> G["P7"] & H
Solution with Unlimited Semaphores
Step-by-Step Construction
Start with P1 and P2 (no dependencies):
1
2
P1: CODE EXEC
P2: CODE EXEC
Add P3 and P4 (wait for P1 and P2):
- s1: P1 must signal twice (for P3 and P4)
- s2: P2 must signal twice (for P3 and P4)
1
2
3
4
P1: CODE EXEC → V(s1) → V(s1)
P2: CODE EXEC → V(s2) → V(s2)
P3: P(s1) → P(s2) → CODE EXEC
P4: P(s1) → P(s2) → CODE EXEC
Add P5 (waits for P3 and P4):
- s3, s4: Each signals once
1 2 3 4 5
P1: CODE EXEC → V(s1) → V(s1) P2: CODE EXEC → V(s2) → V(s2) P3: P(s1) → P(s2) → CODE EXEC → V(s3) P4: P(s1) → P(s2) → CODE EXEC → V(s4) P5: P(s3) → P(s4) → CODE EXEC
Add P6 (waits for P5):
- s5: Signals once
1 2 3 4 5 6
P1: CODE EXEC → V(s1) → V(s1) P2: CODE EXEC → V(s2) → V(s2) P3: P(s1) → P(s2) → CODE EXEC → V(s3) P4: P(s1) → P(s2) → CODE EXEC → V(s4) P5: P(s3) → P(s4) → CODE EXEC → V(s5) P6: P(s5) → CODE EXEC
Add P7 (waits for P6):
- s6: Signals once
1 2 3 4 5 6 7
P1: CODE EXEC → V(s1) → V(s1) P2: CODE EXEC → V(s2) → V(s2) P3: P(s1) → P(s2) → CODE EXEC → V(s3) P4: P(s1) → P(s2) → CODE EXEC → V(s4) P5: P(s3) → P(s4) → CODE EXEC → V(s5) P6: P(s5) → CODE EXEC → V(s6) P7: P(s6) → CODE EXEC
Add P8 (waits for P5 and P6):
- s5: Signals one more
- s6: Signals one more
1
2
3
4
5
6
7
8
P1: CODE EXEC → V(s1) → V(s1)
P2: CODE EXEC → V(s2) → V(s2)
P3: P(s1) → P(s2) → CODE EXEC → V(s3)
P4: P(s1) → P(s2) → CODE EXEC → V(s4)
P5: P(s3) → P(s4) → CODE EXEC → V(s5) → V(s5)
P6: P(s5) → CODE EXEC → V(s6) → V(s6)
P7: P(s6) → CODE EXEC
P8: P(s5) → P(s6) → CODE EXEC
Semaphores used: 6 semaphores (s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0, s6 = 0)
This post is licensed under CC BY 4.0 by the author.