Virtuelle Speicherverwaltung
aus Wikipedia, der freien Enzyklopädie
Die Artikel Virtueller Adressraum und Virtuelle Speicherverwaltung überschneiden sich thematisch. Hilf mit, die Artikel besser voneinander abzugrenzen oder zu vereinigen. Die Diskussion über diese Überschneidungen findet hier statt. Bitte äußere dich dort, bevor du den Baustein entfernst. Flominator 10:42, 6. Dez. 2006 (CET) |
Die Virtuelle Speicherverwaltung ist eine spezielle Implementierung einer Speicherverwaltung in einem Computer.
Sie findet heute in beinahe allen modernen Betriebssystemen Verwendung, da ihre Vorteile gerade den heutzutage zwingend notwendigen Eigenschaften bei der Verwaltung von Arbeitsspeicher entsprechen und es keine gravierenden Nachteile gibt.
Inhaltsverzeichnis |
[Bearbeiten] Vor- und Nachteile
Die Vorteile liegen in der Erfüllung der Notwendigkeiten,
- den verwendbaren Arbeitsspeicher für einen Prozess nicht auf den physikalisch vorhandenen Arbeitsspeicher zu beschränken (wichtig auf Grund der Größe heutiger Programme),
- die Speicherbereiche verschiedener Prozesse durch Speicherschutz untereinander so zu kapseln, dass sie nicht Zugriff auf für sie nicht vorgesehenen Speicher nehmen können und
- die knappe Ressource Arbeitsspeicher effizient zu nutzen, so dass selten verwendete Speicherseiten nicht im Arbeitsspeicher gehalten werden müssen.
Weiterer Vorteil:
- Es ist möglich, verschiedenen Prozessen Arbeitsspeicher so zuzuweisen, dass der Speicher aus der Sicht des Prozesses immer linear ist, obwohl er in der Realität stark fragmentiert sein kann, so dass Teile im Arbeitsspeicher und andere Teile auf dem Hintergrundspeicher vorliegen.
Der früher häufig angeführte Nachteil, dass eine zusätzliche Memory Management Unit benötigt wird, wird heute aufgrund der kaum noch ins Gewicht fallenden Hardwarekosten nicht mehr als Nachteil gesehen.
[Bearbeiten] Funktionsweise
- Gemeinsam sind den virtuellen Speicherverwaltungen heutzutage folgende Grundprinzipien:
- Alle von Prozessen verwendeten Adressen werden nur noch als Virtuelle Adressen behandelt.
- Der durch die Gesamtheit aller möglichen virtuellen Adressen definierte Virtuelle Adressraum, der den Virtuellen Speicher bildet, wird genauso wie der tatsächlich vorhandene physikalische Arbeitsspeicher in gleich große Speicherabschnitte unterteilt. Die für diese Speicherabschnitte verwendeten deutschen Begriffe Kachel, Speicherseite oder kurz Seite sind synonym. Im Englischen wird dieser Speicherabschnitt page genannt.
- Die Memory Management Unit übersetzt die virtuellen Adressen in reale physikalische Adressen.
- Die verschiedenen Virtuellen Speicherverwaltungen unterscheiden sich
- in der Speichergröße, die eine Speicherseite belegt,
- in der Art, wie die Memory Management Unit aus der virtuellen Adresse eine physikalische Adresse berechnet und
- in ihrer Seitenersetzungsstrategie, welche die Reaktion auf einen so genannten Seitenfehler, die Adressierung einer nicht im physikalischen Speicher vorhandenen virtuellen Adresse, festlegt.
Aufgrund der Tatsache, dass bei diesem Seitenaustausch immer ganze Speicherseiten (engl. page) ausgetauscht (engl. to swap) werden, wird dieser Vorgang der Seitenersetzung auch häufig Paging oder Swapping genannt. Da Swapping aber auch bei der Segmentierung auftritt, sind die Begriffe nicht synonym zu verwenden.
[Bearbeiten] Begriffe
- PageFault: tritt auf, wenn ein Programm auf einen Speicherbereich zugreift, der sich gerade nicht im Hauptspeicher befindet, sondern beispielsweise auf die Festplatte 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. Ein Seitenfehler ist daher kein Fehler im eigentlichen Sinn. Der Anwender spürt von diesem Vorgang nichts, maximal eine Verlangsamung der Geschwindigkeit, da das Laden der Seite einen kurzen Augenblick benötigt.
- Swapping:
Prozesswechsel; ein aktuell im Hauptspeicher stehendes Programm wird komplett verdrängt und durch ein anderes ersetzt.
- Paging:
Die Einteilung eines Programms, des Hintergrundspeichers und des Arbeitsspeichers, in Frames gleich großer Blöcke. Die Seiten des Programms werden dann nach Bedarf in die Seitenrahmen (frames) des Hauptspeichers bzw. Hintergrundspeicher aus- oder eingelagert.
- Seiten:
Logischer Hauptspeicher wird in Seiten gleicher Größe aufgeteilt.
- Seitentabelle:
sind Teile von Prozessen, welche der Transformation von virtuellen in physikalische Seitenrahmen dienen. Die optimale Seitengröße ist ein Kompromiss zwischen Häufigkeit von Seitenwechsel und Größe der Tabelle.
- Seitenrahmen:
Eine Kachel ist eine feste Größe im physikalischen Speicher, entsprechend gibt es im virtuellen Speicher gleich große Speichersegmente (Seitenrahmen), in denen genau eine Seite eingelagert werden kann.
- DMA:
Direct Memory Access; direktes Schreiben von der Festplatte in den Hauptspeicher
- Platzierungsstrategien:
- FirstFit: erste ausreichende Lücke
- Bestfit: kleinste ausreichende Lücke
- Nextfit: nächster freien Speicher; startet an der Stelle, an der das letzte Programm eingefügt wurde (ringförmiges Durchsuchen)
- Worstfit: größte ausreichende Lücke; Restlücke wird zusammengelegt
- Virtuelle Speicherverwaltung:
Die Virtuelle Speicherverwaltung ist eine spezielle Implementierung einer Speicherverwaltung in einem Computer. Sie findet heute in beinahe allen modernen Betriebssystemen Verwendung, da ihre Vorteile gerade den heutzutage zwingend notwendigen Eigenschaften bei der Verwaltung von Arbeitsspeicher entsprechen und es keine gravierenden Nachteile gibt.
- Codesharing:
ist die Aufteilung des physikalischen Speichers in Blöcke (frames) gleicher und festgelegter Größe (Größe zur Basis 2, zwischen 512 bis 8192 Bytes) und Aufteilung des logischen Speichers in Blöcke (pages) gleicher Größe.
- MMU:
Memory Management Unit; wandelt eine virtuelle Adresse in eine physikalische um
- Speicherverwaltung:
Ein Prozess darf maximal so groß wie der Hauptspeicher sein.
- Seitenersetzungsstrategien:
- NRU (Not recently used): Teilt Seiten anhand des Use-Bits und Dirty-Bits aus der Seitentabelle in vier Klassen und entfernt zufällig eine aus der untersten, nicht-leeren Klasse.
- FIFO (First In, First Out): Jede Seite bekommt Zeitstempel; "älteste raus, hinten rein, vorne raus"
- Second-Chance-Algorithmus: Variante von FIFO, die verhindert, dass Seiten ausgelagert werden, die noch häufig benutzt werden.
- LFU (Least Frequently Used): Jede Seite hat ein Feld, das Aufschluss über letzte Nutzung gibt; bei Seitenfehler müssen alle Seiten auf bislang nicht benutzte Zeit durchsucht werden
- Working-Set-Algorithmus: Ersetzt gleich den ganzen Arbeitsbereich (working set) eines Prozesses. Zählt zu den Prepaging-Strategien, da Seiten geladen werden, noch bevor sie gebraucht werden.
- Clock-Algorithmus: Die Seiten werden in Form einer virtuellen Uhr mit Zeigern abgebildet. Im Verdrängungsfall wird der Uhrzeiger so lange um ein Element weitergeschaltet, bis eine Seite mit einem zurückgesetzten R-Bit gefunden wird. Seiten mit gesetztem R-Bit werden bei der Überquerung des Zeigers zurückgesetzt. Bei großer Anzahl an Hauptspeicherseiten ist dieses Verfahren zu langsam. Daher werden z.B. bei BSD-UNIX zwei Zeiger - mit konstanten Abstand - zur Laufzeitverbesserung verwendet. Der vordere Zeiger setzt das R-Bit im Seitendeskriptor zurück und der hintere prüft das R-Bit und führt bei zurückgesetzten Bit die Verdrängung durch.
- Belady-Theorem der optimalen Verdrängung: Hierbei werden die Seiten verdrängt, die in Zukunft am längsten nicht referenziert werden. Nicht umsetzbar, da das Programmverhalten nicht vorhergesagt werden kann.