Как Memtest86 работает с плохой оперативной памятью?

17

Я читал еще один вопрос о Memtest и начал задаваться вопросом: как Memtest86 работает с плохой RAM?

Подумайте об этом: Memtest86 должен хранить информацию о том, какой объем ОЗУ, что он поместил в ОЗУ для последующего сравнения, где обновлять экран и многое другое. Использование переменной требует, чтобы оперативная память функционировала должным образом. Но как вы можете получить надежные результаты, когда вы запускаете программу, возможно, с дефектом оперативной памяти?

Аналогия этому - запуск программы проверки жесткого диска с жесткого диска, который вы проверяете. Вы бы никогда этого не сделали, плохой блок может повлиять на программу многими неожиданными способами

Как Memtest86 работает с плохой оперативной памятью?

TheLQ
источник
2
К вашему сведению, вся работа процессора выполняется в оперативной памяти. Когда программа выполняется, она выполняется в оперативной памяти, она не имеет ничего общего с переменными. Вы можете написать программу, которая абсолютно ничего не делает и никогда не использует переменные, но эта программа находится в памяти. Очень интересный вопрос.
Келтари
2
Поскольку во всех (нетривиальных) программах используются переменные, для тестировщиков / исполнителей памяти задача состоит в том, чтобы хранить свои переменные в регистрах, а не в памяти. Это также означает, что нет стека! Некоторые программы памяти выполняются из ПЗУ (например, Гарвардская архитектура) или, если они находятся в тестируемой ОЗУ, перемещают код после каждого прохода. Успех или неудача в выполнении программы тестирования в разных местах ОЗУ были частью упражнения. Конечно, есть, вероятно, плохо написанные тестеры памяти, которые используют тестируемое ОЗУ как обычную программу
опилки
@Keltari технически, части BIOS работают прямо из NOR flash ....
rackandboneman

Ответы:

9

Главным образом потому, что количество оперативной памяти, которое требуется для загрузки memtest, чрезвычайно мало. Если программа запускается, вероятно, что память в этой области в порядке.

Вероятность того, что

  1. Небольшой раздел памяти Memtest был загружен в плохо.
  2. Это было все еще достаточно хорошо, чтобы он мог успешно завершить все тесты без заметных проблем.

Очень маловероятно.

user606723
источник
7

Memtest довольно долговечен в том смысле, что он не зависит от оперативной памяти, которую он тестирует.

Например, тест 0 использует алгоритм « ходячих» , и для этого теста требуется только один указатель (вероятно, кэшированный), поскольку он сравнивает только два последовательных адреса памяти.

Так что, если у нас есть 3-битная RAM-карта, memtest загружает ее так:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

И если первый адрес поврежден, он будет сравнивать два случайных местоположения:

00000001 00100000

И все равно не получится, даже если переменные memtest повреждены.

digitxp
источник
3

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

Может случиться так, что он все еще способен читать и обнаруживать ошибки в своей собственной памяти, поскольку, будучи единственной загруженной программой, он должен иметь доступ практически ко всей памяти в системе и, таким образом, иметь возможность считывать и сравнивать эту память с «известный хороший» образец.

Мокубай
источник
Я в основном думал об изменениях в поведении, которые могла сделать плохая RAM. Например, если плохой баран изменил логику так, чтобы все тесты всегда показывались верными.
TheLQ
Я бы сказал, что вполне возможно, что при однократном переворачивании во время тестирования ложное чтение будет считаться истинным, но более вероятно, что переворачиваемый бит будет в чем-то гораздо более важном, в Memtest я ожидал бы размер фактического выполнения код должен быть больше, чем «контрольные примеры», и поэтому я ожидаю, что небольшая ошибка приведет к ужасному сбою программы, прежде чем она обнаружит проход вместо сбоя. Я признаю, что это возможно, хотя.
Мокубай
1

Будучи маленьким. Если какая-то память работает плохо, чем меньше программа, тем меньше вероятность того, что какая-то часть программы окажется в одной из проблем. Принимая во внимание, что загрузка достаточно далеко, чтобы загрузить тест памяти, будет включать в себя некоторый код прошивки с использованием ОЗУ, есть вероятность, что, если вы сможете пройти так далеко, низкие области ОЗУ будут работать достаточно хорошо, чтобы memtest смог запустить из них.

wrosecrans
источник
1

Подумайте об этом: Memtest86 должен хранить информацию о том, какой объем ОЗУ, что он поместил в ОЗУ для последующего сравнения, где обновлять экран и многое другое. Использование переменной требует, чтобы оперативная память функционировала должным образом. Но как вы можете получить надежные результаты, когда вы запускаете программу на, возможно, дефектной памяти?

Ну, это то, что делает Memtest - он записывает различные (известные) шаблоны в вашу RAM, считывает их обратно и сравнивает. Если есть несоответствие, ваша RAM должна быть повреждена.

Аналогия этому - запуск программы проверки жесткого диска с жесткого диска, который вы проверяете. Вы бы никогда этого не сделали, плохой блок может повлиять на программу многими неожиданными способами

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

Как Memtest86 работает с плохой оперативной памятью?

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


TL, DR: Memtest86 + работает только при условии, что первый мегабайт вашей оперативной памяти все еще в порядке (место, где она будет загружена, скорее всего). Предполагая, что эта область повреждена, сам Memtest86 + просто не будет функционировать (что является довольно быстрым показателем того, что ваша ОЗУ плоха даже без запуска тестов).

Прорвать
источник
0

Если оперативная память, в которой приложение сохраняет переменные, плохая, то большинство тестов не пройдут.

Алгоритм записывает все виды различных шаблонов, а затем проверяет, хорошо ли они написаны, читая их снова, если запись или чтение не прошли правильно, это приведет к сбою рассматриваемого теста. Запустив большинство тестов и оставив их работать на несколько часов, вы сможете увидеть, насколько стабильна ваша RAM ...

Томас Хантер
источник