The name is just the four states: Modified, Exclusive, Shared, Invalid. The whole protocol is the answer to one question asked of every block: do I have the only copy, a shared copy, a dirty copy, or no copy at all?
Each state records two facts about a block in one cache: whether this cache's copy is the only one, and whether it has been modified (differs from memory).
The quiet star is E. Without it, a core that loads a block and then writes it would have to broadcast on the bus twice — once to read, once to claim the write. The E state lets the hardware notice "I'm the only one who has this" on the read, so the later write costs nothing on the bus. For the extremely common read-then-modify pattern, that is a huge saving.
Here is MESI as a diagram — the single most important picture in this module. Watch it build in stages. Solid arrows are transitions caused by this core's own reads and writes; dashed arrows are forced on you when you snoop a remote core's request on the bus.
Trace the happy path: a block starts I. Your core reads it and, finding no other holders, it lands in E. Your core writes it — a silent jump to M, no bus transaction. Later another core reads the block; you snoop that request, write your dirty data back, and drop to S. If instead the other core writes, you snoop the invalidating request and fall to I. Every legal move a block can make is one of these arrows.
The full rulebook, in words, for the block in your cache:
| From | Event | To | Bus action |
|---|---|---|---|
| I | your read, no other copies | E | BusRd |
| I | your read, others hold it | S | BusRd |
| I | your write | M | BusRdX (read-for-ownership) |
| E | your write | M | none — silent! |
| S | your write | M | BusUpgr (invalidate sharers) |
| E | remote read (snooped) | S | — |
| M | remote read (snooped) | S | write back dirty data |
| S or E | remote write (snooped) | I | — |
| M | remote write (snooped) | I | write back dirty data |
Let's drive MESI with an actual request trace and watch both caches' states evolve. One block, two cores; each line is "core X reads" or "core X writes". Notice the E→M write on core 0 that costs no bus traffic, and how core 1's read forces core 0 from M down to S with a writeback.
MESI has one clumsy moment: when a Modified block is shared with another core, MESI forces a writeback to memory to get everyone clean-and-Shared. AMD's MOESI adds an Owned state so one cache can keep the dirty data and hand it cache-to-cache to others without touching memory — the owner stays responsible for eventually writing back. Intel's MESIF adds a Forward state so that, when many caches share a block, exactly one is designated to answer new requests (instead of all of them replying at once). Both are MESI with one extra state bolted on to make cache-to-cache sharing cheaper on large, many-core interconnects. The four core ideas never change.
Because both E and M mean "I'm the only one with this block," beginners blur them. The difference is dirtiness. E is clean — your copy still equals memory, so if you drop it you owe memory nothing. M is dirty — you have changed it and memory is stale, so before anyone else may read it you must write it back. That single bit is what decides whether a remote read costs a writeback (from M) or is free (from E). Silent E→M is legal precisely because moving from clean-exclusive to dirty-exclusive tells no other cache anything it doesn't already know: nobody else had the block anyway.