Ram Speichertest c++/c selbst programmieren



  • welche möglichkeiten gibt es zu testen ob die rams defekt sind oder nicht?
    reicht eine reine schreib rein in speicheraddresse überprüfe daten dann ist der RAM and der adresse ok, methode?
    was ich meine ist
    wenn ich zb an die RAM adresse 0x005 einen wert schreibe den dann überprüfe ob er tatsächlich geschrieben wurde, kann ich dann davon ausgehen dass der RAM an dieser stelle in Ordnung ist? oder gibt es noch andere methoden um zu testen ob ein ram ok ist?

    vielleicht kennt wer einen link der sich mit diesem thema beschäftigt?

    lg
    buntehaare



  • Du kannst gar nicht aus einem User-Programm auf den ganzen RAM zugreifen.



  • doch bis win XP geht das aus dem user mode ab WIN vista nur mit treiber aber was solls ich kann auch gleich einen kleinen c-kern booten dann gehts auch auf der 16bit ebene, aber das sei dahin gestellt, das ist nicht mein problem.

    ich will nur wissen mit welchen methoden mann die RAM überprüfen soll/kann.

    lg
    buntehaare



  • Hi,

    ich glaube nicht, dass das mit den Methoden von C oder gar C++ zu realisieren ist. Das geht aus meiner Sicht nur auf Assemblerbasis, da Compiler zum einen zu viel vo der eigentlichen Hardware vor dem Nutzer verbergen, ihm also mehr oder weniger einen virtuellen PC vorspielen, und zum anderen werden die Programme zu groß und benötigen ein Betriebssystem. Da kann ich nicht einfach den Ramm zuschreiben, da ist immer das System dazwischen, und wo mein Schreibzugriff wirklich landet weiss der Geier. unter Umständen blos im Cache oder anschließend ausgelagert auf der Platte.
    Selbst wenn das Programm es schafft, die alleinige Herrschaft über den Rechner zu gewinnen, was wird mit den ganzen Daten die das System in den diversen Puffern vorhält. Ds geht nur vor dem eigentlichen Systemstart, wenn noch nichts sonst geladen ist, mit einer kleinen Assi-Routine, die möglichst auch noch verschiebbar sein sollte, damit auch der vom Programm belegte Bereich getestet werden kann.
    Auch müsste zumindestens jede einzelne Speicherzelle in allen Bits mit gegensätzlichen Werten getestet werden.
    Aber die meisten Linux-Distributionen haben ja einen Hardwaretest mit im Paket, so dass man nur mal von ner Linux-CD booten und den Hardwaretest anschubsen muss.

    Gruß Mümmel


  • Mod

    buntehaare schrieb:

    was ich meine ist
    wenn ich zb an die RAM adresse 0x005 einen wert schreibe den dann überprüfe ob er tatsächlich geschrieben wurde, kann ich dann davon ausgehen dass der RAM an dieser stelle in Ordnung ist?

    Nein. Du kannst davon ausgehen, dass diese Speicherzelle den Wert 0x005 unter den gegeebenen Umständen korrekt speichern kann (sofern du nicht sowieso einfach nur den Wert direkt wieder aus einem Register oder Cache gelesen hast, da du anscheinend keine Ahnung vom Thema hast). Was meinst du, warum Ramtests (hast du eigentlich mal einem zugeguckt?) so viele verschiedene Muster testen? Überhaupt solltest du dir wenigstens mal angucken, was die einfachen Gratistester so machen, dann siehst du wenigstens mal die Grundlagen, z.B. dass man den RAM auch mal stressen sollte, anstatt bloß stupide einzelne Zellen zu testen.



  • buntehaare schrieb:

    doch bis win XP geht das aus dem user mode

    Sicher. 🙄
    Und ja, du schreibst einfach was rein und guckst ob das gleiche hinterher drin steht. (Nicht vergessen es mit 0 und 1 zu probieren.) Und das kann man natürlich auch wiederholen.

    Edit: Siehe auch http://stackoverflow.com/questions/1306874/how-do-ram-test-applications-work-c-sharp-example



  • wenns nur um methoden/algos geht gibts z.b. den galpat - test. der wird in "sicherer" software unter anderem zum ram - test eingesetzt.



  • muemmel schrieb:

    Hi,

    ich glaube nicht, dass das mit den Methoden von C oder gar C++ zu realisieren ist. Das geht aus meiner Sicht nur auf Assemblerbasis, da Compiler zum einen zu viel vo der eigentlichen Hardware vor dem Nutzer verbergen, ihm also mehr oder weniger einen virtuellen PC vorspielen

    Nö. Ein C Compiler ist eine Art portabler High-Level Assembler und C++ ist einige Abstraktionseben darüber. Du kannst trotzdem bis auf spezielle Instruktionen alles, was auch per ASM geht machen.



  • muemmel schrieb:

    Hi,

    ich glaube nicht, dass das mit den Methoden von C oder gar C++ zu realisieren ist. Das geht aus meiner Sicht nur auf Assemblerbasis, da Compiler zum einen zu viel vo der eigentlichen Hardware vor dem Nutzer verbergen, ihm also mehr oder weniger einen virtuellen PC vorspielen, und zum anderen werden die Programme zu groß und benötigen ein Betriebssystem. Da kann ich nicht einfach den Ramm zuschreiben, da ist immer das System dazwischen, und wo mein Schreibzugriff wirklich landet weiss der Geier. unter Umständen blos im Cache oder anschließend ausgelagert auf der Platte.
    Selbst wenn das Programm es schafft, die alleinige Herrschaft über den Rechner zu gewinnen, was wird mit den ganzen Daten die das System in den diversen Puffern vorhält. Ds geht nur vor dem eigentlichen Systemstart, wenn noch nichts sonst geladen ist, mit einer kleinen Assi-Routine, die möglichst auch noch verschiebbar sein sollte, damit auch der vom Programm belegte Bereich getestet werden kann.
    Auch müsste zumindestens jede einzelne Speicherzelle in allen Bits mit gegensätzlichen Werten getestet werden.
    Aber die meisten Linux-Distributionen haben ja einen Hardwaretest mit im Paket, so dass man nur mal von ner Linux-CD booten und den Hardwaretest anschubsen muss.

    Gruß Mümmel

    memtest86+ (ja ich habe was gefunden) ist komplett in c geschrieben also soviel mal dazu.. weiters ist es wirklich kein problem auf die ram im 16 bit zuzugreifen,auch im protected mode etc.. und auch nicht über win XP oder win2k man kann sich auch sicher sein dass man in die ram schreibt .

    SeppJ schrieb:

    Nein. Du kannst davon ausgehen, dass diese Speicherzelle den Wert 0x005 unter den gegeebenen Umständen korrekt speichern kann (sofern du nicht sowieso einfach nur den Wert direkt wieder aus einem Register oder Cache gelesen hast, da du anscheinend keine Ahnung vom Thema hast). Was meinst du, warum Ramtests (hast du eigentlich mal einem zugeguckt?) so viele verschiedene Muster testen? Überhaupt solltest du dir wenigstens mal angucken, was die einfachen Gratistester so machen, dann siehst du wenigstens mal die Grundlagen, z.B. dass man den RAM auch mal stressen sollte, anstatt bloß stupide einzelne Zellen zu testen.

    ich bin gerad erst dabei mich mit diesem thema zu beschäftigen deshalb will ich ja auch wissen wie ein ramtest aussieht und welche methoden es gibt, was ja auch meine ursprüngliche frage ist. habe zuver entdeckt dass Memtest 86x in opensource ist.. aber denneoch wäre es hilfreich wenn ich eine quelle kennen würde in form einer website, wo man sich mit ramtest beschäftigt und das genauer erklärt wird...

    danke
    lg buntehaare 😉



  • Hi Ethon,

    Ethon schrieb:

    Nö. Ein C Compiler ist eine Art portabler High-Level Assembler und C++ ist einige Abstraktionseben darüber. Du kannst trotzdem bis auf spezielle Instruktionen alles, was auch per ASM geht machen.

    eben, ein portabler High-Level Assembler der auf eine idealisierte Maschine aufsetzt. Ich kann jede einzelne Speicherzelle adressieren. Aber ich kann nicht beeinflussen, ob sie auch wirklich genutzt wird. Paging, Swapping, virtuelle Adressierung, Caches, Prozessor-Piplines... all das sind Dinge, die die Sprache C und damit auch C++ nicht kennt. Und damit kann sie darauf nicht reagieren. Sie kann nur das adressieren und handhaben was ihrer Meinung nach Speicher ist, aber nciht was wirklicher physischer speicher ist.

    Gruß Mümmel



  • Siehe http://www.memtest.org/ (ist Opensource)


Anmelden zum Antworten