Machine-independent VM: Mach Description of Mach * Mach: a Unix-compatible OS intended for distributed environments. * Primitive elements in Mach: tasks, threads, ports, messages, memory objects. Provide location-independence. * Mach VM implementation separated into machine-dependent and machine-independent parts. Most of functionality is in machine-independent section. * Implementation's data structures: resident page table, address map, memory object, pmap. Only pmap is machine-dependent. * Features: sparse address spaces, memory-mapped files, more. What to take away * Kernel VM code can be portably implemented with a minimum of machine-dependent code. This allows easy porting, and also improves performance since code isn't targeted for just one canonical processor. * Shared memory uses copy-on-write with shadow pages to reduce memory footprint. Some additional implementation complexity ensues. * User-level pagers are possible for advanced applications and sophisticated requirements. * Efficient VM optimizations can make message-based kernels more reasonable in terms of performance. * The concept of memory objects & associated user-mode pagers (e.g. the idea that physical memory is just a cache for virtual memory) enables distributed computing and other nifty functionality. * Performance is still good-- at least as good as Unix-- or so they claim. Their benchmarks are not very comprehensive or convincing. Criticisms * More discussion and benchmarks of the distributed computing scenario would be nice. * The paper made a big point out of how the Mach VM implementation was mostly machine-independent, and claimed that this ``makes possible an unbiased examination of the pros and cons of various hardware memory management schemes''. However, they never did much of a comparison.