7 lessons
Why can't we just build one giant, fast memory?
Fast memory is expensive and small. Cheap memory is huge and slow. The memory hierarchy is the compromise every computer makes, and locality is the reason the compromise works.
How cache actually works: blocks, tags and the address split
A cache can't remember an infinite number of addresses, so it has to be clever about which few bytes it holds, and how it instantly checks whether it's holding what you asked for.
What happens when you write to cache, and what gets evicted?
Reading from cache is only half the story. Writing raises a whole new question - when does main memory find out? - and a full cache needs a rule for deciding what to throw away.
Main memory: how RAM stores a bit as a leaking bucket of charge
RAM is not just a bigger, slower register file. It's built on a totally different, much simpler cell design - one with a genuinely strange problem that needs fixing every few milliseconds.
Memory interleaving, and the read-only memory your computer boots from
One memory module can only serve one request at a time. Here's how splitting memory into interleaved banks lets several requests overlap, plus everything worth knowing about ROM.
Secondary storage: why your files survive being turned off
RAM forgets everything the instant power is lost. Secondary storage is built specifically not to - here's how a spinning disk and a solid-state drive each pull that off, completely differently.
Virtual memory: giving every program its own private, pretend address space
Every program thinks it owns all of memory, starting from address zero. It doesn't. Here's the layer of indirection that makes that comfortable illusion possible.