Use main memory as a “cache” for secondary (disk) storage
Allows efficient and safe sharing of memory among multiple programs
Provides the ability to easily run programs larger than the size of physical memory
Simplifies loading a program for execution by providing for code relocation (i.e., the code can be loaded anywhere in main memory)