Virtual memory is an essential component of isolation (protection) and flexibility in today's desktop and server operating systems. However, current approaches to virtual memory are rather inflexible and wasteful. Small pages (typical 4kB in size) in large 64-bit address spaces require large page tables and, in turn, sparsely populated address spaces can lead to page tables with mostly empty entries. Accordingly, there is a trend towards the use of larger page sizes (e.g., 1 MB) which can be even more wasteful. With modern object-oriented systems, developers would benefit from approaches that can protect single objects on a fine-grained basis, quite the opposite of current trends.
Several approaches have been invented to provide fine-grained isolation. All these approaches require knowledge from the software side about object sizes and allocation patterns and support from the hardware side to actually protect memory ranges. Early pure software-based approaches, such as overlays [1] in address-space constrained systems and object-based virtual memory management in Smalltalk [2] required delicate handling on the software side and had significant performance overheads. More recent approaches, such as Liedtke's guarded page tables [3] have been implemented on architectures such as MIPS and Alpha that perform page-table walks in software in case of a page fault [4,5]. A refined approach to guarded page tables are variable radix page tables [6] and the memory management systen in Mondrian [7]. A general overview of different approaches to memory management can be found in [8]. Modern approaches to compiler-codesigned virtual memory are described in [9].
Virtual memory is an essential, performance-critical part of modern computer systems. Implementing virtual memory functinality in hardware is performant, but requires simple structures that are not well suited to the requirement of modern software systems, whereas a completely software-based implementation suffers from bad performance. Approaches to handle virtual memory with a joint hard- and software approach can provide good compromises between performance and granularity here.