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

Operating system 如何将虚拟地址转换为物理地址?,operating-system,virtual-address-space,Operating System,Virtual Address Space,如果我有一个虚拟地址:0xF3557100,如何将其转换为物理地址,以及偏移量、页面目录和页面表的值是多少 该地址的PTE(页表条目)的值为0x87124053 thnx遗憾的是,您所要求的是系统相关的。首先,您需要知道页面的大小 在最简单的情况下,与页面大小相对应的最低阶位是偏移量,其余的高阶位指定页面表条目 您说您拥有页面表条目的值。然后,您需要知道页面表条目的结构。其中的某些部分将指示物理地址。其他部分将定义页面属性 简而言之,我们需要知道更多的信息。一般来说,从这些信息中,你无法将VA翻

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

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


thnx

遗憾的是,您所要求的是系统相关的。首先,您需要知道页面的大小

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

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


简而言之,我们需要知道更多的信息。

一般来说,从这些信息中,你无法将VA翻译成PA。 每种体系结构都有一些用于页面移动的常量值。由于您的地址是32位的,大多数这样的体系结构都有12位的PAGE_移位值。 此值确定偏移量值,因此偏移量值为12位。这也意味着您的页面大小为4096字节。即使一个体系结构可以支持一个以上的页移位值,但我们采用12位偏移量的情况,这通常是大多数生成4096页的系统的默认值

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

所以从va的偏移量是0x100,所以物理地址是0x87124100 根据10-10-12规则(本部分没有一般规则)

偏移量=12位

页面表=页面目录=10位

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

1111001101 0101010111 000100000000

页面目录偏移量=1111001101

页表偏移量=0101010111


PageOffset=00010000000

它是一个32位的英特尔体系结构,我想它应该是4kB的页面大小。它是一个英特尔IA32,结构如下所示:0(p)-存在;1(R/W)--读/写;2(美国)——用户/主管;3(PWT)--页级直写;4(PCD)——页面级缓存禁用;5(A)--查阅;6(D)---脏;7(帕特)--;8(G)--;11:9()——被忽略;31:12()----物理添加。此条目引用的4-kByte页面的偏移量
和我的十进制值应如下所示:页面目录偏移量=0x3CD页面表偏移量=0x157页面偏移量=0x100还是我错了?在此计算中,无需知道状态和保护位的值,但您现在的理解是正确的,从PTE的偏移量到PTE结构我可以找出:例如,如果页面在内存中,通过12的第一位(0000 0101 0011=053)。第一位是1,表示页面存在于内存中