Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: Thunder am 13. August 2009, 19:16
-
Hallo Community,
Ich habe mich vor ein paar Tagen angemeldet, da ich schon immer ein OS schreiben wollte. Ich habe auch schon einige Tutorials gelesen und habe jetzt aber eine Frage zur physischen Speicherverwaltung mit einer Bitmap. Wie bekomme ich heraus welche Adressen frei sind? Es sind ja schließlich der Kernel und seine Daten im Speicher.
mfg Thunder
-
Willkommen im Forum erstmal. :)
Du kannst dir mal die physische Speicherverwaltung von tyndur (http://git.tyndur.org/?p=tyndur.git;a=blob;f=src/kernel2/src/mm/phys.c;h=e77bb3cd01e2fbc59743480d56e69802e45d1329;hb=HEAD) anschauen. Im großen und ganzen gibt es da drei Sachen zu beachten, wenn ich nichts vergesse:
- GRUB (bzw. das BIOS) liefert eine Memory Map, die beschreibt, welche Speicherbereiche benutzbar und welche reserviert sind (z.B. für MMIO-Bereiche von Geräten). Das ist zunächst einmal die Grundlage, von der man ausgeht.
- Als nächstes weiß man, dass der eigene Kernel belegt ist. Dazu baut man im Linkerskript jeweils an den Anfang und das Ende des Kernels ein Symbol ein, auf das man dann im Kernel zugreifen kann. Dieser Bereich wird als belegt markiert.
- Dann bleiben noch alle Bereiche außerhalb des Kernels übrig, die schon belegt sind. Je nachdem, was dein Kernel bis zur Initialisierung der physischen Speicherverwaltung gemacht hat, könnten das GDT, IDT, Page Tables, Multiboot-Module oder irgendwas anderes sein. Da du ja weißt, was du angelegt hast oder welche Informationen vom Bootloader du weiterverwenden willst, kannst du die belegten Bereiche hier relativ einfach aufzählen.
Beantwortet das deine Frage so ungefähr?
-
Ja, vollkommen. Danke sehr!