This page is currently work in progress and will be updated over the following weeks.

The basic concept involved in a radix page table is to split the virtual address into a number of fields. The lowest field is an index into the actual memory page, but the other fields are used as indices into the different levels of the page table which is used to find the desired page frame.

Linux currently uses a three level page table. The address is divided into four fields. The first field indexes the top level of the pagetable to give a pointer to a middle level directory block. The next address field indexes the middle level directory to give a pointer to a leaf node containing PTEs. The 3rd field from the address indexes the block of PTEs to give a page frame in memory, and the remaining bits index into the page frame to give the desired byte.

Under Linux the page table index fields are the same size. A variable radix page table format can divide the address into different numbers of fields in different parts of the page table, and make those fields different widths. One of the effects of this is to allow the page table to be different depths in different places e.g., a part of the page table mapping to superpages may not need the full three levels needed by the current page table to map to base sized page frames.

Associated Links

IA64wiki: VariableRadixPageTables (last edited 2009-12-10 03:14:00 by localhost)

Gelato@UNSW is sponsored by
the University of New South Wales National ICT Australia The Gelato Federation Hewlett-Packard Company Australian Research Council
Please contact us with any questions or comments.