Linux内核虚拟地址一对一映射。因此,通过将PAGE_OFFSET
减去虚拟地址,我们将获得物理地址。这就是virt_to_phys中实现phys_to_virt和memory.h的方式。
我的问题是当有一个TLB未命中时mmu必须进行页表翻译时,armv7 mmu上这些一对一映射的优点是什么?
一对一映射的唯一优势是,S / W可以通过减去PAGE_OFFSET
直接获取相应虚拟地址的物理地址,或者ARMV7 MMU页面转换还有其他优势吗?
如果在mmu页表转换中没有1:1映射内存的优势,那么为什么我们需要1:1映射内存的页表。我的意思是mmu可以以virt_to_phys
的类似方式执行操作,而不是遍历所有页表。
答案 0 :(得分:2)
我的问题是这些一对一映射的优势是什么 armv7 mmu,当mmu必须做页面翻译的时候 有一个TLB未命中?
你的答案部分在于问题。 1:1映射使用1MB部分实现,因此TLB条目更小。即,4k页面需要1级和2级TLB条目,它只包含4k内存。 ARM内核必须始终保持映射,因为它具有中断,页面错误和其他可能随时调用的关键代码。
对于用户空间代码,每个4k的代码块都由 inode 支持,并且可能在内存压力期间从内存中逐出。用户空间代码通常只有少数热流程/例程,因此它们的TLB条目并不重要。 TLB通常是次要的L1 / L2缓存。
同样,设备驱动程序通常需要知道物理地址,因为它们位于CPU之外并且不知道虚拟地址。减去PAGE_OFFSET
的简单性可以提高效率。
一对一映射的唯一优势是,S / W可以通过减去PAGE_OFFSET直接获取相应虚拟地址的物理地址,或者ARMV7 MMU页面转换还有其他优势吗?
1:1映射允许一次映射更大的范围。典型的SDRAM /核心内存以1MB为增量。它也非常有效。还有其他可能性,但这些选择可能会获胜。
一对一映射的唯一优势是可以直接使用S / W. 只需获取相应虚拟地址的物理地址 减去PAGE_OFFSET或ARMV7 MMU还有其他一些优点 页面翻译呢?
MMU必须使用数据缓存并在用户空间进程之间进行内存保护;彼此以及用户/内核分离。检查内核使用1:1映射本身并不是完整的故事。内核的其他部分需要MMU。如果没有MMU,1:1映射将是标识。 IE浏览器。 PAGE_OFFSET==0
。具有固定偏移的唯一原因是允许将任何物理地址处的存储器映射到公共虚拟地址。并非所有平台都具有相同的PAGE_OFFSET
值。
virt_to_phys
关系的另一个好处;写入内核以在固定的虚拟地址执行。这意味着内核代码不需要与PC相关,而是可以在具有不同核心内存物理地址的平台上运行。在 arm / boot 汇编程序代码中要注意与PC相关,因为引导加载程序是在关闭MMU的情况下进行手动控制。此 arm / boot 代码设置初始映射。
另请参阅:Find the physical address of the vector table,virt_to_phys
映射的例外
Kernel data swappable?
How does the kernel manage less than 1gb?
Some details on ARM Linux boot?
Page table in linux kernel - 早期启动和MMU。