版权归原作者所有,如有侵权,请联系我们

[科普中国]-虚拟地址扩展

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

定义

虚拟地址扩展的一种常见的解释是DEC公司开发的一种指令集架构及基于这个架构开发的计算机,英文缩写为VAX。这里虚拟地址扩展是指在32位系统下,进程或用户在默认情况下只有2GB虚拟地址空间,这不能满足进程或者要求,操作系统会将进程或用户扩展到一个4GB虚拟地址空间。例如 在 32 位 Windows 中,可用的虚拟地址空间共计为 2^32 字节(4 GB)。通常较下的 2 GB 用于用户空间,较上的 2 GB 用于系统空间。在 32 位 Windows 中,你可以指定(在启动时)超过 2 GB 用于用户空间。结果是系统空间可用的虚拟地址更少。可以将用户空间的大小增至 3 GB,在这种情形下系统空间仅有 1 GB。1

DEC的VAX简介VAX是DEC公司开发的一种指令集架构,并基于这个架构开发了一系列受欢迎和有影响力的电脑中的第一款。

其中VAX(Virtual Address eXtension)是DEC公司开发的中端服务器计算机。它按照的是DEC1978年的PDP-11标准,它使用新的操作系统VMS。VAX包括三十二位的处理器和虚拟内存。过去VAX与惠普和IBM计算机在小型企业和大学-科研市场上竞争。早期,这种大小和价格范围的计算机就市场说的小型计算机。现在,VAX和它的竞争者为使用客户端**/**服务器计算模式的商业网络销售“服务器”。DEC声称现在在使用中的VAX系统超过250000个。到1996年十月,这种模型的价格的范围在为18000至46000美元。由于它是基于VMS的,所以它的操作系统叫OpenVMS。OpenVMS还可以通过一些特殊的软件使得它能够用在Windows NT的服务器上。OpenVMS也支持开放标准的b便携式操作系统界面的命令集和C语言程序接口,使它能有效的用于VMS系统和UNIX系统。Eric S. Raymond指出运行在VAX BSD Unix的系统是黑客们一个最爱因为它特别大且友好的编程器汇编的指令集。2

应用地址窗口扩展(AWE)是一组扩展,允许应用程序快速操作大于4GB的物理内存。某些数据密集型应用程序(如数据库管理系统和科学与工程软件)需要访问非常大的数据缓存。在非常大的数据集的情况下,限制缓存以适应应用程序的2GB的用户地址空间是一个严重的限制。在这些情况下,缓存太小,无法正常支持应用程序。

AWE通过允许应用程序直接处理大量内存,同时继续使用32位指针来解决此问题。AWE允许应用程序的数据高速缓存大于4GB(存在足够的物理内存)。AWE在32位虚拟地址空间内使用该物理内存的各个部分的物理非分页内存和窗口视图。

AWE对如何使用这种内存有一些限制,主要是因为这些限制允许非常快速的映射,重新映射和释放。快速内存管理对于这些潜在巨大的地址空间很重要。

为AWE分配的虚拟地址范围与其他进程不共享(因此不可继承)。实际上,同一进程中的两个不同的AWE虚拟地址不允许映射相同的物理页面。当内存被释放时,这些限制可以快速重新映射和清除。

可以为AWE区域分配的物理页面受到机器中存在的物理页面数量的限制,因为该内存不会被分页 - 它被锁定,直到应用程序显式释放或退出。为给定进程分配的物理页面可以映射到同一进程内的任何AWE虚拟区域。使用AWE的应用程序必须小心,不要占用太多的物理内存,从而导致其他应用程序过度页面,或者由于缺少资源而导致新进程或线程的创建。使用 GlobalMemoryStatusEx函数来监视物理内存使用情况。

AWE虚拟地址总是被读/写,并且不能通过调用VirtualProtect进行 保护(也就是说,不可以指定只读存储器,访问内存,保护页面等)。

AWE地址范围不能用于缓冲图形或视频通话的数据。

AWE内存范围不能被拆分,也不能删除它。相反,当需要删除时,整个虚拟地址范围必须作为一个单元删除。这意味着你必须指定MEM_RELEASE当调用 VirtualFree。

应用程序可以同时映射多个区域,前提是它们不重叠。

在仿真模式下不支持使用AWE的应用程序。也就是说,使用AWE函数的x86应用程序必须重新编译才能在另一个处理器上运行,而大多数应用程序可以在其他平台上的模拟器下运行而不重新编译。

该解决方案以非常一般,广泛适用的方式解决物理内存问题。AWE的一些好处是:

定义了一小组新功能来操纵AWE内存。

AWE提供了非常快的重新映射功能。通过操作虚拟内存表而不是通过在物理内存中移动数据来完成重映射。

AWE提供了适合于处理器的页面大小粒度(例如,x86上的4 KB),这对应用程序而言比大页面更有用(例如x86上为2MB或4MB)。3

工具BCDEdit /set

BCDEdit /set 命令用于在 Windows Vista、Windows 7、WindowsServer 2008、Windows 8、Windows 8.1、Windows Server 2012 和 Windows Server 2012 R2 的 Windows 启动配置数据存储(BCD) 中设置启动项选项值。使用 BCDEdit /set 命令可配置特定的启动项元素,如内核调试器设置、内存选项,或者能够启用测试签名内核模式代码或加载备用硬件抽象层 (HAL) 和内核文件的选项。要删除启动项选项,请使用 BCDEdit /deletevalue 命令。

小心 使用 BCDEdit 修改 BCD 需要具备管理权限。使用BCDEdit /set 命令更改某些启动项选项可能会导致你的计算机无法运行。作为替代方案,可以使用系统配置实用程序 (MSConfig.exe) 更改启动设置。

注意 在设置 BCDEdit 选项之前,可能需要禁用或挂起计算机上的 BitLocker 和安全启动。

参数

[{ID}]

{ID} 是与启动项相关联的 GUID。如果你未指定 {ID},则该命令会修改当前的操作系统启动项。如果指定了启动项,则与该启动项相关联的 GUID 必须用大括号 { } 括起来。若要查看所有处于活动状态的启动项的 GUID 标识符,请使用 bcdedit /enum 命令。当前启动项的标识符为 {current}。有关此选项的详细信息,请使用以下命令:bcdedit /? ID

bootlog [ yes | no ]

启用系统初始化日志。此日志存储在 %WINDIR% 目录中的 Ntbtlog.txt 文件中。其中包括已加载和尚未加载的驱动程序的文本格式列表。

bootmenupolicy [ Legacy | Standard ]

定义系统将要使用的启动菜单类型。对于 Windows 8.1、Windows 8 和 Windows RT,默认类型为 Standard。对于 Windows Server 2012 R2、Windows Server 2012,默认类型为 Legacy。当选择 Legacy 时,“高级”选项菜单(F8) 将可用。当选择 Standard 时,启动菜单将仅在特定条件下显示:例如,发生启动故障,从修复磁盘或安装介质启动,配置了多个启动项或者手动配置计算机以使用高级启动。当选择 Standard 时,在启动期间将忽略 F8 密钥。 Windows 8 电脑快速启动,因此没有足够的时间来按 F8。有关详细信息,请参阅 Windows 启动设置(包括安全模式)。

注意 该选项自 Windows8 和 Windows Server 2012 起开始推出。在下次启动时还可以使用 onetimeadvancedoptions 来使用高级选项 (F8) 菜单 (Legacy) 一次。

bootstatuspolicy policy

控制启动状态策略。启动状态 policy 可以为以下值之一:

DisplayAllFailures

如果存在启动故障、关机故障或检查点故障,则显示所有错误。计算机将在重新启动时故障转移到 Windows 恢复环境。

IgnoreAllFailures

如果存在启动故障、关机故障或检查点故障,则忽略错误。计算机将在出现错误后尝试正常启动。

IgnoreShutdownFailures

如果存在关机故障,则仅忽略错误。如果存在关机故障,计算机将不会在重新启动时自动故障转移到 Windows 恢复环境。这是 Windows 8 的默认设置。

IgnoreBootFailures

如果存在启动故障,则仅忽略错误。如果存在启动故障,计算机将不会在重新启动时自动故障转移到 Windows 恢复环境。

IgnoreCheckpointFailures

如果存在检查点故障,则仅忽略错误。如果存在检查点故障,计算机将不会在重新启动时自动故障转移到 Windows 恢复环境。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

DisplayShutdownFailures

如果存在关机故障,则显示错误。如果存在关机故障,计算机将在重新启动时故障转移到 Windows 恢复环境。将忽略启动故障和检查点故障。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

DisplayBootFailures

如果存在启动故障,则显示错误。如果存在启动故障,计算机将在重新启动时故障转移到 Windows 恢复环境。将忽略关机故障和检查点故障。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

DisplayCheckpointFailures

如果存在检查点故障,则显示错误。如果存在检查点故障,计算机将在重新启动时故障转移到 Windows 恢复环境。将忽略启动故障和关机故障。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

bootux [ disabled | basic | standard ]

控制启动屏幕动画。可用值为已禁用、基本和标准。

注意 Windows 8 和 WindowsServer 2012 中不支持这项功能。

disabledynamictick [ yes | no ]

启用和禁用动态计时器刻度功能。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

注意 此选项应仅用于调试。

disableelamdrivers [ yes | no ]

控制提前启动反恶意 (ELAM) 驱动程序的加载。出于安全考虑,该操作系统加载程序会删除此项。此选项只能通过 F8 菜单触发。用户必须亲自来到计算机前才能触发此选项。

注意 此选项应仅用于调试。该选项自 Windows 8 和 Windows Server 2012 起开始推出。

forcelegacyplatform [ yes | no ]

强制操作系统假定存在 CMOS 和键盘控制器等传统电脑设备。

注意 此选项应仅用于调试。 该选项自 Windows8 和 Windows Server 2012 起开始推出。

groupsize maxsize

设置单个处理器组中逻辑处理器的最大数量,其中 maxsize 是 2 的 0 到 6 次幂之间的任何次幂(包括 1(即 2 的 0 次幂)和 64(即 2 的 6 次幂))。默认情况下,处理器组中最多包含 64 个逻辑处理器。为了进行测试,你可以使用此启动配置设置来替代计算机处理器组的大小和组成。处理器组为逻辑处理器数量大于 64 个的计算机提供支持。此启动选项在 64 位版本的 Windows 7 和 Windows Server 2008 R2 及更高版本上可用。此启动选项对于 32 位版本的 Windows7 不起作用。

如果你希望强制使用多个组,而且你的计算机上处于活动状态的逻辑处理器数量为 64 或更少,请使用 groupsize 选项。有关使用此选项的详细信息,请参阅用于测试多处理器组支持驱动程序的启动参数。

groupaware [ on | off ]

强制驱动程序注意多处理器组环境中的多个组。使用此选项可以帮助显示驱动程序和组件中的跨组不兼容性。处理器组为逻辑处理器数量大于 64 个的计算机提供支持。此启动选项在 64 位版本的 Windows 7 和 Windows Server 2008 R2 及更高版本上可用。此启动选项对于 32 位版本的 Windows7 不起作用。如果计算机上处于活动状态的逻辑处理器数量为 64 或更少,则可以使用 groupaware 选项和 groupsize 选项测试驱动程序与多个组的兼容性。

groupaware on 设置可确保处理器在组 0 以外的组中启动。这可增加驱动程序和组件之间跨组交互的可能性。此选项还修改传统函数 KeSetTargetProcessorDpc、KeSetSystemAffinityThreadEx和 KeRevertToUserAffinityThreadEx 的行为,以便它们始终作用于活动逻辑处理器所在的编号最高的组。调用其中任何传统函数的驱动程序应当更改为调用与这些函数相对应的组感知函数(KeSetTargetProcessorDpcEx、KeSetSystemGroupAffinityThread和 KeRevertToUserGroupAffinityThread)。4