SPIN manages three kinds of memory, traced heap, untraced heap and user virtual memory. The traced heap and untraced heap are used by spincore and in-kernel extensions. (the difference between traced heap and untraced heap is that the former is garbage collected, but the latter is not. The traced heap is used by Modula-3 codes, and the untraced heap is used primarily by C codes). User virtual memory is used by user space applications, but it may be used by extensions to store bulk data, eg, by the file cache manager. This section describes the management of user virtual memory. Ask other people(i.e., Pardy) about the traced and the untraced heaps.
User virtual memory is managed by the cooperation of Spincore and several extensions, including vmcore.
Spincore manages two types of objects, PhysAddr.T and
Translation.T. They are abstractions for a page frame and
an address space(pmap), respectively. Spincore supports allocation
and deallocation of PhysAddr.Ts, and mapping and unmapping of
PhysAddr.Ts onto Translation.Ts.
The
vmcore
extension provides MemoryObject.T, the memory
object abstraction similar(but not same) to that provided by Mach.
There are two other extensions that subtype
MemoryObject.T to provide some standard memory management
facilities. The default
pager extension implements a subtype of
MemoryObject.T that swaps pages to disks. The inode pager extension caches
file contents on memory objects.