Autor Thema: Ermitteln des physikalischen Speichers im Long Mode  (Gelesen 3515 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« am: 19. August 2012, 14:51 »
Hallo Community,
wie kann man im Long Mode herausfinden, wie viel RAM vorhanden ist? Mein Kernel wird zwar von GRUB geladen und dieser gibt auch den verfügbaren Speicherplatz zurück, aber nach ein paar Experimenten mit der Grösse des Speichers hat sich herausgestellt, dass GRUB maximal 3.5 GB :x, also 32-Bit-typisch, angibt, und das auch, wenn die Grösse des Speichers 6GB beträgt. (Getestet in VMWare, VirtualBox und mit realer Hardware (8GB)).
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 19. August 2012, 15:26 »
Welchen Wert aus der Multiboot-Info nutzt du denn? In der Memory Map sollte der komplette verfügbare Speicher angegeben sein. Wenn du hingegen das Feld mem_upper ausliest, ist nicht der komplette Speicher angegeben, weil in deinem System zwischen 3,5 GB und 4 GB eine Lücke im Addressraum zu sein scheint.
Dieser Text wird unter jedem Beitrag angezeigt.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #2 am: 19. August 2012, 16:00 »
Hi,
zum herausfinden, wie viel Speicher vorhanden ist, verwende ich den Wert aus dem Feld mem_upper. Die Memory Map verwende ich zur Initialisierung meiner Speicherverwaltung.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. August 2012, 16:09 »
Dann solltest du auch die Memory Map verwenden, um die Größe des Speichers zu bestimmen.
Dieser Text wird unter jedem Beitrag angezeigt.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #4 am: 19. August 2012, 17:31 »
Und warum ist dort eine Lücke? Diese Lücke ist ja dann in jedem System zu finden, denn auf jedem Computer (real wie auch virtuell) erkennt mein System nur 3.5 GB.
Muss man dann um herauszufinden, wie viel Speicher man hat, einfach die Grösste Adresse, also Base und Limit addiert, nehmen und das ist dann der Speicherbereich, also von 0 bis zur grössten Adresse?
« Letzte Änderung: 19. August 2012, 17:53 von OsDevNewbie »
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 19. August 2012, 18:48 »
Hallo,

der PCI-Bus hat nur einen 32-Bit-Adressraum, d.h. sämtliche PCI-Geräte können ihre MMIO-Bereiche können nur in die unteren 4 GB des Adressraums legen. Die Größe des dafür freigehaltenen Bereichs legt das BIOS fest, gelegentlich auch in Absprache mit der Hardware (i.d.R. zwischen 256 MB und 1 GB). Das gleiche Problem gab es früher auch mal, da ISA nur 24 Bit (16 MB) adressieren kann und dafür konnte man im BIOS den Bereich zwischen 15 und 16 MB reservieren. Außerdem ist der Bereich zwischen 640 KB und 1 MB immer reserviert.

Da du Löcher im Speicher hast, kannst du die Größe nicht aus der höchsten Adresse berechnen, sondern musst die Größen der einzelnen Speicherbereiche addieren (mmap1.length + mmap2.length + ... mmapN.length). Die Felder mem_lower und mem_upper solltest du nur als Fallback-Lösung benutzen, wenn du keine memory map übergeben bekommen hast, da sie nicht eindeutig sind (hängt von den Interrupts ab, die das BIOS unterstützt).

Gruß,
Svenska

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #6 am: 25. August 2012, 21:51 »
Aber wenn ich nur 2GB Speicherplatz habe, dann werden ja diese ich glaube es sind PCI-Devices und ACPI (bin mir aber nicht sicher, da ich diese momentan noch nicht unterstütze) trotzdem direkt unter die 4GB-Grenze gesetzt. Daraus resultiert, dass wenn deine Methode zur Bestimmung der Speichergrösse verwendet wird, zu viel Speicher erkannt wird, nämlich genau das das für diese Devices reserviert ist. Diese sind aber ausserhalb des Speicherbereichs.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 25. August 2012, 22:53 »
Hallo,

nein. Es ist nicht zwingend notwendig, dass der PCI-Adressraum direkt unter die 4 GB-Grenze gesetzt wird (das entscheiden BIOS und Chipsatz). Und wenn du die Einträge der memory map benutzt, die auch dort als "frei" markiert sind, dann hast du auch nur die Bereiche im Speicher gefunden, die wirklich nutzbaren RAM enthalten.

Guck dir mal das hier mal an, insbesondere die Unterschiede zwischen E820, E801, E88 und die Informationen zu memory holes.

Gruß,
Svenska

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #8 am: 25. August 2012, 23:20 »
Guten Abend,
ist das dann nur bei Bochs so, dass der letzte Eintrag immer auf einen Speicherbereich an Adresse 0xfffc0000 zeigt und die Länge 0x400000 hat? Dieser ist übrigens immer da, d.h. auch, wenn eigendlich mehr als 4GB RAM vorhanden ist, also z.B. 6GB.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 26. August 2012, 00:59 »
Hallo,

dieser Speicherbereich ist bei Qemu auch vorhanden. Aber er ist nicht als frei markiert, also kann er dir herzlich egal sein. :-)

Gruß,
Svenska

 

Einloggen