Autor Beitrag
Yooda
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68



BeitragVerfasst: Mi 11.08.04 21:21 
Hallo!

Ich habe mal eine Frage... Ist es möglich den Arbeitsspeicher Byte für Byte zu durchlaufen, und zu testen, ob dieser "beschreibbar" bzw. "lesbar" ist?

Es geht darum, dass mein Arbeitsspeicher wohl irgendwie an einer Stelle defekt zu sein scheint. Das merke ich, dass ich nach dem Start von ein paar Anwengungen Einen Speicherfehler bekomme.

Ist sowas möglich und....

macht es überhaupt Sinn?
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mi 11.08.04 23:26 
Moin!

Mit Speicherfehler meinst du aber nicht zufälligerweise eine "Zugriffsverletzung an Adresse XY"? Das wären eher Anwendungsfehler, können aber auch durch defekten Speicher ausgelöst werden. Möglichkeiten für einen solchen Fehler gibt es viele.

Zum Speichertest: Schau mal bei www.memtest86.com vorbei und lade dir mal deren Testprogramm. Grund: In einem laufenden Windows bekommst du nie vollen Zugriff auf jede RAM Stelle und vor allem kannst du nicht wahlweise mal schnell zum Test ein anderen Wert an eine Speicherstelle schreiben und dann wieder auslesen und vergleichen. Durch solche unerlaubten Zugriffe entstehen solche o.g. Fehlermeldungen.

MfG
Muetze1
Yooda Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68



BeitragVerfasst: Do 12.08.04 17:01 
Hallo Muetze1,

ich weiss, dass Windows nicht den Kompletten speicher freigibt. Das wäre ja teilweise (für Windows) fatal. Aber die Idee von mir ist, dass ich Die Stellen, an denen Windows seine Werte platziert auslese, und den exakten Wert wieder reinkopiere. Es ist natürlich möglich (sogar sehr Wahrscheinlich), dass Windows dann abstürzt. Aber dann kann ich mit der Software die Speicherstelle merken und beim nächsten durchlauf lese, ob der Wert ähnlich dem vorherigen Wert ist, und dann diese Stelle überspringe. Irgendwann müsste ich doch an eine Stelle des Ram's kommen, wo das lesen bzw. schreiben nicht mehr möglich ist.
Diese Stelle möchte ich dann als "Defekt" markieren. Es ist natürlich eine momentane Wilde Theorie, aber eigendlich müsste es doch laufen, oder?


Viele Grüsse

David
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Do 12.08.04 23:08 
Moin!

Ähm, nein. Wenn du einen defekten Speicherbaustein hast und du eine Stelle einliest, dann bekommst du Zufallswerte oder FF zurück gegeben. Die CPU legt die Adresse auf den Bus, setzt das Signal zum lesen und der Memory Controller setzt bei den Speichermodulen welches sich angesprochen fühlen soll. Danach liest die CPU die Daten die auf dem Datenbus anliegen - und wenn die Stelle defekt ist, dann liegt dort alles und/oder nix an - mit anderen Worten: Müll. Wenn du nun nicht gerade ECC RAM hast und der Fehler durch den ECC Check auffällt, so lange fällt auch der Fehler nicht auf. Und wenn du nun was ausliest, woher sollst du wissen, das es das richtige ist? Und wieso sollten noch die gleichen Daten an der Stelle beim nächsten Durchlauf sein? Programme werden verändert, ausgelagert, Processe beendet, Variablen werden verändert. Daher meinte ich auch das Problem mit den Wert reinschreiben. Im Normalfall werden bestimmte Bitmuster in die Speicherstellen geschrieben und danach wieder versucht auszulesen. Wenn das klappt mit verschiedenen Mustern, dann ist die Speicherstelle höchstwahrscheinlich heile. Danach kann das Programm den alten Inhalt wieder herstellen. Dies geht aber nur, wenn es das Testprogramm weiss, dass es als wirklich einziges Programm des gesamten Systems ausgeführt wird, keine Task Switches kommen und das nix anderes im Hintergrund aufgerufen werden kann. Dann kann das Programm dies mit dem Speicher machen, in dem es selber nicht liegt. Und der letzte Fakt lässt sich damit beseitigen, in dem man das Programm in einen Bereich verschiebt der schon getestet wurde.

Diese Access Violations kommen aber vor allem nicht durch defekten Speicher sondern durch schlechte oder fehlerhafte Programmierung, weil eine Anwendung oder sonstige versucht auf einen Speicherbereich (Adresse) zu zu greifen die dem Process nicht gehören sondern einem anderen Process. Und das wird gnadenlos von Windows unterbunden.

MfG
Muetze1


Zuletzt bearbeitet von Muetze1 am Fr 13.08.04 13:00, insgesamt 1-mal bearbeitet
Yooda Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 68



BeitragVerfasst: Fr 13.08.04 09:59 
Hallo!

Danke für deine wirklich sehr Kompetente und sehr aussagekräftige Antwort.
Nicht nur dass ich nun für die nächste Zeit bescheid weiss, dass soetwas auf meinem Wege nicht möglich ist, nein ich weiss jetzt auch Detaillierter wie der Ram arbeiet. Eine schöne erklärung, die auf manchen Herstellerseiten auch so gemacht werden sollte.

Naja, ich denke dass wiedereinmal eine meiner Ideen im Ram überschrieben wurde...
Mal sehen was mir als nächstes einfällt.


Auf jeden Fall nochmals Danke!

Bitte nicht auf eventuelle Rechtschreibfehler achten. Ich bin gerade aus meinem
Bett gekrochen weil ich Semesterferien habe... :) Meine Augen sind so gross wie das Loch von diesem O hier. ;)