>
> 1. I (Line is not found in the cache)
> 2. IM (Store - write miss: allocate cache block,
> allocate TBE, issue GetX, profile the miss, etc.)
> 3. ISM (Data: write data to cache)
> 4. MM (All_acks_no_sharers: dirty and locally
> modified)
> 5. MM (Store - write hit)
> 6. I (Other GetS: send exclusive data to the
> requestor)
>
> At the last step, shouldn't we go to O state? I
> understand that the data is only locally modified in
> MM state, but shouldn't we write it back to the
> memory?
>
This particular protocol implements the "migratory sharing" optimization
where exclusive permission is speculatively provided to a GETS requestor if
the block was written. Notice that the GETS requestor will enter state "M"
and not state "MM". If a GETS is received in state M, it will indeed
transition to state O instead of I.
|