Можно ли запустить Windows (7, x64) с неисправным модулем памяти? Точнее, есть ли способ сказать Windows не выделять известный неправильный адрес или блок адресов?
Для Linux есть BadRAM . Существует ли существующая реализация для Windows? Это возможно даже с ядром Windows (NT 6.1)? Может быть, драйвер режима ядра?
Ответы:
Боб, на твой вопрос есть три части. Я буду обращаться по одному за раз.
Запуск Windows с плохой памятью
Действительно возможно запустить Windows 7 с неисправным модулем. В зависимости от местоположения поврежденных секторов и расположения модуля в ваших банках DIMM, Windows 7 будет работать так, как будто ничего нет, если она не пытается коснуться плохих участков памяти. Итак, в идеале вы должны переместить неисправный модуль как можно дальше от банка 0. Естественно, если это ваш единственный модуль, вам не повезло.
Блокировка плохих секторов памяти в Windows
В операционных системах x86 (32 и 64 бит) память управляется ядром. Как вы упоминаете, BadMem может блокировать плохие сектора памяти в Linux. Он работает, давая команду ядру заблокировать те адреса памяти, которые вы указали. Это эффективно не дает Linux когда-либо обращаться к этим адресам при выделении (и освобождении) памяти. Но для того, чтобы сделать это, BadMem необходимо исправить ядро. BadMem - это не более чем патч ядра, который вы настраиваете перед применением.
Теперь у вас нет такой возможности в Windows. Вы не можете исправить ядро. Разработка драйвера режима ядра также не принесет вам пользы, поскольку ядро Windows никогда не позволит вашему драйверу иметь приоритет над архитектурой управления памятью (понятно, что так).
По этой причине вы не можете указывать окнам не использовать определенные адреса памяти. Единственным способом для Microsoft было бы специально установить ядро для вашего случая. Навряд ли.
Распространение плохих адресов памяти
Существует не так много причин, по которым модуль памяти может содержать неправильные адреса. В конечном итоге все сводится к ошибке в производственной линии, если предположить, что она не нанесла ущерба, прежде чем попасть в ваш компьютер. В отличие от жестких дисков, в модулях памяти нет подвижных частей, как вы хорошо знаете. Таким образом, плохие сектора не имеют тенденцию распространяться, как в случае с секторами жесткого диска.
Тем не менее, программное обеспечение для тестирования памяти не является надежным. Для него возможно (и обычно) передавать определенные адреса, которые на самом деле плохие. Так что плохая память может создать впечатление «распространения», так как все больше и больше адресов оказываются плохими. По этой причине такие инструменты, как BadMem, показывают свою слабость, потому что, естественно, они могут обрабатывать только те адреса, которые вы им указали.
Маловероятно, что кто-либо может провести тщательное тестирование модуля памяти и определить все неправильные адреса памяти, затем заблокировать их и в итоге получить «хороший» модуль памяти. Самое простое, что нужно сделать, - это рассматривать модуль с плохими адресами как дефектный модуль и, следовательно, не доверять ему.
Это означает, что поскольку BadMem является привлекательным предложением, оно фактически не является решением проблемы плохой памяти. Скорее всего, вы не получите операционную систему, которая пытается прочитать поврежденный сектор и завершается с ошибкой остановки. Плохой модуль - это плохой модуль - это плохой модуль.
источник
Windows BCD (данные конфигурации загрузки) на самом деле имеет
{badmemory}
объект. Похоже, что адреса памяти, которые «предсказаны как сбойные» в памяти ECC, будут перечислены здесь и не будут использоваться операционной системой.{badmemory}
Объект принимаетBadMemoryList
(тип BCD -0x1700000a
элемент), который представляет собой список целых чисел , которые могут быть введены как гекс, разделенные пробелами. Я думаю, что было бы возможно вручную вставить плохие адреса памяти, найденные memtest86 к этому элементу - но я не проверял это. По-видимому, он принимает номера кадров страниц, которые являются фактическим адресом, разделенным на 4096. К сожалению, эти адреса / PFN могут не совпадать с теми, о которых сообщает диагностика памяти. Ручное редактирование может быть сделано с помощью Visual BCD Editor .В любом случае неисправные карты памяти должны быть заменены, как указано другими ответами. Это просто примечание о возможном способе решения проблемы (временно?).
источник
Windows BCD имеет
{badmemorylist}
и{badmemoryaccess}
объекты. Вы должны установить первые страницы с плохой памятью, разделенные пробелами (напримерbcdedit /set badmemorylist 1499543 1434007
), а вторые -No
(bcdedit /set badmemoryaccess No
)Имейте в виду, что размер страницы памяти в Windows обычно
4KB
Протестировано в Windows 7 и работает хорошо
Вы можете проверить свои настройки с помощью Rammap от Sysinternals
PS Я получил эту информацию от
"Windows Internals Book" chapter 10
источник
У меня были проблемы с оперативной памятью в планшете с SoC. Память сварена или встроена в SoC и не может быть заменена.
Я нахожусь в Аргентине, а продавец находится в Китае, и стоимость доставки и время, нет смысла отправлять по гарантии.
Мне удалось несколько хитов.
Ключ к передаче поврежденных параметров памяти:
0x10000000
соответствует 0x10000 в Windows0x00001000
соответствует 0x1 в Windowsbcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
к ошибкам в memtest от 0x000B7000 до 0x000BAFFF. Обратите внимание, что вы не можете поставить диапазон воспоминаний, но все страницы по однойbcdedit /enum {badmemory}
, показывает список отмеченных страниц.bcdedit /set badmemoryaccess no
предотвратить использование помеченных страницисточник
/
и командой, чтобы он работал, поэтому вместоbcdedit / enum {badmemory}
него будет тоbcdedit /enum {badmemory}
же самое для остальныхНасколько я знаю, единственный способ сделать это - использовать команду BurnMem, которая может искусственно ограничить объем используемой памяти.
источник
maxmem
, так как, по-видимомуburnmem
, не ограничивает максимальный физический адрес, аmaxmem
делает. Виста и 7 эквивалент будутtruncatememory
. Хотя это и является возможным решением, существует ли более точный метод для случаев, когда дефектная память находится в середине или начале адресного пространства и блокирует все после того, как это нежелательно?Посмотрите на эту утилиту: https://github.com/prsyahmi/BadMemory
Он очень прост в использовании и поддерживает блокировку диапазонов адресов. И вы можете использовать полный адрес, полученный от MemTest86, не удаляя последние три цифры.
источник
ВНИМАНИЕ !!! Windows может не загрузиться, будьте готовы восстановить BCD. Для этого используйте командную строку в дополнительных параметрах запуска. Я не знаю, почему это больше не загружается, кажется, происходит случайно или если вы добавили слишком много адресов в badmemorylist.
Вот командная строка C ++ Programm, которая получает список адресов непрерывной памяти в файле .txt, готовом для
bcdedit /set badmemorylist
илиbcdedit /set {badmemory} badmemorylist
(не работал на Win7 для меня)Используйте,
bcdedit /set badmemoryaccess 0
чтобы запретить доступ.Вы можете проверить с EasyBCD в View Settings -> Detail. После перезагрузки проверьте Rammap, не исчезло ли физическое адресное пространство.
источник
Да. Есть загрузочный параметр, чтобы контролировать объем памяти, который окна могут использовать. Вы можете удалить только из конца памяти. Смотрите эту статью msdn для контроля параметров загрузки. Интересующие параметры
truncatememory
иremovememory
.источник
Вы можете попробовать эту функцию в Windows 7, но я не уверен, на какую микросхему она повлияет, или же она снимает одинаковое количество с каждой. Я должен осмотреться, чтобы узнать это.
источник