1

如果虚拟内存有 32 位地址,是否有 2^32 个条目,或者总条目的大小是 2^32 字节?或两者?

我问的原因是因为我认为它只意味着 2^32 个整数。

完成以下问题后,我不确定:

  1. 假设一台机器有 48 位虚拟地址和 32 位物理地址。如果页面是 4KiB,如果它只有一个级别,那么页表中有多少条目?

解决方案:2^48/2^32 = 2^16 页。

但是,条目数/页面大小!= 页数。

总条目大小/页面大小=页数。

所以,我想知道 32 位地址是否意味着有 2^32 个条目,或者总条目是否等于 2^32 个字节或两者兼而有之。

4

1 回答 1

1

济南,我想你对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
于 2016-12-12T09:13:49.597 回答