【发布时间】: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