Autor Thema: Frage zu Paging und GDT  (Gelesen 3531 mal)

sp

  • Gast
Gespeichert
« 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

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 28. March 2005, 12:02 »
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.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 29. March 2005, 13:47 »
Zitat von: sp
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.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #3 am: 29. March 2005, 13:57 »
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^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #4 am: 29. March 2005, 16:05 »
Um ehrlich zu sein habe ich kein Wort verstanden.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #5 am: 30. March 2005, 12:08 »
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
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #6 am: 30. March 2005, 13:24 »
Meistens gibt man jedem Prozess eine eigene Pagetable, ansonsten stimmt was du sagst. Und da kann ja jede Pagetable anders sein.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #7 am: 30. March 2005, 17:21 »
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.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

 

Einloggen