繁体   English   中英

将虚拟地址转换为物理地址

[英]translate virtual address to physical address

下表页适用于具有16位虚拟和物理地址以及4,096字节页面的系统。 引用页面后,参考位设置为1。 线程会定期将参考位的所有值清零。所有数字均以十进制提供。 在此处输入图片说明

我想将以下虚拟地址(十六进制)转换为等效的物理地址。 另外,我想为页表中的相应条目设置参考位。

0xE12C

0x3A9D

0xA9D9

0x7001

0xACA1

我知道答案是但我想知道如何获得这些答案:

0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

我找到并尝试了此方法,但并没有太大帮助。

假定虚拟地址为16位长。
因此,虚拟地址空间中有2 ^ 16个地址。
页面大小为4 KB(页面中有4K(4 *(2 ^ 10))个地址),因此页面数将为(2 ^ 16)/(2 ^ 12)= 2 ^ 4。
要寻址每个页面,需要4位。
虚拟地址中的最高4位将表示所引用的页码,其余12位将为页面偏移量。

要记住的一件事是页面大小(在虚拟地址空间中)总是与主存储器中的帧大小相同。 因此,最后12位将在物理地址中与虚拟地址保持相同。

要获得主存储器中的帧地址,只需使用前4位。
示例:考虑虚拟地址0xACA1
此处A CA1中的A表示页码(10),而对应的帧号为5(0101),因此所得的物理地址将为→0x5CA1。

要翻译的虚拟地址到物理地址( 适用于本次作业中的问题),我们需要知道件事情:

  • 页面大小
  • 虚拟地址的位数

在此示例中: 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

为了帮助您解决此问题,我们需要正确了解我们的详细信息:

  1. 16位虚拟地址空间= 2 ^ 16 = 65,536地址空间
  2. 16位物理地址空间= 2 ^ 16 = 65,536地址空间
  3. 4096字节页面大小确定偏移量,即Log(4096)/ Log(2)= 12位。 也就是说,页面大小为2 ^ 12
  4. 根据@Akash Mahapatra,虚拟地址的偏移量直接映射到物理地址的偏移量

因此,我们现在有:

  • 虚拟地址2 ^ 16(16位)-偏移量2 ^ 12(12位)=页面4位,或者可用页面总数。
  • 我不会重复物理计算,因为它是相同的数字。
  • 页面的2 ^ 4(4位)= 16,这与上面的表条目数有关!

我们到达那里...请耐心等待! :)

还以十六进制表示的内存地址0xE12C拥有16位地址。 (因为问题中已经说明。)

现在让我们屠宰地址...

我们首先从信息中删除“ 0x”。

我们可以将E12C转换为@Tony Tannous之类的二进制符号,但是我将应用一些捷径。

地址和偏移量的映射

我只是使用一个比率。 好吧,该地址用上面的4个字符表示,由于16/4 = 4,我可以将第一个字母定义为虚拟地址,而其他3个为偏移地址。

有了信息“ E”(十六进制格式),我需要转换为Decimal =14。然后查看您提供的表,发现页面框架为“ 3”。 页面框架3以十进制格式标注,然后需要转换回十六进制格式... Duh!...这是3!

因此,可以在物理内存上的0x312C处找到虚拟内存位置0xE12C的物理地址映射。

然后,您将返回表,并参考参考位列,并在第14行中添加“ 1”。

对这些应用相同的概念-

0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

如果您注意到,最后3位数字相同(这决定了偏移量)。 并且四位数字中的第一位根据表格进行映射:

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

希望这种解释对您和其他像我一样的人有帮助! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM