一般使用哪种虚拟内存转换技术(考虑x86)?

时间:2014-02-18 05:04:35

标签: memory-management operating-system x86 paging memory-segmentation

众所周知,在MMU的帮助下,存在不同类型的虚拟地址转换(x86),例如分段,寻呼,组合分段 - 寻呼(分页分段,分段寻呼)等。每个都有自己的优点和缺点。

我的问题: 1)Linux / Windows等一般操作系统是否只使用一种特定技术(如Paging)? 2)如果给定操作系统有两种或更多种技术可用,当&每个人都会被使用? 我们可以根据自己的需求定制吗? 3)如果仅使用'Paging',则x86的段寄存器以什么方式使用?

1 个答案:

答案 0 :(得分:1)

通常,x86上的现代操作系统使用分页而不是分段。这意味着段寄存器的基址设置为零,段限制设置为最大值。分页用于将虚拟地址映射到物理地址,这为操作系统提供了对进程地址空间的细粒度控制,进程之间的保护以及特权(内核)和用户地址空间之间的保护。 x86中的段仍用于特殊用途:

  • 在虚拟环境中运行旧版操作系统和应用程序
  • 为多线程应用程序中的每个线程高效访问thread local storage(感谢@ PaulA.Clayton指出这一点)。

Microsoft Windows使用Windows 95从分段切换到flat, linear内存模型。

http://technet.microsoft.com/en-us/library/cc751120.aspx

  

Windows 95通过使用80386(及以上)处理器体系结构的32位功能来支持32位操作系统功能和基于Win32的应用程序的扁平线性内存模型,从而解决了这个问题。线性寻址模型简化了应用程序供应商的开发过程,并消除了分段内存架构带来的性能损失。

为了运行旧的Win16应用程序(Windows 3.1),Windows 95运行了一个运行所有Win16应用程序的16位虚拟机。较新的32位应用程序使用MMU的分页工具在不同的地址空间中运行。

以下是上述链接中的相关说明

enter image description here