Next: Vergleich von Paging und
Up: Memory Management System
Previous: Least Recently Used (LRU)
  Contents
Segmentierung
Der bisher betrachtete virtuelle Speicher ist eindimensional. Für einige
Probleme ist die Existenz von mehreren getrennten Adressräumen besser als ein
einziger. Bei Programmen, die sehr stark schwankenden Speicherbedarf für
Variablen und Stapel haben ist es schwierig den Speicher günstig
einzuteilen. Außerdem möchte man manchmal unterschiedliche Schutzvorrichtungen
für ausführbaren Code, lesbare und beschreibbare Daten einführen. Dafür müssen die
unterschiedlichen Formen von Daten getrennt werden. Ein weiterer Vorteil von
getrennten Adressräumen ist die Erleichterung der Implementierung von
Prozeduren, auf die mehrere Prozesse zugreifen (shared libraries).
Aus diesen Gründen erlauben verschiedene Prozessoren Segmente. Jedes
Segment bildet einen lineare Sequenz von Adressen. Die erlaubte Länge eines
Segments liegt zwischen 0 und einem festgelegten Maximum. Während des
Programmlaufs ist die Größe der Segmente variabel.
Beispiele:
- Prozessadressraum:
Betrachten wir als erstes eine mögliche Speicheraufteilung eines Prozesses
(vgl. Kapitel
). Jedes Programm, das innerhalb eines
Betriebssytems gestartet wird, ist ein Prozess. Typischerweise wird der
Speicher, den ein Prozess benötigt in vier Bereiche unterteilt:
(vgl. Abbildung
).
Figure:
Prozessadressraum
 |
- Befehle:
- Die Befehle und die statisch allozierten Variablen eines
Programms werden im Adressbereich Befehle angesiedelt. Dieser
Bereich hat eine statische Größe.
- Halde:
- Auf der Halde werden die dynamischen erzeugten Datenstrukturen
und Objekte angelegt. In der Programmiersprache C werden
Datenstrukturen z.B. durch malloc angelegt. In objektorientierten
Sprachen ist der new-Operator für das Anlegen von Objekten auf
der Halde verantwortlich. Die Größe der Halde kann während des Ablaufes
eines Prozesses variieren.
- Stapel:
- Auf den Stapel werden die Parameter, lokalen Variablen und
Hilfvariablen für die Auswertung von Ausdrücken der
Prozedur/Methoden-Aufrufe abgelegt. Die Größe des Stapels kann während des Ablaufes
eines Prozesses variieren.
- Betriebssystemkern:
- Der Betriebssystemkern wird durch virtuelle
Adressierung in jeden Prozessadressraum gelegt.
Jeder der vier Bereiche wird in einem Segment gespeichert.
- Compiler:
Betrachten wir als weiteres Beispiel die mögliche Speicheraufteilung bei einem
Compiler.
Ein Compiler benötigt als Daten im Speicher:
- den Quelltext, des zu compilierenden Programms
- die Symboltabelle, die die Namen und Attribute der Variablen enthält
- den Ableitungsbaum, der die syntaktische Analyse des Quelltexts enthält
- den Laufzeitstapel des Compilers
- den Code des Compilers
Dabei sind Symboltabelle, Ableitungsbaum und Laufzeitstapel Mengen
von Daten, die während der Laufzeit des Compilers verändert werden.
In diesem Fall wäre es also geschickt 5 Segmente für die unterschiedlichen
Datenmengen einzurichten:
- Segment 1 (Quelltext):
- Der Quelltext ist eine Eingabegröße des
Compilers, der während der Laufzeit nicht verändert wird. Es ist also
sinnvoll dieses Segment nur zum Lesen freizugeben.
- Segment 2 (Symboltabelle):
- Die Symboltabelle wird während der
Laufzeit verändert. Also muss das Segment 2 zum Lesen und Schreiben
freigegeben werden.
- Segment 3 (Ableitungsbaum):
- Für dieses Segment gilt das gleiche
wie für Segment 2.
- Segment 4 (Laufzeitstapel):
- Der Laufzeitstapel wird vom Compiler
selber benötigt, um Prozeduraufrufe zwischenzuspeichern. Daher ist auch der
Schutz so einzurichten, dass Lesen und Schreiben erlaubt ist.
- Segment 5 (Compilercode):
- Der Compilercode wird während der
Laufzeit natürlich nicht verändert. Es ist aber nötig diesen Code
auszuführen. Also muss der Code zur Ausführung berechtigt sein.
Die Adressierung einer Speicherstelle erfolgt hier durch Angabe der
Segmentnummer und der relativen Adresse im Segment.
Die Implementierung der Segmentierung erfolgt dadurch, dass immer nur eine bestimmte Anzahl von
Segmenten im physikalischen Speicher eingelagert sind, während die anderen auf
der Festplatte liegen.
Subsections
Next: Vergleich von Paging und
Up: Memory Management System
Previous: Least Recently Used (LRU)
  Contents
Prof. Dr. Pluemicke
2003-05-10