Answers:
显然,memtest86 +无法测试当前包含memtest86 +可执行代码的内存区域(但是,如果该区域中存在内存错误,则测试本身很可能崩溃)。但是,memtest86 +能够在运行时将其自己的代码重定位到其他地址,通过使用此技巧,它可以测试固件(BIOS)允许使用的所有内存-并非一次即可。
此代码重定位在memtest86 +源代码存档内的README.background中进行了描述(文件已过时-例如,它指出用于memtest86 +代码的地址为0x2000和0x200000,但源中定义的低地址为实际为0x10000,高位地址为0x2000000或0x300000,具体取决于计算机中的内存量)。
但是即使有这种重定位技巧,由于以下原因,memtest86 +也无法测试所有内存:
通常,固件(BIOS)保留一些RAM区域供自己使用(例如ACPI表)。尽管这些RAM区域可以由CPU访问,但是将任何内容写入其中都可能导致无法预料的行为。
RAM的某些部分用于系统管理模式,特权SMM代码之外的CPU甚至无法访问。
由于旧版PC内存布局的古怪之处,无法访问640K和1M之间的RAM地址范围(某些RAM可能用作BIOS ROM和SMM的影子,其他部分可能完全无法访问)。
不,memtest无法测试其自身的内存。但是,它很小(只有几KB),所以几乎没有关系。编辑:此语句是错误的,因为如所选答案中所述,memtest可以动态重定位自身以测试所有用户可寻址内存。
-
从理论上讲,现代处理器可以在启动时从很小的程序(如memtest)中将部分高速缓存配置为可编程存储器,而完全不接触DRAM。
但是,它是特定于模型的功能(需要BIOS支持),我认为memtest没有使用它。
memtest
正在测试CPU缓存。因此,如果memtest
将其加载到此缓存中,则无法测试缓存的这一部分,这更成问题了,因为它比内存小得多?