未识别内存管理接口(UIMMI)

由于未识别内存(Invisible Memory)不被 Windows 操作系统管理,因此任何应用程序都可能对未识别内存进行管理和读写访问。显而易见,某个应用程序存放于未识别内存的数据很容易被另一个应用程序覆盖,这样就可能产生严重的问题。为了避免这个冲突问题,您通常需要仔细地管理设置应用程序以保证仅有一个应用程序在使用未识别内存。这样的操作是繁琐复杂,并且容易出错的。此外,在某些情况下,您可能希望多个应用程序可以同时使用未识别内存,而不是某个应用程序排它性地使用未识别内存。

考虑到上述不便和限制,我们推出了一个新的功能模块:未识别内存管理接口(UIMMI)。这个管理接口提供了一个统一的方式来管理和使用未识别内存。更为重要的是,它可以允许多个应用程序同时使用未识别内存而不用担心可能的冲突问题。

使用 UIMMI

每个支持 UIMMI 的应用程序都有一个相同的启动入口。您通常在应用程序主用户界面的左下方能看到 图标按钮。本文以 Primo Ramdisk 软件为例介绍如何使用 UIMMI。

1. 运行 Primo Ramdisk 并点击 UIMMI 入口按钮。

2. UIMMI 定义了两组类型的参数:全局参数和本地参数。全局参数应用于所有支持 UIMMI 的应用程序,而本地参数仅应用于当前的应用程序。点击启用按钮设置未识别内存。

3. 根据需要设置全局和本地参数。本文下节将详细介绍 UIMMI 参数。点击继续按钮,程序开始检测未识别内存地址空间,并返回检测结果。

UIMMI 参数

全局参数

前端地址保留限额:这两个参数可定义 UIMMI 允许管理的未识别内存地址范围。下图解释了它们如何影响 UIMMI 的管理空间。

默认状态下,UIMMI 会识别并管理全部的未识别内存。如果设置了前端地址保留,则从起始地址开始的相应大小的未识别内存空间被保留为系统或其它应用程序使用,不被 UIMMI 管理。如果设置了限额,则限制了 UIMMI 最大可管理的未识别内存容量,剩余部分(后端地址空间)则保留为系统或其它应用程序使用,而不被 UIMMI 管理。

借助于这两个参数,UIMMI 能够为系统和第三方应用程序保留相应的前端地址空间和后端地址空间,以避免同时使用未识别内存导致的冲突问题。通常这些保留空间为主板集成显卡使用。因为部分主板厂商在集成显卡时会将未识别内存用作共享显存。例如微星 MSI 880GM-E41 主板能够设置多达 1024MB 的物理内存为共享显存。如果 BIOS 里的 "UMA Location" 选项设置为 "Below",其共享显存使用系统管理的内存而不是未识别内存,这个情况下它不会和 UIMMI 冲突,因此也无需保留未识别内存地址空间。但是如果 "UMA Location" 设置为 "Above",其共享显存则会使用未识别内存的后端地址空间,这个情况下,UIMMI 必须保留后端地址空间,以避免冲突。具体设置的例子如下:假设您的计算机安装了 8GB 的物理内存并且32位操作系统只识别到 3.25GB,预计的未识别内存应该有 4.75GB。如果共享显存设置为 1GB,则我们需要设置 UIMMI 限额为 3.75GB。由于 MSI 880GM-E41 主板仅使用后端地址空间,所以这里我们无需设置前端地址保留。

小贴士:如何知道主板集成显卡使用的是前端未识别内存还是后端未识别内存?
由于主板制造商以及主板型号众多,我们无法一一列出所有主板的情况。但是您可以自己通过以下简单步骤获取主板集成显卡使用未识别内存的情况。
1. 首先,保留任意一端(前端或后端)未识别内存地址空间,保留空间大小和共享显存大小一致。
2. 然后将剩余的未识别内存用任意数据填满。比如用剩余的未识别内存创建一个内存虚拟硬盘,然后将该硬盘填满。
3. 如果您发现计算机出现花屏或显示异常的情况,这意味着被 UIMMI 使用的未识别内存和共享显存冲突。此时您可以尝试保留另一端地址空间,然后重复步骤 2。

未识别内存休眠文件位置:该参数指定未识别内存休眠文件的根目录位置。默认状态下,休眠文件和 Windows 系统在同一分区。

本地参数

未识别内存休眠:当该参数被设置时,应用程序可以安全地进入休眠状态并从休眠状态恢复到工作状态。UIMMI 会创建一个名为 "imhiberfilex.sys" 的文件用于休眠前保存未识别内存中的数据。如果此参数未被设置,则计算机从休眠状态恢复时会出现未识别内存数据丢失而引起异常。当然如果您的计算机禁用了休眠功能,您可以不设置该参数,以避免创建休眠文件,从而节省硬盘空间。

哪些应用程序支持 UIMMI

Romex Software 的所有产品,除了 VSuite Ramdisk,均支持 UIMMI。VSuite Ramdisk 已经被其后续产品 Primo Ramdisk 替代。