如何将虚拟地址转换为物理地址?

时间:2015-09-17 17:19:17

标签: operating-system virtual-address-space

如果我有一个虚拟地址:0xF3557100,我如何将其转换为物理地址以及偏移,页面目录和页面表的值是什么?

该地址的PTE(页表条目)的值为0x87124053

日Thnx

2 个答案:

答案 0 :(得分:0)

可悲的是,你所要求的是依赖于系统的。您需要知道要开始的页面大小。

在最简单的情况下,对应于页面大小的最低位是偏移量,剩余的高位位指定页表条目。

你说你有页面表条目的值。然后,您需要知道页表条目的结构。其中一部分将指示物理地址。其他部分将定义页面属性。

简而言之,我们需要了解更多信息。

答案 1 :(得分:0)

通常,根据此信息,您无法将VA转换为PA。 每个体系结构都有一些PAGE_SHIFT的常量值。由于您的地址是32位,因此大多数此类架构具有12位PAGE_SHIFT值。 此值确定偏移值,因此您的偏移值为12位。这也意味着您的页面大小为4096字节。即使一个体系结构可以为PAGE_SHIFT支持多个值,我们采用12位偏移的情况,这通常是大多数系统中的默认值,使得页面为4096

PTE包含页面帧/编号的地址以及其他状态和保护信息.PTE中的低12位用于状态和保护,而其他20位用于PPN。作为原则,虚拟帧号被映射到物理帧号,并且两者中的偏移量相同。所以从PTE中排除最低12位,并从va附加12个最低位。

因此从va偏移为0x100,因此物理地址为0x87124100 根据10-10-12规则(这个划分没有一般规则)

offset = 12位

page table = page directory = 10 bits

现在您可以轻松地从给定地址计算相关位值。

1111001101 0101010111 000100000000

页面目录偏移= 1111001101

页表偏移= 0101010111

页面偏移= 000100000000