Est-il possible d'exécuter Windows (7, x64) avec un module RAM défectueux? Plus précisément, existe-t-il un moyen de dire à Windows de ne pas allouer une mauvaise adresse connue ou un bloc d'adresses?
Pour Linux, il y a BadRAM . Existe-t-il une implémentation existante pour Windows? Est-ce même possible avec le noyau de Windows (NT 6.1)? Peut-être un pilote en mode noyau?
Réponses:
Bob, votre question comporte trois parties. Je vais en parler un à la fois.
Exécuter Windows avec une mauvaise mémoire
Il est en effet possible d'exécuter Windows 7 avec un module défectueux. Selon l'emplacement des secteurs défectueux et l'emplacement du module dans vos banques DIMM, Windows 7 fonctionnera comme s'il n'y avait rien tant qu'il n'essayait pas de toucher les mauvaises parties de la mémoire. Donc, idéalement, vous déplaceriez le module défectueux aussi loin que possible de la banque 0. Naturellement, si c'est votre seul module, vous n'avez pas de chance.
Blocage des secteurs de mauvaise mémoire dans Windows
Sur les systèmes d'exploitation x86 (32 et 64 bits), la mémoire est gérée par le noyau. Comme vous le mentionnez, BadMem est capable de bloquer les secteurs de mauvaise mémoire sous Linux. Il fonctionne en demandant au noyau de verrouiller les adresses mémoire que vous avez spécifiées. Cela empêche effectivement Linux d'adresser ces adresses lors de l'allocation (et de la désallocation) de la mémoire. Mais pour ce faire, BadMem doit patcher le noyau. BadMem n'est rien de plus qu'un correctif de noyau que vous configurez avant d'appliquer.
Maintenant, vous n'avez pas cette capacité sur Windows. Vous ne pouvez pas patcher le noyau. Développer un pilote en mode noyau ne vous sera d'aucune utilité non plus, car le noyau Windows ne laissera jamais votre pilote prendre le pas sur son architecture de gestion de la mémoire (ce qui est compréhensible).
Pour cette raison, vous ne pouvez en aucun cas demander à Windows de ne pas utiliser certaines adresses mémoire. La seule façon serait que Microsoft corrige le noyau spécifiquement pour votre cas. Peu probable.
La propagation d'adresses de mauvaise mémoire
Il n'y a pas beaucoup de raisons pour lesquelles un module de mémoire peut contenir de mauvaises adresses. En fin de compte, tout se résume à une erreur dans la chaîne de production, en supposant qu'il n'a pas subi de dommages avant d'entrer dans votre ordinateur. Contrairement aux disques durs, il n'y a pas de pièces mobiles dans les modules de mémoire, comme vous le savez bien. Ainsi, les secteurs défectueux n'ont pas tendance à se propager comme c'est le cas avec les secteurs de disque dur.
Cependant, le logiciel de test de mémoire n'est pas infaillible. Il est possible (et courant) de lui transmettre certaines adresses qui sont en fait mauvaises. Une mauvaise mémoire peut donc donner l'impression de "se propager" car de plus en plus d'adresses se révèlent mauvaises. Pour cette raison, des outils comme BadMem révèlent leur faiblesse, car ils ne peuvent naturellement gérer que les adresses que vous leur demandez.
Il est peu probable que quiconque puisse effectuer un test approfondi d'un module de mémoire et identifier toutes les mauvaises adresses de mémoire, puis les verrouiller et se retrouver avec un «bon» module de mémoire. La chose la plus simple à faire est de considérer un module avec de mauvaises adresses comme un module défectueux et donc de ne pas faire confiance.
Cela signifie que, même si BadMem est une proposition attrayante, ce n'est en fait pas une solution au problème de la mauvaise mémoire. Plus probablement alors non, vous vous retrouverez toujours avec un système d'exploitation qui essaie de lire un secteur défectueux et se bloque avec une erreur d'arrêt. Un mauvais module est un mauvais module est un mauvais module.
la source
Le Windows BCD (Boot Configuration Data) a en fait un
{badmemory}
objet. Il semble que les adresses mémoire qui sont "prédites en panne" par la mémoire ECC soient répertoriées ici et ne soient pas utilisées par le système d'exploitation.L'
{badmemory}
objet accepte un élémentBadMemoryList
(type BCD0x1700000a
), qui est une liste d'entiers pouvant être entrés en hexadécimal, séparés par des espaces. Je suppose qu'il serait possible d'insérer manuellement des adresses de mémoire incorrectes trouvées par memtest86 dans cet élément - mais je n'ai pas testé cela. Apparemment, il accepte les numéros de cadre de page, qui est l'adresse réelle divisée par 4096. Malheureusement, ces adresses / PFN peuvent ne pas correspondre à celles signalées par les diagnostics de mémoire. L'édition manuelle peut être effectuée avec Visual BCD Editor .Dans tous les cas, les clés USB défectueuses doivent être remplacées comme indiqué par les autres réponses. Il s'agit simplement d'une note sur une manière possible de contourner le problème (temporairement?).
la source
Windows BCD a
{badmemorylist}
et des{badmemoryaccess}
objets. Vous devez définir la première sur les pages de mauvaise mémoire séparées par des espaces (par exemple.bcdedit /set badmemorylist 1499543 1434007
) Et la seconde surNo
(bcdedit /set badmemoryaccess No
)Gardez à l'esprit que la taille de la page mémoire dans Windows est généralement
4KB
Testé sous Windows 7 et cela fonctionne bien
Vous pouvez tester vos paramètres par Rammap by Sysinternals
PS j'ai cette information de
"Windows Internals Book" chapter 10
la source
J'ai eu des problèmes de RAM dans une tablette avec SoC. La mémoire est soudée ou intégrée dans le SoC et ne peut pas être remplacée.
Je suis en Argentine et le vendeur est en Chine, et les frais d'expédition et le temps, cela n'a aucun sens d'envoyer une garantie.
J'ai réussi quelques coups sûrs.
La clé pour passer les paramètres de mémoire endommagés sont:
0x10000000
correspond à 0x10000 sous Windows0x00001000
correspond à 0x1 sous Windowsbcdedit /set {badmemory} badmemorylist 0xB7 0xB8 0xB9 0xBA
aux erreurs dans memtest de 0x000B7000 à 0x000BAFFF. Notez que vous ne pouvez pas mettre une gamme de souvenirs, mais toutes les pages une par unebcdedit /enum {badmemory}
, affiche la liste des pages marquées.bcdedit /set badmemoryaccess no
empêcher l'utilisation des pages marquéesla source
/
et la commande pour que cela fonctionne, donc au lieu debcdedit / enum {badmemory}
cela, ce sera lebcdedit /enum {badmemory}
même pour les autresPour autant que je sache, la seule façon de le faire est d'utiliser la commande BurnMem qui peut artificiellement limiter la quantité de RAM utilisée par Windows.
la source
maxmem
- être , car apparemmentburnmem
ne limite pas l'adresse physique maxmaxmem
. Le Vista et son équivalent 7 le seraienttruncatememory
. Bien qu'il s'agisse d'une solution possible, existe-t-il une méthode plus précise pour les cas où la mémoire défectueuse se trouve au milieu ou au début de l'espace d'adressage et qui bloque tout ce qui n'est pas souhaité?Regardez cet util: https://github.com/prsyahmi/BadMemory
Il est très facile à utiliser et prend en charge le blocage des plages d'adresses. Et vous pouvez utiliser l'adresse complète reçue de MemTest86 sans supprimer les trois derniers chiffres.
la source
MISE EN GARDE!!! Windows peut ne pas démarrer, soyez prêt à reconstruire le BCD. Dans ce cas, utilisez l'invite de commande dans les options de démarrage avancées. Je ne sais pas pourquoi il ne démarre plus, semble se produire au hasard ou si vous avez mis trop d'adresses dans badmemorylist.
Voici un programme d'invite de commande C ++ qui obtient une liste d'adresses mémoire continue dans un fichier .txt prêt pour
bcdedit /set badmemorylist
oubcdedit /set {badmemory} badmemorylist
(n'a pas fonctionné sur Win7 pour moi)Utilisez
bcdedit /set badmemoryaccess 0
pour refuser l'accès.Vous pouvez vérifier avec EasyBCD dans Paramètres d'affichage -> Détaillé. Après un redémarrage, vérifiez auprès de Rammap si l'espace d'adressage physique a disparu.
la source
Oui. Il existe des paramètres de démarrage pour contrôler la quantité de mémoire que Windows peut utiliser. Vous ne pouvez cependant supprimer qu'à la fin de l'espace mémoire. Consultez cet article msdn pour contrôler les paramètres de démarrage. Les paramètres d'intérêt sont
truncatememory
etremovememory
.la source
Vous pouvez essayer cette fonctionnalité dans Windows 7, mais je ne sais pas quelle puce cela affectera, ou si elle efface la même quantité de chacun. Je vais devoir regarder autour de moi pour le découvrir.
la source