Comment fonctionne Memtest86 avec une mauvaise RAM?

17

Je lisais une autre question sur Memtest et j'ai commencé à me demander: comment fonctionne Memtest86 avec une mauvaise RAM?

Pensez-y: Memtest86 doit stocker des informations sur la taille de la RAM, ce qu'elle a mis dans la RAM pour comparer plus tard, où mettre à jour l'écran et beaucoup plus d'informations. Le fait d'utiliser une variable nécessite que la RAM fonctionne correctement. Mais comment pouvez-vous obtenir des résultats fiables lorsque vous exécutez le programme sur une mémoire RAM éventuellement défectueuse?

Une analogie à cela est l'exécution d'un programme de vérification du disque dur à partir du disque dur que vous vérifiez. Vous ne feriez jamais ça, un mauvais bloc pourrait affecter le programme de nombreuses façons inattendues

Comment fonctionne Memtest86 avec une mauvaise RAM?

TheLQ
la source
2
Pour info, tout le travail effectué par le CPU se fait en RAM. Lorsqu'un programme est exécuté, c'est fait en RAM, cela n'a rien à voir avec les variables. Vous pouvez écrire un programme qui ne fait absolument rien et n'utilise jamais de variables, mais ce programme réside en mémoire. Question très intéressante cependant.
Keltari
2
Étant donné que tous les programmes (non triviaux) utilisent des variables, l'astuce pour les testeurs / exerciseurs de mémoire est de stocker leurs variables dans des registres, plutôt que dans la mémoire. Cela signifie également pas de pile! Certains programmes de mémoire s'exécutent hors de la ROM (par exemple l'architecture Harvard), ou, s'ils résident dans la RAM testée, déplacent le code après chaque passage. La réussite ou l'échec de l'exécution du programme de test à divers emplacements de RAM faisait partie de l'exercice. Bien sûr, il y a probablement des testeurs de mémoire mal écrits qui utilisent la RAM testée comme un programme ordinaire
sciure
@Keltari techniquement, certaines parties du BIOS fonctionnent directement à partir du flash NOR ....
rackandboneman

Réponses:

9

Principalement parce que la quantité de RAM nécessaire pour charger le memtest est extrêmement faible. Si le programme s'exécute, il est probable que la mémoire dans cette zone est correcte.

La chance que-

  1. La petite section de mémoire memtest a été chargée est mauvaise.
  2. Il était encore assez bon pour pouvoir terminer tous les tests avec succès sans problèmes notables.

Est-hautement-improbable.

user606723
la source
7

Memtest est assez durable en ce qu'il ne dépend pas vraiment de la RAM qu'il teste.

Par exemple, le test 0 utilise un algorithme de marche , et tout ce dont il a besoin pour ce test est un seul pointeur (probablement mis en cache), car il ne compare que deux adresses mémoire consécutives.

Donc, si nous avons une clé RAM 3 bits, memtest la charge avec ceci:

<pointer location> 00000001 00000010 00000100 00001000 00010000 00100000 01000000

Et si la première adresse est corrompue, elle comparera deux emplacements aléatoires:

00000001 00100000

Et cela échouera toujours, même si les variables de memtest sont corrompues.

digitxp
la source
3

Memtest doit absolument faire au moins une supposition, qu'au moins la mémoire dans laquelle il est lui-même chargé est bonne. Après cela, il est capable de numériser et de tester le reste de la mémoire dans son intégralité.

Il se peut qu'il soit toujours capable de lire et de détecter des erreurs dans sa propre mémoire car, étant le seul programme chargé, il devrait avoir accès à pratiquement toute la mémoire du système et donc pouvoir lire et comparer cette mémoire à un échantillon "bien connu".

Mokubai
la source
Je pensais principalement aux changements de comportement qu'une mauvaise RAM pouvait faire. Par exemple, si le mauvais bélier a changé la logique de sorte que tous les tests se révèlent toujours vrais.
TheLQ
Je dirais qu'il est possible qu'un basculement sur un seul bit puisse donner une fausse lecture comme vraie pendant le test, mais il est plus probable que le bit qui se retourne soit dans quelque chose de beaucoup plus critique, dans Memtest, je m'attendrais à la taille de l'exécution réelle le code doit être plus grand que les "cas de test" et donc je m'attendrais à ce qu'une petite erreur provoque le crash horrible du programme avant qu'il ne détecte une passe à la place d'un échec. J'admets cependant que c'est une possibilité.
Mokubai
1

En étant petit. Si de la RAM est mauvaise, plus le programme est petit, moins il est probable qu'une partie du programme soit dans l'un des mauvais endroits. Étant donné que le démarrage suffisamment loin pour charger le test de mémoire impliquera un code de micrologiciel utilisant de la RAM, il y a de fortes chances que si vous pouvez aller aussi loin, les zones faibles de RAM fonctionnent suffisamment bien pour que memtest puisse fonctionner à partir d'elles.

wrosecrans
la source
1

Pensez-y: Memtest86 doit stocker des informations sur la taille de la RAM, ce qu'elle a mis dans la RAM pour comparer plus tard, où mettre à jour l'écran et beaucoup plus d'informations. Le fait d'utiliser une variable nécessite que la RAM fonctionne correctement. Mais comment pouvez-vous obtenir des résultats fiables lorsque vous exécutez le programme sur une mémoire RAM éventuellement défectueuse?

Eh bien, c'est ce que fait Memtest - il écrit divers modèles (connus) dans votre RAM, le relit et compare. S'il y a une mauvaise correspondance, votre RAM doit être corrompue.

Une analogie à cela est l'exécution d'un programme de vérification du disque dur à partir du disque dur que vous vérifiez. Vous ne feriez jamais ça, un mauvais bloc pourrait affecter le programme de nombreuses façons inattendues

Bien que cela soit vrai, il y a des cas où vous n'avez pas le choix. Tant que vous pouvez charger le programme avec succès, il devrait être en mesure d'effectuer ses tâches de diagnostic (même s'il s'exécute sur un support défectueux d'une certaine sorte).

Comment fonctionne Memtest86 avec une mauvaise RAM?

Eh bien, il doit d'abord se charger en mémoire. Dans la plupart des cas, cette mémoire sera toujours bonne. Dans le cas contraire , Memtest déterminera très probablement que le programme lui-même est corrompu en comparant certaines variables en place avec une somme de contrôle. Dans le cas où ils ne correspondent pas, vous sauriez instantanément que votre RAM est mauvaise ou que la copie que vous avez téléchargée est corrompue (et ce serait une tâche triviale de déterminer si cette dernière est la cause ou non).


TL, DR: Memtest86 + fonctionne uniquement en supposant que le premier mégaoctet de votre RAM est toujours correct (l'emplacement où il serait probablement chargé). En supposant que cette zone est corrompue, Memtest86 + lui-même ne fonctionnerait tout simplement pas (ce qui est un indicateur assez rapide que votre RAM est mauvaise sans même avoir exécuté les tests).

Percée
la source
0

Si la mémoire RAM dans laquelle l'application enregistre les variables est mauvaise, la plupart des tests échoueront.

L'algorithme écrit toutes sortes de modèles différents et vérifie ensuite s'ils sont bien écrits en les relisant, si une écriture ou une lecture ne s'est pas déroulée correctement, le test en question échouera. En exécutant la plupart des tests et en le laissant fonctionner pendant plusieurs heures, vous pouvez alors voir à quel point votre RAM est stable ...

Thomas Hunter
la source