|
A multiprocessor system is depicted comprising main memory, 3 CPUs and their associated caches. For simplicity, main memory contains 4 locations a0, a1, a2 & a3. The caches are direct mapped and contain two sets - addresses a0 & a2 map to set 0 and a1 & a3 to set 1. NB: in order to simplify this animation, the size of a cache
line and that of a CPU read/write operation are identical. On a write miss,
however, the CPU reads memory even though it will completely overwrite it as
this behaviour mirrors that of real caches where the size of the cache line
will usually be larger than that of a CPU read/write operation. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Each CPU contains buttons which initiate read or write transactions on the specified memory location. A "CPU write" writes an incrementing value (initially 1) to "memory". The idea is to press the buttons and see if you can follow the actions and state transitions which occur. It is possible to introduce bugs into the animation by pressing the "bug free" button in the bottom right hand corner. See if you can find out just exactly what the bugs are! The direction of the traffic on the address and data busses are indicated by blue & red arrows respectively. The cache lines and memory location involved in the transaction are coloured green. Stale memory locations are coloured gray. A cache line can be in one of 4 states. ~Shared & ~Dirty: cache line present in this cache ONLY and cache line identical to copy in memory. ~Shared & Dirty: cache line present in this cache ONLY, but copy in memory out of date (stale). Shared & ~Dirty: cache line in this cache and possibly other caches as well, all copies identical to copy in memory. Shared & Dirty: cache line in this cache and possibly other caches as well, but memory copy out of date (stale). Writes to Shared cache lines are write through whereas writes to ~Shared cache lines are write-back. If a cache observes a bus transaction which refers to a cache line which it, itself, contains, then it asserts the SHARED bus line. Firefly is an update cache coherency protocol. Here's the state transition diagram for a cache line:
The animation can be reset by pressing the reset button in the bottom right hand corner and this help information is displayed by pressing the help button. Sample sequences to try Sequence 1 [from Reset]
Sequence 2 [from Reset]
|