- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Linux 内核虚拟地址是一对一映射的。因此,通过将虚拟地址减去 PAGE_OFFSET
,我们将获得物理地址。就是这样virt_to_phys和 phys_to_virt在 memory.h 中实现.
我的问题是,当出现 TLB 未命中时,当 mmu 必须进行页表转换时,这些一对一映射在 armv7 mmu 上有什么优势?
是一对一映射的唯一优势,这样 S/W 可以通过减去 PAGE_OFFSET
直接获得相应虚拟地址的物理地址,或者在 ARMV7 MMU 页面转换上也有一些其他优势?
如果 1:1 映射内存相对于 mmu 页表转换没有优势,那么为什么我们需要 1:1 映射内存的页表。我的意思是 mmu 可以以与 virt_to_phys
类似的方式执行操作,而不是遍历所有页表。
最佳答案
My question is what is the advantage of these one to one mapping on the armv7 mmu, when the mmu has to do the page table translation when there is a TLB miss?
您的答案部分包含在问题中。 1:1 映射使用 1MB 部分实现,因此 TLB 条目较小。即,一个 4k 页面需要一个 1 级和 2 级 TLB 条目,它只包含 4k 内存。 ARM 内核必须始终保持映射状态,因为它有中断、页面错误和其他可能随时调用的关键代码。
对于用户空间代码,每个 4k 的代码块都由一个 inode 支持,并且可能在内存压力时从内存中逐出。用户空间代码通常只有几个热门进程/例程,因此它们的 TLB 条目并不那么重要。 TLB 通常次于 L1/L2 缓存。
此外,设备驱动程序通常需要知道物理 地址,因为它们在 CPU 之外并且不知道虚拟地址。减去 PAGE_OFFSET
的简单性使得代码高效。
Is the only advantage of one to one mapping so that S/W can directly gets the physical address of respective virtual address by just subtracting PAGE_OFFSET or there is some other advantage on ARMV7 MMU page translation too?
1:1 映射允许一次映射更大的范围。典型的 SDRAM/核心内存以 1MB 为增量。它也非常有效。还有其他可能性,但这些可能是这个选择的胜利。
Is the only advantage of one to one mapping so that S/W can directly gets the physical address of respective virtual address by just subtracting PAGE_OFFSET or there is some other advantage on ARMV7 MMU page translation too?
MMU 必须打开才能使用数据缓存和用户空间进程之间的内存保护;彼此以及用户/内核分离。单独检查内核对 1:1 映射的使用并不是全部。内核的其他部分需要 MMU。如果没有 MMU,1:1 映射就是标识。 IE。 PAGE_OFFSET==0
。具有固定偏移量的唯一原因是允许将任何物理地址的内存映射到公共(public)虚拟地址。并非所有平台都具有相同的 PAGE_OFFSET
值。
virt_to_phys
关系的另一个好处;内核被编写为在固定的虚拟地址执行。这意味着内核代码不需要是 PC 相关的,而且可以在具有不同核心内存物理地址的平台上运行。注意 arm/boot 汇编程序代码是 PC 相关的,因为引导加载程序将在 MMU 关闭时手动控制。此 arm/boot 代码设置初始映射。
另请参阅:Find the physical address of the vector table ,virt_to_phys
映射的一个异常(exception)。
Kernel data swappable?
How does the kernel manage less than 1gb?
Some details on ARM Linux boot?
Page table in linux kernel - 早期启动和 MMU。
关于linux-kernel - 在 ARMv7 的上下文中,当 mmu 必须进行页表转换时,Linux 内核一对一映射内存的优势是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328556/
我是一名优秀的程序员,十分优秀!