Part 9 answers: Why can it hang?
Most protocol hangs are not random. They come from a cycle of waits that the protocol allowed: a buffer waiting on a channel waiting on the buffer. Once you can draw that cycle, you can prevent it by design and prove you did.
This part covers deadlock, livelock and starvation; dependency graphs; channel dependencies; message-dependent deadlock; the consumption assumption; routing deadlock; pre-allocation versus retry; retry storms; timeouts; hang debug; and proving deadlock freedom.
Draw the wait-for cycle behind a hang.
Explain why responses need their own channel or class.
Argue to a review board that a fabric cannot deadlock.
Answer each in your head before opening it. If two or more feel shaky, revisit Part 8: Sharing and Arbitration first.
A higher-priority requester that asks every cycle always wins, so a lower one may never be granted.
Bounded waiting: with N requesters, each one waits at most N − 1 grants to others before its turn.
A separate logical channel, with its own buffering and flow control, sharing one physical link with others, so traffic in one cannot block traffic in another.
# | Lesson | Level | Status |
|---|---|---|---|
9.1 | W · Working | Ready | |
9.2 | W · Working | Ready | |
9.3 | S · Senior | Ready | |
9.4 | S · Senior | Ready | |
9.5 | S · Senior | Ready | |
9.6 | S · Senior | Ready | |
9.7 | P · Principal | Ready | |
9.8 | S · Senior | Ready | |
9.9 | W · Working | Ready | |
9.10 | S · Senior | Ready | |
9.11 | P · Principal | Ready | |
— | all levels | Ready | |
— | all levels | Ready |
Every lesson in this part is ready. Work through them in order: each one sets up the problem the next one solves.
This course teaches why protocols are designed the way they are. These lessons show how to build or sign off the same ideas, so this part links to them instead of repeating them.