The end result is that your virtual memory is much larger but not too much slower than real memory. Fortunately, memory reads and writes that are close together in time also tend to cluster in memory space. If memory references jumped around virtual space at random, you'd typically have to do a disk read and write for each new reference and virtual memory would be as slow as a disk. But because programs do actually exhibit strong locality, your operating system can do relatively few swaps per reference. The virtual-memory system grabs disk blocks into its working set as it needs them.
Virtual memory is the first link in the bridge between disk and processor speeds.
But there is still a major gap between the speed of physical main memory and the speed at which a processor can access its register memory. The external and internal caches address this, using a technique similar to virtual memory as I've described it. Just as the physical main memory behaves like a set of windows or caches on the disk's swap area, the external cache acts as windows on main memory. But we're not done. The internal cache gives us the final step-up in effective speed by caching portions of the external cache.