x86-Programmierung und -Betriebsarten (Teil 5)

Vorteile von Paging

Ein 32-Bit-Prozessor spricht den Speicher im Allgemeinen physikalisch stets an den Doppelwortadressen 0, 4, 8, ... an. Beginnt ein Doppelwort nicht an einer solchen Doppelwortgrenze, so führt der Prozessor zwei Speicherzugriffe aus, die jeweils an einer Doppelwortgrenze beginnen. Im oben angegebenen Beispiel werden damit zuerst die letzten vier Bytes der Page angesprochen, in denen sich die zwei höherwertigen Bytes des Doppelworts befinden. Anschließend greift der Prozessor auf die ersten vier Bytes der nächsten Page zu. Befindet sich diese Page nicht im Speicher, so wird sie nachgeladen. Damit kann der Prozessor auch die zwei niederwertigen Bytes des Doppelworts ansprechen.

Die Vorteile gegenüber einer Auslagerung von kompletten Segmenten bestehen darin, dass sich die kleinen Portionen zu 4 KByte schnell einlesen oder speichern lassen. Außerdem greifen Programme meist auf relativ eng beieinander liegende Daten zu. Damit ist trotz der relativ geringen Größe von 4 KByte gegenüber einem virtuellen Adressraum von 4 GByte, das heißt einem Faktor 1 Million, die Wahrscheinlichkeit groß, dass sich die Daten im Speicher befinden und nicht ausgelagert sind. Bei großen Segmenten müssen nur die Bruchstücke geladen sein, die gerade bearbeitet werden. Eine komplette Auslagerung und das sofortige erneute Einlesen, wie eingangs beschrieben, tritt damit bei Paging nicht auf - der Computer arbeitet dadurch schneller.

Man könnte nun meinen, dass die zusätzliche Adressenumsetzung beim Paging zusätzlich zur Bildung der linearen Adresse aus Segment und Offset zu Verzögerungen bei der Adressenberechnung führt. Das trifft in den meisten Fällen jedoch nicht zu, da bereits der 80386 einen Cache-Speicher aufweist, in dem die zuletzt benutzten Page-Table-Einträge gespeichert sind. Dieser Cache-Speicher wird als Translation Lookaside Buffer (TLB) bezeichnet. Nur wenn ein Page-Table-Eintrag benutzt werden soll, der sich noch nicht im TLB befindet und somit erst aus dem Speicher gelesen werden muss, verzögert sich die Adressenumsetzung durch den Speicherzugriff etwas. Ist die Page Table mit dem Eintrag allerdings auf Platte ausgelagert, dauert der Zugriff erheblich länger, da die Page Table erst in den Speicher und der Eintrag von diesem in den Prozessor gelesen werden muss. Durch intelligente Algorithmen für die Verwaltung von Page Tables und deren Einträgen durch das Betriebssystem ist dieser Fall aber glücklicherweise relativ selten und führt also nur zu sehr geringen Verzögerungen. Der Gewinn eines sehr großen virtuellen Adressraums gegenüber einem kleinen physikalischen Adressraum durch Paging ist überaus groß.

Für die Verwaltung der Pages und Page Tables der zweiten Ebene sind mehrere Bits in den Page-Table-Einträgen reserviert (siehe Bild "Page Table"). Hat der Prozessor einmal auf eine Page zugegriffen, das heißt Daten gelesen oder geschrieben, so wird das A-Bit (Accessed) im zugehörigen Page-Table-Eintrag gesetzt. Löscht das Betriebssystem in regelmäßigem Abstand diese A-Bits, so kann es erkennen, welche Pages häufig benutzt werden. Es lagert dann nur die weniger häufig benutzten Pages aus, um möglichst wenig Schreib- und Lesezugriffe der Festplatte zu verursachen. Damit läuft das Paging fast ohne Verzögerung ab.

Das D-Bit (Dirty-Bit) kennzeichnet Pages, deren Inhalt verändert - überschrieben - wurde. Ist das Bit gelöscht, so muss die Page beim Auslagern nicht auf die Festplatte geschrieben werden, da sich auf dieser ja noch die unveränderte alte Kopie befindet. Ist das D-Bit jedoch gesetzt, so erkennt das Betriebssystem eine Veränderung der Daten und schreibt neben den Informationen, die dazu dienen, die Page später wiederzufinden, auch die Daten der Page selbst auf Platte.