x86-Programmierung und -Betriebsarten (Teil 5)

Das Paging-Prinzip

Beim Paging wird ein sehr großer virtueller Adressraum auf einen viel kleineren physikalischen Adressraum des Hauptspeichers sowie den großen Adressraum eines externen Massenspeichers (im Allgemeinen eine Festplatte) abgebildet. Diese Abbildung erfolgt in "Portionen" fester Größe, die eben als Pages (Seiten) bezeichnet werden. Ab dem 80386 ist eine Page-Größe von 4 KByte festgelegt. Diese Größe ist durch Prozessor-Hardware definiert und kann nicht verändert werden. Der gesamte virtuelle Adressraum beim 80386 besteht also aus einer Million Pages. Meistens sind natürlich bei weitem nicht alle auch tatsächlich von Daten belegt. Die von Daten belegten Pages befinden sich entweder im Speicher oder sind auf die Festplatte ausgelagert.

Ob der Prozessor diese Paging-Mechanismen tatsächlich benutzt, wird durch das PG-Bit des CR0-Registers bestimmt. Ist PG gesetzt, so findet Paging statt, ansonsten nicht. Da das Betriebssystem die Pages verwalten und gegebenenfalls auslagern oder einlesen muss, ist es mit dem gesetzten PG-Bit allein nicht getan. Die CPU-Hardware unterstützt Paging vielmehr in ähnlicher Weise wie die Protection- und Task-Switch-Mechanismen. Das Betriebssystem muss die Paging-Exceptions abfangen und entsprechend bedienen, die ausgelagerten Pages suchen und wieder einlesen et cetera.

Im Prozessor findet somit eine zweifache Adressenabbildung statt: Einmal werden Segment und Offset eines Speicherobjekts zu einer linearen Adresse im linearen Adressraum von 4 GByte entsprechend einer Million Pages kombiniert. Anschließend werden die eine Million Pages entsprechend der linearen Adresse in eine physikalische Adresse oder eine Exception "Page nicht vorhanden" zum Einlesen der betreffenden Page umgesetzt.