Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Path
  • Cache Coherency Glossary
  • The Shared Course Model
  • Cache Coherency Revision Sheet
  • Why Coherence Exists8
  • States and Protocols12
  • Transactions12
    • Read and Write-Permission Flows
      • Cold Read Miss
      • Read of a Shared Line
      • Write Miss and Ownership
      • Upgrade from Shared
    • Forwarding Versus Memory Sourcing
    • Writeback, Eviction and Cleaning
  • Races and Controller Design8
  • Progress and the Fabric16
  • Ordering and Synchronization12
  • Performance and Scalability12
  • Real Protocols12
  • SoC Integration12
  • Power, Clocking and Reliability12
  • Verification12
  • Debug and Bring-up12
  • Interview and Design Review17
  • Capstone: A Coherent Model Lab5
Loading lesson

‹Read and Write-Permission Flows
  1. Topics
  2. Cache Coherency
  3. Transactions
  4. Read and Write-Permission Flows
  5. Cold Read Miss

Part 3 · Transactions · All levels

Cold Read Miss

Follow a memory-sourced read of an uncached line and compare the MSI grant (S) with the MESI grant (E) for a lone reader.

On this page

    Which permission does a lone reader get?

    C0 issues a load, but its cache is I for X. Finding 0 in memory is not enough: the cache also needs permission to use that value. Review the permission distinction if data arrival and permission sound interchangeable.

    Trace: The Course Model in Action, steps 1 and 2 (MSI), and Caches, Lines and Write-Back (MESI). Same roles: C0 reads from the initial state (both caches I, H U, memory = 0). C0 sends GetS, waits in IS^D, H reads memory = 0 and returns Data. The new question here is which grant that Data carries.

    IS^D means 'was I, wants S, waiting for Data': no load can complete yet. The load completes only when Data reaches C0, which then holds both the value and the permission. Memory may answer because H shows U: no cache holds X, so memory has the newest value. If H recorded an exclusive or dirty-responsible holder, it would have to ask that holder first.

    The same request under MESI

    MESI changes only the grant. H sees no other holder and returns E instead of S. Everything else in the trace is identical.

    Case

    Grant at step 2

    H directory after

    C0's first store

    MSI

    Data(X=0, S)

    S{C0}

    Needs a second transaction: GetM, then Data(M)

    MESI

    Data(X=0, E)

    exclusive(C0)

    Hits: E becomes M silently, no message

    E saves a whole transaction when a lone reader writes next, which is common for private data. The price is that H must now treat C0 as an exclusive holder: a later reader cannot be served from memory alone, because C0 may have written silently. Who May Supply Data? shows why H must forward even when the E copy is still clean.

    Common pitfall

    Completing the processor load when H receives memory's value. H's copy gives C0 no permission. The load completes only when Data reaches C0.

    Interview

    Say which protocol you assume before you name the grant. 'GetS returns S' is true in MSI; in MESI a lone reader gets E.

    Check yourself In MSI, could C0 store immediately after step 2 because C1 is I?

    No. Its granted state is S. The absence of another copy is not permission for a silent upgrade; it must send GetM. Only MESI's E grant allows the silent store.

    Related topics

    • Shared course model

    • Trace: The Course Model in Action

    • Next: another reader

    Previous

    26 / 167

    Next: Read of a Shared Line

    Up next

    Up nextRead of a Shared Line

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Write Miss and Ownership
    • Upgrade from Shared