next up previous contents
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:

  1. 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
    \begin{figure}\begin{center}
\epsfxsize12cm
\epsfbox{prozessadressraum}
\end{center} \end{figure}

    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.

  2. Compiler: Betrachten wir als weiteres Beispiel die mögliche Speicheraufteilung bei einem Compiler. Ein Compiler benötigt als Daten im Speicher:

    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 up previous contents
Next: Vergleich von Paging und Up: Memory Management System Previous: Least Recently Used (LRU)   Contents
Prof. Dr. Pluemicke 2003-05-10