Код с исправлением ошибок, как в типе памяти, который может исправлять однобитовые ошибки. Память ECC обычно находится на серверах и рабочих станциях, где требуется максимальная надежность.

Информация в современных компьютерах часто хранится в фиксированных количествах. Например, восемь битов могут быть сохранены как один байт.

Память достаточно стабильна, и можно просто хранить информацию как есть. Однако в редких случаях информация становится поврежденной. Чтобы обнаружить это повреждение, вам нужно хранить дополнительную информацию.

Это можно сделать, добавив дополнительный бит, так называемый бит четности. Это позволяет обнаруживать однобитовые ошибки. Он не обнаруживает двухбитовых ошибок и не может восстановить потерянную информацию.

Это не всегда достаточно хорошо. В этих случаях используется ECC. ECC использует интеллектуальный метод для хранения 8 бит информации в 10 битах (таким образом, требуется больше ячеек и он более дорогой). Это позволяет исправить одну битовую ошибку или обнаружить до двух битовых ошибок.


Упрощенное объяснение того, как это работает, взято из этого поста здесь на SU

Представьте себе 0 или 1. Если я читаю либо, то я просто надеюсь, что я прочитал правильно. Если 0 переворачивается на 1 из-за какого-то космического излучения или плохого чипа, я никогда не узнаю.

В прошлом мы пытались решить это с паритетом. Четность добавляла девятый бит на 8 сохраненных битов. Мы проверили, сколько нулей и сколько 1 в байте. Девятое было установлено, чтобы сделать это четное число. (даже для четности) Если вы когда-либо читали байт, а число было неправильным, значит, вы знали, что что-то не так. Вы не знаете, какой бит был неправильным, хотя.

ECC расширил это. Он использует 10 бит и сложный алгоритм, чтобы обнаружить, когда один бит перевернулся. Он также знает, каково было первоначальное значение. Очень простой способ объяснить, как это происходит:

Замените все 0 на 000. Замените все 1 на 111.

Теперь вы можете прочитать шесть комбинаций:

000
001
010
100
101
111

Мы никогда не уверены на 100%, что было изначально сохранено. Если мы прочитаем 000, то это могло быть просто 000, которое мы ожидали, или все три бита могли перевернуться. Последнее очень маловероятно. Биты случайно не переворачиваются, хотя это случается. Допустим, это случается один раз в десять для некоторых простых вычислений (в действительности это намного меньше). Это дает следующие шансы на чтение правильного значения:

000 -> Either 000 (99.9% sure), or a triple flip (1/1000 chance)

001 -> We know something has gone wrong. But it either was 000 and one bit flipped (1:10 chance), or it was 111 and two bits have flipped (a 1:100 chance). So let's treat it as if we read 000 but log the error.

010 -> Same as above.

100 -> Same as above.

011 -> Same as above, but assuming it was a 111

101 -> Same as above, but assuming it was a 111

110 -> Same as above, but assuming it was a 111

111 -> Either 111 (99.9% sure), or a triple flip (1/1000 chance)
111 -> Either 000 (99.9% sure), or a triple flip (1/1000 chance)

ECCs делает подобные трюки, но делает это более эффективно. Для 8 бит (один байт) они используют только 10 бит для обнаружения и исправления.