虚拟内存

处理器的虚拟内存子系统为每个进程实现了虚拟地址空间,让每个进程看起来似乎是独立的。细腻地址空间是由CPU的内存单元(MMU)实现的。OS必须填充页表数据结构,但大多数CPU自己做了剩下的工作。有MMU进行的地址翻译的输入地址是虚拟地址。虚拟地址在32为系统中是32位的数值,在64位系统中是64为的数值。在一些系统,例如x86和x86-64,使用的地址实际上包含了零一个层次的间接寻址:这些数据使用分段,这些分段只是简单的给逻辑地址加上位移。这就关系到内存处理性能的问题了。

最简单的地址转换

由虚拟地址到物理地址的转换。MMU可以在逐页的基础上重新映射地址。就像地址缓存排列的时候,虚拟地址被分割为不同的部分。这些部分被用来做多个表的索引,而这些表是被用来创建最终物理地址用的。最简单的模型是只有一级表。高字节部分是用来选择一个页目录的条目;那个目录中的每个地址可以被OS分别设置。页目录条目决定了物理内存页的地址;页面中可以有不止一个条目指向同样的物理地址。完整的内存物理地址是由页目录获得的页地址和虚拟地址低字节部分合并起来决定的。页目录条目还包含一些附加的页面信息,如访问权限。

页目录的数据结构存储在内存中。OS必须分配连续的物理内存,并将这个地址范围的基地址存入一个特殊的寄存器。然后虚拟地址的适当的位被用来作为页目录的索引,这个页目录事实上是目录条目的列表。

作为一个具体的例子,这是 x86机器4MB分页设计。虚拟地址的位移部分是22位大小,足以定位一个4M页内的每一个字节。虚拟地址中剩下的10位指定页目录中1024个条目的一个。每个条目包括一个10位的4M页内的基地址,它与位移结合起来形成了一个完整的32位地址。

 

 

 

 

posted @ 2013-04-19 10:44  猪兜兜  阅读(279)  评论(0)    收藏  举报