PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Оперативная память

Схема проверки четности

При разработке стандарта контроля четности IBM определила, что значение бита четности задается таким, чтобы количество единиц во всех девяти разрядах (восемь разрядов данных и разряд четности) было нечетным. Другими словами, когда байт (8 бит) данных заносится в память, специальная схема контроля четности (микросхема, установленная на системной плате или на плате памяти) подсчитывает количество единиц в байте. Если оно четное, на выходе микросхемы формируется сигнал логической единицы, который сохраняется в соответствующем разряде памяти как девятый бит (бит четности). Общее количествоединиц во всех девяти разрядах при этом становится нечетным. Если же количество единиц в восьми разрядах исходных данных нечетное, то бит четности равен нулю, и сумма двоичных цифр в девяти разрядах также остается нечетной.

Рассмотрим конкретный пример (имейте в виду, что разряды в байте нумеруются начиная с нуля, т.е. 0, 1, 2, ..., 7).


Разряд данных: 0 1 2 3 4 5 6 7 Бит четности
Значение бита: 1 0 1 1 0 0 1 1 0


В данном случае общее число единичных битов данных нечетное (5), поэтому бит четности должен быть равен нулю.

Рассмотрим еще один пример.


Разряд данных: 0 1 2 3 4 5 6 7 Бит четности
Значение бита: 0 0 1 1 0 0 1 1 1


В этом примере общее число единичных битов данных четное (4), поэтому бит четности
должен быть равен единице, чтобы количество единиц во всех девяти разрядах было нечетным.

При считывании из памяти та же самая микросхема проверяет информацию на четность.

Если в 9-разрядном байте число единиц четное, значит, при считывании или записи данных произошла ошибка. Определить, в каком разряде она произошла, невозможно (нельзя даже выяснить количество испорченных разрядов). Более того, если сбой произошел в трех разрядах (в нечетном их количестве), то ошибка будет зафиксирована; однако при двух ошибочных разрядах (или четном их количестве) сбой не регистрируется. Поскольку одновременная ошибка в нескольких разрядах одного байта крайне маловероятна, такая схема проверки была недорогой и при этом позволяла с большой вероятностью определять ошибки в памяти.

Сообщения об ошибках четности в разных компьютерах имеют следующий вид.


В IBM PC: PARITY СНЕСК х
В IBM XT:  PARITY СНЕСК х yyyyy (z)
В IBM AT и последних моделях XT:  PARITY СНЕСК х yyyyy


Здесь x может принимать значение 1 (ошибка произошла на системной плате) или 2 (ошибка произошла в разъеме расширения). Символы yyyyy — это шестнадцатеричное число от 00000 до FFFFF, указывающее адрес байта, в котором произошла ошибка. Символ z может принимать значение S (ошибка четности в системном блоке) или e (ошибка четности в корпусе-расширителе).

Примечание!

Компания IBM разработала корпуса-расширители для компьютеров PC и XT, чтобы увеличить количество разъемов расширения.

При обнаружении ошибки схема контроля четности на системной плате формирует немаскируемое прерывание1 (NMI), по которому основная работа прекращается и инициируется специальная процедура, записанная в BIOS. В результате ее выполнения экран очищается и в левом верхнем углу выводится сообщение об ошибке. В некоторых старых компьютерах IBM при выполнении указанной процедуры приостанавливается работа процессора, компьютер блокируется и пользователю приходится перезапускать его с помощью кнопки сброса или выключать и через некоторое время вновь включать питание. При этом, естественно, теряется вся несохраненная информация.

В большинстве компьютеров в случае ошибки четности процессор не останавливает свою работу и пользователю предоставляется возможность либо перезагрузить компьютер, либо продолжить работу, как будто ничего не случилось. В подобных системах сообщение об ошибке может выглядеть иначе, чем в компьютерах IBM, хотя общий его смысл, конечно же, остается прежним. Например, во многих компьютерах с BIOS от компании Phoenix выводится сообщение


Memory parity interrupt at хххх:xxxx
Туре (S)hut off NMI, Type (R)eboot, other keys to continue

или

I/O card parity interrupt at хххх:xxxx
Туре (S)hut off NMI, Type (R)eboot, other keys to continue


Первое появляется при ошибке четности на системной плате, а второе — при ошибке четности в слоте расширения. Обратите внимание, что адрес памяти хххх:хххх выводится в формате [сегмент]:[смещение], а не в линейном виде, как в компьютерах IBM. Но в любом случае местоположение байта с ошибкой определяется однозначно.

После просмотра сообщения об ошибке возможны следующие варианты действий:

  • нажмите клавишу <S>, чтобы выключить контроль четности и восстановить работу системы с момента первой ошибки четности;
  • нажмите клавишу <R> для перезагрузки компьютера с потерей всех несохраненных данных;
  • нажмите любую другую клавишу для продолжения прерванной операции без отключения контроля четности.

Если ошибка “хроническая”, скорее всего, в ближайшее время произойдет следующее прерывание, вызванное контролем четности. Как правило, лучше всего нажать клавишу <S>, отключив контроль четности, что позволит сохранить информацию. Запишите нужную информацию на дискету или флэш-карту, чтобы случайно не испортить жесткий диск. Не удаляйте старую версию файла (пока еще хорошую), так как при сбоях памяти новая сохраненная информация может быть испорчена. Поскольку контроль четности отключен, операции сохранения будут выполнены без прерываний. После этого выключите компьютер, включите его снова и запустите программу диагностики памяти для выяснения причины ошибки. Иногда ошибка обнаруживается процедурой POST непосредственно при загрузке, но чаще приходится использовать более сложные диагностические программы.

Базовая система ввода-вывода компании AMI выводит следующие сообщения об ошибках четности:


ON BOARD PARITY CHECK ADDR (НЕХ) = (ххххх)

и

OFF BOARD PARITY CHECK ADDR (НЕХ) = (ххххх)


Эти сообщения указывают на то, что при выполнении процедуры POST обнаружена ошибка по указанному адресу памяти. Первое сообщение появляется при ошибке на системной плате, второе — при ошибке на плате адаптера в слоте расширения. AMI BIOS может выдавать также сообщения об ошибках в памяти:


Memory parity error at ххххх

и

I/O card parity error at ххххх


Эти сообщения появляются при возникновении ошибок в процессе работы (а не при выполнении процедуры POST); первое относится к памяти на системной плате, второе — к памяти на плате адаптера в разъеме расширения.

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

Учтите, что содержание сообщений зависит не только от версии микросхемы ROM BIOS, но и от используемой операционной системы. Операционные системы с защищенным режимом, к числу которых относится большинство версий Windows, перехватывают возникающие ошибки и загружают собственную программу их обработки. Обработчик ошибок, в свою очередь, выводит на экран собственное сообщение об ошибке, отличающееся от характерных для ROM BIOS. В этих сообщениях, появляющихся на синем экране или в каком-либо другом виде, обычно указывается, что данная ошибка связана с памятью или контролем четности. Например, при возникновении ошибки подобного рода Windows 98 выводит на экран следующее сообщение:


 Memory parity error detected. System halted.


Внимание!

Если появляется сообщение об ошибке четности, значит, содержимое памяти искажено. Подумайте, стоит ли записывать искаженные данные вместо сохраненных в прошлый раз? Безусловно, нет! Лучше записать файл под измененным именем. Кроме того, в случае ошибки четности постарайтесь сохранить работу только на дискете или устройстве USB и избегайте записи на жесткий диск — не исключена вероятность (хотя и небольшая) повреждения жесткого диска при записи на него искаженного содержимого памяти.

После сохранения работы можно попытаться определить причину ошибки и отремонтировать компьютер. Возможно, у вас возникнет желание отключить контроль четности и продолжить работу, как ни в чем не бывало. Но имейте в виду, что это почти то же самое, что выкрутить датчик индикатора давления масла в протекающем двигателе автомобиля (чтобы аварийная лампочка не действовала на нервы).

Еще несколько лет назад, когда память была дорогой, некоторые компании выпускали модули SIMM с фиктивными микросхемами проверки четности. Вместо того чтобы хранить биты четности для каждого байта памяти, эти микросхемы генерировали всегда корректный бит дополнения. Таким образом, когда система пыталась записать бит четности, он попросту отбрасывался, а при считывании байта всегда подставлялся “нужный” бит четности. В результате система всегда получала информацию о корректной работе памяти, хотя на самом деле все могло быть далеко не так.

Такие мошеннические действия были вызваны дороговизной микросхем памяти, и производители были готовы переплатить пару лишних долларов на генератор, чтобы не платить за более дорогую микросхему, хранящую биты четности. К сожалению, определить наличие в модуле памяти такого генератора было достаточно сложно. Поддельный генератор четности внешне отличался от обычных микросхем памяти и имел маркировку, отличную от других микросхем модуля. Большинство из генераторов имели логотип “GSM”, который указывал на изготовителя логического устройства проверки четности, часто отличавшегося от компании, выпустившей сам модуль памяти.

Единственным инструментом, позволявшим выявить модули с поддельным контролем четности, были аппаратные тестеры, такие как Tanisys (www.tanisys.com), CST (www.simmtester.com) и Innoventios (www.memorytest.com). Лично мне не случалось встречать модули SIMM и RIMM с поддельной проверкой четности, к тому же цены на память резко упали, что устранило первопричину подобных махинаций.