Information Technology Reference
In-Depth Information
gearbeitet und mit Hilfe einer Speicherverwaltungseinheit der Hauptspeicher zu
einem cache-ähnlich wirkenden Zwischenspeicher umfunktioniert wird.
Damit unterschieden werden kann, ob sich ein Speicherbereich im Hauptspeicher
(also dem Zwischenspeicher) befindet oder nicht, lassen sich die in den Deskripto-
ren jeweils definierten Adressabbildungen durch ein Attribut als gültig bzw. ungül-
tig ( valid ) kennzeichnen. Bei einem Zugriff auf einen Speicherbereich, dessen Des-
kriptor eine ungültige Adressabbildung enthält (der Speicherbereich befindet sich
nicht im Hauptspeicher), löst die Speicherverwaltungseinheit einen Seitenfehler
( page fault ) aus, der den Prozessor veranlasst, den diesen Fehler verursachenden
Befehl abzubrechen und in eine dafür zuständige Seitenfehlerbehandlungsroutine
(page fault handler) zu verzweigen.
Der virtuell adressierte Speicherbereich wird daraufhin programmiert aus dem Hin-
tergrund- in den Hauptspeicher geladen, wobei bereits vorhandene Inhalte ggf. ver-
drängt werden (swap). Anschließend muss man nur noch den Deskriptor modifizie-
ren, und zwar so, dass die virtuelle auf die reale Adresse des neu geladenen
Speicherbereichs verweist und als gültig gekennzeichnet ist. Die Seitenfehlerbe-
handlungsroutine kann schließlich beendet werden, indem in das durch den Seiten-
fehler unterbrochene Programm zurückgekehrt und dabei der den Seitenfehler aus-
lösende Befehl wiederholt wird. Da nun der Deskriptor eine gültige Adressabbil-
dung enthält, lässt sich der Zugriff fehlerfrei ausführen.
Selbstverständlich werden beim Laden aus dem Hintergrundspeicher zunächst
Hauptspeicherbereiche verwendet, die bisher nicht belegt sind. Falls jedoch kein
freier Speicher mehr existiert, kommt es zur Verdrängung belegter Speicherbereiche
aus dem Hauptspeicher. Bevorzugt finden dabei solche Segmente oder Seiten Ver-
wendung, auf die möglichst lange Zeit nicht zugegriffen wurde. Sie werden meist
mit Hilfe teilweise in Software realisierter Heuristiken erkannt. Zum Beispiel geht
man hier so vor, dass bei einem Zugriff auf den Hauptspeicher in den beteiligten
Deskriptoren befindliche Zähler inkrementiert und in festen Zeitintervallen halbiert
werden. Letzteres, damit lang zurückliegende große Zählstände an Bedeutung ver-
lieren. Der kleinste in einem Deskriptor gespeicherte Zählerstand zeigt jeweils den
Speicherbereich an, auf den in jüngster Zeit am seltensten zugegriffen wurde [181].
Sobald man einen zu ersetzenden Speicherbereich ausgewählt hat, muss sein alter
Inhalt ggf. in den Hintergrundspeicher übertragen werden. Dies ist jedoch nur erfor-
derlich, wenn zuvor ein schreibender Zugriff auf den durch einen Deskriptor reprä-
sentierten Speicherbereich erfolgte. Damit sich die zu sichernden von den nicht zu
sichernden Speicherbereichen unterscheiden lassen, wird z.B. so verfahren, dass
Schreiboperationen in einem Attribut ( modified oder dirty ) der beteiligten Deskrip-
toren protokolliert werden. - Ein virtueller Speicher ist normalerweise in Seiten
organisiert. Zwar ist die Verwendung von Segmenten prinzipiell möglich, aber nicht
sinnvoll, da es wegen des häufigen Ein- und Auslagerns unterschiedlich großer
Speicherbereiche zu einer starken Fragmentierung des Hauptspeichers kommen
würde.
Bemerkung. Beim Entwurf eines Prozessors ist vor allem zu berücksichtigen, dass Seitenfehler
zu sehr unterschiedlichen Zeitpunkten auftreten können. So muss es z.B. möglich sein, einen zur
Search WWH ::




Custom Search