我有一个关于linux内核和MMU之间的关系的问题。现在我明白了,linux内核管理虚拟内存地址和物理内存地址之间的页表。同时,在x86体系结构中存在MMU,它管理虚拟内存地址和物理内存地址之间的页表。如果MMU出现在CPU附近,内核还需要处理页面表吗?
这个问题可能很愚蠢,但另一个问题是,如果MMU负责内存空间,谁来管理高内存和低内存?我相信内核将从MMU (32位中的4GB)接收虚拟内存的大小,然后内核将区分虚拟地址中的用户空间和内核空间。我说的对吗?还是完全错了?
提前谢谢!
发布于 2014-09-25 13:04:06
操作系统和MMU页面管理职责是同一机制的两个方面,处于体系结构和微观体系结构之间的边界上。
第一边定义了硬件和运行在上面的软件之间的“契约”(在本例中是OS) --如果您想使用虚拟内存,您需要构建和维护该契约中描述的页面表。另一方面,MMU是一个硬件单元,负责执行地址转换的HW任务。这可能包括硬件优化,也可能不包括硬件优化,这些优化通常是隐藏的,并且可以以各种方式在幕后运行,只要它维护契约的硬件方面。
理论上,MMU可能决定为每个翻译(一次页面遍历)发出一组内存访问,以实现所需的行为。但是,由于它是性能关键元素,大多数MMU通过缓存TLB中先前页面的结果来优化它,就像缓存存储以前访问的结果一样(实际上,在某些实现中,缓存本身也可能存储对页面表的一些访问,因为它通常驻留在可缓存内存中)。MMU可以管理多个TLB(大多数实现将数据页和代码页的实现分开,有些实现具有二级TLB),并在没有注意到访问时间更快的情况下提供转换。
还应该指出的是,硬件必须防止许多可能损害以前翻译的TLB“缓存”一致性的角落情况,例如在使用过程中的页面混叠或映射。在一些机器上,更恶劣的情况甚至需要一个称为TLB枪战的大规模冲洗流。
https://stackoverflow.com/questions/26016361
复制相似问题