什么是ECC?
ECC是 Error Checking and Correcting(错误检查和纠正)的简写。 它广泛应用于各种领域的计算机指令中。 而本文主要讲解ECC在计算机内存中的应用。ECC和奇偶校验(Parity)类似。然而,在那些Parity只能检测到错误的地方,ECC实际上可以纠正绝大多数错误。经过内存的纠错,计算机的操作指令才可以继续执行。
在内存中会发生什么样的错误呢?
绝大多数常见的内存出错都是:单位错,多位错,列错,行错。它们都比较相似。单位错大多发生在读一个完整的比特或词的时候有一位比特出错。当读相同的比特和词时总是同一位数据出错,则称为多位错。单位错发生在很多词中,就称列错或行错。
这些错误是怎样被纠正的?
ECC内存使用额外的比特(bit)存储一个用数据加密的代码。当数据被写入内存,相应的ECC代码与此同时也被保存下来。当重新读回刚才存储的数据时,保存下来的ECC代码就会和读数据时产生的ECC代码做比较。如果两个代码不相同,他们则会被解码,以确定数据中的那一位是不正确的。然 后这一错误位会被抛弃,内存控制器则会释放出正确的数据。 被纠正的数据很少会被放回内存。假如相同的错误数据再次被读出,则纠正过程再次被执行。重写数据会增加处理过程的开销,这样则会导致系统性能的明显降低。如果是随机事件而非内存的缺点产生的错误,则这一内存地址的错误数据会被再次写入的其他数据所取代。
ECC到底需要多少额外的空间呢?
加密ECC代码以及纠正一位错误,只需要很少的额外存储空间。和Parity不同的是ECC不会以数据位数的增加速度而增加。例如:数据的位数增加一倍,Parity也得增加一倍,而ECC只需增加一位。所以,一个系统中用8位数据,则需1位用于Parity检验,5位用于ECC。然而,一个32位数据需要4位作Parity,7位作ECC。当数据带宽增加到64位则同时各需要8位分别作Parity和ECC。下表列出了不同带宽的数据所需要的不同位数的ECC和Parity。
ECC是怎样被应用于现实世界中的?
含有ECC的系统可能对于ECC有着不同的用法。通常,当错误数据需要被纠正时,系统会记录下错误并把错误报告给系统管理者。如果数据被多次读出而没有被其他数据取代,则许多出错会被报 告于相同的内存单元。如果系统关闭后这一相同的内存单元被纠正,一个故障很可能发生在内存中而且必须被替代。