济南,我想你对linux内存相关的东西很困惑。
你的问题:
如果虚拟内存有 32 位地址,是否有 2^32 个条目,或者总条目的大小是 2^32 字节?或两者?
页表项不仅仅取决于虚拟地址空间,页大小和物理内存也需要计算项。
我以你为例:-
假设一台机器有 48 位虚拟地址和 32 位物理地址。如果页面是 4KiB,如果它只有一个级别,那么页表中有多少条目?
页表中的条目数将为 = 2^36。
页面条目用于获取物理内存的地址。在这里,我们假设正在发生单级分页。因此生成的页表将包含虚拟地址空间的所有页的条目。
Number of entries in page table =
(virtual address space size)/(page size)
Virtual address = 48 Bit
Page size is = 12 bit ((2^12) is equal to 4KB).
Using above formula we can say that there will be 2^(48-12) = 2^36 entries in page table.
页表大小
寻址 32 位物理内存所需的位数 = 32。因此物理内存中将有 2^(32-12) = 2^20 页帧。而页表需要存储所有这 2^20 个页框的地址。因此,每个页表条目将包含页框的 32 位地址。由于内存是字节可寻址的。所以我们认为每个页表条目是 32 位,即 4 字节长。
Size of page table =
(total number of page table entries) *(size of a page table entry)
= (2^36 *4) = 256GB