众所周知,在MMU的帮助下,有多种虚拟地址转换(x86),如分段、分页、组合分段-分页(Paged segmentation,Segmented Paging)等,各有优缺点。
我的问题: 1) 像 Linux/Windows 这样的通用操作系统是否只使用一种特定的技术(如分页)?2) 如果给定的操作系统有两种或多种技术可用,那么每种技术将在何时何地使用?我们可以根据自己的需要定制吗?3)如果只使用'分页',那么x86的段寄存器以什么方式使用?
众所周知,在MMU的帮助下,有多种虚拟地址转换(x86),如分段、分页、组合分段-分页(Paged segmentation,Segmented Paging)等,各有优缺点。
我的问题: 1) 像 Linux/Windows 这样的通用操作系统是否只使用一种特定的技术(如分页)?2) 如果给定的操作系统有两种或多种技术可用,那么每种技术将在何时何地使用?我们可以根据自己的需要定制吗?3)如果只使用'分页',那么x86的段寄存器以什么方式使用?
通常,x86 上的现代操作系统使用分页而不是分段。这意味着段寄存器的基地址设置为零,段限制设置为最大值。分页用于将虚拟地址映射到物理地址,这使操作系统可以细粒度地控制进程的地址空间、进程之间的保护以及特权(内核)和用户地址空间之间的保护。段在 x86 中仍然用于特殊目的:
flat, linear
Microsoft Windows使用 Windows 95从分段切换到内存模型。
http://technet.microsoft.com/en-us/library/cc751120.aspx
Windows 95 通过使用 80386(及更高版本)处理器体系结构的 32 位功能来解决此问题,以支持用于 32 位操作系统功能和基于 Win32 的应用程序的平面线性内存模型。线性寻址模型简化了应用程序供应商的开发过程,并消除了分段内存架构带来的性能损失。
为了运行旧的 Win16 应用程序 (Windows 3.1),Windows 95 运行了一个 16 位虚拟机,所有 Win16 应用程序都在其中运行。较新的 32 位应用程序使用 MMU 的分页功能在单独的地址空间中运行。
这是上面链接中的相关描述