Virtual memory is a technique which realized an application program the idea that it has contiguous working memory (an address space), whereas in fact it may be physically fragmented and can even overflow on to disk storage.
Virtual memory provides 2 main functions:
1. Each process sees one contiguous block of free memory upon launch. Fragmentation remains hidden.
2. Each process has its own address space, thereby not needed to be relocated nor need to use relative addressing mode.
All of the implementations (Excluding emulators) need hardware support. It is typically in the form of a Memory Management Unit make into the CPU.
The systems, which is use virtual memory technique make programming of large applications simpler and use real physical memory (for example: RAM) more efficiently than those without virtual memory. Virtual memory differs notably from memory virtualization in that virtual memory permit resources to be virtualized as memory for a particular system, as opposed to a big pool of memory being virtualized as smaller pools for various different systems.
Note that "virtual memory" is more than just "utilizing disk space to extend physical memory size" - that is just the extension of the memory hierarchy to include hard disk drives. Extending memory to disk is a typical consequence of utilizing virtual memory techniques, but could be complete by other means such as overlays or swapping programs and their data fully out to disk whereas they are inactive. Definition of "virtual memory" is based on redefining the address space with a contiguous virtual memory addresses to "trick" programs into thinking they are utilizing large blocks of contiguous addresses.