Bob*_*Bob 29 memory windows-7 hardware-failure
是否可以使用有缺陷的 RAM 模块运行 Windows(7、x64)?更准确地说,有没有办法告诉 Windows 不要分配已知的错误地址或地址块?
对于 Linux,有BadRAM。是否有适用于 Windows 的现有实现?Windows的内核(NT 6.1)甚至可以做到吗?也许是内核模式驱动程序?
Bob*_*Bob 20
Windows BCD(引导配置数据)实际上有一个{badmemory}对象。似乎 ECC 内存“预测失败”的内存地址将在此处列出,而不会被操作系统使用。
该{badmemory}对象接受一个BadMemoryList(BCD 类型0x1700000a)元素,它是一个整数列表,可以输入为十六进制,以空格分隔。我想可以将 memtest86 发现的坏内存地址手动插入到该元素中 - 但我还没有测试过。显然,它接受“页帧号”,即实际地址除以 4096。不幸的是,这些地址/PFN 可能与内存诊断报告的地址/PFN 不匹配。可以使用Visual BCD Editor进行手动编辑。
在任何情况下,都应按照其他答案的指示更换有故障的记忆棒。这只是关于解决该问题的可能方法的说明(暂时?)。
jgu*_*avo 15
我在带有 SoC 的平板电脑中遇到了 RAM 问题。内存焊接或集成到 SoC 中,无法更换。
我在阿根廷,卖家在中国,运费和时间,寄保修也没意义。
我成功了几次。
传递损坏的内存参数的关键是:
0x10000000对应于 Windows 中的 0x100000x00001000对应于 Windows 中的 0x1bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBAmemtest 中的错误从 0x000B7000 到 0x000BAFFF。注意不能放一个范围的回忆,而是把所有的页面一个一个bcdedit /enum {badmemory}, 显示标记页面的列表。bcdedit /set badmemoryaccess no 防止使用标记的页面san*_*ier 14
Windows BCD 有{badmemorylist}和{badmemoryaccess}对象。您应该将第一个 ( {badmemorylist})设置为由空格分隔的坏内存页(例如bcdedit /set badmemorylist 1499543 1434007),将第二个 ( {badmemoryaccess}) 设置为No( bcdedit /set badmemoryaccess No)
请记住,Windows 中的内存页大小通常为 4KB
在 windows 7 中测试过,效果很好
您可以使用Rammaputil(由 Sysinternals 提供)测试您的设置
PS我从 "Windows Internals Book" chapter 10
A D*_*arf 13
鲍勃,你的问题分为三个部分。我将一次解决一个问题。
确实可以使用有缺陷的模块运行 Windows 7。根据坏扇区的位置以及模块在 DIMM 组中的位置,只要不尝试接触内存的坏部分,Windows 7 就会像什么都没有一样运行。因此,理想情况下,您应该将有缺陷的模块尽可能远离 bank 0。当然,如果这是您唯一的模块,那您就不走运了。
在 x86(32 位和 64 位)操作系统上,内存由内核管理。正如您所提到的,BadMem 能够阻止 Linux 中的坏内存扇区。它的工作原理是指示内核锁定您指定的那些内存地址。这有效地阻止了 Linux 在分配(和释放)内存时寻址这些地址。但是为了做到这一点,BadMem 需要修补内核。BadMem 只不过是您在应用之前配置的内核补丁。
现在,您在 Windows 上没有这种能力。您无法修补内核。开发内核模式驱动程序也不会给您带来任何好处,因为 Windows 内核永远不会让您的驱动程序优先于其内存管理架构(可以理解)。
因此,您不能以任何方式指示窗口不使用某些内存地址。唯一的方法是让 Microsoft 专门针对您的情况修补内核。不太可能。
内存模块可能包含错误地址的原因并不多。最终这一切都归结为生产线中的错误,假设它在进入您的计算机之前没有受到损坏。众所周知,与硬盘驱动器不同的是,内存模块中没有可移动部件。因此,坏扇区不会像硬盘驱动器扇区那样扩散。
然而,内存测试软件并非万无一失。它有可能(并且很常见)通过某些实际上很糟糕的地址。因此,随着越来越多的地址被发现是坏的,坏内存可能会给人一种“传播”的印象。出于这个原因,像 BadMem 这样的工具暴露了它们的弱点,因为它们自然只能处理你指示它们处理的那些地址。
任何人都不太可能对内存模块进行彻底的测试并识别所有坏的内存地址,然后将它们锁定并最终得到一个“好”的内存模块。最简单的做法是将地址错误的模块视为有缺陷的模块,因此不值得信任。
这意味着,尽管 BadMem 是一个有吸引力的提议,但它实际上并不是解决记忆力差问题的方法。更有可能的是,您最终仍会得到一个尝试读取坏扇区并因停止错误而崩溃的操作系统。坏模块就是坏模块就是坏模块。
小智 5
看看这个实用程序: https: //github.com/prsyahmi/BadMemory
它非常易于使用并且支持地址范围的阻止。您可以使用从 MemTest86 收到的完整地址,而无需删除最后三位数字。
| 归档时间: |
|
| 查看次数: |
43659 次 |
| 最近记录: |