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.