Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: bscreator am 17. September 2005, 14:43
-
Hi Leute,
mein OS nimmt LANGSAM Gestalt an, kratzt aber immer noch im Real-Mode an der Oberfläche (Und passt noch sehr lange auf ne Floppy).
Ich hab ne seperate Datei "INTREG.ASM" geschrieben. Die Aufgabe dieser Datei ist es, die selbstgeschriebenen Interrupts in der IVT zu registrieren. Die Datei hab ich jetzt mit dem INCLUDE-Befehl in den Sourcecode eingebunden.
Das ist allerdings eine schlechte Lösung weil
a) dieser Code nur einmal ausgeführt wird
b) dieser Code nach Ausführen unnötig im Speicher bleibt
FRAGE:
Wie kann ich den Code dieser Datei in den RAM schreiben und, nach Ausführung des Codes, wieder aus dem RAM ENTFERNEN ?
Thanks,
bscreator
-
hast du einen memory manager?
wenn ja, wo ist dein problem???
wenn nein -> bau dir einen (ist extrem wichtig!)
-
Kannst Du mir einige einfache Tutorials zum Thema "Memory Manger erstellen" empfehlen ?
-
Im Realmode besteht das Memory Management wohl nur daraus, eine solche Struktur in den Speicher zu schreiben:
struct MEMORY {
unsigned short size;
struct MEMORY *next;
}
Und so dann halt malloc() und free() zu implementieren, um die strukturen zu füllen und zu löschen.
-
Im Protected mode sieht die Struktur fürs Userlevel malloc genauso aus.
Allerdings ist es Blödsinn size und next zu speichern. Weil beides das selbe ist eigentlich denn offset(struct)+sizeof(struct)+size=next ums mal so auszudrücken. ich hab das als doppelt verkette liste gemacht, ist schneller wenn man einen Block freigeben will.
-
also UserLevel malloc funktioniert doch mitm Heap oder nicht? ^^
-
Im Protected Mode muss man aber noch Pages in den Prozess mappen, falls man Paging benutzt. Für das Userlevel ist die Implementierung auch nich gleich, da die Pages ja nicht von alleine gemappt werden, sondern der Prozess sie irgentwie anfragen muss.
Es ist sinnvoll next zu speichern, da evt. auch Speicher zwischen zwei Strukturen freigegeben werden kann.
-
Im Userlevel weiss man nix von Pages, für den ist der Speicher linear. Der Prozess sagte nur "Zu wenig Speicher" und bekommt vom Kernel was hinten ran (oder eben nicht).
Den Heap musst du aber irgendwie einteilen. Sei es über Tabellen oder so eine verkette Liste. Es gibt verschiedene Varianten. Das schöne am OS-Dev vieles kann, nichts muss. Wenn ich will kann ich auch eine Zufallsfunktion schreiben die entscheidet ob die allokation erfolgreich ist oder nicht. Macht absolut keinen Sinn, aber es geht. *grins*