将虚拟地址转换为物理地址
Posted
技术标签:
【中文标题】将虚拟地址转换为物理地址【英文标题】:translate virtual address to physical address 【发布时间】:2017-03-10 14:56:40 【问题描述】:以下页表适用于具有 16 位虚拟和物理地址以及 4,096 字节页面的系统。当页面被引用时,引用位设置为 1。线程定期将参考位的所有值清零。所有数字均以十进制提供。
我想将以下虚拟地址(十六进制)转换为等效的物理地址。我还想为页表中的相应条目设置参考位。
•0xE12C
•0x3A9D
•0xA9D9
•0x7001
•0xACA1
我知道答案是,但我想知道如何才能获得这些答案:
0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
我找到并尝试了This,但对我没有多大帮助。
【问题讨论】:
【参考方案1】:要将虚拟地址转换为物理地址(仅应用于此作业问题),我们需要知道2 事情:
页面大小 虚拟地址的位数在此示例中:16 位系统,4KB 页面大小 和物理内存大小 为 64KB。
首先,我们需要确定作为页内偏移量所需的位数。 log2(Page-Size)
= log2(4096)
= 12 位用于偏移
在虚拟地址的 16 位中,12 位用于偏移,这意味着每个进程都有2^4 = 16
虚拟页。页表中的每个条目都存储了容纳该页的相应框架。例如:
现在让我们翻译!
首先为了方便工作,让我们将0xE12C
转换为binary
。
0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.
让我们将它连接到 12 个偏移位
Answer: (0011 0001 0010 1100) = 0x312C
另一个例子:0x3A9D
0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
【讨论】:
【参考方案2】:假设虚拟地址为 16 位长。因此,虚拟地址空间中有 2^16 个地址。 页面大小为 4 KB(一个页面中有 4K (4 * (2 ^ 10) ) 个地址),因此页面数将为 ( 2^16 ) / ( 2 ^ 12 ) = 2 ^ 4。 要寻址每一页,需要 4 位。 虚拟地址中最重要的 4 位将表示被引用的页码,其余 12 位将是页偏移量。
要记住的一件事是页面大小(在虚拟地址空间中)始终与主存储器中的帧大小相同。因此,物理地址的最后 12 位将与虚拟地址的最后 12 位保持一致。
要获取主存储器中的帧地址,只需使用前 4 位。 示例:考虑虚拟地址 0xACA1 这里 ACA1 中的 A 表示页号(10),对应的帧号为 5(0101),因此生成的物理地址将是 → 0x5CA1。
【讨论】:
【参考方案3】:为了帮助您解决这个问题,我们需要正确填写我们的详细信息:
-
16 位虚拟地址空间 = 2^16 = 65,536 个地址空间
16 位物理地址空间 = 2^16 = 65,536 个地址空间
4096 字节页面大小决定偏移量,即 Log(4096) / Log (2) = 12 位。这意味着,页面大小为 2^12
根据@Akash Mahapatra,虚拟地址的偏移量直接映射到物理地址的偏移量
因此,我们现在有:
2^16(16 位)用于虚拟地址 - 2^12(12 位)用于偏移 = 4 位用于页面,或者更确切地说是可用页面的总数。 我不会重复计算物理,因为它是相同的数字。 2^4 (4bit) 页面 = 16,这与上面的表格条目数相关!我们快到了……请耐心等待! :)
十六进制表示法的内存地址 0xE12C 也被称为保存 16 位地址。 (因为它在问题中说明。)
让我们现在就杀掉地址吧……
我们首先从信息中删除“0x”。
我们可以将 E12C 转换为像 @Tony Tannous 这样的二进制符号,但我将应用一些捷径。
我只是使用一个比率。嗯,地址用上面的4个字符表示,由于16/4 = 4,我可以定义第一个字母为虚拟地址,而其他3个为偏移地址。
有了十六进制格式的“E”信息,我需要将其转换为十进制 = 14。然后我查看您提供的表格,发现页框“3”。页框 3 以十进制格式注明,然后需要转换回十六进制格式... Duh!... 是 3!
所以,0xE12C的虚拟内存位置的物理地址映射可以在物理内存的0x312C处找到。
然后您将返回表格,参考参考位列并将“1”放在第 14 行。
对这些应用相同的概念 -
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
如果您注意到,最后 3 位数字是相同的(这决定了偏移量)。 并且根据表格映射了4位数字中的第一个:
table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5
希望这个解释能帮助你和像我这样的其他人! :)
【讨论】:
以上是关于将虚拟地址转换为物理地址的主要内容,如果未能解决你的问题,请参考以下文章