我对Linux内核和MMU之间的关系有疑问。
我现在知道Linux内核管理虚拟内存地址和物理内存地址之间的页表。
同时,x86体系结构中的MMU管理着虚拟内存地址和物理内存地址之间的页表。
如果MMU出现在CPU附近,内核是否还需要照顾页表?

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

在此先多谢!

最佳答案

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

第一面定义了硬件和在其上运行的软件(在本例中为OS)之间的“契约(Contract)”,如果要使用虚拟内存,则需要按照该契约(Contract)中的说明构建和维护页表。
另一方面,MMU端是负责执行地址转换的硬件任务的硬件单元。这可能包括也可能不包括硬件优化,这些优化通常是隐藏的,并且可以通过各种方式实现以在后台运行,只要它能保持契约(Contract)的硬件方面即可。

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

还应注意,硬件必须防范可能危及先前翻译的此类TLB“缓存”的连贯性的许多特殊情况,例如在使用过程中的页面别名或重新映射。在某些机器上,更恶劣的情况甚至需要称为TLB击落的大量冲洗流。

关于Linux页表管理和MMU,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26016361/

10-10 20:10