Paging — Änderungen 2989 → 2990

Zeile 52: Zeile 52:
  
 
== Speicher mappen ==
 
== Speicher mappen ==
−
Um nun eine beliebige physikalische Adresse auf eine beliebige virtuelle Adresse zu mappen muss man erst den richtigen Eintrag im Pagedirectory und dann den richtigen Eintrag im Pagetable. Dann setze ich die physikalische Page im Pagetable-Eintrag. Es wird immer von virtuell nach physikalisch zugeordnet, d.h wenn ich 0xB8000(phys.) auf 0x123000(virt.) mappen will, muss ich erst den Pagedirectory- und Pagetable-Eintrag von 0x123000 berechnen. Das geht am besten so:
+
Um eine beliebige physikalische Adresse auf eine beliebige virtuelle Adresse zu mappen, muss man erst den richtigen Eintrag im Pagedirectory und den in der Pagetable berechnen um schließlich die physikalische Page(mit den passenden Flags) in der Pagetable eintragen zu können. Es wird immer von virtuell nach physikalisch zugeordnet, d.h wenn man 0xB8000(phys.) auf 0x12345000(virt.) mappen will, muss man erst den Pagedirectory- und Pagetable-Eintrag von 0x12345000 berechnen. Das geht am besten so:
  
−
  page ist die virtuelle Page
+
  Pagedirectory_Eintrag = virtuelle_adresse >> 22          (= 0x48)
−
pde ist der Pagedirectory-Eintrag
+
  Pagetable_Eintrag    = (virtuelle_adresse >> 12) % 1024   (= 0x345)
−
pte ist der Pagetable-Eintrag
 
−
   
 
−
pde = page/1024
 
−
  pte = page%1024
 
  
−
Nun suche ich erst die Adresse des Pagetables (im Pagedirectory an der Stelle ''pde'' schauen. Jetzt habe ich die Adresse des Pagetables. Nun muss ich nur noch an der Stelle ''pte'' im Pagetable meine physikalische Adresse eintragen und schon ist die Page gemappt.
+
Nun suche man erst die Adresse der Pagetable (im eben berechneten ''Pagedirectory_Eintrag'' schauen). '''Achtung:''' Es handelt sich hier um die physikalische adresse.
 +
Mit der Adresse der Pagetable kann man jetzt in den ''Pagetable_Eintrag'' die physikalische Adresse eintragen, die passenden Flags setzen und schon ist die Page gemappt.
  
 
== In physikalischen Speicher schreiben ==
 
== In physikalischen Speicher schreiben ==