Überblick über die Segment-Speicherverwaltung

Das IA-32-System bietet einen segmentierten, seitenbasierten Speicherverwaltungsmechanismus, bei dem auf die Segmentierung das Paging folgt. Der seitenbasierte Speicher wird zur Unterstützung des virtuellen Speichers bereitgestellt.
  • Segment: Der adressierbare lineare Speicherbereich des Prozessors ist in Segmente unterschiedlicher Größe unterteilt. Ein Segment ist ein zusammenhängendes Intervall im linearen Adressraum. Segmente können Code, Daten, Stapel oder andere Datenstrukturen enthalten. Die Attributinformationen eines Segments werden durch seinen entsprechenden Segmentdeskriptor beschrieben. Ein Segmentdeskriptor ist eine Datenstruktur, die Intel mithilfe einer Segmentdeskriptortabelle verwaltet. Die Segmentdeskriptor-Tabelle kann bis zu 64KB groß sein.
    • Wenn G 0 ist, werden die Segmente in Bytes gemessen und die maximale Segmentlänge beträgt 1MB. Wenn G 1 ist, werden die Segmente in Seiten (4kb) gemessen. Die maximale Segmentlänge beträgt 4GB.
    • DPL ist die Privilegstufe des Segments und sein Wert liegt zwischen 0 und 3.
    • S ist das Systemflag zur Unterscheidung der Klasse des Segments. 0 steht für ein Systemsegment und 1 für ein Benutzersegment.
    • Typ ist der Typ des Segments:
      • Für Systemsegmente. Das Feld Typ besteht aus 4 Bits und kann einen der 16 Systemsegmenttypen darstellen.
      • Für Benutzersegmente.
        • Ein drittes Bit von 0 zeigt ein Datensegment an, wobei das zweite Bit die Richtung der Adressenexpansion angibt (0 zeigt die Richtung der Hauptexpansion an) und das erste Bit angibt, ob das Segment beschreibbar ist.
        • Ein drittes Bit von 1 zeigt ein Codesegment an. In diesem Fall ist das zweite Bit ein Kompatibilitätsflag (0 zeigt Nicht-Kompatibilität an). Das erste Bit ist ein lesbares Bit.
        • Bit 0 ist ein Zugriffsbit. Eine 0 bedeutet, dass auf das Segment nicht zugegriffen wurde.
    • Das D/B-Flag zeigt die effektive Adresse und die Operandenlänge an.
    • Das L-Flag erscheint nur in Segmenten im IA-32e-Modus. 1 zeigt den 64-Bit-Modus an.
    • Stack-Segmente sind in der Regel nach unten expandierende Datensegmente, die gelesen und geschrieben werden können.
  • Segment Deskriptor Tabelle:
    • Globale Deskriptor-Tabelle (GDT). Eine GDT muss für ein System definiert werden, bevor es in den geschützten Modus geht. Die IA-32-Architektur definiert speziell ein GDTR-Register, das Informationen über die aktuelle GDT enthält.
    • Die Local Descriptor Table (LDT) ist ein Systemsegment, in dem lokale Deskriptoren gespeichert werden können, wie z.B. prozesseigene Codesegmente, Datensegmente usw. Die IA-32-Architektur sieht speziell ein LDTR-Register vor, um Informationen über die aktuell verwendete LDT zu speichern.
Ein Segmentdeskriptor kann durch seinen Index in der Segmentdeskriptortabelle identifiziert werden. Die Identifikation wird als Segmentselektor bezeichnet. Der Segmentselektor ist ein 16-Bit-Bezeichner. Das zweite Bit ist ein Indikator (TI), der die Deskriptortabelle angibt, auf die sich der Index bezieht (0 für GDT). Die Bits 3-15 geben den Index an und markieren die Position. Die Bits 0 und 1 sind die Anforderungsprivilegstufe RPL. Ein Segmentselektor plus ein Offset identifiziert eindeutig eine logische Adresse. Eine logische Adresse ist eine Adresse, die von einem Programm verwendet wird, keine lineare Adresse und auch keine physikalische Adresse.
Das IA-32-System bietet sechs Segmentregister, CS, SS, DS, ES, FS und GS. Jedes Segmentregister kann einen Segmentdeskriptor zwischenspeichern.