Контроль чётности ОЗУ
Контро́ль чётности ОЗУ (англ. RAM parity) — это сохранение избыточного бита чётности, представляющего чётность (или нечётность) небольшого объёма компьютерных данных (обычно одного байта), хранящихся в оперативной памяти ОЗУ (оперативное запоминающее устройство — техническое устройство, реализующее функции оперативной памяти), и последующее сравнение сохранённой и вычисленной чётности для обнаружения ошибки данных.
Цель такой проверки — определить, не были ли данные потеряны или перезаписаны при перемещении из одного места хранения в другое или при передаче между компьютерами. Для этого к группе перемещаемых битов добавляют дополнительный бит (бит чётности), который помогает определить, успешно ли они дошли[1].
При записи каждого байта данных в память вычисляется сумма всех бит по модулю два, а полученное значение заносится в дополнительный, девятый по счету, бит. При чтении производится та же операция, и полученное значение сравнивается с хранимым. Если где-то один из битов изменился, генерируется исключение и работа останавливается с выдачей соответствующего сообщения[2].
Первоначально бит чётности хранился в дополнительных отдельных микросхемах памяти; с появлением подключаемых модулей DIMM, SIMM и т. д. они стали доступны в версиях без чётности и с чётностью (с дополнительным битом на байт, сохраняющим 9 бит на каждые 8 бит фактических данных).
Обычно RAM с функцией проверки чётности используют в приложениях, требующих интенсивной обработки данных, например в больших таблицах и базах данных.
История
Механизм контроля чётности был разработан ввиду невысокой надёжности в первых микросхемах оперативной памяти компьютеров, он был необходим для того, чтобы пользователь, в случае частого возникновения ошибок, заменил неисправные чипы на нормальные. Ошибка чётности обычно приводила к остановке машины с потерей несохранённых данных (как правило, это лучший вариант, чем сохранение повреждённых данных). В ранних компьютерах требовалось использование ОЗУ с контролем чётности, и проверка чётности не могла быть отключена.
Однако со временем надёжность интегральных схем возросла, и в результате подобный контроль стал практически не нужен.
Вместе с тем применяемые операционные системы стали многозадачными, и в некоторых случаях использование модулей с чётностью стало не только ненужным, но и вредным. В связи с этим в персональных компьютерах массового назначения память с чётностью просто перестала применяться; более того, многие современные чипсеты контроль чётности просто не поддерживают[2].
Логическое ОЗУ с контролем чётности (также известно как ОЗУ с поддельной чётностью) — это ОЗУ без контроля чётности, которое может использоваться в компьютерах, требующих ОЗУ с чётностью. Логическое ОЗУ с контролем чётности пересчитывает всегда действительный бит чётности каждый раз, когда байт считывается из памяти, вместо того, чтобы сохранять бит чётности при записи в память; вычисленный бит чётности, не указывает на то, были ли данные повреждены (отсюда и название «поддельная чётность»), представляется логике проверки чётности. Это способ использования более дешёвого 8-битного ОЗУ в системе, разработанной для использования только 9-битного ОЗУ с контролем чётности.
Ошибки памяти
В 1970-х и 1980-х годах надёжность ОЗУ была невысокой; например, DRAM 4116, который был стандартом в отрасли с 1975 по 1983 годы, имел значительную степень отказов, так как использовал тройное напряжение (-5, +5 и +12), что приводило к высоким рабочим температурам. К середине 1980-х годов они были заменены на DRAM с одним напряжением (модели 4164 и 41256), что улучшило надёжность.
Но только к 1990-м годам ОЗУ достигло современных стандартов надёжности, ошибки стали менее заметными, так как простое ОЗУ с чётностью вышло из употребления. Ошибки либо остаются незамеченными, так как не обнаруживаются, либо исправляются незаметно с помощью ECC ОЗУ.
Современное ОЗУ, с большим основанием, считается надёжным, и ОЗУ с обнаружением ошибок в значительной степени вышло из употребления для некритических приложений. К середине 1990-х годов большинство DRAM отказались от проверки чётности, так как производители считали, что это больше не является необходимым. Некоторые машины, которые поддерживают чётность или ECC, позволяют включать или отключать проверку в BIOS, что позволяет использовать более дешёвое ОЗУ без чётности. Если используется ОЗУ с контролем чётности, чипсет обычно использует его для реализации коррекции ошибок, а не останавливает машину при ошибке чётности в одном бите.
Тем не менее ошибки, хотя и не являются повседневными событиями, происходят достаточно часто, чтобы на них не обращать внимание. Даже при отсутствии производственных дефектов естественно возникающее излучение вызывает случайные ошибки; тесты на многих серверах Google показали, что ошибки памяти не являются редкими событиями, и что частота ошибок памяти и диапазон уровней ошибок среди различных DIMM были значительно выше, чем сообщалось ранее[3].
Исправление ошибок
Простая проверка чётности «да/нет» требует, чтобы память имела дополнительные, избыточные биты помимо тех, которые необходимы для хранения данных; но если дополнительные биты доступны, их можно использовать не только для обнаружения, но и для коррекции ошибок.
Более ранние варианты ОЗУ, например, в IBM PC/AT (память FPM и EDO), были доступны в версиях, которые поддерживали либо отсутствие проверки, либо проверку чётности (в ранних компьютерах, использующих отдельные чипы ОЗУ вместо модулей DIMM или SIMM, для хранения битов чётности использовались дополнительные чипы); если компьютер обнаруживал ошибку чётности, он отображал сообщение об этом и останавливался. Модули SDRAM и DDR, которые заменили более ранние версии, обычно доступны либо без проверки ошибок, либо с ECC (полная коррекция, а не только чётность)[4].
Пример ошибки в одном бите, которую игнорировал бы система без проверки ошибок, и которая остановила бы машину с проверкой чётности или была бы незаметно исправлена с помощью ECC: один бит застревает в состоянии «1» из-за неисправного чипа или изменяется на «1» из-за фонового или космического излучения. Загружается электронная таблица, хранящая числа в формате ASCII, и число «8» сохраняется в байте, который содержит застрявший бит в качестве восьмого бита; затем в таблицу вносится ещё одно изменение, и она сохраняется. Однако «8» (00111000 в двоичном виде) превращается в «9» (00111001).
Если сохранённая чётность отличается от вычисленной на основе сохранённых данных, это означает, что по меньшей мере один бит был изменён из-за повреждения данных. Необнаруженные ошибки памяти могут привести к последствиям, варьирующимся от незаметных и безвредных до постоянного повреждения сохранённых данных или сбоя машины. В случае домашнего ПК, где целостность данных часто воспринимается как не имеющая большого значения — что вполне справедливо для видеоигр и веб-сёрфинга, но менее актуально для интернет-банкинга и домашних финансов — память без проверки чётности является доступным вариантом.
Однако если требуется целостность данных, память с проверкой чётности остановит компьютер и предотвратит влияние повреждённых данных на результаты или сохранённые данные, хотя это приведёт к потере промежуточных несохранённых данных и остановит использование до замены неисправной ОЗУ. За счёт небольших вычислительных затрат, которые имеют незначительное влияние на современные быстрые компьютеры, обнаруженные ошибки могут быть исправлены — это становится всё более важным на сетевых машинах, обслуживающих множество пользователей.
ОЗУ с ECC (кодом коррекции ошибок) может обнаруживать и исправлять ошибки. Как и в случае с памятью с контролем чётности, необходимо хранить дополнительную информацию и выполнять больше вычислений, что делает ОЗУ с ECC более дорогой и немного медленнее, чем ОЗУ без проверки чётности и ОЗУ с логической чётностью. Этот тип памяти ECC особенно полезен для тех приложений, где важны надёжность или время безотказной работы: сбои битов в слове памяти обнаруживаются и сразу же исправляются без влияния на приложение. Факт возникновения ошибки обычно фиксируется операционной системой для дальнейшего анализа техническими специалистами. В случае, если ошибка является постоянной, может быть запланировано время простоя сервера для замены неисправного блока памяти.
Судебный процесс Wang Laboratories
В 1991 году международная корпорация Wang Laboratories выиграла судебное разбирательство против Toshiba и NEC по своим патентам на SIMM, частично основываясь на своём утверждении об использовании девятого чипа ОЗУ для проверки чётности[5]. В результате SIMM с тремя чипами вместо девяти отдельных чипов для каждого бита стали популярными, так как считалось, что они не нарушают патенты. Однако переход от девятичиповых SIMM к трехчиповым вызвал некоторые проблемы совместимости[6]. Спустя год, в 1992 году, Wang также подала в суд на Mitsubishi, но в этом случае компания не добилась успеха, так как суды в 1997 году определили, что существует лицензионное соглашение. В конечном итоге, к концу 1990-х годов DIMM вытеснили SIMM с рынка, а DIMM не подпадали под иски Wang.