Speicherverwaltung
Dieser Artikel scheint thematisch einem anderen Artikel zu gleichen, bzw. es könnte sich um einen getrennten Artikel zu einem synonymen Begriff handeln. Scheuen Sie sich nicht, die Artikel inhaltlich an der aus Ihrer Sicht geeignetsten Stelle zusammenzubringen oder ggf. besser voneinander zu trennen. Verlinken Sie die Artikel ggf. sinnvoll miteinander. Kommentieren Sie schließlich bitte auf der Seite Artikel zum gleichen Thema den Doppeleintrag als erledigt!Der Doppeleintrag befindet sich unter: Virtuelle Speicherverwaltung -- 21:32, 13. Jul 2004 (CEST)
Table of contents |
2 Segmentierung 3 Seite 4 Virtueller Speicher 5 Seitenfehler |
Bedeutung
Die Speicherverwaltung des Betriebssystems verwaltet eine der wichtigsten Ressourcen eines Computers, den Hauptspeicher. Die Speicherverwaltung stellt jedem Prozess einen eigenen Speicherbereich zur Verfügung. Wenn nötig können diese Speicherbereiche gegeneinander geschützt werden.
Segmentierung
Je nach Speichermodell teilt sich der zu einem Prozess gehörende Speicher noch weiter in so genannte Segmente auf. Wird keine Segmentierung unterstützt, spricht man von einem linearen Adressraum.Ein Segment ist ein logisch zusammenhängender Speicherbereich fester Länge. Auf einzelne Bytes des Segments kann der Prozess zugreifen, in dem er den das Segment beschreibenden Segmentdeskriptor und den Offset angibt. Für jedes Segment können Eigenschaften wie z.B. read-only oder executable getrennt eingestellt werden.
Seite
Die Speicherverwaltung reserviert Speicher nicht in beliebig kleinen Einheiten, sondern teilt den Speicher in so genannte Seiten von z.B. 4096 Bytes Größe auf. Diese Seiten werden bei der virtuellen Speicherverwaltung auf andere Speichermedien ausgelagert und den Prozessen mehr Speicher zur Verfügung zu stellen, als Hauptspeicher vorhanden ist.
Virtueller Speicher
Moderne Betriebssysteme stellen so genannten virtuellen Speicher zur Verfügung. Diese Technik ist gekennzeichnet durch die Verwendung zweier verschiedener Adresstypen, physikalischen und virtuellen Adressen.
Prozesse verwenden grundsätzlich nur virtuelle Adressen. Diese werden von einer Untereinheit des Prozessors, der MMU, in physikalische Adressen umgerechnet. Die physikalischen Adressen werden dann vom Prozessor auf seinem Adressbus ausgegeben, um den Speicher anzusprechen.
Verwendet ein Prozess einen Segmentdeskriptor und einen Offset (die zusammen eine virtuelle Adresse darstellen) um ein Byte anzusprechen, werden in der MMU die folgenden Vorgänge ausgelöst: • in der Segmenttabelle wird die für das Segment zuständige Seitentabelle gesucht, • anhand des Offsets und der gegebenen Seitengröße wird die Seite bestimmt, in der das referenzierte Byte liegt, • die Seitentabelle liefert die physikalische Adresse der Seite. Eventuell treten dabei Ausnahmen auf, z.B. wenn der Segmentdeskriptor ungültig ist, der Offset größer als die Segmentlänge ist, oder die Zugriffsart nicht erlaubt ist.
Seitenfehler
Ein sogenannter Seitenfehler ist dann gegeben, wenn die angesprochene Seite keine physikalische Adresse besitzt. Dann muss das Betriebssystem dafür sorgen, dass eine geeignete andere Seite ausgelagert wird. Der dadurch freiwerdende physikalische Speicherbereich (ein Seitenrahmen) wird der angesprochenen Seite zugeordnet und der Inhalt der angesprochenen Seite von der Festplatte geladen. Danach wird der Prozess ohne negative Auswirkungen bis auf einen gewissen Zeitverlust an der unterbrochenen Stelle fortgesetzt. Diese Technik, einen größeren Speicherbereich zu simulieren, als tatsächlich vorhanden ist, nennt man Paging.
Bei den gängigen Seiten- und Adressraumgrößen (4 KiB, 4 GiB) ergibt sich das Problem, dass die Seitentabelle sehr viele Einträge hat, aber nicht alle benutzt sind. Dieses Problem wird durch Multilevel Page Tables gelöst. Bei einer Seitentabelle mit zwei Ebenen wird die virtuelle Adresse in drei Teile aufgespaltet. Bei 4 KiB Seitengröße dienen die niedrigwertigsten 12 Bits der Adresse als Offset in eine Seite. Die restlichen Adressbits werden in zwei Teile aufgespaltet, der höherwertige Teil ist ein Index in die erste Ebene der Seitentabelle, der niederwertige Teil ein Index in die zweite Ebene der Seitentabelle. Dabei zeigt jeder Eintrag in der ersten Ebene der Seitentabelle auf eine Untertabelle der zweiten Ebene.
Ein zweiter Ansatz, riesige Seitentabellen zu vermeiden, ist der Ansatz der Inverted Page Tables. Dabei hat die Seitentabelle einen Eintrag für jeden Seitenrahmen des physikalischen Speichers. Der Eintrag enthält Informationen über den besitzenden Prozess und die virtuelle Seite. Damit bei einem Speicherzugriff die invertierte Seitentabelle nicht jedesmal durchsucht werden muss, werden Teile der Tabelle in einem als assoziativen Speicher organisierten Cache in der MMU abgelegt.