![什么硬件设备占用了我的 4GB RAM 中的 1.4GB?](https://linux22.com/image/1389296/%E4%BB%80%E4%B9%88%E7%A1%AC%E4%BB%B6%E8%AE%BE%E5%A4%87%E5%8D%A0%E7%94%A8%E4%BA%86%E6%88%91%E7%9A%84%204GB%20RAM%20%E4%B8%AD%E7%9A%84%201.4GB%EF%BC%9F.png)
我在配备 4GB RAM 的联想 530 笔记本上使用 64 位 Windows 7。
但是,我的任务管理器显示 RAM 数量只有 2.6GB,资源监视器显示 1.4 GB“由硬件使用”:
显然,我想使用更多的 RAM(例如,目前无法使用 2GB RAM 启动 VirtualBox VM)。
因此我开始寻找哪个设备可能是导致我可用 RAM 如此之少的原因,以及我是否可以更新其驱动程序或禁用它......
首先,我尝试使用 64 位 Linux Live ISO (grml64) 来排除任何驱动程序问题,那里的内存情况相同(也只有 2.6GB 可用/proc/meminfo
)。其他人建议msconfig
可能设置了内存限制,但没有设置(如果我将内存限制设置为例如 3.5GB,可用内存会减少 0.5GB)。
接下来我尝试meminfo -r
输出以下内容:
MemInfo v2.10 - Show PFN database information
C:\Users\Michi\Desktop>meminfo -r
Copyright (C) 2007-2009 Alex Ionescu
www.alex-ionescu.com
Physical Memory Range: 0000000000001000 to 000000000009D000 (156 pages, 624 KB)
Physical Memory Range: 0000000000100000 to 0000000020000000 (130816 pages, 523264 KB)
Physical Memory Range: 0000000020200000 to 0000000040004000 (130564 pages, 522256 KB)
Physical Memory Range: 0000000040005000 to 00000000871F2000 (291309 pages, 1165236 KB)
Physical Memory Range: 0000000100000000 to 000000011F600000 (128512 pages, 514048 KB)
MmHighestPhysicalPage: 1177088
因此,从 0x871F2000 到 0x100000000 的内存不可用,大约有 1.8 GB,但 4G 以上的可用内存范围只有大约 500 MB,差额大约是我“寻找”的 1.4 GB。
通常,我的期望(从旧计算机也从 DOS 时代开始)是当硬件“映射”某个内存范围时,它会将其映射到自己的(虚拟或真实)内存上,并且内存量会“出现”在内存范围的末尾(就像 4GB 以上约 500MB 的情况一样)。
设备管理器中的内存映射如下所示,0x871F 处没有任何内容...:
[00000000000A0000 - 00000000000BFFFF] Intel(R) HD Graphics 4000
[00000000000A0000 - 00000000000BFFFF] PCI bus
[00000000DFA00000 - 00000000FEAFFFFF] PCI bus
[00000000E0000000 - 00000000EFFFFFFF] Intel(R) HD Graphics 4000
[00000000F0000000 - 00000000F03FFFFF] Intel(R) HD Graphics 4000
[00000000F0400000 - 00000000F0BFFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 1 - 1E10
[00000000F0C00000 - 00000000F13FFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 3 - 1E14
[00000000F1400000 - 00000000F1403FFF] Realtek PCIe GBE Family Controller
[00000000F1400000 - 00000000F14FFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 4 - 1E16
[00000000F1404000 - 00000000F1404FFF] Realtek PCIe GBE Family Controller
[00000000F1500000 - 00000000F1CFFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 3 - 1E14
[00000000F1D00000 - 00000000F1D03FFF] 1x1 11b/g/n Wireless LAN PCI Express Half Mini Card Adapter
[00000000F1D00000 - 00000000F1DFFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 2 - 1E12
[00000000F1E00000 - 00000000F25FFFFF] Intel(R) 7 Series/C216 Chipset Family PCI Express Root Port 1 - 1E10
[00000000F2600000 - 00000000F260FFFF] Intel(R) USB 3.0 eXtensible-Hostcontroller
[00000000F2610000 - 00000000F2613FFF] High Definition Audio-Controller
[00000000F2614000 - 00000000F26140FF] Intel(R) 7 Series/C216 Chipset Family SMBus Host Controller - 1E22
[00000000F2615000 - 00000000F261500F] Intel(R) Management Engine Interface
[00000000F2618000 - 00000000F26187FF] Intel(R) 7 Series Chipset Family SATA AHCI Controller
[00000000F2619000 - 00000000F26193FF] Intel(R) 7 Series/C216 Chipset Family USB Enhanced Host Controller - 1E26
[00000000F261A000 - 00000000F261A3FF] Intel(R) 7 Series/C216 Chipset Family USB Enhanced Host Controller - 1E2D
[00000000F8000000 - 00000000FBFFFFFF] Hauptplatinenressourcen
[00000000FE800000 - 00000000FE80FFFF] Hauptplatinenressourcen
[00000000FED00000 - 00000000FED003FF] Hochpräzisionsereigniszeitgeber
[00000000FED10000 - 00000000FED17FFF] Hauptplatinenressourcen
[00000000FED18000 - 00000000FED18FFF] Hauptplatinenressourcen
[00000000FED19000 - 00000000FED19FFF] Hauptplatinenressourcen
[00000000FED1C000 - 00000000FED1FFFF] Hauptplatinenressourcen
[00000000FED20000 - 00000000FED3FFFF] Hauptplatinenressourcen
[00000000FED40000 - 00000000FED44FFF] Trusted Platform Module 1.2
[00000000FED45000 - 00000000FED8FFFF] Hauptplatinenressourcen
[00000000FED90000 - 00000000FED93FFF] Hauptplatinenressourcen
[00000000FEE00000 - 00000000FEEFFFFF] Hauptplatinenressourcen
[00000000FF000000 - 00000000FFFFFFFF] Hauptplatinenressourcen
[00000000FF000000 - 00000000FFFFFFFF] Intel(R) 82802 Firmwarehub
[00000000FFFFF000 - 00000000FFFFFFFF] Hauptplatinenressourcen
由于 Intel HD Graphics 使用共享内存,经验证,它目前仅使用 83 MB:
有什么办法可以恢复我的记忆吗?
编辑:
笔记本电脑配备了这种 RAM 配置(使用了 1 组 4GB),还预装了 Windows 7。半年前我确实重新安装了 Windows 7(并使用联想更新向导安装了所有驱动程序),当时我也安装了 BIOS/固件更新,但从未查看过资源监视器,因为我根本不需要额外的 RAM,所以我无法判断当我拿到它时是否已经存在这种效果。
编辑2:
显然,@A32167 是对的。我找到了一个在 WebGL 中加载纹理的小示例,对其进行了修改,以加载 8192x8192 纹理(参见http://jsfiddle.net/q4SAS/),在 Google Chrome 中打开它,虽然“正在使用的图形内存”增加到了 918MB,但硬件保留内存并没有变化:
虽然这回答了我的问题,但当然仍然存在的问题是为什么联想宣传动态图形内存分配,以及是否有办法减少分配的内存......
编辑3:
不幸的是,这并不是故事的结束——请看这里: 什么硬件设备曾经占用了我的 4GB RAM 中的 1.4GB,而现在在没有任何硬件变化的情况下突然占用了 2.2GB?
答案1
上面的显卡配置界面上,1138“最大”内存是不是预订的尽管目前只使用了 83,但是对于该卡来说?
答案2
终于找到了正确答案,恢复了记忆。
详情https://superuser.com/a/762821/1724(对此问题的后续问题的回答),UEFI 实现的一个功能是在每次启动之前更新内存映射(持久存储在 UEFI 变量中),以防发生任何变化。它显然没有考虑到在启动之前,另一个 UEFI 启动条目可能已失败并且未清理使用的内存(取决于引导加载程序),导致每次 UEFI 启动失败后可用内存减少。
手动修复内存映射(存储在 UEFI 变量中MemoryTypeInformation
)可以解决该问题 - 虽然 TianoCore 参考实现建议删除变量也应该有效,但我不想冒这个险。
答案3
这可能是不支持的配置吗?此帖子建议,可能重复:
答案4
BIOS 可能已修复此问题。查找 Memory Hoisting 或 Memory Hole 设置。
它们所做的是修改内存映射,以便实际 RAM 映射到 4 GB 以上,在 RAM 映射中留下一个空位供设备使用。
这样设置的原因是,如果 RAM 超过 4 GB,32 位操作系统将无法访问它。