From: Richard Jackson (richja_at_expedia.com)
Date: Wed Feb 11 2004 - 14:33:16 PST
This 1982 paper by Levy and Lipman documents the implementation of the
VAX/VMS virtual memory system on the VAX-11 minicomputer. This paper
offers a historical reference, as well as general best practices for
building a virtual memory system.
The paper includes the following sections: 1)overview of VAX-11
addressing, 3) access space use in VAX/VMS, 3) memory management system,
4) executive services.
The first section describes the addressing, which is comprised of a
32-bit virtual address space, with 512-byte pages. The upper 2 bits are
reserved for system use. The lower bits are split into P0 and P1
regions, which start at the extremes and grow towards each other as
needed. A page table exists for each of P0 and P1.
The second section discusses how the address space is actually used by
each process. The system space contains vector pointers to service
routines, and the actual code and data for these routines. When
processes call these routines, they do not access the data directly, but
instead use protected interfaces. The P0 region is used to store
program data, and the P1 region is used to store process specific
information, such as the command interpreter.
The third section was the main portion of the paper. This section
discusses the various design decisions that were used in this system.
The main components discussed were the pager and swapper. The purpose
of the pager is to handle page faults by loading data into memory. The
interesting part was that, when a page fault happens and no memory is
available, the calling process has to give up existing memory to handle
the new data. Therefore, one process could never consume all of the
machine resources. Another key consideration is that the system places
blocks removed from memory on either a free or modified list, prior to
writing to persistent storage. In cases where this data is referenced
again, the data can be read from these lists, as a sort of local cache.
The idea seemed to be the reason for the system's success, even though
it employed only a simple FIFO algorithm instead of LRU. Clustering was
also discussed, which essentially meant reading multiple pages at once,
as a sort of pre-fetching. This concept reduces the amount of disk
accesses, and attempts to pipeline requests where possible. Last, the
swapper is discussed, which is responsible for remove entire processes
from memory and moving them to the backing store. This differs from the
pager, which only removes pages, not entire processes.
Finally, the paper discusses some of the support for executive services,
for cases that an application wants more control over the virtual memory
system. For example, a process can request that all pages are locked
in memory, and cannot be swapped.
The problems I saw were: 1) process-local replacement may not allow the
best use of resources in some cases, 2) the swapper may encounter cases
where a swapped process can never be reloaded, due to a low memory
condition.
The three key ideas from this paper are: 1) caching in free/modified
lists, 2) clustering, 3) process-local replacement, as discussed above.
Each of these ideas contributes to the success of the VAX/VMS virtual
memory system, and should be considered when building similar systems.
This archive was generated by hypermail 2.1.6 : Wed Feb 11 2004 - 14:33:32 PST