将虚拟地址转换为物理地址
translate virtual address to physical address
下面的页面 table 适用于具有 16 位虚拟地址和物理地址以及 4,096 字节页面的系统。当页面被引用时,引用位设置为 1。周期性地,线程将参考 bit.All 数字的所有值清零以十进制形式提供。
我想将以下虚拟地址(十六进制)转换为等效的物理地址。我还想为页面 table.
中的适当条目设置参考位
• 0xE12C
• 0x3A9D
• 0xA9D9
• 0x7001
• 0xACA1
我知道答案是,但我想知道我怎样才能得到这些答案:
0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
我找到并尝试了 This,但对我帮助不大。
将虚拟地址转换为物理地址(仅适用于此作业问题),我们需要知道 2 件事:
- 页面大小
- 虚拟地址的位数
在此示例中:16 位系统、4KB 页面大小 和物理内存大小 是 64KB。
首先我们需要确定需要多少位来充当页面内的偏移量。
log2(Page-Size)
= log2(4096)
= 12 位 offset
在16位虚拟地址中,12位是偏移量,也就是说每个进程有2^4 = 16
个虚拟页。页面 table 中的每个条目存储容纳该页面的相应框架。例如:
现在开始翻译!
首先,为了工作方便,让我们将 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
假设虚拟地址是16位长。
因此,虚拟地址中有2^16个地址space。
给定页面大小为 4 KB(页面中有 4K (4 * (2 ^ 10) ) 个地址),因此页面数将为 ( 2^16 ) / ( 2 ^ 12 ) = 2 ^ 4。
要寻址每个页面,需要 4 位。
虚拟地址中最重要的 4 位将表示所引用的页码,其余 12 位将是页偏移量。
要记住的一件事是页面大小(在虚拟地址 space 中)始终与主内存中的帧大小相同。因此,物理地址的最后 12 位将与虚拟地址的相同。
要获取主存中的帧地址,只需使用前 4 位。
示例:考虑虚拟地址 0xACA1
ACA1 中的 A 表示页码(10),对应的帧号为 5(0101),因此得到的物理地址将是 → 0x5CA1。
为了帮助您解决这个问题,我们需要正确填写我们的详细信息:
- 16位虚拟地址space = 2^16 = 65,536地址space
- 16位物理地址space = 2^16 = 65,536地址space
- 4096 Byte page size决定偏移量,即Log(4096) / Log(2) = 12 bit。这意味着,页面大小为 2^12
- 根据@Akash Mahapatra,虚拟地址的偏移量直接映射到物理地址的偏移量
因此,我们现在有:
- 虚拟地址为 2^16(16 位)- 偏移量为 2^12(12 位)= 页面为 4 位,或者可用页面总数。
- 我不会重复物理计算,因为它是相同的数字。
- 2^4 (4bit) for pages = 16,这与上面的 table 个条目的数量相关!
我们快到了...请耐心等待! :)
十六进制表示法的内存地址 0xE12C 也已知包含 16 位地址。 (因为它在问题中有说明。)
现在让我们修改地址...
我们首先从信息中删除“0x”。
我们可以像@Tony Tannous 一样将 E12C 转换为二进制符号,但我将应用一些捷径。
我只是用了一个比率。嗯,地址是用上面4个字符表示的,由于16/4 = 4,我可以定义第一个字母为虚拟地址,而其他3个是偏移地址。
根据资料,'E'是十六进制格式,我需要转换成十进制=14。然后我看你提供的table,发现页面框架'3'。页面框架 3 以十进制格式记录,然后需要将其转换回十六进制格式...Duh!...这是 3!
所以,0xE12C的虚拟内存位置的物理地址映射可以在物理内存上的0x312C找到。
然后您将返回到 table,并参考参考位列并将“1”放入第 14 行。
对这些应用相同的概念 -
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
如果您注意到,最后 3 位数字是相同的(这决定了偏移量)。
并且 4 位中的第 1 位根据 table:
进行映射
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
希望这个解释对你和像我一样的人有帮助! :)
下面的页面 table 适用于具有 16 位虚拟地址和物理地址以及 4,096 字节页面的系统。当页面被引用时,引用位设置为 1。周期性地,线程将参考 bit.All 数字的所有值清零以十进制形式提供。
我想将以下虚拟地址(十六进制)转换为等效的物理地址。我还想为页面 table.
中的适当条目设置参考位• 0xE12C
• 0x3A9D
• 0xA9D9
• 0x7001
• 0xACA1
我知道答案是,但我想知道我怎样才能得到这些答案:
0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
我找到并尝试了 This,但对我帮助不大。
将虚拟地址转换为物理地址(仅适用于此作业问题),我们需要知道 2 件事:
- 页面大小
- 虚拟地址的位数
在此示例中:16 位系统、4KB 页面大小 和物理内存大小 是 64KB。
首先我们需要确定需要多少位来充当页面内的偏移量。
log2(Page-Size)
= log2(4096)
= 12 位 offset
在16位虚拟地址中,12位是偏移量,也就是说每个进程有2^4 = 16
个虚拟页。页面 table 中的每个条目存储容纳该页面的相应框架。例如:
现在开始翻译!
首先,为了工作方便,让我们将 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
假设虚拟地址是16位长。
因此,虚拟地址中有2^16个地址space。
给定页面大小为 4 KB(页面中有 4K (4 * (2 ^ 10) ) 个地址),因此页面数将为 ( 2^16 ) / ( 2 ^ 12 ) = 2 ^ 4。
要寻址每个页面,需要 4 位。
虚拟地址中最重要的 4 位将表示所引用的页码,其余 12 位将是页偏移量。
要记住的一件事是页面大小(在虚拟地址 space 中)始终与主内存中的帧大小相同。因此,物理地址的最后 12 位将与虚拟地址的相同。
要获取主存中的帧地址,只需使用前 4 位。
示例:考虑虚拟地址 0xACA1
ACA1 中的 A 表示页码(10),对应的帧号为 5(0101),因此得到的物理地址将是 → 0x5CA1。
为了帮助您解决这个问题,我们需要正确填写我们的详细信息:
- 16位虚拟地址space = 2^16 = 65,536地址space
- 16位物理地址space = 2^16 = 65,536地址space
- 4096 Byte page size决定偏移量,即Log(4096) / Log(2) = 12 bit。这意味着,页面大小为 2^12
- 根据@Akash Mahapatra,虚拟地址的偏移量直接映射到物理地址的偏移量
因此,我们现在有:
- 虚拟地址为 2^16(16 位)- 偏移量为 2^12(12 位)= 页面为 4 位,或者可用页面总数。
- 我不会重复物理计算,因为它是相同的数字。
- 2^4 (4bit) for pages = 16,这与上面的 table 个条目的数量相关!
我们快到了...请耐心等待! :)
十六进制表示法的内存地址 0xE12C 也已知包含 16 位地址。 (因为它在问题中有说明。)
现在让我们修改地址...
我们首先从信息中删除“0x”。
我们可以像@Tony Tannous 一样将 E12C 转换为二进制符号,但我将应用一些捷径。
我只是用了一个比率。嗯,地址是用上面4个字符表示的,由于16/4 = 4,我可以定义第一个字母为虚拟地址,而其他3个是偏移地址。
根据资料,'E'是十六进制格式,我需要转换成十进制=14。然后我看你提供的table,发现页面框架'3'。页面框架 3 以十进制格式记录,然后需要将其转换回十六进制格式...Duh!...这是 3!
所以,0xE12C的虚拟内存位置的物理地址映射可以在物理内存上的0x312C找到。
然后您将返回到 table,并参考参考位列并将“1”放入第 14 行。
对这些应用相同的概念 -
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
如果您注意到,最后 3 位数字是相同的(这决定了偏移量)。 并且 4 位中的第 1 位根据 table:
进行映射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
希望这个解释对你和像我一样的人有帮助! :)