Base and bounds

In computing base and bounds refers to a simple form of virtual memory where access to computer memory is controlled by one or a small number of sets of processor registers called base and bounds registers.

In its simplest form each user process is assigned a single contiguous segment of main memory. The operating system loads the physical address of this segment into a base register and its size into a bound register. Virtual addresses seen by the program are added to the contents of the base register to generate the physical address. The address is checked against the contents of the bounds register to prevent a process from accessing memory beyond its assigned segment.

The operating system is not constrained by the hardware and can access all of physical memory.

This technique protects memory used by one process against access or modification by another. By itself it does not protect memory from erroneous access by the owning process. It also allows programs to be easily relocated in memory, since only the base and bounds registers have to be modified when the program is moved.

Some computer systems extended this mechanism to multiple segments, such as the i bank and d bank for instructions and data on the UNIVAC 1100 series computers or the separation of memory on the DEC PDP-10 system into a read/write "low" segment for the user process and a read-only "high" segment for sharable code.

Apple Computer's MultiFinder of 1987 is a more modern use of this technique. Programs shipped with a requested bounds figure stored in the resource fork and the operating system attempted to move the program to an area in memory with that amount free. The user could also adjust this figure using the Get Info dialog, typically to increase the amount of memory for programs with large needs, like Photoshop.

Segmented virtual memory is a further generalization of this mechanism to a large number of segments. Usually the segment table is kept in memory rather than registers.