Executando o Windows com RAM defeituosa

Executando o Windows com RAM defeituosa

É possível executar o Windows (7, x64) com um módulo de RAM com defeito? Mais precisamente, existe alguma maneira de dizer ao Windows para não alocar um endereço ou bloco de endereços inválido conhecido?

Para Linux, existeRAM ruim. Existe uma implementação existente para Windows? Isso é possível com o kernel do Windows (NT 6.1)? Talvez um driver de modo kernel?

Responder1

Bob, sua pergunta tem três partes. Vou abordar um de cada vez.

Executando o Windows com memória ruim

Na verdade, é possível executar o Windows 7 com um módulo defeituoso. Dependendo da localização dos setores defeituosos e de onde o módulo está nos bancos DIMM, o Windows 7 funcionará como se não houvesse nada, desde que não tente tocar nas partes defeituosas da memória. Então, o ideal é que você mova o módulo defeituoso o mais longe possível do banco 0. Naturalmente, se este for seu único módulo, você estará sem sorte.

Bloqueando setores de memória defeituosos no Windows

Em sistemas operacionais x86 (32 e 64 bits), a memória é gerenciada pelo kernel. Como você mencionou, o BadMem é ​​capaz de bloquear setores de memória defeituosos no Linux. Ele funciona instruindo o kernel a bloquear os endereços de memória que você especificou. Isso efetivamente impede que o Linux enderece esses endereços ao alocar (e desalocar) memória. Mas para fazer isso, o BadMem precisa corrigir o kernel. BadMem nada mais é do que um patch de kernel que você configura antes de aplicar.

Agora, você não tem essa capacidade no Windows. Você não pode corrigir o kernel. Desenvolver um driver no modo kernel também não fará nenhum bem, já que o kernel do Windows nunca permitirá que seu driver tenha precedência sobre sua arquitetura de gerenciamento de memória (compreensivelmente).

Por esse motivo, você não pode instruir o Windows de forma alguma a não usar determinados endereços de memória. A única maneira seria a Microsoft corrigir o kernel especificamente para o seu caso. Improvável.

A disseminação de endereços de memória ruins

Não há muitos motivos pelos quais um módulo de memória pode conter endereços incorretos. Em última análise, tudo se resume a um erro na linha de produção, presumindo que ela não sofreu danos antes de entrar no computador. Ao contrário dos discos rígidos, como você bem sabe, não existem partes móveis nos módulos de memória. Portanto, os setores defeituosos não tendem a se espalhar como acontece com os setores do disco rígido.

No entanto, o software de teste de memória não é infalível. É possível (e comum) passar certos endereços que são de fato ruins. Portanto, a memória ruim pode dar a impressão de estar "se espalhando" à medida que mais e mais endereços são revelados como ruins. Por esta razão, ferramentas como o BadMem revelam a sua fraqueza, porque naturalmente só conseguem lidar com os endereços para os quais você os instrui.

É improvável que alguém consiga realizar um teste completo de um módulo de memória e identificar todos os endereços de memória ruins, bloqueá-los e acabar com um módulo de memória “bom”. A coisa mais fácil a fazer é considerar um módulo com endereços incorretos como um módulo totalmente defeituoso e, consequentemente, não confiável.

O que isto significa é que, por mais que BadMem seja uma proposta atraente, na verdade não é uma solução para o problema da memória ruim. É mais provável que você ainda acabe com um sistema operacional que tenta ler um setor defeituoso e trava com um erro de parada. Um módulo ruim é um módulo ruim é um módulo ruim.

Responder2

O BCD do Windows (dados de configuração de inicialização) na verdade possui um {badmemory}objeto.Parece que os endereços de memória "previstos para falhar" pela memória ECC serão listados aqui e não serão usados ​​pelo sistema operacional.

O {badmemory}objeto aceita um elemento BadMemoryList(tipo BCD 0x1700000a), que é uma lista de inteiros que podem ser inseridos como hexadecimais, separados por espaços. Acho que seria possível inserir manualmente endereços de memória ruins encontrados pelo memtest86 neste elemento - mas não testei isso.Aparentemente, ele aceita números de quadros de páginas, que é o endereço real dividido por 4096.Infelizmente, esses endereços/PFNs podem não corresponder aos relatados pelos diagnósticos de memória. A edição manual pode ser feita comEditor Visual BCD.

Em qualquer caso, os cartões de memória com defeito devem ser substituídos conforme indicado nas outras respostas. Esta é apenas uma observação sobre uma possível maneira de contornar o problema (temporariamente?).


memtest86 Pro (não gratuito)pode produzir os comandos de lista negra corretos para vocêno seu relatório. Outras respostas descrevem o processo para fazer isso manualmente.

Responder3

Tive problemas de RAM em um tablet com SoC. A memória é soldada ou integrada ao SoC e não pode ser substituída.

Estou na Argentina e o vendedor está na China, e pelos custos e prazos de envio, não faz sentido enviar na garantia.

Consegui alguns acertos.

A chave para passar os parâmetros de memória danificados é:

  1. endereços em memtest86 correspondem aos endereços usados ​​no Windows.
  2. deve marcar páginas inteiras de 4KBytes.
  3. no memtest 0x10000000corresponde a 0x10000 no Windows
  4. no memtest 0x00001000corresponde a 0x1 no Windows
  5. significa: O número da página no Windows remove os últimos 3 números hexadecimais do memtest.
  6. significa que: o Windows elimina zeros à esquerda.
  7. considere 5 e 6, para evitar erros nos números das páginas.
  8. a afirmação correta é: bcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBApara erros no memtest de 0x000B7000 a 0x000BAFFF. Observe que você não pode colocar um intervalo de memórias, mas sim todas as páginas uma por uma
  9. não é possível adicionar páginas, todas as páginas devem ser marcadas no mesmo comando. Se for uma página nova, adiciona substituições mais antigas. Consegui adicionar 4.096 páginas em um único comando. Eu não tentei mais.
  10. bcdedit /enum {badmemory}, mostra a lista de páginas marcadas.
  11. bcdedit /set badmemoryaccess no evitar que as páginas marcadas sejam usadas
  12. é necessário reiniciar após marcar as páginas e remover o acesso.

Responder4

Veja este utilitário:https://github.com/prsyahmi/BadMemory

É muito fácil de usar e suporta bloqueio de intervalos de endereços. E você pode usar o endereço completo recebido do MemTest86 sem remover os últimos três dígitos.

informação relacionada