90年代初,内存体系采用奇偶性校验(Parity Verifying)技术。奇偶校验内存在每一字节(8位)外又额外增加了一位作为错误检测之用,BIOS中的监控程序会将存入内存中的数据位相加,并将结果存于校验位中。比如一个字节中存储了某一数值10011110,每一位加起来的结果为奇数(1+0+0+1+1+1+1+0=5),校验位存入1。当CPU读取储存的数据时,监控程序再次相加存储的8位数据,并将计算结果与校验位相比较。如果发现二者不同,系统就会产生出错信息。奇偶校验技术仅能粗略地检查内存错误,并不具备纠错能力。
另一种内存纠错技术叫做ECC(Error Correct Code,纠错码),它也是在原来的数据位上外加位来实现的,增加的位用来重建错误数据。在ECC纠错体系中,如果数据为n个字节,则外加的ECC位为log2n + 5。例如对于64位数据,需要外加log28 + 5 = 8个ECC位。
当出现一个存储位错误时,ECC体系可以自动进行纠错。当出现2个数据位错误时,可以检测出来,但不能纠错,这种行为通常称作“单错纠正/双错检测(Single Error Correction/Double Error Detection ,简称SEC/DED)。一次存取中有2个以上的数据位出错时,由于SEC/DED体系检测不出来了,致使数据的完整性受损。采用这种结构的存储器,当检测出多位错误时,系统就会报告出现了致命故障(Fatal fault),之后系统崩溃。
目前一谈到服务器内存,大家都一致强调要买ECC内存,认为ECC内存速度快,其实是一种错误地认识,ECC内存成功之处并不是因为它速度快(速度方面根本不关它事只与内存类型有关),而是因为它有特殊的纠错能力,使服务器保持稳定。ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种领域的计算机指令中,是一种指令纠错技术。
ECC比奇偶校正技术更先进的方面主要在于它不仅能发现错误,而且能纠正这些错误,这些错误纠正之后计算机才能正确执行下面的任务,确保服务器的
