C0 can already read X and C1 now misses. Read-only permissions are compatible, so a second reader does not need to remove the first. That does not mean H can skip recording C1: a later writer will need to find every reader.
Start at the end of the cold read in MSI: C0 S / 0, C1 I / -, H S{C0}, memory = 0. No transaction is pending. In settled MSI, S means memory is current, so H reads memory to answer C1.
Step | C0 state / value | C1 state / value | H directory | Memory | Newest data |
|---|---|---|---|---|---|
Checkpoint | S / 0 | I / - | S{C0} | 0 | C0 and memory: 0 |
1. GetS at H | S / 0 | IS^D / - | S{C0}, pend GetS C1 | 0 | C0 and memory: 0 |
H reads memory | S / 0 | IS^D / - | S{C0}, pend GetS C1 | 0 | C0 and memory: 0, Data(0) in flight to C1 |
2. Data at C1 | S / 0 | S / 0 | S{C0}, pend GetS C1 | 0 | C0, C1 and memory: 0 |
(assumed) grant delivered | S / 0 | S / 0 | S{C0,C1} | 0 | C0, C1 and memory: 0 |
There is no Inv in this sequence because nobody is being granted write permission. C0 need not send data just because it has a copy: memory is already current. H adds C1 to the sharer set once the grant is delivered (the assumed row, as the course model allows), so a later GetM will invalidate both readers.
Two cases change this trace. In MESI, if C0 held E rather than S, H would show exclusive(C0) and must forward the read to C0 (see Who May Supply Data?). In MOESI, an S copy can coexist with an O holder and stale memory, so H must ask the O holder. The dirty-responsibility lesson explains who supplies data then.
No. It would omit C1, an actual reader. A sharer list may contain extra possible holders, but it must never omit a real one, because it decides who gets Inv.