Paging — Änderungen 2998 → 2999

Zeile 29: Zeile 29:
  
 
== Einschalten des Paging-Mechanismus ==
 
== Einschalten des Paging-Mechanismus ==
−
Zum Einschalten des Paging-Mechanismus auf der x86-Architektur muss man Bit-31 im CR0-Register setzen. Davor muss aber ein gültiges Page-Directory angelegt und dessen Physikalische Adresse im CR3-Register abgelegt worden sein.
+
Zum Einschalten des Paging-Mechanismus auf der x86-Architektur muss man Bit-31 im CR0-Register setzen. Davor muss aber ein gültiges Page-Directory angelegt und dessen physische Adresse im CR3-Register abgelegt worden sein.
  
 
== Page-Directory ==
 
== Page-Directory ==
Zeile 45: Zeile 45:
 
S: Gibt die Größe der Page an. 0 steht für 4kB, 1 für 4MB (oder 2MB bei Verwendung von PAE). Das S-Bit ist wirkungslos, wenn nicht im [[Steuerregister]] CR4 das PSE-Bit (4MB-Pages) oder PAE-Bit (2MB-Pages) gesetzt ist.
 
S: Gibt die Größe der Page an. 0 steht für 4kB, 1 für 4MB (oder 2MB bei Verwendung von PAE). Das S-Bit ist wirkungslos, wenn nicht im [[Steuerregister]] CR4 das PSE-Bit (4MB-Pages) oder PAE-Bit (2MB-Pages) gesetzt ist.
  
−
A: Wird von der CPU gesetzt, wenn das Pagetable benutzt wurde. Diese Bit wird allerdings nicht von der CPU zurückgesetzt.
+
A: Wird von der CPU gesetzt, wenn die Page Table benutzt wurde. Diese Bit wird allerdings nicht von der CPU zurückgesetzt.
  
 
C: Wenn dieses Bit gesetzt ist, wird für die Page kein Cache benutzt.
 
C: Wenn dieses Bit gesetzt ist, wird für die Page kein Cache benutzt.
Zeile 57: Zeile 57:
 
P: Gibt an ob die Page momentan im Speicher liegt. Ist das Bit gelöscht (Page nicht im Speicher), dann sind alle anderen Bits für das Betriebssystem frei verfügbar und können z.B. für Swapping genutzt werden.
 
P: Gibt an ob die Page momentan im Speicher liegt. Ist das Bit gelöscht (Page nicht im Speicher), dann sind alle anderen Bits für das Betriebssystem frei verfügbar und können z.B. für Swapping genutzt werden.
  
−
== Page-Tables ==
+
== Page Tables ==
−
Ein Pagetable enthält 1024 Einträge a 4 Byte. Jeder Eintrag zeigt auf eine physikalische Page. Pagetables müssen 4k-aligned sein und füllen somit eine ganze Page.
+
Ein Page Table enthält 1024 Einträge a 4 Byte. Jeder Eintrag zeigt auf eine physische Page. Page Tables müssen 4k-aligned sein und füllen somit eine ganze Page.
  
 
{| border="1" cellpadding="5"
 
{| border="1" cellpadding="5"
Zeile 80: Zeile 80:
  
 
== Speicher mappen ==
 
== Speicher mappen ==
−
Um eine beliebige virtuelle Adresse auf eine beliebige physische Adresse zu mappen, muss man erst den richtigen Eintrag im Page Directory und in der Page Table 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:
+
Um eine beliebige virtuelle Adresse auf eine beliebige physische Adresse zu mappen, muss man erst den richtigen Eintrag im Page Directory und in der Page Table berechnen um schließlich die physische Page (mit den passenden Flags) in der Page Table eintragen zu können. Es wird immer von virtuell nach physisch zugeordnet, d.h wenn man 0xB8000(phys.) auf 0x12345000(virt.) mappen will, muss man erst den Page-Directory- und Page-Table-Eintrag von 0x12345000 berechnen. Das geht am besten so:
  
 
  Pagedirectory_Eintrag =  virtuelle_adresse >> 22          (= 0x48)
 
  Pagedirectory_Eintrag =  virtuelle_adresse >> 22          (= 0x48)
 
  Pagetable_Eintrag    = (virtuelle_adresse >> 12) % 1024  (= 0x345)
 
  Pagetable_Eintrag    = (virtuelle_adresse >> 12) % 1024  (= 0x345)
  
−
Nun suche man erst die Adresse der Pagetable (im eben berechneten ''Pagedirectory_Eintrag'' schauen). '''Achtung:''' Es handelt sich hier um die physikalische adresse.
+
Nun suche man erst die Adresse der Page Table (im eben berechneten ''Pagedirectory_Eintrag'' schauen). '''Achtung:''' Es handelt sich hier um die physische 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.
+
Mit der Adresse der Page Table kann man jetzt in den ''Pagetable_Eintrag'' die physische Adresse eintragen, die passenden Flags setzen und schon ist die Page gemappt.
  
−
== In physikalischen Speicher schreiben ==
+
== In physischen Speicher schreiben ==
−
Wenn nun Paging eingeschaltet ist, kann man nicht mehr in den physikalischen Speicher schreiben. Wenn man nicht viel physikalischen Speicher hat, oder 64 Bit benutzt und deswegen der virtuelle Adressraum groß genug ist, kann man den gesamten physikalischen Speicher in den virtuellen mappen.
+
Wenn nun Paging eingeschaltet ist, kann man nicht mehr in den physischen Speicher schreiben. Wenn man nicht viel physischen Speicher hat, oder 64 Bit benutzt und deswegen der virtuelle Adressraum groß genug ist, kann man den gesamten physischen Speicher in den virtuellen mappen.
  
−
Es besteht aber auch die Möglichkeit Zugriff auf den gesamten physikalischen Speicher zu haben, ohne das man ihn direkt mappt. Erstmal braucht man eine Möglichkeit das Pagedirectory und die Pagetables noch zu ändern, nachdem Paging eingeschaltet wurde. Wenn man dies kann, kann man sich einfach immer die gerade gebrauchte physikalische Page auf eine festgelegte virtuelle Page mappen und voila. Um nun Zugriff auf das Pagedirectory und die Pagetables zu haben, muss man einfach z.B als letztes Pagetable, das Pagedirectory selber eintragen. Das Pagedirectory wird dann als Pagetable interpretiert und alle Pagetables als Pages in den Speicher gemappt. Somit enthalten die letzten 4 MB die Pagetables, wobei die letzten 4kB das Pagedir enthalten.
+
Es besteht aber auch die Möglichkeit Zugriff auf den gesamten physischen Speicher zu haben, ohne das man ihn direkt mappt. Erstmal braucht man eine Möglichkeit das Page Directory und die Page Tables noch zu ändern, nachdem Paging eingeschaltet wurde. Wenn man dies kann, kann man sich einfach immer die gerade gebrauchte physische Page auf eine festgelegte virtuelle Page mappen und voila. Um nun Zugriff auf das Page Directory und die Page Tables zu haben, kann man einfach z.B. als letzte Page Table das Page Directory selbst eintragen. Das Page Directory wird dann als Page Table interpretiert und alle Page Tables als Pages in den Speicher gemappt. Somit enthalten die letzten 4 MB des virtuellen Speichers die Page Tables, wobei die letzten 4kB das Page Directory enthalten.
  
 
== Links ==
 
== Links ==
−
* [http://www.homix-online.de/Tutorials/32PMode-Paging.php Paging Tutorial]
+
* [http://www.homix-online.de/Tutorials/32PMode-Paging.php Paging-Tutorial]
 
* [http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_spez1.htm Paging im PM-Tutorial der FH Zwickau]
 
* [http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_spez1.htm Paging im PM-Tutorial der FH Zwickau]
 
* [[Ausgabe_8#Paging|Ausgabe 8]]
 
* [[Ausgabe_8#Paging|Ausgabe 8]]