1

Не секрет, что самопроизвольное повреждение хранимых данных (например, переворот) не является частым, но все же довольно вероятным событием в обычной операции SDRAM (включая DDR 1/2/3/4 SDRAM).

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

Но как быть с настольными / портативными ПК и ручными гаджетами, использующими модули памяти не-ECC? Как разработчик может быть уверен, что переменная содержит именно то значение, которое ей записано?

3 ответа3

0

Я не думаю, что существуют какие-либо механизмы предотвращения ошибок в системах, не относящихся к ECC, ни на уровне системы, ни на уровне ОС. Я не верю, что Windows регулярно обновляет содержимое ОЗУ, аппаратное обеспечение должно сохранять значения в памяти.

  • Быстрая проверка памяти выполняется в BIOS при запуске системы, поэтому здесь можно обнаружить некоторые серьезные ошибки.

  • Некоторые файлы, такие как установщики, могут выполнять проверки CRC. Но эти ошибки могут исходить от носителя, а не из памяти.

  • В случае случайной ошибки в ячейке памяти, которая не будет использоваться или будет перезаписана. Нет проблем. Я подозреваю, что в этом месте происходит очень большой процент случайных, неповторяющихся ошибок.

  • Коррупция в пространстве приложения может генерировать исключение, а не сбой, который может или не может быть обработан изящно. Однако это было бы просто удачей - нет исключений для "ошибок памяти" как таковых, но ошибка может произойти в месте, которое обрабатывается обработчиком исключений. В противном случае приложение будет нести поврежденные данные или произойдет сбой, если он вызовет недопустимую операцию.

Помимо этого, приложения / ОС будут аварийно завершать работу, а записанные файлы будут повреждены.

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

0

Да, как правило, система будет выполнять тест ОЗУ при запуске и попытаться изолировать все плохие страницы.

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

Однако, если страница "грязная" (изменена), об ошибке будет сообщено приложению как исключение некоторого рода. Если плохая страница - это какая-то системная страница, то происходит сбой системы.

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

0

Они вообще не справляются с такой ситуацией. Тест начальной загрузки обращается к последнему биту памяти, и это все, что делает обычный BIOS. В Linux/FreeBSD и т.д. Есть исправление, позволяющее исключить адреса памяти из системы. Если вы этого не сделаете, системы, скорее всего, выйдут из строя, когда проверка внутренней целостности ядра обнаружит "переворот в битах" (сигнал 11 в Unix)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .