Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Programmieraufgaben Hier wird regelmäßig eine neue Programmieraufgabe gestellt, die dann gelöst werden soll und in Zusammenarbeit mit den Moderatoren auch besprochen werden kann.

RAM Test

Diskussion: RAM Test im Forum Programmieraufgaben, in der Kategorie Code Kitchen; Anzeige So, diesmal ein Program bei dem man nachdenken muss. Ich hätte gerne ein Program mit dem man seinen Arbeitsspeicher ...

Antwort
Alt 15.05.04, 14:12   #1 (permalink)
Tec
Senior Member
 
Registriert seit: 02.10.01
Tec Leistung: Facit NTK
Likes: 1
Standard RAM Test

Anzeige

So, diesmal ein Program bei dem man nachdenken muss. Ich hätte gerne ein Program mit dem man seinen Arbeitsspeicher testen kann. Das Programm sollte folgende Bedingungen erfüllen:

  • Startadresse des testenden Speicherbereichs in Hex eingeben
  • Grösse des zu testenden Speicherbereichs eingeben
  • den zu testenden Speicherbereich mit dem Wert 0x55 initialisieren
  • Read und Compare-Operationen auf diesen Bereich ausführen
  • 3 Fehlerabfragen einbauen (Out of Range, Wrong value found, Wert ok)
  • das ganze als Funktion, als Rückgabewert ein Pointer mit der Adresse eines der Fehler

Sollte also eine Speicherzelle defekt sein, so würde der Wert dort drinnen nicht 0x55 sein.
Sollte kein Fehler gefunden werden, dann ist der Rückgabewert der Funktion NULL.
Die Funktion sollte nur EINE Returnanweisung enthalten.

Hier mal ein kleines Konstrukt:
Code:
uint8 * ram_test(uint8* startadresse,uint32 size)
{
...
}

void main()
{
...//Funktionsaufruf
}
Interessant wäre es noch wenn jemand ein ausführliches Flussdiagramm über den Ablauf seines Programmes dazu machen würde. Ein ZÜD wäre natürlich noch besser!
Tec ist offline   Mit Zitat antworten
Alt 17.05.04, 21:09   #2 (permalink)
 
Registriert seit: 03.04.04
D.Mon Leistung: Facit NTK
Likes: 0
Standard

hallo Tec,

ich hätte da mal noch eine Frage:

Zitat:
Startadresse des testenden Speicherbereichs in Hex eingeben
Grösse des zu testenden Speicherbereichs eingeben
den zu testenden Speicherbereich mit dem Wert 0x55 initialisieren
Was passiert mit den Daten, die vielleicht in dem zu testenden Speicherbereich liegen.
Oder anders gefragt: Wie weiss ich, das ich nicht gerade den Kernel abschieße ?

Ich programmiere noch nicht sehr lange;
Falls die Frage dumm ist, erklär mir bitte einer warum.
D.Mon ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 21.05.04, 11:55   #3 (permalink)
 
Registriert seit: 03.02.04
Rodent Leistung: Facit NTK
Likes: 0
Standard

Hi Tec,
mit der SystemSuite ab Version 3.0 (http://www.ontrack.de/) kannst Du unter Systemtest den Speichertest auswählen und Deinen Arbeitsspeicher testen. Symantec hat die Suite gekauft - hier solltest Du nach der aktuellen Version suchen.
Bei heise gibt's so was ähnliches in bekannt schlichter Form: http://www.heise.de/ct/ftp/ctspd.shtml

Gruß rodent
Rodent ist offline   Mit Zitat antworten
Alt 24.10.04, 19:14   #4 (permalink)
 
Registriert seit: 10.09.04
Fat Tony Leistung: Facit NTK
Likes: 0
Standard

ZU C.Mon

Ich bin auch erst C++ Anfänger aber ich glaube, das man einfach mit einem Zeiger
den Speicher reserviert und den reservierten Speicher dann testet.

mfg Fat Tony
Fat Tony ist offline   Mit Zitat antworten
Alt 24.10.04, 21:00   #5 (permalink)
 
Registriert seit: 03.04.04
D.Mon Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Fat Tony
ZU C.Mon

Ich bin auch erst C++ Anfänger aber ich glaube, das man einfach mit einem Zeiger
den Speicher reserviert und den reservierten Speicher dann testet.

mfg Fat Tony
also zunächst mal: es heisst D.Mon
Zitat:
den zu testenden Speicherbereich mit dem Wert 0x55 initialisieren
heisst das nicht "0x55" hineinzuschreiben und damit das überschreiben, was davor drinstand ? *grübel*
Und wie sieht das "testen" nach Deiner Interpretation dann aus ?
Ich habe das so verstanden, dass man einen bestimmten Wert hineinschreibt und dann nachsieht, ob er auch drin steht - oder liege ich jetzt völlig daneben ?

Leider scheint das Interesse für diese Aufgabe ja ziemlich bescheiden zu sein - Schade eigentlich
D.Mon ist offline   Mit Zitat antworten
Alt 27.10.04, 20:00   #6 (permalink)
 
Registriert seit: 10.09.04
Fat Tony Leistung: Facit NTK
Likes: 0
Standard

Hallo!

Wenn man die Größe des zu testenden Speicherbereichs eingeben kann, ist es doch möglich, dass man die gesamte Größe des zur verfügung stehenden Speichers
eingibt, dann würde sozusagen wie D.Mon es schon richtig gepostet hat "Der Kernel abgeschossen werden".
Aber nur so kann man den Speicher auf Fehler testen.
Man kann also nie den gesamten Specher testen und deshalb auch nie wissen ob der Ram in Ordnung ist.
Bin ich da richtig oder völlig falsch ?(

Außerdem wie weiß ich auf welchen Adressen das BS seine Files gespeichert hat?
mfg Fat Tony
Fat Tony ist offline   Mit Zitat antworten
Alt 04.11.04, 00:41   #7 (permalink)
 
Registriert seit: 13.05.04
ecologys Leistung: Facit NTK
ecologys eine Nachricht über ICQ schicken
Likes: 0
Standard

Hi,

@Fat Tony: Ich glaube da liegst du richtig. Man kann nie den gesamten Ram testen mit einem Programm welches auf ein Betriebssystem läuft. Das Programm selbst muss ja auch immer auf den Ram liegen.

Dass der Kernel aber abgeschossen wird, das sollte so gut wie unmöglich sein. Eine "Segmentation fault" könnte zB. so eine Schutzmaßnahme sein, welche das Betriebssystem dafür verwendet.

mfg ecologys
ecologys ist offline   Mit Zitat antworten
Alt 04.11.04, 00:56   #8 (permalink)
 
Registriert seit: 03.04.04
D.Mon Leistung: Facit NTK
Likes: 0
Standard

hallo ecologys,

ich vermute, dass das u. a. vom Betriebssystem abhängig ist.

Grundsätzlich würde ich aber annehmen, dass ein Programm, welches mit ausreichenden Berechtigungen läuft auch in der Lage ist, Speicherbereiche zu beschreiben, die anderen Prozessen zugeordnet sind.
Die gilt wohl insbesondere dann, wenn man in der Lage ist, die physikalische Addresierung einzelner Speicherstellen vorzunehmen.
D.Mon ist offline   Mit Zitat antworten
Alt 04.11.04, 10:02   #9 (permalink)
 
Registriert seit: 13.05.04
ecologys Leistung: Facit NTK
ecologys eine Nachricht über ICQ schicken
Likes: 0
Standard

Hi D.Mon,

wenn man den Bereich des Betriebssystems überschreibt funktioniert ja leider nichts mehr.
Ich hab mir da so was ausgekopft, weiss aber nicht ob das hinhaun würde.

Und zwar hab ich mir 2 Varianten ausgedacht:

1. Man könnte ja zB. die erste Hälfte des Rams testen, wobei das Betriebssystem und das Program in der hintern hälfte stehen sollte. Dann macht man eine Kopie des Betriebssystems und des Prozesses in der ersten Hälfte und biegt in der PageTable die zeiger um.
Voraussetzung ist aber dabei ausreichende Zugriffsrechte, wie D.Mon schon gesagt hat.

2. Man könnte ein eigenes Betriebssystem schreiben, das nur den ram testet. Dann müsste man auch alles umkopieren und Zeiger umbiegen aber es wär bedeutend einfacher wegen der Rechte und dem Kernel Mode.



mfg ecologys
ecologys ist offline   Mit Zitat antworten
Alt 04.11.04, 12:25   #10 (permalink)
 
Registriert seit: 03.04.04
D.Mon Leistung: Facit NTK
Likes: 0
Standard

Bleibt "nur" noch die Aufgabe herauszufinden, in welchem physikalischen Bereich des RAM der Kernel und die übrigen BS Geschichten (z. B. die Verwaltung des virtuellen Speichers und der ) sich gerade befinden und wie man diesen addressieren kann.

Ich bin mir sicher, dass man diese Aufgabe lösen kann, wenn auch sehr systemspezifisch.
was mich allerdings ein wenig irritiert, ist, dass hier eine Aufgabe eingestellt wird und man das Ganze dann einfach sich selber überlässt.

Sieht ein wenig so aus, als hätte da jemand seine Hausaufgaben gepostet
D.Mon ist offline   Mit Zitat antworten
Alt 04.11.04, 15:38   #11 (permalink)
 
Registriert seit: 10.09.04
Fat Tony Leistung: Facit NTK
Likes: 0
Standard

Jetzt hab ich es man startet das Programm von Bootdiskete und läst sich die Daten in eine Textdatei auf der HDD speichern!
Dann kann man 100% des Speichers testen!!

mfg Fat Tony
Fat Tony ist offline   Mit Zitat antworten
Alt 07.11.04, 00:57   #12 (permalink)
 
Registriert seit: 07.11.04
kletterbeer Leistung: Facit NTK
Likes: 0
Standard

Hallo!
Wäre nett, wenn jemand mal auf die ursprüngliche Frage antworten könnte. Sitze gerade vor der selben Aufgabe. Ich muss auch ein solches Programm schreiben. Dieses wird später zum RAM testen auf einem Motorolachip verwendet. Die Frage, ob ich einen wichtigen Speicherbereich überschreibe, kann später geklärt werden. Erst muss ich das Programm mal schreiben und zum Laufen bringen.

@ecologys: Flussdiagramm habe ich!

Muss mein Prog in C in Inline-assembler schreiben. Wie kann ich Assembler in Visual C einbinden? Wenn sich jemand auskennt bitte melden!

mfg
kletterbeer ist offline   Mit Zitat antworten
Alt 08.11.04, 18:13   #13 (permalink)
 
Registriert seit: 03.04.04
D.Mon Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von Fat Tony
Jetzt hab ich es man startet das Programm von Bootdiskete und läst sich die Daten in eine Textdatei auf der HDD speichern!
Dann kann man 100% des Speichers testen!!

mfg Fat Tony
Müssen Dein Bootsystem und Programm um zu laufen nicht von der Bootdiskette in den Arbeitsspeicher geladen werden ?
D.Mon ist offline   Mit Zitat antworten
Alt 08.11.04, 21:38   #14 (permalink)
 
Registriert seit: 13.05.04
ecologys Leistung: Facit NTK
ecologys eine Nachricht über ICQ schicken
Likes: 0
Standard

Hi,

da kann ich nur D.Mon recht geben, das Programm muss in den Ram geschrieben werden und schon kann er nicht so ohne weiteres komplett getestet werden.
Das ganze wichtige Zeugs, Betriebssystem und so, müsste ab Adresse 0 starten, da eigentlich ein jedes Programm mit der Adresse 0 startet. 0 natürlich ausgeschlossen, da das der Nullpointer ist.

@kletterbeer: Du musst anfangs alles mit Assembler starten und kannst erst später in C-Code wechseln. Gute Beispiele dafür findest du unter [2].

Ein bisschen Werbung von unserem Project das dazu passt und vielleicht weiterhilft :]
[1] http://sourceforge.net/projects/sweb
[2] http://sweb.sourceforge.net/

mfg ecologys
ecologys ist offline   Mit Zitat antworten
Alt 07.09.05, 20:41   #15 (permalink)
husalov
Guest
 
Likes:
Standard

Da hat sich wohl ein DAU einen üblen Scherz erlaubt...der RAM wird bei jedem Systemstart Byte für Byte getestet...
  Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Programmieraufgaben » RAM Test
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
test throjan Hackerboard.de-Feedback 13 03.10.01 17:46


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61