Basic problem: Want to place programs and data in physical memory so that we can find them again.
MemoryLayout: Where do we put things?
Address translation and Paging: How do we map logical addresses seen by processes to physical addresses seen by the memory hardware?
MemoryProtection: How do we keep processes from stepping on each other?
Caching and VirtualMemory: How do we collapse a multilevel memory hierarchy (L1 cache, L2 cache, DRAM, secondary storage, tertiary storage) to a single virtual address space?