Linux页表管理和MMU

时间:2014-09-24 11:59:54

标签: linux kernel computer-architecture mmu

我对linux内核和MMU之间的关系有疑问。 我现在明确指出Linux内核管理虚拟内存地址和物理内存地址之间的页表。 同时在x86架构中有MMU,它管理虚拟内存地址和物理内存地址之间的页表。 如果MMU出现在CPU附近,内核是否还需要处理页表?

这个问题可能是愚蠢的,但另一个问题是,如果MMU负责内存空间,谁管理高内存和低内存?我相信内核将从MMU接收虚拟内存大小(4位,32位),然后内核将区分虚拟地址中的用户空间和内核空间。 我对么?还是完全错了?

提前多多感谢!

1 个答案:

答案 0 :(得分:9)

OS和MMU页面管理职责是同一机制的两个方面,它们位于架构和微架构之间的边界上。

第一方定义硬件和在其上运行的软件(在本例中为操作系统)之间的“合同” - 如果要使用虚拟内存,则需要构建和维护页面表,如下所述合同。 另一方面,MMU端是一个硬件单元,负责执行地址转换的HW任务。这可能包括也可能不包括硬件优化,这些通常是隐藏的,并且可以以各种方式实现,以便在引擎盖下运行,只要它维护合同的硬件方面即可。

理论上,MMU可以决定为每个翻译(页面遍历)发出一组内存访问,以实现所需的行为。但是,由于它是一个性能关键元素,大多数MMU通过缓存TLB中先前页面遍历的结果来优化这一点,就像缓存存储先前访问的结果一样(实际上,在某些实现中,缓存本身也可能存储一些因为它通常驻留在可缓存的内存中,所以对页表的访问。 MMU可以管理多个TLB(大多数实现将数据和代码页分开,有些具有二级TLB),并提供从那里进行的转换,而不会注意到除了更快的访问时间。

还应该注意,硬件必须防止可能损害先前翻译的这种TLB“高速缓存”的一致性的许多极端情况,例如在使用期间的页面混叠或重映射。在一些机器上,更糟糕的情况甚至需要大量的冲洗流程称为TLB击落。