5
Linux是否不使用分段而是仅使用分页?
Linux编程接口显示了进程的虚拟地址空间的布局。图中的每个区域都是一个分段吗? 通过了解Linux内核, 下列意思是否正确,即MMU中的分段单元将分段和分段内的偏移量映射到虚拟内存地址,然后分页单元将虚拟内存地址映射到物理内存地址? 存储器管理单元(MMU)通过称为分段单元的硬件电路将逻辑地址转换为线性地址。随后,称为分页单元的第二个硬件电路将线性地址转换为物理地址(见图2-1)。 那么为什么说Linux不使用分段而是仅使用分页呢? 分割已包含在80x86微处理器中,以鼓励程序员将其应用程序拆分为逻辑上相关的实体,例如子例程或全局和本地数据区域。但是, Linux以非常有限的方式使用分段。实际上,分段和分页在某种程度上是多余的,因为它们都可以用于分隔进程的物理地址空间:分段可以为每个进程分配不同的线性地址空间,而分页可以将同一线性地址空间映射到不同的物理地址空间。Linux倾向于分页而不是分段,原因如下: •当所有进程使用相同的段寄存器值(即它们共享同一组线性地址)时,内存管理会更简单。 •Linux的设计目标之一是可移植到多种体系结构。特别是RISC体系结构,对分段的支持有限。 Linux 2.6版仅在80x86体系结构要求时才使用分段。