Como o Memtest86 funciona com RAM ruim?

17

Eu estava lendo outra pergunta sobre o Memtest e comecei a me perguntar: Como o Memtest86 funciona com RAM ruim?

Pense bem: o Memtest86 precisa armazenar informações sobre o tamanho da RAM, o que é colocado na RAM para comparar posteriormente, onde atualizar a tela e muito mais informações. O ato de usar uma variável requer que a RAM esteja funcionando corretamente. Mas como você pode obter resultados confiáveis ​​ao executar o programa com RAM possivelmente defeituosa?

Uma analogia a isso é executar um programa de verificação de disco rígido a partir do disco rígido que você está verificando. Você nunca faria isso, um bloco defeituoso pode afetar o programa de várias maneiras inesperadas

Como o Memtest86 funciona com RAM ruim?

TheLQ
fonte
2
Para sua informação, todo o trabalho realizado pela CPU é feito na RAM. Quando um programa é executado, é feito na RAM, ele não tem nada a ver com variáveis. Você pode escrever um programa que não faz absolutamente nada e nunca usa nenhuma variável, mas esse programa reside na memória. Pergunta muito interessante embora.
Keltari
2
Como todos os programas (não triviais) usam variáveis, o truque para os testadores / exercitadores de memória é armazenar suas variáveis ​​em registradores, em vez de na memória. Isso também significa que não há pilha! Alguns programas de memória são executados fora da ROM (por exemplo, arquitetura Harvard) ou, se residirem na RAM sob teste, realocam o código após cada passagem. O sucesso ou falha na execução do programa de teste em vários locais da RAM fazia parte do exercitador. De testadores de memória Claro que são, provavelmente, mal-escritos que usam a RAM em teste como um programa comum
serragem
@Keltari tecnicamente, partes das BIOS correr em linha reta de flash NOR ....
rackandboneman

Respostas:

9

Principalmente porque a quantidade de memória RAM necessária para carregar o memtest é extremamente pequena. Se o programa for executado, é provável que a memória nessa área esteja correta.

A chance de que-

  1. A pequena seção do memtest de memória carregada está incorreta.
  2. Ainda era bom o suficiente para concluir todos os testes com êxito, sem problemas perceptíveis.

É altamente improvável.

user606723
fonte
7

O Memtest é bastante durável, pois não depende realmente da RAM que está testando.

Por exemplo, o teste 0 usa um algoritmo de caminhada , e tudo o que é necessário para esse teste é um único ponteiro (provavelmente armazenado em cache), porque ele está apenas comparando dois endereços de memória consecutivos.

Portanto, se tivermos um stick de RAM de 3 bits, o memtest o carrega com isso:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

E se o primeiro endereço estiver corrompido, ele comparará dois locais aleatórios:

00000001 00100000

E ainda falhará, mesmo se as variáveis ​​do memtest estiverem corrompidas.

digitxp
fonte
3

O Memtest absolutamente precisa fazer pelo menos uma suposição, de que pelo menos a memória em que ela é carregada é boa. Depois disso, ele pode digitalizar e testar o restante da memória na sua totalidade.

Pode ser que ele ainda consiga ler e detectar erros em sua própria memória, pois, sendo o único programa carregado, deve ter acesso a praticamente toda a memória do sistema e, assim, poder ler e comparar essa memória com um amostra "conhecida como boa".

Mokubai
fonte
Eu estava pensando principalmente nas mudanças de comportamento que uma RAM ruim poderia fazer. Por exemplo, se o carneiro ruim mudou a lógica, para que todos os testes sempre fossem verdadeiros.
TheLQ
Eu diria que é possível que um único flip de bit possa fazer uma leitura falsa como verdadeira durante o teste, mas é mais provável que o bit que flips seja algo muito mais crítico, no Memtest eu esperaria o tamanho da execução real o código seja maior que os "casos de teste" e, portanto, eu esperaria que um erro de bit causasse uma falha horrível no programa antes de detectar uma passagem no lugar de uma falha. Eu admito que é uma possibilidade.
Mokubai
1

Sendo pequeno. Se alguma RAM é ruim, quanto menor o programa, menor a probabilidade de que parte do programa esteja em um dos pontos ruins. Considerando que inicializar o suficiente para carregar o teste de memória envolverá algum código de firmware usando RAM, é provável que, se você puder chegar tão longe, as áreas baixas da RAM estejam funcionando suficientemente bem para que o memtest possa executar a partir delas.

wrosecrans
fonte
1

Pense bem: o Memtest86 precisa armazenar informações sobre o tamanho da RAM, o que é colocado na RAM para comparar posteriormente, onde atualizar a tela e muito mais informações. O ato de usar uma variável requer que a RAM esteja funcionando corretamente. Mas como você pode obter resultados confiáveis ​​ao executar o programa com RAM possivelmente defeituosa?

Bem, é isso que o Memtest faz - ele grava vários padrões (conhecidos) na sua RAM, lê de volta e compara. Se houver uma incompatibilidade, sua RAM deverá estar corrompida.

Uma analogia a isso é executar um programa de verificação de disco rígido a partir do disco rígido que você está verificando. Você nunca faria isso, um bloco defeituoso pode afetar o programa de várias maneiras inesperadas

Embora isso seja verdade, há alguns casos em que você não tem escolha. Contanto que você possa carregar o programa com êxito, ele poderá executar suas tarefas de diagnóstico (mesmo que esteja sendo executado em algum tipo de mídia com defeito).

Como o Memtest86 funciona com RAM ruim?

Bem, ele deve carregar-se primeiro na memória. Na maioria dos casos, essa memória ainda será boa. Caso isso não ocorra, o Memtest provavelmente determinará que o próprio programa está corrompido comparando algumas variáveis ​​locais com uma soma de verificação. No caso de não corresponderem, você saberia instantaneamente que sua RAM está ruim ou a cópia baixada está corrompida (e seria uma tarefa trivial determinar se a última é a causa ou não).


TL, DR: O Memtest86 + funciona apenas assumindo que o primeiro megabyte de sua RAM ainda esteja bom (o local em que ele seria carregado provavelmente). Assumindo que esta área está corrompida, o Memtest86 + simplesmente não funcionaria (o que é um indicador bastante rápido de que sua memória RAM está ruim mesmo sem a execução dos testes).

Avanço
fonte
0

Se a RAM na qual o aplicativo está salvando as variáveis ​​estiver ruim, a maioria dos testes falhará.

O algoritmo grava todos os tipos de padrões diferentes e, em seguida, verifica se estão bem escritos, lendo-os novamente; se uma gravação ou uma leitura não correu corretamente, o teste em questão falhará. Ao executar a maioria dos testes e deixá-lo rodar por várias horas, você poderá ver como sua RAM é estável ...

Thomas Hunter
fonte