Como os computadores pessoais de desktop, laptop e portáteis lidam com a corrupção ocasional de dados de RAM?

1

Não é um segredo que a corrupção espontânea de dados armazenados (como um pouco flip) não é um evento frequente, mas ainda assim bastante possível, na operação normal de SDRAM (incluindo DDR 1/2/3/4 SDRAM).

Servidores e workstations de serviço pesado usam o mecanismo ECC integrado em seus módulos SDRAM para resolver o problema, garantindo que uma palavra de dados lida seja sempre a palavra de dados escrita para aquele endereço específico antes.

Mas e os PCs desktop / laptop e dispositivos portáteis que usam módulos de RAM não-ECC? Como um desenvolvedor pode ter certeza de que uma variável contém exatamente o valor gravado?

    
por Ivan 18.02.2012 / 22:07

3 respostas

0

Não creio que exista algum mecanismo para evitar erros em sistemas não-ECC, seja no nível do sistema ou no nível do sistema operacional. Não acredito que o Windows atualize o conteúdo da RAM regularmente, espera-se que o hardware mantenha os valores na memória.

  • Uma verificação rápida da memória é feita na BIOS ao iniciar o sistema, portanto, alguns erros importantes podem 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 ocorrer um erro aleatório em um local da memória que não será usado ou será substituído. Sem problemas. Eu suspeito que uma porcentagem muito grande de erros aleatórios, não repetidos, acontecem naquele 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 de maneira elegante. 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 é manipulado por um manipulador de exceções. Caso contrário, o aplicativo carregará os dados corrompidos ou falhará se causar uma operação inválida.

Além disso, os aplicativos / SO falharão e os arquivos gravados serão corrompidos.

Os aplicativos, se desejarem, podem implementar mecanismos de verificação executando duas ou mais operações. Verificadores de memória e ferramentas de cópia de arquivos de terceiros são exemplos desse tipo.

    
por 18.02.2012 / 23:10
0

Sim, geralmente o sistema executará um teste de RAM na inicialização e tentará colocar páginas ruins em quarentena.

Caso contrário, se uma página ruim for de alguma forma descoberta durante a operação (não muito provável na maioria das caixas de consumo, pois geralmente não têm verificação de paridade, mas possível em "big iron"), se a página for "virtual" e não foi marcado como "alterado", o sistema provavelmente "removerá" a página, marcará a página física incorretamente e, em seguida, voltará a pagá-la a partir do disco.

Se a página estiver "suja" (alterada), no entanto, o erro será reportado ao aplicativo como uma exceção de algum tipo. Se a página ruim for algum tipo de página do sistema, o sistema falhará.

Naturalmente, a verificação de paridade ausente ou algum outro mecanismo para descobrir um erro, os dados incorretos são simplesmente usados, e o que quer que aconteça acontece. Este é o caso mais provável no hardware do consumidor.

    
por 18.02.2012 / 23:33
0

Eles não lidam com essa situação. O teste de inicialização aborda o último bit de memória e isso é tudo o que o BIOS normal faz. O Linux / FreeBSD etc tem uma correção que permite que você exclua endereços de memória de serem acessados pelo sistema. A menos que você faça isso, os sistemas provavelmente falharão quando a verificação de integridade interna do kernel encontrar "bit flip" (Sinal 11 no Unix)

    
por 19.02.2012 / 00:21