MMU
An MMU, an acronym for "Memory Management Unit", is responsible for such miracles as Virtual Memory (also called Swap memory) on PCs.
Traditionally, applications allocated memory in blocks from the OS, or DPMI server, and were returned Pointers to these memory blocks. These "pointers" were then used as parameters in assembler instructions dealing with memory. This worked very well, for the pointers were easy to manage (they pointed to the start "address" of the block in physical memory) as the CPU was able to load data directly from the memory by providing it with this address.
Problems arose when more demanding software was released which required more memory, sometimes (or often) requiring more memory than the computer had installed. Someone came up with the idea of using disk space as pretend memory, to store memory which wasn't being used, but there were major pitfalls: if a part of memory was actually being stored on disk, then the "pointers" to this memory would no longer be addresses into physical RAM. When the CPU was given one of these "disk pointers", it was confused: CPUs cannot access the hard drive directly, so it had no way to get this information!
Of course, applications could ask the OS to make sure that a pointer was actually in memory before every memory access, but this isn't practical because of how slow it would have been: even loading a 320x200 bitmap, for example, would require asking the OS 64,000 queries: even the fastest CPU today would slow to a crawl if it tried this, yet alone the 386 machines of yesteryear!
So, if you couldn't just feed the pointers to the CPU, and you couldn't ask the OS if the pointers were valid, what could you do? The only way to implement Virtual Memory at an acceptable speed was to make a new, intelligent chip whose sole purpose was to deal with this memory (this was invented in a similar fashion to math problems and the FPU solution). The MMU was born, and integrated into the main CPU on 386 and higher CPUs. From now on, whenever the CPU recieved a pointer, it passed it quickly through the MMU: if it was a pointer to physical memory, the MMU let it pass straight by. If it pointed to disk, the MMU waited while the OS loaded the data from disk, and then passed it to the CPU, which was unaware that anything unusual had happened.
The MMU is also responsible for Memory Protection, thanks to it's ability to inspect every pointer before it goes to the CPU.