Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: s137 am 30. June 2015, 23:22

Titel: Paging Probleme
Beitrag von: s137 am 30. June 2015, 23:22
Hallo zusammen,

jetzt war ich lange nicht mehr hier und hab mein Betriebssystemprojekt ein bisschen schleifen lassen.

Ich bin damals an Teil 9 des Tutorials gescheitert, dem Paging. An sich eine einfache Sache, wenn da nicht die ganzen Verständnisprobleme wären.
Mein Problem ist hauptsächlich dass ich nicht mehr durchblicke ab dem Zeitpunkt wo nur noch virtuelle Adressen verwendet werden können, wo also Paging eingeschaltet ist.

Ab da muss ich ja immer wenn ich einen Kontext erstelle und diesen dann ansprechen will um zum Beispiel etwas darin zu mappen, seine virtuelle Adresse haben. Die existiert ja aber noch nicht wenn ich ihn grade erstellt habe, also muss ich den Kontext irgendwie temporär mappen. Und da komme ich nichtmehr weiter. Zu viele verschiedene Kontexte und Pagedirectorys. Was ich jetz bräuchte wäre ein kleines Beispiel wie ich das in Code umsetze, also dass ich einen Kontext temporär in den aktuellen mappe und darauf zugreife.

Ich wäre sehr sehr dankbar wenn mir das jemand zeigen könnte, an dem Problem häng ich nämlich jetzt schon viel zu lange, und vermutlich ist es ganz einfach und ich seh den Wald vor lauter Bäumen nicht.

Viele Grüße und schonmal Danke im Vorraus
s137
Titel: Re: Paging Probleme
Beitrag von: kevin am 05. July 2015, 10:28
Ich glaube, du musst erst einmal dein Problem klarer definieren. Was genau verstehst du unter einem Kontext?

tyndur hat eine struct, um einen Kontext zu beschreiben, die (u.a.?) physische und virtuelle Adresse des PDs des Kontexts enthält. Sowohl diese struct als auch alle PDs sind ganz normaler Kernelspeicher und damit immer gemappt, und zwar in allen Kontexten gleich.

Bleibt der Zugriff auf PTs. Bei inaktiven Kontexten kannst du einfach die PT temporär mappen wie jeden anderen Speicher auch. Beim aktiven Kontext geht das nicht, oder ist jedenfalls ziemlich tricky, weil du da in Rekursionen rennst.

Hier kommt dann der Trick mit rekursivem Mapping ins Spiel, d.h. ein Eintrag im PD zeigt wieder auf das PD selbst, so dass es gleichzeitig auch als PT benutzt wird. Nimm dir mal Papier und Bleistift und überleg dir mal, was an dieser Stelle gemappt wird. Wenn du das verstanden hast, weißt du vermutlich, was du tun musst. ;)