So, ich arbeite ja mometan wieder an meinem Microkernel, der ja diesmal etwas mehr können soll als nur einen test-task auszuführen 
Momentan hängt es noch ein wenig bei der Speicherverwaltung. So wie ich das sehe kann man die ja eigentlich in drei Ebenen unterteilen:
1. PMM: Er kümmert sich einfach nur um das zuteilen und freigeben von 4KB-Blöcken. Das setze ich momentan mit einer Bitmap um.
2. Paging: Kümmert sich im Prinzip nur um das Mapping. Bei mir bekommen sämtliche paging-Funktionen die Adresse des page-directories übergeben. Falls da irgendwo Platz gebraucht wird, wird mit Hilfe des PMM Speicher geholt. Außerdem besitzt mein Code eine Funktion um virtuelle in physikalische Adressen umzurechnen und mappt den Kernel in jeden Adressraum.
3. VMM: Ja, gute Frage. Keine Ahnung. Rein theoretisch könnte man ja einfach auf PMM und paging zurückgreifen: Man holt per PMM einen 4KB-Block, mappt ihn an eine freie Stelle in den Adressraum und gibt dann die Stelle im Adressraum zurück. Wäre vermutlich am einfachsten umzusetzen, aber ehrlich gesagt halte ich es für schlecht, wenn ich für jede Task-Struktur einfach mal 4KB verschwende.
Wie siehts also aus? Sollte ich mir einen vernünftigen VMM basteln? Welche Methode würdet ihr da empfehlen bzw. verwendet ihr?

Momentan hängt es noch ein wenig bei der Speicherverwaltung. So wie ich das sehe kann man die ja eigentlich in drei Ebenen unterteilen:
1. PMM: Er kümmert sich einfach nur um das zuteilen und freigeben von 4KB-Blöcken. Das setze ich momentan mit einer Bitmap um.
2. Paging: Kümmert sich im Prinzip nur um das Mapping. Bei mir bekommen sämtliche paging-Funktionen die Adresse des page-directories übergeben. Falls da irgendwo Platz gebraucht wird, wird mit Hilfe des PMM Speicher geholt. Außerdem besitzt mein Code eine Funktion um virtuelle in physikalische Adressen umzurechnen und mappt den Kernel in jeden Adressraum.
3. VMM: Ja, gute Frage. Keine Ahnung. Rein theoretisch könnte man ja einfach auf PMM und paging zurückgreifen: Man holt per PMM einen 4KB-Block, mappt ihn an eine freie Stelle in den Adressraum und gibt dann die Stelle im Adressraum zurück. Wäre vermutlich am einfachsten umzusetzen, aber ehrlich gesagt halte ich es für schlecht, wenn ich für jede Task-Struktur einfach mal 4KB verschwende.
Wie siehts also aus? Sollte ich mir einen vernünftigen VMM basteln? Welche Methode würdet ihr da empfehlen bzw. verwendet ihr?

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert