ECC是什么?
在电子数字的世界里,所有的信息都是以简单的“0”与“1”表示;不过当数据在电子元件间进行传递时,是有可能发生数据“误传”的情形,也就是说原来该是0的比特数据,却被误植为1的比特数据,而产生错误。其可能发生的原因相当多,包括电子噪声、元件硬件上的问题,或是传输接口不稳等,都可能造成如此的结果。
这种状况若发生在存储器中,所带来的灾难则是可大可小。比如在游戏中,你可能对画面上突然显色不正常的小方块不以为意,但此时若不是在游戏中,而是正在进行硬盘重组的工作,相信结果将令你花容失色,惊叫起来。也正因为如此,在存储器中便发展出ECC(Error-Correcting Code)与Parity Check等的检错方式,希望能降低数据传输的错误。
Parity工作原理
早先所使用的存储器数据检错方式是Parity Check,其是以每8比特增加1比特的方式进行检错。因此若是具备Parity的存储器,其数据宽度将比非parity的存储器为大。不过若以Parity的检错方式看,其多出的奇偶位事实上只用于分辨奇数或偶数个比特数。以表格1为例(假设工作时采用奇数形式),当所有的比特数据在加上奇偶位后,总位数应该是奇数,因此当数据从存储器被读出时,若不为奇数值,系统便能得知在数据中必有某一位发生错误,而达到检错的目的。不过很可惜的是,这种方式仅能得知是某一位发生错误,并无法确定是哪一个位置发生错误。
另外奇偶位检错还有一个大问题。在表格1中,读者可以发现11101101与01101111相加后总的位数相同,差别仅在第1个与第7个位置上比特值不同。若此时两者分别代表存在存储器中的数据,与读取存储器后传出的数据时,就发生了前面所说的错误情况。不过此时却无法从Parity校验中得知数据发生错误,因此Parity事实上是无法运用在双数位的检错上!
ECC工作原理
ECC则是另一种更为进步的存储器数据检错机制。其工作的方式与Parity不同,并不是采用单一比特的方式来进行检错,而是采用数据块(block)概念与复杂的演算方法来修正数据。因此不仅能检测多位比特错误,还能进行修正单一比特的错误。以168针的DIMM存储器模块来说,若以64bits为一数据块单位,便需要8bits的容量来作为ECC之用(32bits则需7bits),因此总数据宽度便与168针的Parity存储器相同。
而由于如此,多数主机板可以利用具有Parity功能的168针存储器来执行ECC;不过也有少数的主机板,只能使用经过特殊设计的ECC存储器执行此功能,是读者需要注意的地方。不过若要能确实执行ECC功能,除了所购买的存储器规格要支持外,主机板芯片组(如Intel 440BX、430HX等)也需要支持,且制造厂商也必须在主机板上设计开启此项功能,才能毕尽全功。由于具ECC的存储器在设计上比较复杂一些,因此价格自然也就比较高了。