我已经看过几篇与此相关的不同文章,但没有一篇以我可以理解和复制的方式解释解决方案。我需要知道如何根据以下内容将物理地址转换为内存中的虚拟地址:
一个简单的虚拟内存系统有32KB的物理内存,有16位虚拟地址,其中12位用作偏移量。以下是其中一个进程的页表当前内容:
所以基本上我认为这个虚拟内存系统的页面大小是1024KB。我需要一个过程来找到VA B2A0对应的PA。如果你能给我我可以从那里开始的过程,你就不必给我最终的解决方案:)
提前谢谢大家。此外,如果您知道一篇文章已经做到了这一点,而我只是错过了它,请随时将我链接到那篇文章。
干杯。
最佳答案
32 KB 是 2^15。 所以每个物理地址有15位,其中低12位用作偏移量,高3位用作页框数。
0xb2a0 位于哪个虚拟页面?为了确定这一点,我们需要取地址中高于 2^12 的位。一个页的大小是2^12,即4096或0x1000,所以它是一个虚拟页号0xb = 11(floor of 0xb2a0/0x1000)。页面内的偏移量是 0xb2a0 模 0x1000,它是 0x2a0。
然后使用该表将虚拟页号 11 转换为物理页框。虚拟页面存在(1),它对应物理帧号高位111,即二进制111 + 12 0,=> 0x7000 - 它是物理帧的起始地址。
我们的物理地址位于偏移量 0x2a0 处,因此,寻求的物理地址是 0x7000 + 0x2a0 = 0x72a0。
请按照此流程进行操作,并为您说明清楚。如果您有任何疑问,请先阅读维基百科,如果仍有不清楚的地方,请提问 :)
关于linux - 手动虚拟地址转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13319569/