Freeing a cache-array entry does not end a line's obligations. A dirty value can outlive its array entry in a writeback (WB) entry, and H's directory must either be told about a clean eviction or accept a stale sharer bit. This topic follows each case value by value.
An evicting cache sends PutS, PutE or PutM and then waits for Put-Ack. While it waits it is in one of the states below (the Primer's names). The lessons in this topic use them in their tables.
State | Meaning | While waiting for Put-Ack |
|---|---|---|
MI^A | Was M, wants I, waits for Put-Ack | The WB entry keeps the dirty data. Local loads and stores to X stall. |
SI^A | Was S, wants I, waits for Put-Ack | Local loads and stores to X stall. Memory is current, so nothing is lost. |
EI^A | Was E (MESI, MOESI), wants I, waits for Put-Ack | Local loads and stores to X stall. Memory is current because the line was E, not M. |
II^A | Lost the line to a Fwd-GetM or Inv while waiting | No copy and no permission. The cache still waits for Put-Ack before X is free. |
A cell such as MI^A / 3 (in WB) means C0 is in MI^A and its WB entry holds 3: the array entry is already free. A Put from a cache that H no longer records as a holder gets Put-Ack without changing the directory or memory. Generation tags that match a Put-Ack to one particular eviction are an optional implementation detail covered in Part 4.
Lesson | After it you can... |
|---|---|
Say where a dirty value lives at each step of PutM, memory write and Put-Ack. | |
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. | |
Distinguish clean, invalidate and clean-and-invalidate by target and completion. |
Read in order after the request and sourcing topics. The maintenance lesson uses course-defined operations, not the instructions of a particular ISA.
Yes. After an M line is evicted, C0 is in MI^A: the array entry is free, but the WB entry holds the dirty value and C0 must answer requests for X from it until Put-Ack arrives. Freeing the WB entry earlier can lose the only copy.