【问题标题】:Virtual addressing MMU, where are they stored虚拟寻址 MMU,它们存储在哪里
【发布时间】:2017-05-12 15:54:00
【问题描述】:

我知道有这两种类型的内存虚拟和物理,以及它们之间的 MMU 映射,但我不明白的是 WHERE 如果它们是“虚拟的”,则存储这些虚拟地址。 承认我有 1 个进程并且他在他的虚拟地址 0x00000004 有一些东西要读取,然后 MMU 将把这个虚拟地址映射到真实物理地址中的 0xSomeWhere。 我想知道的是这些信息存储在哪里 --> 0x00000004

承认我有另一个类似的过程,他也有一条指令要读取他的虚拟地址 0x00000004,这个在哪里?这两个进程是如何分开的?

【问题讨论】:

  • 在启用MMU之前,系统配置了一个(多级)表。对于传统的 ARM,主表条目是 1MB(20 位),这意味着表是 32-20=12 位大或 4K*4 字节/条目是 16K(也是对齐约束)。为了更好地控制,主条目可以指向大小为 1、4、64k 的二级表。配置的表是物理的(告诉 MMU 的地址),每个条目/地址都是虚拟的,表中的内容告诉物理在哪里。此外,TLB 会缓存此信息。
  • tags ARM+MMU中的大量信息
  • arm 文档描述了这些简单的噪音提到的表,每当访问发生时,逻辑都会遍历表,它确实有一种缓存,不会使速度变得非常缓慢。
  • 我知道TLB,但是这个虚拟地址在哪里??它一定存在于宇宙的某个地方。我搜索了 92862 万亿个文档。
  • 您想了解哪个 ARM CPU。查看TTBR 参考资料。例如,这个slide show on enabling the ARM MMU 以及这里关于 SO 的许多问题。

标签: memory-management arm microprocessors mmu


【解决方案1】:

就像数组索引一样,虚拟地址通常1不存储在任何地方;它们是隐含的。虚拟地址用作页表的索引以查找物理地址。


1这实际上取决于 MMU 的实现。一些,例如 PowerPC/Power 架构使用散列方案,该方案确实涉及在页表中实际存储虚拟地址而不是物理地址

【讨论】:

    【解决方案2】:

    虚拟地址只是程序映像和 CPU 寄存器中的地址。在带有 MMU 的机器上运行的用户代码并不关心 VA-PA 映射,它只是拥有它认为是它自己的地址空间。所以 PC 包含一个虚拟地址,堆栈指针指向一个虚拟地址,等等。

    在某种意义上,对机器来说更抽象的是PA。 PA 是一些任意的外部位置,只有内核软件知道/关心。 (mmu还有其他任务,不过这涵盖了你的问题)

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 2016-06-13
      • 2023-01-21
      • 2017-01-25
      • 2015-05-05
      • 2011-10-06
      • 2010-11-19
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多