Linux Page Tables
Figure: Three Level Page Tables
Linux assumes that there are three levels of page tables.
Each Page Table contains the page frame number of the next level of Page Table. The
Figure above shows how a virtual address can
be broken into a number of fields; each field providing an offset into a
particular Page Table.
To translate a virtual address into a physical one, the processor must take the
contents of each level field, convert it into an offset into the physical
page containing the Page Table and read the page frame number of the next level of Page
This is repeated three times until the page frame number of the physical page
containing the virtual address is found.
Now the final field in the virtual address, the byte offset, is used to
find the data inside the page.
Each platform that Linux runs on must provide translation macros that allow
the kernel to traverse the page tables for a particular process.
This way, the kernel does not need to know the format of the page table entries or
how they are arranged.
This is so successful that Linux uses the same page table manipulation code for
the Alpha processor, which has three levels of page tables, and for Intel x86 processors,
which have two levels of page tables.