Skip to main content


Page tables for 64-bit computer systems


Kevin Elphinstone, Gernot Heiser and Jochen Liedtke

School of Computer Science and Engineering
The University of New South Wales
Sydney 2052

Systems Architecture Group
University of Karlsruhe


Most modern wide-address computer architecture do not prescribe a page table format, but instead feature a software-loaded TLB, which gives the operating system complete flexibility in the implementation of page tables. Such flexibility is necessary, as to date no single page table format has been established to perform best under all loads. With the recent trend to kernelised operating systems, which rely heavily on mapping operations for fast data movement across address-spaces, demands on page tables become more varied, and hence less easy to satisfy with a single structure.

This paper examines the issue of page tables suitable for 64-bit systems, particularly systems based on microkernels. We have implemented a number of candidate page table structures in a fast microkernel and have instrumented the kernel's TLB miss handlers. We have then measured the kernel's performance under a variety of benchmarks, simulating loads imposed by traditional compact address spaces (typical for UNIX systems) as well as the sparse address spaces (typical for microkernel-based systems). The results show that guarded page tables, together with a software TLB cache, do not perform significantly worse than any of the other structures, and clearly outperform the other structures where the address space is used very sparsely.

BibTeX Entry

    publisher        = {Springer},
    author           = {Kevin Elphinstone and Gernot Heiser and Jochen Liedtke},
    month            = {jan},
    note             = {Available from publications page at \url{}},
    year             = {1999},
    title            = {Page Tables for 64-bit Computer Systems},
    booktitle        = {Proceedings of the 4th Australasian Computer Architecture Conference},
    pages            = {211-226},
    address          = {Auckland, New Zealand}