Não é segredo que a corrupção espontânea de dados armazenados (como um pouco invertido) não é um evento frequente, mas ainda bastante possível, na operação normal de SDRAM (incluindo DDR 1/2/3/4 SDRAM).
Servidores e estações de trabalho pesadas usam o mecanismo ECC incorporado aos seus módulos SDRAM para solucionar o problema, garantindo que uma palavra de dados lida seja sempre a palavra de dados gravada naquele endereço específico antes.
Mas e os PCs de mesa / laptops e dispositivos portáteis usando módulos de memória RAM não-ECC? Como um desenvolvedor pode ter certeza de que uma variável contém exatamente o valor gravado nela?
Respostas:
Eu não acho que exista algum mecanismo para evitar erros em sistemas não-ECC, no nível do sistema ou no sistema operacional. Não acredito que o Windows atualize regularmente o conteúdo da RAM, é esperado que o hardware mantenha os valores na memória.
Uma verificação rápida da memória é feita no BIOS ao iniciar o sistema, para que alguns erros importantes possam ser detectados lá.
Alguns arquivos, como instaladores, podem executar verificações de CRC. Mas esses erros podem vir da mídia de armazenamento e não da memória.
Se houver um erro aleatório em um local de memória que não será usado ou será substituído. Sem problemas. Suspeito que uma porcentagem muito grande de erros aleatórios e não repetidos ocorram nesse espaço.
A corrupção em um espaço de aplicativo pode gerar uma exceção em vez de uma falha, que pode ou não ser tratada normalmente. No entanto, isso seria mera sorte - não há exceções para "erros de memória" em si, mas o erro pode ocorrer em um local que é tratado por um manipulador de exceções. Caso contrário, o aplicativo carregará os dados corrompidos ou travará se causar uma operação inválida.
Fora isso, os aplicativos / SO travam e os arquivos gravados serão corrompidos.
Os aplicativos, se desejarem, podem implementar mecanismos de verificação executando operações duas ou mais vezes. Verificadores de memória e ferramentas de cópia de arquivos de terceiros são exemplos.
fonte
Sim, geralmente o sistema executará um teste de RAM na inicialização e tentará colocar em quarentena as páginas incorretas.
Caso contrário, se uma página defeituosa for descoberta de alguma forma durante a operação (provavelmente não na maioria das caixas de consumidor, pois elas geralmente não têm verificação de paridade, mas possível em "big iron"), então, se a página for "virtual" e não tiver sido marcado como "alterado", o sistema provavelmente "removerá" a página, marcará a página física como incorreta e voltará a paginar novamente a partir do disco.
Se a página estiver "suja" (alterada), no entanto, o erro será relatado ao aplicativo como uma exceção de algum tipo. Se a página incorreta for algum tipo de página do sistema, o sistema falhará.
Obviamente, na ausência de verificação de paridade ou de algum outro mecanismo para descobrir um erro, os dados incorretos são simplesmente usados e o que acontece acontece. Esse é o caso mais provável no hardware do consumidor.
fonte
Eles não lidam com essa situação. O teste de inicialização endereça o último bit de memória e isso é tudo que o BIOS normal faz. O Linux / FreeBSD etc tem consertos que permitem excluir endereços de memória do acesso pelo sistema. A menos que você faça isso, os sistemas provavelmente travarão quando a verificação de integridade interna do kernel encontrar "bit flip" (Sinal 11 no Unix)
fonte