Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: sp am 28. March 2005, 11:56
-
Hallo
da ich es nun endlich geschafft habe die GDT in C zu verwalten *jubel* möchte ich nun Paging implementieren. Was mir noch unklar ist, ist das Zusammenspiel zwischen GDT und Paging. Kann ich die GDT "vergessen", wenn ich Paging benutze? Vielleicht kann mir ja jemand den zusamenhang erklären, wäre wirklich nett.
sp
-
Die GDT bleibt natürlich erhalten. Wichtig: Wenn du die Adresse der GDT (mittels LGDT) angibst, ist das die physische Adresse.
Was sich bei Paging ändert: Nach der Adressbildung mit Selektor+Offset wird der Pagingmechanismus erst gebraucht. Aus dieser Adresse wird dann mithilfe der Pagetables/Paging-Dirs die endgültige Adresse berechnet.
-
Bedeutet also, dass ich nicht einfach mal eben so das Paging einschalten kann, da dann ich die Pointer des C-Kernerls nicht mehr stimmen?
eigendlich nicht.
wichtig ist noch zu sagen, dass sich die deskriptorangaben in der GDT dann auf den virtuellen bereich und nicht den pysikalischen beziehen.
-
Das ganze funktioniert vereinfacht so:
Du gibst dem Prozessor die virtuelle Adresse an.
Auf die wendet er die Deskriptordaten an, also z.B. addiert den Startoffset hinzu. Das ergibt dann die lineare Adresse. Auf die wiederrum wird das Paging angewandt. So haben wir letztendlich die physikalische Adresse.
Wenn man Paging anschaltet und alles linear mapt ergibt sich eigentlich kein Unterschied zu vorher, ausser das die Lese und Schreibzugriffe langsamer sind^^
-
Um ehrlich zu sein habe ich kein Wort verstanden.
-
Naja Jedes Programm hat seinen eigenen Virtuellen Adressraum, demzufolge löst sich dein Problem von selbst^^ Jedes Prog ist der Meinung alleine im Speicher zu sein und weiss nichts von anderen Programmen, das macht die Verwaltung im OS ja so kompliziert
-
Meistens gibt man jedem Prozess eine eigene Pagetable, ansonsten stimmt was du sagst. Und da kann ja jede Pagetable anders sein.
-
Selbst das ist damit lösbar, dass man Pages ja auslagern kann und bei einem Zugriff auf ausgelagerte kommt ne Exception in der man die dann laden kann.