¿Cómo funciona Memtest86 con RAM defectuosa?

17

Estaba leyendo otra pregunta sobre Memtest y comencé a preguntarme: ¿Cómo funciona Memtest86 con RAM defectuosa?

Piénselo: Memtest86 necesita almacenar información sobre qué tan grande es la RAM, qué puso en la RAM para comparar más adelante, dónde actualizar la pantalla y mucha más información. El acto de usar una variable requiere que la RAM funcione correctamente. Pero, ¿cómo puede obtener resultados confiables cuando ejecuta el programa en una RAM posiblemente defectuosa?

Una analogía a esto es ejecutar un programa de comprobación del disco duro desde el disco duro que está comprobando. Nunca haría eso, un bloqueo incorrecto podría afectar el programa de muchas maneras inesperadas

¿Cómo funciona Memtest86 con RAM defectuosa?

TheLQ
fuente
2
Para su información, todo el trabajo realizado por la CPU se realiza en RAM. Cuando se ejecuta un programa, se realiza en RAM, no tiene nada que ver con variables. Podría escribir un programa que no haga absolutamente nada y que nunca use ninguna variable, pero ese programa reside en la memoria. Pregunta muy interesante sin embargo.
Keltari
2
Como todos los programas (no triviales) usan variables, el truco para los evaluadores / usuarios de memoria es almacenar sus variables en registros, en lugar de en la memoria. ¡Eso también significa que no hay pila! Algunos programas de memoria se ejecutan fuera de la ROM (por ejemplo, arquitectura Harvard) o, si reside en la RAM bajo prueba, reubica el código después de cada pase. El éxito o la falta de ejecución del programa de prueba en varias ubicaciones de RAM formaban parte del deportista. Por supuesto, probablemente hay probadores de memoria mal escritos que usan la RAM bajo prueba como un programa ordinario
aserrín
@Keltari técnicamente, partes del BIOS se ejecutan directamente de NOR flash ...
rackandboneman

Respuestas:

9

Principalmente porque la cantidad de ram que se necesita para cargar memtest es extremadamente pequeña. Si el programa se ejecuta, es probable que la memoria en esta área esté bien.

La posibilidad de que ...

  1. La pequeña sección de memoria en la que se cargó memtest es incorrecta.
  2. Todavía era lo suficientemente bueno como para poder completar todas las pruebas con éxito sin problemas notables.

Es altamente improbable.

usuario606723
fuente
7

Memtest es bastante duradero, ya que realmente no depende de la RAM que está probando.

Por ejemplo, la prueba 0 usa un algoritmo de caminar , y todo lo que requiere para esa prueba es un solo puntero (probablemente en caché), porque solo compara dos direcciones de memoria consecutivas.

Entonces, si tenemos una memoria RAM de 3 bits, memtest lo carga con esto:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

Y si la primera dirección está dañada, comparará dos ubicaciones aleatorias:

00000001 00100000

Y seguirá fallando, incluso si las variables de memtest están dañadas.

digitxp
fuente
3

Memtest absolutamente tiene que hacer al menos una suposición, que al menos la memoria en la que está cargada es buena. Después de eso, puede escanear y probar el resto de la memoria en su totalidad.

Es posible que todavía pueda leer y detectar errores en su propia memoria, ya que, al ser el único programa cargado, debería tener acceso a prácticamente toda la memoria del sistema y así poder leer y comparar esa memoria con un muestra "bien conocido".

Mokubai
fuente
Estaba pensando principalmente en los cambios en el comportamiento que RAM malo podría hacer. Por ejemplo, si el ariete malo cambió la lógica para que todas las pruebas siempre aparecieran verdaderas.
TheLQ
Diría que es posible que un solo giro de bit pueda hacer que una lectura falsa sea verdadera durante la prueba, pero es más probable que el bit que se voltee sea algo mucho más crítico, en Memtest esperaría el tamaño de la ejecución real el código sea más grande que los "casos de prueba" y, por lo tanto, esperaría que un pequeño error causara que el programa se bloquee horriblemente antes de detectar un pase en lugar de un fallo. Sin embargo, admito que es una posibilidad.
Mokubai
1

Por ser pequeño. Si algo de RAM es malo, cuanto más pequeño es el programa, menos probable es que alguna parte del programa se encuentre en uno de los puntos negativos. Teniendo en cuenta que arrancar lo suficiente como para cargar la prueba de memoria implicará algún código de firmware usando RAM, lo más probable es que si puede llegar tan lejos, las áreas bajas de RAM funcionan lo suficientemente bien como para que memtest pueda ejecutarlas.

wrosecrans
fuente
1

Piénselo: Memtest86 necesita almacenar información sobre qué tan grande es la RAM, qué puso en la RAM para comparar más adelante, dónde actualizar la pantalla y mucha más información. El acto de usar una variable requiere que la RAM funcione correctamente. Pero, ¿cómo puede obtener resultados confiables cuando ejecuta el programa en una RAM posiblemente defectuosa?

Bueno, esto es lo que hace Memtest: escribe varios patrones (conocidos) en su RAM, lo lee y compara. Si hay una falta de coincidencia, su RAM debe estar dañada.

Una analogía a esto es ejecutar un programa de comprobación del disco duro desde el disco duro que está comprobando. Nunca haría eso, un bloqueo incorrecto podría afectar el programa de muchas maneras inesperadas

Si bien esto es cierto, hay algunos casos en los que no tiene otra opción. Siempre que pueda cargar el programa con éxito, debería poder realizar sus tareas de diagnóstico (incluso si se está ejecutando en un medio defectuoso de algún tipo).

¿Cómo funciona Memtest86 con RAM defectuosa?

Bueno, primero tiene que cargarse en la memoria. En la mayoría de los casos, esta memoria seguirá siendo buena. En el caso de que sea no , lo más probable es Memtest determinar que el programa en sí está dañado mediante la comparación de algunas variables en lugar de una suma de comprobación. En el caso de que no coincidan, sabrás instantáneamente que tu RAM es mala o que la copia que descargaste está dañada (y sería una tarea trivial determinar si esta es la causa o no).


TL, DR: Memtest86 + solo funciona asumiendo que el primer megabyte de su RAM todavía está bien (la ubicación donde probablemente se cargará). Suponiendo que esta área está dañada, Memtest86 + simplemente no funcionaría (lo cual es un indicador bastante rápido de que su RAM es mala sin siquiera haber ejecutado las pruebas).

Penetración
fuente
0

Si la memoria RAM en la que la aplicación está guardando las variables es incorrecta, la mayoría de las pruebas fallarán.

El algoritmo escribe todo tipo de patrones diferentes y luego comprueba si están bien escritos al leerlos nuevamente, si una escritura o una lectura no fueron correctas, la prueba en cuestión fallará. Al ejecutar la mayoría de las pruebas y dejar que se ejecute durante varias horas, puede ver cuán estable es su RAM ...

Thomas Hunter
fuente