Autor Thema: RAM schreiben und löschen  (Gelesen 3634 mal)

bscreator

  • Gast
Gespeichert
« 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

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #1 am: 17. September 2005, 20:24 »
hast du einen memory manager?
wenn ja, wo ist dein problem???
wenn nein -> bau dir einen (ist extrem wichtig!)

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 18. September 2005, 18:46 »
Kannst Du mir einige einfache Tutorials zum Thema "Memory Manger erstellen" empfehlen ?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 18. September 2005, 20:04 »
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.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 19. September 2005, 17:38 »
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.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 19. September 2005, 17:42 »
also UserLevel malloc funktioniert doch mitm Heap oder nicht? ^^

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 19. September 2005, 17:46 »
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.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #7 am: 19. September 2005, 17:52 »
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*
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen