Autor Thema: RAM - frei oder belegt ?  (Gelesen 6532 mal)

bscreator

  • Gast
Gespeichert
« am: 31. July 2007, 17:49 »
Hallo,
ich mach mir grad so ein paar Gedanken über ein Programm, das den Inhalt des 1 MB großen Real-Mode-Arbeitsspeicher ausliest und entscheidet, ob ein Speicherbereich frei oder belegt ist.
Aber wie kann man das realisieren ?
Hab mir ein paar Gedanken gemacht, komm aber nicht so richtig in die Gänge.
Es reicht ja im nicht, jedes Bit eines Segments auszulesen und wenn der Wert 0 ist, ist der Bereich frei, wenn ungleich 0, ist der Bereich belegt.
Schließlich könnte eine 0 ja auch von einer Zahl sein, die im RAM gespeichert wurde, oder ?

Wie kann man also im Real-Mode FREIE und BELEGTE (z.B. durch den Videospeicher oder die IVT) Speicherbereiche auseinanderhalten ?

Vielen Dank,
bsc

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 31. July 2007, 18:53 »
Von 0x500 (davor IVT & BDA) bis 0x9FC00 (danach EBDA, VRAM, VideoBIOS, BIOS) ist bei PCs mit mehr als 1MB RAM frei. Bei PCs mit weniger ist der EBDA entsprechend weiter unten angesiedelt. Die Adresse des EBDA kann man bei 0x413 (2byte) auslesen.

siehe auch hier
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 01. August 2007, 17:52 »
Danke, aber das Tutorial hab ich schon durchgeschaut.
Vielleicht hab ich mich auch falsch ausgedrückt, ich schreib ein eigenes Programm, das den Inhalt ausliest.

Kann man so ein Programm mit einer Schleife, die jedes einzelne Byte von 0000:0000 - 100000:0000 ausliest, realisieren ?

Im Prinzip kann man doch jedes einzelne Bit mit so einer Schleife auslesen und, falls der Wert 0 bzw. 1 ist, entscheiden, ob der Bereich frei bzw. belegt ist

Oder stell ich mir das zu leicht vor?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 01. August 2007, 17:59 »
Das ist so nicht möglich. Warum sollte ein bereich in dem 0 steht frei sein? Könnte sein, dass da 0 drinstehen soll, dass er wirklich frei ist oder dass er reserviert ist und da _noch_ 0 drinsteht.

Wie soll das Programm aussehen? Unter windows/linux/einesOS/DOS oder gleich nach dem BIOS? Was für einen Sinn soll das machen?
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. August 2007, 18:01 »
Auch freie Bereiche haben im allgemeinen keine Nullen drinstehen, sondern irgendwelchen (pseudo-)zufälligen Müll. Das sind zwei völlig unabhängige Dinge.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Termite

  • Beiträge: 239
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 02. August 2007, 09:36 »
Moin

man kann nur über den zustand des rechners ( Direckt nach dem Bios start, während der ausführung des eigenen programmes ) wissen, wieviel ram frei oder belegt ist. Wozu macht man sich den sonst die mühe eine speicherverwaltung zu implementieren, die einem darüber auskunft gibt?

bscreator

  • Gast
Gespeichert
« Antwort #6 am: 03. August 2007, 13:57 »
Klar, das weiss ich schon mit dem BIOS.
Aber die Speicherverwaltung ist ja ein grundlegender Bestandteil eines jeden Betriebssystems. Und deswegen werd ich auch so ne verkleinerte Art eines Memory Managers implementieren müssen.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 03. August 2007, 22:30 »
Das ist richtig. Ob ein Speicherbereich frei ist, hat aber trotzdem nichts damit zu tun, daß Nullen drin stehen. Du mußt dir an irgendeiner Stelle selbst merken, was frei und was belegt ist. Zum Initialisieren kannst du dann das BIOS hernehmen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #8 am: 03. August 2007, 23:15 »
0x0000 - 0x0040 Hier befinden sich die Interrupt Service Routine Vectors (ISR vectors).
0x0040 - 0x0100 Der BIOS-Datenbereich
0x0100 - 0x07C0 Dieser Bereich ist frei verfügbar.
0x07C0 - 0x07E0 Hierhin wird der Bootsektor geladen. Dieser Bereich sollte nicht vom Bootsektor aus berührt werden, aber sobald das OS geladen ist und der BS nicht mehr ausgeführt wird, ist er frei verfügbar.
0x07E0 - 0xA000 Dieser Bereich ist wieder frei verfügbar.
0xA000 - 0xC000 Hier befindet sich das Video-Subsystem. Dieser Bereich wird auch besser in Ruhe gelassen, solange, bis wird Zeichen ohne BIOS-Interrupts direkt ausgeben möchten.
0xC000 - 0xFFFF Diesen ganzen Bereich nimmt der ROM eine (ROM Bios, etc.) In diesen Bereich kann nicht geschrieben werden.

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #9 am: 03. August 2007, 23:21 »
Schön, dass du alles nochmal auflistest und dann auch noch nur die Segmente und nicht die kompletten Adressen. :-P
Afaik ist der BIOS-Datenbereich kleiner & es existiert noch ein Erweiterter BIOS Datenbereich (beides siehe Link in meinem ersten Post in diesem Thread).
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #10 am: 03. August 2007, 23:23 »
Schön, dass du alles nochmal auflistest und dann auch noch nur die Segmente und nicht die kompletten Adressen. :-P
Afaik ist der BIOS-Datenbereich kleiner & es existiert noch ein Erweiterter BIOS Datenbereich (beides siehe Link in meinem ersten Post in diesem Thread).
Hehe, ist ja alles nur copy and paste. ^^ Ich lese doch nicht die anderen Posts.

bitmaster
In the Future everyone will need OS-64!!!

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #11 am: 03. August 2007, 23:29 »
Vielen Dank bitmaster für deinen überaus hilfreichen Beitrag. Was würden wir nur machen wenn wir dich nicht hätten?

Deine Beiträge strotzen ja nur so vor Qualität, richtig proffesionel...

[Edit] Mit netten Grüssen vom Blauen:
« Letzte Änderung: 03. August 2007, 23:43 von FreakyPenguin »

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #12 am: 03. August 2007, 23:35 »
Vielen Dank bitmaster für deinen überaus hilfreichen Beitrag. Was würden wir nur machen wenn wir dich nicht hätten?

Deine Beiträge strotzen ja nur so vor Qualität, richtig proffesionel...
Danke für dein Lob. Ist man von dir gar nicht gewohnt.

bitmaster
In the Future everyone will need OS-64!!!

 

Einloggen