Hallo
Ich hab ein paar Fragen zum Paging und Speichermanagment.
Ich hab hier erst einmal Aufgeschrieben, wie ich mir
mein Speichermanagement vorstelle.
Jeder Task bekommt eine eigene PageDirektory. (Natürlich auch PageTabellen) Eine PageDirektory und PageTabellen für das OS um auf gesamten Speicher zugreifen zu können. Eifachhalber mape ich das hier Linear (Virtuelle Adresse ist dann gleich = Physischer, VA == PA) bei jeder Speicherzuweisung (vom erstellen von Tasks oder ähnlichem), wird in die OS PD eingetragen(mit gemappt). (weis nicht, ob das, dass Beste ist, jedoch währes was anderes komplizierter, denke ich).
Ein Problem habe ich da auch noch, für Interups brauch ich ja ein Stack (für andere OS Dinge wohl auch), bei der PD mit dem linear gemappten. Ich denke das ich das so gelöst habe, das ich an den Untersten Einträgen (höchsten Adressen) der PD den Stack einrichte, der aber nicht (linear gemapt ist, bekommt Speicherseiten zugewiesen. (Aber das OS brauch ja nicht so viel Platz für den Stack).
Jetzt zum wichtigen Teil meiner Frage:Mein Software Multitasking muss ich noch umschreiben, damit es auch fürs Paging geht.
Ich hab ein bisschen im Forum gelesen, das beim neu Laden vom CR3 (PD) Register, die Adressierung sich nicht sofort ändert (wegen dem Cache). Wie bekomme ich das hin, dass das CR3 Register geladen wird und nach dem iret Befehl an der Richtigen Speicherstelle Ausgeführt wird?
Ich muss ja für den nächsten Task seine PD laden (CR3 Register).
Das weis ich nicht, wie da genau gehen soll.