1
Lowlevel-Coding / Ablauf Paging
« am: 24. October 2016, 08:55 »
Wie auch so viele andere im Forum macht mich das Paging ganz schön fertig. Bevor ich nun anfangen kann mein Paging umzusetzen, versuche ich mir eine Art Programmablaufplan zu erstellen, damit ich weiß ob ich alles bedacht habe. Ich würde hier gern darstellen wie ich mir das ganze vorgestellt habe um dann zu erfahren ob das grundsätzlich richtig ist oder ob doch noch irgendwo Verständnisprobleme sitzen.
Allgemein:
- Ausgangssituation: Adressraum ist in 4kB Speicherblöcke als physische Speicher eingeteilt, verwaltet durch eine Bitmap (halt wie im Tutorial)
- Paging soll wie im Tutorial unterteilt sein in PD und PT
- Jeder Prozess mit eignem PD, Kernel wird immer rein gemappt
- Adressraumaufteilung 0-1 GB für den Kernel, 1-4 GB für den Userspace
So, zur Adressraumaufteilung gleich meine erste Frage: Das wird nur realisiert durch entsprechend gesetzte Flags in den PTE's?
Ablauf:
1. Initialisierung des Paging (läuft einmalig bei Kernelstart):
- Speicherkontext anlegen
- Danach werden im Tutorial die ersten 4 MB an dieselbe physische wie virtuelle Adresse gemappen. Das widerspricht der Adressaufteilung von 0-1 Kernel und 1-4 Userspace. Also kommt an diese Stelle das Mapping des Kernels (+ Videospeicher, + Bitmap)
- Speicherkontext aktivieren
- Paging aktivieren
2. Speicherverwaltung (läuft immer wenn ein neuer Task startet):
- Neues PD anlegen und dem Task mitgeben
- Kernel in das PD mappen
- Kontextwechsel beim Start des neuen Task im Interrupthandler
Sozusagen habe ich nur die 2 Funktion + etliche Hilfsfunktionen.
So weit, so kompliziert. Sobald mein Paging aktiviert ist, habe ich nur noch virtuelle Adressen. Um dennoch an die PD ranzukommen habe ich schon mehrfach gelesen dass das PD einen Eintrag auf dich selbst bekommt und ich es sozusagen als zusätzliches PT verwalten kann. Damit komme ich an die phys. Adresse, die ich ja zum aktivieren des PD brauche.
Jetzt noch eine offene Frage:
Wenn mein Task beendet ist wird ja der Speicherkontext gewechselt. Was passiert mit dem alten Kontext? Gilt der als unbenutzt und kann einfach wieder neu belegt werden?
Ich bin unsicher ob noch ein Thread zum Thema Paging wirklich was hilft, aber ich bin doch etwas ratlos und freue mich über alle Kommentare, Anregungen und Einschätzungen
Eure Sava
Allgemein:
- Ausgangssituation: Adressraum ist in 4kB Speicherblöcke als physische Speicher eingeteilt, verwaltet durch eine Bitmap (halt wie im Tutorial)
- Paging soll wie im Tutorial unterteilt sein in PD und PT
- Jeder Prozess mit eignem PD, Kernel wird immer rein gemappt
- Adressraumaufteilung 0-1 GB für den Kernel, 1-4 GB für den Userspace
So, zur Adressraumaufteilung gleich meine erste Frage: Das wird nur realisiert durch entsprechend gesetzte Flags in den PTE's?
Ablauf:
1. Initialisierung des Paging (läuft einmalig bei Kernelstart):
- Speicherkontext anlegen
- Danach werden im Tutorial die ersten 4 MB an dieselbe physische wie virtuelle Adresse gemappen. Das widerspricht der Adressaufteilung von 0-1 Kernel und 1-4 Userspace. Also kommt an diese Stelle das Mapping des Kernels (+ Videospeicher, + Bitmap)
- Speicherkontext aktivieren
- Paging aktivieren
2. Speicherverwaltung (läuft immer wenn ein neuer Task startet):
- Neues PD anlegen und dem Task mitgeben
- Kernel in das PD mappen
- Kontextwechsel beim Start des neuen Task im Interrupthandler
Sozusagen habe ich nur die 2 Funktion + etliche Hilfsfunktionen.
So weit, so kompliziert. Sobald mein Paging aktiviert ist, habe ich nur noch virtuelle Adressen. Um dennoch an die PD ranzukommen habe ich schon mehrfach gelesen dass das PD einen Eintrag auf dich selbst bekommt und ich es sozusagen als zusätzliches PT verwalten kann. Damit komme ich an die phys. Adresse, die ich ja zum aktivieren des PD brauche.
Jetzt noch eine offene Frage:
Wenn mein Task beendet ist wird ja der Speicherkontext gewechselt. Was passiert mit dem alten Kontext? Gilt der als unbenutzt und kann einfach wieder neu belegt werden?
Ich bin unsicher ob noch ein Thread zum Thema Paging wirklich was hilft, aber ich bin doch etwas ratlos und freue mich über alle Kommentare, Anregungen und Einschätzungen
Eure Sava