
Можно ли запустить Windows (7, x64) с неисправным модулем RAM? Точнее, есть ли способ указать Windows не выделять известный плохой адрес или блок адресов?
Для Linux естьBadRAM. Существует ли существующая реализация для Windows? Возможно ли это вообще с ядром Windows (NT 6.1)? Может быть, драйвер режима ядра?
решение1
Боб, в твоем вопросе три части. Я отвечу на каждую по очереди.
Запуск Windows с плохой памятью
Действительно, возможно запустить Windows 7 с неисправным модулем. В зависимости от расположения плохих секторов и того, где модуль находится в ваших банках DIMM, Windows 7 будет работать так, как будто ничего нет, пока он не попытается коснуться плохих участков памяти. Поэтому в идеале вам следует переместить неисправный модуль как можно дальше от банка 0. Естественно, если это ваш единственный модуль, вам не повезло.
Блокировка плохих секторов памяти в Windows
В операционных системах x86 (32 и 64 бит) память управляется ядром. Как вы упомянули, BadMem может блокировать плохие сектора памяти в Linux. Он работает, отдавая команду ядру заблокировать указанные вами адреса памяти. Это фактически останавливает Linux от обращения к этим адресам при выделении (и освобождении) памяти. Но для этого BadMem необходимо пропатчить ядро. BadMem — это не более чем патч ядра, который вы настраиваете перед применением.
Теперь у вас нет такой возможности в Windows. Вы не можете пропатчить ядро. Разработка драйвера режима ядра тоже не принесет вам никакой пользы, поскольку ядро Windows никогда не позволит вашему драйверу получить приоритет над своей архитектурой управления памятью (что вполне понятно).
По этой причине вы не можете каким-либо образом указать Windows не использовать определенные адреса памяти. Единственный способ — это чтобы Microsoft пропатчила ядро специально для вашего случая. Маловероятно.
Распространение плохих адресов памяти
Причин, по которым модуль памяти может содержать плохие адреса, не так уж много. В конечном итоге все сводится к ошибке на производственной линии, если только он не получил повреждений до того, как попал в ваш компьютер. В отличие от жестких дисков, в модулях памяти нет подвижных частей, как вы хорошо знаете. Поэтому плохие сектора не имеют тенденции распространяться, как это происходит с секторами жесткого диска.
Однако программное обеспечение для проверки памяти не является полностью защищенным. Возможно (и часто) оно пропускает определенные адреса, которые на самом деле плохие. Поэтому плохая память может создавать впечатление «распространения», поскольку все больше и больше адресов оказываются плохими. По этой причине такие инструменты, как BadMem, раскрывают свою слабость, поскольку они, естественно, могут обрабатывать только те адреса, которые вы им указываете.
Маловероятно, что кто-то может провести тщательный тест модуля памяти и определить все плохие адреса памяти, а затем заблокировать их и получить "хороший" модуль памяти. Проще всего считать модуль с плохими адресами дефектным модулем и, следовательно, не заслуживающим доверия.
Это означает, что, хотя BadMem и является привлекательным предложением, на самом деле это не решение проблемы плохой памяти. Скорее всего, вы все равно получите операционную систему, которая попытается прочитать плохой сектор и упадет со стоп-ошибкой. Плохой модуль — это плохой модуль — это плохой модуль.
решение2
В BCD (данных конфигурации загрузки) Windows на самом деле есть {badmemory}
объект.Похоже, адреса памяти, которые «предсказываются как неисправные» памятью ECC, будут перечислены здесь и не будут использоваться операционной системой.
Объект {badmemory}
принимает элемент BadMemoryList
(тип BCD 0x1700000a
), который представляет собой список целых чисел, которые можно ввести как hex, разделенных пробелами. Я предполагаю, что можно вручную вставить плохие адреса памяти, найденные memtest86, в этот элемент, но я не проверял это.Судя по всему, он принимает «номера кадров страниц», которые представляют собой фактический адрес, деленный на 4096.К сожалению, эти адреса/PFN могут не совпадать с теми, которые сообщает диагностика памяти. Ручное редактирование можно выполнить с помощьюВизуальный редактор BCD.
В любом случае неисправные карты памяти следует заменить, как указано в других ответах. Это всего лишь заметка о возможном способе обойти проблему (временно?).
memtest86 Pro (платно)может создать для вас правильные команды черного спискав своем отчете. Другие ответы описывают процесс выполнения этого вручную.
решение3
У меня была проблема с оперативной памятью в планшете с SoC. Память спаяна или интегрирована в SoC и не подлежит замене.
Я нахожусь в Аргентине, а продавец в Китае, и учитывая стоимость и время доставки, отправлять товар по гарантии нет смысла.
Мне удалось сделать несколько попаданий.
Ключевыми для передачи поврежденных параметров памяти являются:
- адреса в memtest86 соответствуют адресам, используемым в Windows.
- необходимо отметить полные страницы объемом 4 Кбайт.
- в memtest
0x10000000
соответствует 0x10000 в Windows - в memtest
0x00001000
соответствует 0x1 в Windows - означает: номер страницы в Windows удаляет последние 3 шестнадцатеричных числа memtest.
- означает, что: Windows устраняет нули слева.
- обратите внимание на пункты 5 и 6, чтобы избежать ошибок в номерах страниц.
- правильное утверждение:
bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
к ошибкам в memtest от 0x000B7000 до 0x000BAFFF. Обратите внимание, что вы не можете поместить диапазон памяти, но все страницы по одной - не могу добавить страницы, все страницы должны быть отмечены в одной команде. Если новая страница, добавляет перезаписывает старые. Мне удалось добавить 4096 страниц в одной команде. Больше я не пробовал.
bcdedit /enum {badmemory}
, показывает список отмеченных страниц.bcdedit /set badmemoryaccess no
предотвратить использование отмеченных страниц- необходимо перезагрузить после разметки страниц и удаления доступа.
решение4
Посмотрите на эту утилиту:https://github.com/prsyahmi/BadMemory
Он очень прост в использовании и поддерживает блокировку диапазонов адресов. И вы можете использовать полный адрес, полученный от MemTest86, не удаляя последние три цифры.