C 两个十六进制十进制地址(PPN和VPO)的串联,形成一个物理地址

C 两个十六进制十进制地址(PPN和VPO)的串联,形成一个物理地址,c,concatenation,virtual-memory,mmu,C,Concatenation,Virtual Memory,Mmu,我正在阅读有关MMU转换的内容,以及CPU如何执行加载指令,读取某个地址的字节,从而将来自PTE的PPN与来自虚拟地址的VPO连接起来,生成物理地址。但我不确定这种连接是如何完成的。我指的是这一段: 首先,MMU从虚拟地址提取VPN(OxOF)并 与TLB进行检查,以查看它是否缓存了某个以前版本的PTE OxOF副本 内存引用。TLB提取TLB索引(Ox03)和TLB标签(Ox03) 在VPN中,点击set Ox3第二个条目中的有效匹配项,并返回 将缓存的PPN(OxOD)发送到MMU。 如果

我正在阅读有关MMU转换的内容,以及CPU如何执行加载指令,读取某个地址的字节,从而将来自PTE的PPN与来自虚拟地址的VPO连接起来,生成物理地址。但我不确定这种连接是如何完成的。我指的是这一段:

首先,MMU从虚拟地址提取VPN(OxOF)并 与TLB进行检查,以查看它是否缓存了某个以前版本的PTE OxOF副本 内存引用。TLB提取TLB索引(Ox03)和TLB标签(Ox03) 在VPN中,点击set Ox3第二个条目中的有效匹配项,并返回 将缓存的PPN(OxOD)发送到MMU。 如果TLB丢失了,那么MMU将需要从main获取PTE 记忆。然而,在这种情况下,我们得到了幸运,并有一个TLB击中。现在是MMU 拥有形成物理地址所需的一切。它通过连接来实现这一点 来自PTE的PPN(OxOD)和来自虚拟地址的VPO(Ox14),其中 形成物理地址(Ox354)

但我的问题是,(0x14)和(0x0d)是如何连接的?有人能告诉我怎么做吗?

基本上

(0xf << 6) | 0x14 // 0x3d4

(0xf)C是如何参与其中的?VPO似乎只有6位,所以0x14实际上是指b010100。因此,当您将0x0D(b00001101)的PPN与之组合时,您会得到B0000101010100,即0x354。请务必意识到MMU只是硬件。它可以对地址执行任何操作(例如:将地址行分成两部分,并以不同的方式对待这些部分)我建议找到另一个来源来学习。他的例子是(0x0D@LeeDanielCrocker,我认为这是来自坏来源的OCR问题:检查图像和
OxOD
中的
O
(字母
O
)。无论哪种方式,只要“公式”众所周知,替换其他操作数不是问题。我当时在读文本——你说得对,它与图像不匹配。但奇怪的是,数学仍然有效。@LeeDanielCrocker是的,要么文本和图像最初不同,要么只是一个有趣的巧合:-)