2

通常,在32位CPU上,每个页表项都是4个字节长,但是该大小也可以变化。一个32位条目可以指向一个 2^32物理页面帧。如果帧大小为4 KB(2^12),则带有4字节条目的系统 可以寻址2^44字节(或16 TB)的物理内存。我们在这里应该注意, 分页内存系统中的物理内存大小与 进程的最大逻辑大小不同。有人可以解释这个关于操作系统中的分页吗?

分页如何使逻辑内存空间超过物理内存空间? 32位CPU中的帧总数是否等于2 ^(32-12)= 2^20个帧数而不是2^32个帧数?如果是这样,是不是一个具有4字节条目能够寻址(2^20)*(2^12)个字节的存储器的系统?

+0

内存中的帧数是'memory-size \ page-size'。如果你有一个4GB的主内存,那么你将拥有'2^20'帧。 除此之外,你的问题太广泛了。 –

回答

2

该文本并不十分清楚。我会尽力清除它。

当翻译的虚拟地址转换成物理上的,低位的固定数量没有得到翻译:

+---------------------+----------+ 
| High bits  | Low bits | 
+---------------------+----------+ 
     |     | 
     |     | 
     V     | 
    [Page tables]   | 
     |     | 
     |     | 
     V     V 
+---------------------+----------+ 
|  Physical address  | 
+---------------------+----------+ 

低位数是联系在一起的页面大小:如果我们假设4KiB页面,然后较低的12位是固定的并且不被翻译。我们还假设虚拟地址空间是32位。

如果一个页表项是32位长,它可以给32位用作物理地址的高位部分。
因此,当查看页表时,我们有20(32 - 12)位输入和32位输出。
由于固定部分有额外的12位,这给出了32 + 12 = 44位的物理地址。

更新的图:

 <---------- 32 bits -----------> 
     <---- 20 bit -------> <- 12 b -> 
     +---------------------+----------+ 
     | High bits  | Low bits | 
     +---------------------+----------+ 
       |     | 
       | 20 bit   | 
       V     | 
     [Page tables]   | 
       |     | 
       | 32 bit   | 
       V     V 
+----------------------------+----------+ 
|   Physical address   | 
+----------------------------+----------+ 
<-------- 32 bits ---------> <- 12 b -> 
<------------- 44 bits ---------------> 

这不是一个真正的44位寻址然而,指针仍然是32位。
应用程序只能直接访问4GiB内存,但操作系统可以将 应用程序映射到第一个4GiB,另一个映射到第二个4GiB等等。

这与PAE在x86上的工作方式类似。

假设所有的页表项都用来给物理地址的高位是不真实的。
一些位用于设置帧的属性:缓存能力,访问权限,映射状态等。

物理地址的高位称为页框
页框的数量由页表项的结构决定,而不是由虚拟地址空间的大小(或物理地址空间的大小)决定。
如果一个页表项有50位的帧号,那么有2个帧。
物理地址的下部称为页面偏移量并且它由页面大小(或帧大小,它们在设计上相等)确定。

相关问题