5.4 Segmentierung
Adressraum besteht aus mehreren Segmenten (segments),
die unabhängig voneinander manipulierbar sind.
Segmentierungsstruktur ist festgelegt durch die
Hardware – den Adressumsetzer.
Einfachstes Beispiel: 1 Code-Segment + 1 Datensegment
Code
0
bs-5.4
Daten
codelength
0
datalength
1
Vorteile:
 Unterschiedliche Zugriffsrechte – durch MMU überwacht –
erhöhen die Programmsicherheit; z.B.
Code-Segment: schreibgeschützt (read/execute-only)
Daten-Segment: Lese- und Schreibzugriff (read/write).
 Adressräume verschiedener Prozesse können in sinnvoller
Weise überlappen; z.B. gemeinsames Code-Segment
(code sharing).
 Segmente können unabhängig voneinander umgelagert
werden; z.B. kann beim Auslagern eines Prozesses ein
schreibgeschütztes Code-Segment ignoriert werden.
bs-5.4
2
Standard-Segmentierungen
2 Segmente:
Code – feste Länge, normalerweise schreibgeschützt,
von mehreren Prozessen gemeinsam benutzbar
(shared code)
Daten – z.B. automatisch expandiert bei Kellerüberlauf
(Beispiel: DEC System 10, 1970)
3 Segmente:
Code – s.o.
Daten statisch und Halde – Länge explizit änderbar
Daten dynamisch – Keller s.o.
bs-5.4
(Beispiel: Original-Unix, DEC PDP-11, 1971)
3
3 Segmente:
Code – s.o.
Daten gemeinsam benutzt (shared data)
Daten privat
4 Segmente:
Code – Quellcode
Code – Standard-Bibliothek eine Programmiersprache
(shared libraries, dynamic link libraries (DLL) )
Daten statisch
Daten dynamisch
bs-5.4
4
5.4.1 Hardware-Voraussetzungen (MMU)
Elementarer Fall – Code- und Daten-Segment:
4 Register:
code base
code length
data base
data length
Identifizierung des jeweiligen Registerpaars durch
das Steuerwerk: Befehlsadressen vs. Datenadressen
bs-5.4
5
Allgemeiner Fall – n gleichberechtigte Segmente, n = 2k,
Adressbreite a
virtuelle Adresse:
vs
k
Distanzadresse (offset)
a-k
vs = (virtuelle) Segmentnummer
 2k Segmente mit jeweils maximaler Länge 2a-k
bs-5.4
6
Z.B. für k=3:
Adressraum
eines Prozessors
eines Prozesses
0
1
2
0
1
2
3
4
3
4
5
6
7
5
6
7
bs-5.4
7
MMU: je Segment 1 Deskriptor-Register für
Segmentdeskriptor (segment descriptor), z.B. so:
base
length
w d
w = writable bit:
legt fest, ob in das Segment geschrieben werden darf.
d = dirty bit:
wird auf 0 gesetzt, wenn
der Deskriptor in das Register geladen wird;
wird auf 1 gesetzt beim ersten Schreibzugriff.
bs-5.4
8

MMU sieht so aus:
base
length
w d
0
1
2
3
4
5
6
7
Achtung:
bs-5.4
evtl. verschiedene Registersätze für
verschiedene Prozessor-Modi (5.1.1)
9
Adressumsetzung:
(write = Schreibversuch)
if desc[vs].base == 0
then address fault end;
(non-existent segment)
if desc[vs].length <= offset then address fault end;
(off limits)
if not desc[vs].w and write then access fault end;
location = desc[vs].base + offset;
desc[vs].d = desc[vs].d or write .
(vereinfachende Vorausetzung: base/length in Bytes gemessen)
bs-5.4
10
5.4.2 Segmentverwaltung
Segmentdeskriptoren,
base
w-Bit fehlt ! (s.u.)
backupBase
length
die für die Verwaltung der Segmente
benötigt werden, enthalten mehr
Information als die DeskriptorRegister:
d
backupBase
refcnt c
= Auslagerungsadresse (5.3.2)
refcnt = Verweiszähler = Anzahl der Prozesse, die das
Segment gemeinsam benutzen
c = „coming“-Bit
= Einlagerungsvorgang läuft
bs-5.4
11
Segmenttabelle (segment table) (Größe max)
enthält die Deskriptoren aller Segmente im System:
base
length
d
backupBase
refcnt c
0
1
0
2
3
.
.
.
..
.
.
0
.
.
0
.
max
Tabellenposition leer:
12
Segmentliste (segment map) eines Prozesses
im Prozessdeskriptor
enthält für jedes Segment des Prozesses:
 (reale) Segmentnummer rs
( = Index in Segmenttabelle)
 w-Bit
bs-5.4
13
Segmentliste (segment map) eines Prozesses
im Prozessdeskriptor
enthält für jedes Segment des Prozesses:
 (reale) Segmentnummer rs
( = Index in Segmenttabelle)
 w-Bit
als z.B. bei einer MMU mit n=8 Segmenten (5.4.1 )
vs
(rs = 0 : Segment existiert nicht)
bs-5.4
0
1
2
3
4
5
6
7
rs
w
0
0
0
0
14
Prozessor mit n=4
rs
virtuelle Adresse
vs
Arbeitsspeicher
Segmentlisten
w
...
Distanzadresse x
(aktiver Prozess)
Segmenttabelle
MMU
base
base
length
d backupBase
r c
length w d
.
.
.
Hintergrundspeicher
resident
auslagerbar
x
Segmente
...
15
Adressraumumschaltung bei Prozesswechsel (5.1.2)
 dirty bits aus den Deskriptor-Registern der MMU
in die Segmenttabelle retten (or !)
 base/length des neuen aktiven Prozesses aus der
Segmenttabelle in die Deskriptor-Register laden
– nach Maßgabe der Segmentliste
 w-Bits in den Deskriptor-Registern setzen
– nach Maßgabe der Segmentliste
bs-5.4
16

bs-5.4