So!
Die physikalische Speicherverwaltung das Paging sind eingebaut.
Allerdings stellt sich mir hier noch eine Frage!
Ich muss ja den Kernel mappen, was soweit auch geschieht. Nun wird aber, wenn der Speicher z.B. 4 MB beträgt aufgeteilt in 2MB DMA verwaltet von der Bitmap und 2 MB normal verwaltet von einem Stack.
Ich lasse meinen Kernel Physikalische Speicherseiten reservieren vom DMA Part, was wie mir gerade auffällt nicht korrekt funktioniert, da einige physikalische Bereiche ja bereits als benutzt in der bitmap abgelegt werden.
Das würde heißen, beim Mappen des physikalischen Speichers müsste ich das ja eigentlich wie folgt machen:
unsigned int address, virt;
for(address = 0, virt = 0xC0000000; address < (load_end_address+(load_end_address%0x1000)); address += 0x1000, virt += 0x1000)
{
set_bitmap_entry(address);
map_address(address, address, 1, 1);
map_address(address, virt, 1, 1);
}
Nun bin ich mir allerdings nicht mehr ganz sicher, was den Speicher betrifft.
Der Kernel wird an die Stelle 0x00100000 also ans erste MB geladen.
Die GRUB-Multiboot Struktur befindet sich irgendwo in den ersten 4 MB, was heißt, dass ich herausfinden muss, ob dies hinter load_end_address ist oder nicht und das dann je nach dem load_end_address ändern muss.
Was auch noch berücksichtigt werden muss, sind die Module, damit diese nicht überschrieben werden.
Ist sonst noch etwas wichtiges, worauf unbedingt geachtet werden muss?
Grüße Christian
*EDIT*
Und noch etwas. Ist es sinnvoller die physikalischen Speicherseiten für den Kernel Heap vom Stack zu nehmen? Oder sollte doch besser der DMA-Part dafür hinhalten.