Parts 1 and 2 established the meaning of permissions and states. Here you follow their consequences through complete transactions: a requester can lack data, permission or both, and a response must preserve the newest value as well as revoke conflicting rights. Each example starts from a stated snapshot of C0, C1, H and memory.
Work through the three topics in that order: Read and Write-Permission Flows, then Forwarding Versus Memory Sourcing, then Writeback, Eviction and Cleaning.
Topic | What it covers |
|---|---|
GetS and GetM from cold, shared and upgrade starting points. | |
When memory may supply data and when a cache must, through H. | |
PutS, PutE and PutM with Put-Ack, WB entries and cache maintenance. |
Evictions are notified (PutS, PutE, PutM, each waiting for Put-Ack). Silent clean eviction is a variant in the last topic.
Lesson | After it you can... |
|---|---|
Locate the delivered read grant, not just memory response arrival. | |
Add a reader without omitting it from future revocations. | |
Acquire the value and exclusive permission from U or from a shared line. | |
Separate retained data from the exclusivity still required. | |
Justify source authority from state and pending work. | |
Track pending dirty responsibility until MSI memory is current. | |
Compare logical legs without hiding completion assumptions. | |
Distinguish legal backing lag from wrong response data. | |
Say where a dirty value lives from PutM until Put-Ack frees the WB entry. | |
Compare PutS and PutE with silent eviction and its stale sharer bit. | |
Keep a WB entry until Put-Ack, and stall when none is free. | |
Define clean, invalidate and clean-and-invalidate by target and completion. |
Keep the course model beside the tables. H handles one transaction for X at a time in these examples. Races between transactions come in Part 4.
No. The newest value may still be in C0's WB entry (C0 in MI^A, waiting for Put-Ack) or, in the early Put-Ack variant, in H's buffer before memory is written. H must not serve memory = 0 meanwhile. If the PutM has reached H, H waits for the memory write. If it has not, H still records exclusive(C0) and forwards the request to C0, which answers from its WB entry.