Hallo,
ich habe den Kernel aus der "OS-Dev für Einsteiger" Serie nachprogrammiert und bin nun dabei ihn etwas zu erweitern. Nur irgendwie funktioniert das Initialisieren der Bitmap für die Speicherverwaltung nicht richtig.
Es handelt sich hierbei um die originale Funktion aus dem Tutorial. Ich hab nach ein paar Tests herausgefunden, dass mmap_end immer kleiner ist als mmap, somit wird nie in die while-Schleife gegangen und der vorher als belegt gekennzeichnete Speicher wieder freigegeben.
Ich verstehe ehrlich gesagt nicht wirklich woran das liegen kann, aber vielleicht ist es auch einfach zu spät in der Nacht
ich habe den Kernel aus der "OS-Dev für Einsteiger" Serie nachprogrammiert und bin nun dabei ihn etwas zu erweitern. Nur irgendwie funktioniert das Initialisieren der Bitmap für die Speicherverwaltung nicht richtig.
Code: [Auswählen]
void pmm_init(struct multiboot_info* mb_info)
{
struct multiboot_mmap* mmap = mb_info->mbs_mmap_addr;
struct multiboot_mmap* mmap_end = (void*)
((uintptr_t) mb_info->mbs_mmap_addr + mb_info->mbs_mmap_length);
/* Per Default ist erst einmal alles reserviert */
memset(bitmap, 0, sizeof(bitmap));
/*
* Nur, was die BIOS-Memory-Map als frei bezeichnet, wird wieder als frei
* markiert
*/
while (mmap < mmap_end) {
if (mmap->type == 1) {
/* Der Speicherbereich ist frei, entsprechend markieren */
uintptr_t addr = mmap->base;
uintptr_t end_addr = addr + mmap->length;
while (addr < end_addr) {
pmm_free((void*) addr);
addr += 0x1000;
}
}
mmap++;
}
/* Den Kernel wieder als belegt kennzeichnen */
uintptr_t addr = (uintptr_t) &kernel_start;
while (addr < (uintptr_t) &kernel_end) {
pmm_mark_used((void*) addr);
addr += 0x1000;
}
}Es handelt sich hierbei um die originale Funktion aus dem Tutorial. Ich hab nach ein paar Tests herausgefunden, dass mmap_end immer kleiner ist als mmap, somit wird nie in die while-Schleife gegangen und der vorher als belegt gekennzeichnete Speicher wieder freigegeben.
Ich verstehe ehrlich gesagt nicht wirklich woran das liegen kann, aber vielleicht ist es auch einfach zu spät in der Nacht


Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert



