I am trying to understand how multi-level page table saves memory. As per my understanding, Multi-level page table in total consumes more memory than single-level page table.
Example : Consider a memory system with page size 64KB and 32-bit processor. Each entry in the page table is 4 Bytes.
Single-level Page Table : 16 (2^16 = 64KB) bits are required to represent page offset. So rest 16-bits are used to index into page table. So
*Size of page table = 2^16(# of pages) * 4 Bytes(Size of each page table entry) = 2^18 Bytes*
Multi-level Page Table : In case of two-level page table, lets use first 10-most significant bits to index into first level page table. Next 10-bits to index into second level page table, which has the page number to frame number mappings. Rest 12-bits represents the page offset.
Size of a second-level page table = 2^10 (# of entries) * 4 bytes(size of each entry) = 4 KB
Total size of all the second-level page tables = 2^10 (# of second-level page tables) * 4KB (Size of each second-level page table) = 4 MB
Size of first-level page table = 2^10(# of entries) * (10/8) Bytes (Size of each entry) = 1.25 KB
Total memory required to store first and second level page tables = 4 MB + 1.25 KB
So we need more memory to store multi-level page tables.
If this is the case, How does multi-level page tables save memory space ?
Each entry in the page table is 4 Bytes. Multi-level Page Table : In case of two-level page table, lets use first 10-most significant bits to index into first level page table. Next 10-bits to index into second level page table, which has the page number to frame number mappings.
Multilevel Paging is a paging scheme that consists of two or more levels of page tables in a hierarchical manner. It is also known as hierarchical paging. The entries of the level 1 page table are pointers to a level 2 page table and entries of the level 2 page tables are pointers to a level 3 page table and so on.
The advantage of a multilevel (hierarchical) page table over a single-level one is: (a) Page number lookups are faster. (b) The page table can consume much less space if there are large regions of unused memory. (c) Each segment (code, data, stack) can be managed separately.
In x86 systems, page tables are structures used by the CPU, but they are too large to be hold in registers, so they are kept in RAM. Any process has a memory map in which there is two big zones: user space and kernel space. Kernel space is the same space for all process. User space is private to that process.
Space required to access any data is 2^20 * 4bytes = 4MB
In the 2 level case that you discussed you need 1st level pagetable and then 1 of the 2^10 pagetables in second level. So, 1st level size = 2^10 * 4bytes = 4KB 2nd level we need only 1 among the 2^10 pagetables = so size is 2^10 * 4bytes = 4KB
Total size required is now : 4KB + 4KB = 8KB.
Final comparision is 4MB vs 8KB .
Here is a primary advantage of multilevel page tables:
First, chop up the page table into page-sized units; then, if an entire page of page-table entries (PTEs) is invalid, don’t allocate that page of the page table at all.
Source. (Section 20.3)
Thus the amount of memory needed for the page table is not dictated by the size of the address space, but by the amount of memory that the process is using.
In addition, the page of page table entries can itself be paged if physical memory gets full - only the page directory needs be always present in memory.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With