Nun ja...
mem_upper + 1024 verwende ich vor dem Aufruf der main-Funktion, da mind. 4MB RAM benötigt werden
Die Memory Map so wie in dem Stück Quellcode oben wird bei der Initialisierung der Physikalischen Speicherverwaltung benutzt.
Jetzt habe ich aber noch eine Frage:
Und zwar habe ich für den nicht DMA-Bereich einen Page Stack, wo ich beliebig Adressen runter nehmen und wieder drauf legen kann.
Daraus schließe ich, dass ich nur den Stack mit den freien Pages brauche
Wenn das so richtig ist, wie ich mir das denke, dann bin ich zumindest mit der hälfte fertig. Bei der anderen Hälfte sind noch ein paar ToDo's offen...
Gruß Christian
mem_upper + 1024 verwende ich vor dem Aufruf der main-Funktion, da mind. 4MB RAM benötigt werden

Die Memory Map so wie in dem Stück Quellcode oben wird bei der Initialisierung der Physikalischen Speicherverwaltung benutzt.
Jetzt habe ich aber noch eine Frage:
Und zwar habe ich für den nicht DMA-Bereich einen Page Stack, wo ich beliebig Adressen runter nehmen und wieder drauf legen kann.
Code: [Auswählen]
unsigned int *phys_mem_stack;
unsigned int phys_mem_stack_top;
/* Returns the address of a single page (allocated) */
unsigned int phys_mem_stack_pop(void)
{
/* No free physical Memory. panic should be replaced with a swap function later */
if(!phys_mem_stack_top)
panic("Out of Memory. Try Using DMA-Allocator");
return(phys_mem_stack[--phys_mem_stack_top])
}
/* push a address back to the stack (free it) */
void phys_mem_stack_push(unsigned int physical_address)
{
phys_mem_stack[phys_mem_stack_top++] = physical_address;
}
Wenn ich nun eine solche Adresse reserviere, wird die ja dann später in dem Page-Frame gespeichert.Daraus schließe ich, dass ich nur den Stack mit den freien Pages brauche

Wenn das so richtig ist, wie ich mir das denke, dann bin ich zumindest mit der hälfte fertig. Bei der anderen Hälfte sind noch ein paar ToDo's offen...

Gruß Christian

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert



