| Die Artikel Paging und Virtuelle Speicherverwaltung überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Bitte äußere dich in der Diskussion über diese Überschneidungen, bevor du diesen Baustein entfernst. Nerdture 18:21, 19. Jan. 2008 (CET) |
Die virtuelle Speicherverwaltung ist eine spezielle Speicherverwaltung in einem Computer. Der virtuelle Speicher bezeichnet den vom tatsächlich vorhandenen Arbeitsspeicher unabhängigen Adressraum, der einem Prozess für Daten und das Programm vom Betriebssystem zur Verfügung gestellt wird.
Der virtuelle Speicher wurde 1956 von Fritz-Rudolf Güntsch erfunden und er findet heute in beinahe allen modernen Betriebssystemen Verwendung.
Inhaltsverzeichnis |
Das Rechnersystem stellt jedem Prozess einen scheinbar zusammenhängenden lokalen Speicherbereich zur Verfügung, mit Adressen von 0 bis n-1, wobei n die Größe dieses Speicherbereichs ist. In Wirklichkeit besteht dieser Speicherbereich aus einzelnen Seiten definierter Größe ("Pages", veraltet auch "Kacheln") innerhalb des virtuellen Adressraums der Maschine. Diese virtuellen Pages werden wiederum auf physische Pages abgebildet, die irgendwo im physischen Speicher oder sogar in einer Auslagerungsdatei liegen. Beim Zugriff eines Prozesses auf eine lokale Speicheradresse ersetzt das Betriebssystem diese durch eine virtuelle, welche von der Memory Management Unit des Systems in die aktuelle physische Adresse umgesetzt wird.
Eine Seitentabelle ist eine Tabelle, welche der Transformation von virtuellen in physische Seitenrahmen dient. Die optimale Seitengröße ist ein Kompromiss zwischen Häufigkeit von Seitenwechsel und Größe der Tabelle.
Eine virtuelle Adresse beschreibt also einen Ort im Speicher eines Computersystems, dessen Betriebssystem eine virtuelle Speicherverwaltung zur Adressierung verwendet. Die Gesamtheit aller virtuellen Adressen wird auch als virtueller Adressraum bezeichnet.
Nur die Betriebssysteme, die eine virtuelle Speicherverwaltung verwenden, können einen virtuellen Adressraum generieren und dadurch Speicherseiten, die physisch nicht zusammenhängend sind, für den Programmierer bzw. das Programm als logisch zusammenhängenden Speicherbereich abbilden.
Der Begriff "Paging" bezeichnet im engeren Sinn lediglich den Vorgang der Abbildung der virtuellen Adressen auf die physischen. Im weiteren Sinn wird er synonym für "Swapping" benutzt.
"Swapping" meint den Zugriff auf eine Auslagerungsdatei. Der physische Speicher darf kleiner sein als der virtuelle Adressraum. Voraussetzung ist jedoch, dass momentan unbenutzte Seiten in einer speziell dafür vorgesehenen Datei zwischengeparkt werden. So stellen viele moderne Betriebssysteme bis zu 4 Gigabyte für Programme und Daten zur Verfügung, auch wenn weniger physischer Arbeitsspeicher, z. B. nur 1 Gigabyte, zur Verfügung steht.
Um Engpässe im physischen Speicher zu vermeiden, gehen ab einem gewissen Füllgrad besondere Prozesse ("Page stealer") dazu über, länger nicht benutzte Seiten auszulagern, um zusätzlichen physischen Platz zu gewinnen, damit das System auf eine entsprechende Anforderung schnell reagieren kann. Dieser Vorgang ist asynchron zu den Anwendungen und belastet das System nicht sonderlich, trotzdem ist die Zugriffsgeschwindigkeit der Festplatte relevant und eine Belastung des Systems relativ anzusehen. Weiter unten sind die wichtigsten Seitenersetzungsstrategien aufgelistet. Üblicherweise wird eine Kombination aus mehreren Verfahren angewandt: Zuerst ungelesene, dann unveränderte, dann länger nicht veränderte Seiten auslagern. Soweit eine noch aktuelle Kopie einer Seite in der Auslagerungsdatei existiert, kann diese Seite ohne Weiteres zum Überschreiben freigegeben werden.
Ein Seitenfehler tritt auf, wenn ein Programm auf eine Seite zugreifen muss, die sich gerade nicht im Hauptspeicher befindet, sondern ausgelagert wurde. Als unmittelbare Folge des Seitenfehlers kommt es zu einer synchronen Programmunterbrechung (engl.: trap). Das Betriebssystem sorgt nun dafür, dass der angeforderte Speicherbereich wieder in den Hauptspeicher geladen wird, damit das Programm darauf zugreifen kann. Die Seite kann nun durchaus physisch an anderer Stelle liegen als ursprünglich, die Memory Management Unit berücksichtigt das entsprechend. Die virtuelle Adresse bleibt davon unverändert. Ein Seitenfehler verursacht also keinen Abbruch, sondern eine Aktion, die dem Prozess anschließend die normale Weiterverarbeitung erlaubt.
Das Zurückholen solcher Seiten ist ein Vorgang, der deutlich länger dauert, als nur auf eine Hauptspeicheradresse zuzugreifen. Deshalb verlangsamen Seitenfehler, wenn sie in signifikantem Umfang auftreten, die Verarbeitung erheblich. So lange es dem Page stealer gelingt, einen gewissen Freiraum zu halten, ist der Seitenfehler zwar relativ schnell behoben. Problematisch wird die Lage, wenn der Trap noch auf den Page Stealer warten muss, bis dieser Platz geschaffen hat. Die Situation kann eskalieren, so dass sich das System hauptsächlich noch mit der Behandlung von Seitenfehlern beschäftigt und gravierende Geschwindigkeitseinbußen verzeichnet. Page stealer und die Traps greifen beide auf die Auslagerungsdatei zu und lasten ab einem gewissen Punkt die betroffenen Festplatten komplett aus. Dieser Effekt wird als Seitenflattern bzw. thrashing bezeichnet.
Die virtuelle Speicherverwaltung ermöglicht auch die Implementierung von Speicherschutzmechanismen.
Gemeinsam sind den virtuellen Speicherverwaltungen heutzutage folgende Grundprinzipien:
Die verschiedenen virtuellen Speicherverwaltungen unterscheiden sich
Bei der IA-32-Architektur ist der Arbeitsspeicher in Speicherseiten aufgeteilt, deren mögliche Größen und Anfangsadressen durch die Hardware vorgegeben sind. Wird auf eine Adresse zugegriffen, der zurzeit keine physische Speicherseite zugeordnet ist, so muss das Betriebssystem die Memory Management Unit anweisen, an dieser Stelle eine bestimmte freie Speicherseite einzublenden. Steht keine freie Speicherseite mehr zur Verfügung, so muss eine andere Speicherseite frei gemacht werden, wobei der Inhalt vom Betriebssystem z. B. auf die Festplatte ausgelagert wird. Diesen Vorgang bezeichnet man als Paging. Die Größe des virtuellen Adressraums kann aus der Definition der virtuellen Adresse berechnet werden. So ist beispielsweise in einer IA-32-Architektur eine virtuelle Adresse 32 Bit breit, zweimal je 10 Bit für eine zweistufige Seitentabelle und 12 Bit (entspricht den o.g. 4 Kilobyte) für den Offset. Somit lassen sich 210 x 210 x 212 Byte adressieren. Das entspricht 232 Byte, also 4 Gigabyte.