В отличие от флэш-памяти, энергонезависимая память настроек BIOS (которая, по крайней мере, исторически часто реализуется с использованием дополнительной технологии металл-оксид-полупроводник , отсюда и псевдоним CMOS-память) очищается, если от нее отключается питание. Небольшая батарея, подключенная к материнской плате, обеспечивает питание, когда внешнее питание отключено от материнской платы. Эта батарея также приводит в действие часы реального времени, когда другие источники питания недоступны. Как и все батареи, в конечном итоге он разряжается и требует замены; это может произойти через 5-10 лет, в зависимости от использования системы. "Ошибка контрольной суммы CMOS" (и аналогичные сообщения) или сбрасываемые системные часы являются классическими признаками разрядки батареи.
Настройки BIOS содержат несколько критических значений системы. Когда память больше не поддерживается из-за разрядки батареи, все возвращается к шаблону, который определяется физическим и электрическим дизайном памяти, а не к шаблону, совпадающему с настройками, введенными пользователем. Должен быть механизм для обнаружения и обработки этой ситуации.
Можно представить, что память настроек сканируется, и для данных выполняется набор проверок работоспособности, которые, вероятно, уловили бы вышеперечисленное в подавляющем большинстве случаев. Но он может не поймать их всех, а контрольная сумма дает дополнительные преимущества. Прежде всего, это позволяет уловить любое непреднамеренное повреждение данных. Помните, что в первоначальном проекте IBM PC XT/AT любой процесс мог выполнять запись в любую область памяти, включая выдачу инструкций записи в память настроек BIOS, поэтому ошибочная часть программного обеспечения могла (непреднамеренно или злонамеренно) повредить эти настройки. Как бы ни была мала, существует также вероятность того, что законное переписывание настроек системы может быть прервано, например, из-за сбоя питания.
Точная механика вычисления контрольной суммы, где хранить контрольную сумму, что именно покрывается контрольной суммой и т.д., Зависит от конкретной реализации BIOS и, возможно, версии BIOS. Важной частью является то, что необходимо обнаружить случай сброса памяти. Чтобы охватить различные конструкции микросхем памяти, это означает, что он должен быть более сложным, чем простая сумма (по модулю 2 ^ n) всех байтов, но, по крайней мере изначально, BIOS BIOS IBM был 8 КиБ (что требовало гораздо большего, чем это) так что это тоже не может быть особенно сложным алгоритмом.
Поскольку данные, защищенные контрольной суммой, частично критичны к системе, просто игнорировать ошибку (которую я бы не назвал ошибкой; это скорее предупреждение) было бы нежелательно. Вместо этого вы должны войти в утилиту конфигурирования ("Настройка BIOS") и выполнить любой ритуальный танец, необходимый для автоматического определения или возврата к заводской конфигурации, а затем отрегулировать любые параметры, которые необходимо настроить, исходя из значений по умолчанию для вашей конкретной системы. Некоторые системы, которые знали, что данные некритичны, могли игнорировать несоответствие контрольной суммы и продолжать работу, но в IBM PC/AT и далее это означало бы, что вы рискуете использовать неверные данные конфигурации системы (включая геометрию жесткого диска; Автоопределение геометрии жесткого диска появилось намного позже, и я вспоминаю использование системы на основе 386, которая требовала ручной настройки геометрии жесткого диска через настройку BIOS).