1

我已经看过一些与此相关的不同文章,但没有一篇以我可以理解和复制的方式解释解决方案。我需要知道如何根据以下内容将物理地址转换为内存中的虚拟地址:

一个简单的虚拟内存系统有 32KB 物理内存,16 位虚拟地址,其中 12 位用作偏移量。以下是其中一个进程的页表的当前内容:

在此处输入图像描述

所以基本上我认为这个虚拟内存系统的页面大小是1024KB。我需要一个过程来找到VA B2A0的对应PA。如果你能给我我可以从那里开始的过程,你不必给我最终的解决方案:)

提前谢谢各位。此外,如果您知道一篇已经这样做的文章,而我只是错过了它,请随时将我链接到该文章。

干杯。

4

2 回答 2

0

32 KB 是 2^15。所以每个物理地址有 15 位,其中低 12 位用作偏移量,高 3 位用作页帧数。

0xb2a0 驻留在哪个虚拟页面中?为了确定这一点,我们需要获取地址的位,高于 2^12。一个页面的大小是2^12,也就是4096或者0x1000,所以它是一个虚拟页号0xb = 11(0xb2a0/0x1000的下限)。页面内的偏移量是 0xb2a0 模 0x1000,它是 0x2a0。

然后使用该表将虚拟页号 11 转换为物理页框。虚拟页面存在(1),它对应于物理帧号,高位111,即111 + 二进制的十二个0,=> 0x7000 - 它是物理帧开始的地址。

我们的物理地址位于偏移量 0x2a0,因此,寻找的物理地址是 0x7000 + 0x2a0 = 0x72a0。

请遵循此流程并为您说明清楚。如果您有任何疑问,请先阅读 Wikipedia,如果仍有不清楚的地方,请询问 :)

于 2012-11-10T08:17:17.490 回答
-1

我试图做我的考试复习和学习,但我找不到同一个问题的可靠答案。我巩固了我所学到的东西,我希望我在这里总结的任何东西都能对像我这样的人有所帮助。:)

对于我的小脑袋,我发现上面答案中的解释有点难以理解。

我认为下面的链接比维基百科的解释提供了更好的概述: http ://williams.comp.ncat.edu/addrtrans.htm

这个 youtube 视频还提供了一个很好的指南来解释虚拟地址翻译的过程: https ://www.youtube.com/watch?v=6neHHkI0Z0o

回到问题->>>

第一个问题是——这个虚拟内存系统的“页面大小”是多少?基于此处的定义 - https://en.wikipedia.org/wiki/Page_(computer_memory)

我最初对“页面”和“页面大小”感到困惑,但我现在有点明白了。Pages 决定了可用的页数(就像一本书一样),页面大小就像(书中的 A4、A5、A6 页!)。

因此,由于虚拟内存和物理内存的偏移量是相同的,并且是相应映射的,因此我们可以通过偏移量大小来确定页面大小。如果偏移量大小为 12 位,则 2^12 = 4,096 字节,即 4-KB。

好奇的人会问一个问题,有多少虚拟内存页面?- 16 位虚拟地址空间减去 12 位偏移量 = 4 位 - 等于 2^4 = 16 页可用(因此我们看到的表!)

其他好奇的人的另一个问题是,有多少物理内存页?- 32KB 物理内存 = 32 x 1024bytes = 32,768 字节 - Log(32768) / Log(2) = 15 位,这也意味着总物理内存的 2^15 - 减去我们已经知道的 12 位偏移量。 . - 15 位(总物理内存)减去 12 位(偏移量)= 3 位物理地址空间

进入下一个问题,虚拟地址 0xb2a0 对应的物理地址是什么(当前设置为十六进制)?

@Dmytro Sirenko 上面的回答很好地解释了它,我将在这里帮助改写它。

我们需要记住,我们的虚拟地址是 16 位的,并且现在包含的地址空间是 value = b2a0(忽略 0x)。

我的捷径(如果错了请纠正我),因为地址:偏移量(页面大小)的比率是 4:12 = 1:3...

b            |  2  a  0
^
page number  |  offset

将十六进制值 b 转换为十进制 = 11。

我查看表格,在表格条目号 11 中发现 Page Frame = 111。

111 以二进制表示,它与物理内存帧相关。

请记住,我们正在查看 15 位物理内存地址空间,因此,我们可以确定:

1 1 1    |   0 0 0 0 0 0 0 0 0 0 0 0 
Address  |   offset

由于 Offset 直接从虚拟内存映射到物理内存,我们将 (2a0) 的值直接带入物理内存。不幸的是,我们不能在这里立即表示它,因为它是十六进制格式,而我上面的地址空间是二进制设置的。

考虑到我要参加考试,不允许我带计算器……我会做一个相反的答案,用十六进制代替。:)

当我们将 111 转换为十进制时(我按 001 = 1、010 = 2、100 = 4、101 = 5、110 = 6、111 = 7)。现在我需要从十进制转换为十六进制!= 7 (十进制) = 7

这样一来,这个虚拟内存地址对应的Physical Memory位置就是……(大鼓大幕拉开……)

7 2 一 0

以这种方式表示为 0x72a0。

于 2017-04-14T05:14:50.177 回答