Virtual memory dates back to 1962, when it was used in the Atlas computer. Initially it gave assembly language programmers and compilers a large virtual or logical address space whose addresses were translated into either addresses for a small physical memory or disk locations. In effect, the physical memory served as a cache local store with a disk used as a lower-level store.
In modern systems, physical memory is large enough that virtual memory is not often needed to get a large address space. However, it provides additional benefits for operating system management of multiple processes.
The most important consideration in the design of virtual memory is the huge difference between main memory access times (~40 ns) and disk access times (~4 ms). Two consequences of this difference are:
A significant part of disk access is waiting for the desired data to rotate underneath the read/write heads, which averages one half of the disk rotation time. Once that has happened, a large amount of data can be read in a relatively short time. Thus the difference between access times for large block and small blocks is small.
Although virtual memory is now viewed as a cache mechanism, for a variety of reasons virtual memory terminology is different from cache terminology.
The initial purpose of virtual memory was creating a transparent view of a large address space supported by a small physical memory. Today that is not as important as advantages in process and memory management by the operating system. For example, today there are desktop systems with 32-bit addressing and 4GB of main memory. Unless addresses are made larger than 32 bits, virtual memory cannot increase the logical address space beyond 4GB.
But virtual memory is still thriving.