Virtual memory is used to provide the illusion of either having more memory than you really do (by multiplexing multiple virtual addresses onto a smaller set of physical addresses) or having more processors than you really do (by time-slicing the processor and providing each time-sliced process with a separate address space).

The address space available to a process running in a system with a memory management unit (MMU). The virtual address space is divided into pages. Each physical address output by the CPU is split into a virtual page number (the most significant bits) and an offset within the page (the n least significant bits). Each page thus contains 2n bytes (or whatever the unit of addressing is). The offset is left unchanged and the virtual page number which is mapped by the MMU to a physical page number. This is recombined with the offset to give a physical address - a location in physical memory (RAM).

Virtual memory is usually much larger than physical memory. Paging allows the excess to be stored on hard disk and copied to RAM as required. This makes it possible to run programs for which the total code plus data size is greater than the amount of available RAM. This is known as "demand paged virtual memory". A page is copied from disk to RAM when an attempt is made to access it and it is not already present. This paging is performed automatically by collaboration between the CPU, the MMU and the operating system kernel, and the program is unaware of it.

The performance of a program will depend dramatically on how its memory access pattern interacts with the paging scheme. If accesses exhibit a lot of locality of reference, i.e. each access tends to be close to previous accesses, the performance will be better than if accesses are randomly distributed over the program's address space thus requiring more paging.

In a multitasking system, physical memory may contain pages belonging to several programs. Without demand paging, an OS would need to allocate physical memory for the whole of every active program and its data. Such a system might still use an MMU so that each program could be located at the same virtual address and not require runtime relocation. Thus, virtual addressing does not necessarily imply the existence of virtual memory. Similarly, a multitasking system might load the whole program and its data into physical memory when it is to be executed and copy it all out to disk when its timeslice expires. Such swapping does not imply virtual memory and is less efficient than paging. Some application programs implement virtual memory wholly in software, by translating every virtual memory access into a file access, but efficient virtual memory requires hardware and operating system support.

Virtual Memory

If it's there and you can see it -- it's real

If it's not there and you can see it -- it's virtual

If it's there and you can't see it -- it's transparent

If it's not there and you can't see it -- you erased it!

IBM poster explaining virtual memory, circa 1978

Log in or register to write something here or to contact authors.