教师：在这节课中,
我们将讨论ECC内存, 即所谓的纠错码｡
但首先, 我们需要涵盖非奇偶校验和奇偶校验的概念｡
当我们谈到非奇偶校验时,
这是一个标准内存｡
它不检查错误, 它允许数据随意放入或取出内存,
这就是大多数内存的情况｡
非奇偶校验存储器的制造成本非常低,
并且它的速度比奇偶校验存储器更高｡
另一方面, 奇偶校验存储器将用于执行基本的错误检查,
并确保存储器内容的可靠性和完整性｡
正因为如此,
这种内存会比非奇偶校验内存慢,
但它具有服务器和某些高端桌面工作站所需的可靠性｡
现在, 具有奇偶校验的内存将能够根据它所看到的内容进行基本计算,
以验证数据是否正确｡
如果这些数据是好的, 它会使用它｡
如果不是, 就会出现错误,
但无法修复｡
它只能说这里有一个错误, 但我不知道如何修复它｡
基本上, 它的工作原理是让每个字节都有一个与之关联的奇偶校验位｡
因此, 不再是8位, 而是9位, 因为8个数据位加上1个奇偶校验位｡
现在, 奇偶校验位将在正确的时间设置｡
然后, 当你从内存中读取数据时,
它会被计算和比较, 以确定自上次将数据写入内存以来,
是否有任何位发生了变化｡
但是, 这种类型的检查仅限于检测这些单个位错误｡
如果有两个比特被修改了,
奇偶校验可能会通过, 因为记住,
比特只能是0或1｡
例如, 假设我存储了数字0,
它在二进制中被写为0000000｡
现在, 如果我把所有这些位加在一起, 我得到8个0,
这给了我0作为奇偶校验位｡
现在如果我从内存中读取这个数字,
我看到有八个0, 我把它们加在一起,
我得到0, 0匹配我的奇偶校验位, 所以这是好的数据｡
另一方面,
假设我写下数字1,
它被写成00000001｡
如果我把这些数字加起来, 我会得到1｡
我把它放在第九位的奇偶校验位里｡
通过这样做, 我现在从那里读取, 我得到00000001｡
因为所有这些加起来都是1,
并且与我的奇偶校验位相匹配,
我知道数据是好的, 但是如果我把它放入内存中, 它在那里呆了几个小时,
1意外地变成了0, 如果我现在读到它, 我得到0000000,
我把它们加在一起, 我得到0, 我把它与我的奇偶校验位进行比较,
其中有一个1, 现在告诉我有一个错误, 出了问题｡
我不知道这八个比特中的哪一个被改变了,
但至少有一个被改变了｡
现在, 另一方面,
如果从00000001的数字被改变为01010001,
我现在有两个比特被内存从0意外地改变为1｡
当我看我的奇偶校验时, 它仍然是1, 因为当我把这些加起来时,
如果它是奇数, 它将是我的奇偶校验位的1｡
如果我把它们加起来是偶数,
那就是0｡
如你所见, 如果你使用奇偶校验类型的计算,
你将无法检测到错误, 如果这里面有两个比特被改变｡
现在, 好消息是大约90%的错误都是单比特类型的错误,
因此奇偶校验通常足以满足我们的大多数情况｡
但是, 如果您正在处理像为银行运行服务器这样的事情,
出现任何类型的错误都可能是一件坏事｡
所以我们想要比平价更好的东西,
这就是ECC发挥作用的地方｡
ECC是Error Correcting Code的缩写｡
纠错码是将奇偶校验提升到下一个级别的存储器类型｡
现在它不仅可以检测到错误,
就像奇偶校验一样,
而且还可以为您纠正错误｡
现在ECC比奇偶校验慢一点, 奇偶校验也比非奇偶校验慢｡
因此, 您会为这个额外的功能放弃一些性能,
但当您使用ECC时,
您会从内存中获得更高的完整性和可靠性, 因为它将能够检测到这些错误并修复这些错误｡
一般来说, 你只会看到ECC或纠错码被用于真正的高端工作站或服务器,
因为额外的成本和额外的高水平的完整性只需要在这些类型的环境｡
现在你可能想知道,
ECC实际上是如何确定错误的, 以及如何修复它的？
要做到这一点,
它将使用缓冲内存或注册内存｡
现在缓冲内存或注册内存有额外的硬件,
它将位于内存和CPU或处理器之间｡
这个硬件被称为寄存器, 它在数据被发送到CPU之前将数据存储到缓冲区｡
此功能在许多系统中用作可靠性度量,
特别是像服务器这样具有许多不同内存模块的系统, 其中可能发生错误｡
这些系统需要缓冲或注册数据, 以减少这些具有大量内存模块的系统所使用的电气负载,
并且这可以与奇偶校验或纠错码内存配对, 以便能够为您提供您正在寻找的额外可靠性并检测这些错误｡
现在, 为了使用纠错码模块,
您的主板必须支持它以及您的CPU｡
如果这些组件不支持ECC, 那么即使您购买了成本更高的ECC模块,
您也不会获得额外的ECC优势｡
所以记住这一点｡
大多数主板要么支持ECC, 要么不支持｡
一般来说这不是一个选择｡
因此, 如果您购买支持ECC的主板,
您将不得不购买ECC模块,
即那些注册的内存模块｡
现在, 如果您找到支持ECC或非ECC模块的主板,
通常它们不会同时支持两者｡
因此, 您的所有模块都必须是ECC, 否则您的所有模块都不能是ECC｡
混合使用它们会导致系统错误,
主板不知道如何处理｡
现在我想提的最后一件事是,
如果你使用的是DDR5, DDR5在模块本身内部确实有一些错误检查｡
这不被认为是ECC或ECC模块｡
因此, 新的DDR5模块中的这种错误校正可以在不支持ECC的主板上使用,
并且仍然具有一些错误检查功能｡
这是一种不同形式的错误检查,
它不被认为是纠错码｡
所以请记住这一点, 不要让它混淆你,
当你在外地｡
这是一种不同形式的错误检查,
DDR5模块仍然可以作为ECC或非ECC模块出售,
因为除了内部错误检查之外, 如果它们支持ECC, 它们还可以与CPU和主板一起工作, 并且它们现在也是错误纠正代码｡
我知道这有点让人困惑｡
所以你出外勤的时候要注意这点｡