5 Z
ENTRALSPEICHERVERWALTUNG5.1 Speicherverwaltungsverfahren
5.1.1 Anwendung der Verfahren 1) Betriebssysteme
- Zentralspeicher
* Codebereich für Programme
* Datenbereich für Prozesse
* Bereiche für BS-interne Verwaltung - Peripherspeicher
* Verwaltung des physikalischen Speichers
2) Laufzeitsysteme höherer Programmiersprachen - Laufzeitkeller
* Prozedurschachteln
* Variable - Halde
z. B. Pascal: new, dispose 3) Anwendungsprogramme
- Darstellung programminterner dynamischer Daten
z. B. new, dispose in Programmiersprache nicht verfügbar
=> Effizienzsteigerung
- Verwaltung von Speicherbereichen innerhalb von Dateien
5.1.2 Operationen Gegeben:
Speicher array [ lo...up ] of word;
Zusammenhängender Speicher; linear adressierbar Ziel:
Aufteilung in Stücke (Speicherbereiche) entsprechend "Belegen"- und "Freigeben"- Operation
BELEGEN: Länge -> Adresse, Anzeige FREIGEBEN: Adresse -> Anzeige
Speicher 0 1 2 3
up-1 up
Belege (3) => 0, ok
Belege (1000) => 3, ok
Belege (5) => x, false 5.1.3 Parameter
5.1.3.1 Reihenfolge der Operationen 1) Freigeben am Ende
Beispiel:
BELEGEN(10) => S1
BELEGEN(100) => S2 Anforderungsphase (keine Freigabe) BELEGEN(20) => S3
BELEGEN(15) => S4
FREIGEBEN ( {S1, S2, S3, S4} ) Freigabephase (keine Belegung)
2) Belegen / Freigeben kellerartig Beispiel:
BELEGEN(10) => S1 BELEGEN(100) => S2 FREIGEBEN(S2)
BELEGEN(20) => S2 BELEGEN(15) => S3 FREIGEBEN(S3)
FREIGEBEN (S2) FREIGEBEN (S1)
3) Beliebige Reihenfolge Beispiel:
BELEGEN(10) => S1 BELEGEN(100) => S2 FREIGEBEN (S1)
BELEGEN(20) => S3 BELEGEN(15) => S4 FREIGEBEN(S2)
FREIGEBEN(S4) FREIGEBEN(S3)
5.1.3.1 Größe der Anforderungen 1) Stücke konstanter Länge
S1 S2 S3 BELEG(C) => S1
BELEG(C) => S2 BELEG(C) => S3
2) Vielfache einer konstanten Einheit BELEG(1*C) => S1 BELEG(2*C) => S2
S1 S2
3) Zweierpotenzen einer konstanten Einheit
S1 S2 BELEG(C * 2 ) => S1
BELEG(C * 2 ) => S2 0 1
4) Variabel lange Stücke BELEG(1) => S1 BELEG(5) => S2 BELEG(2) => S3
S1 S2
S3
5.1.3.3 Belegungsdarstellung 1) Art
- Vektor - Tabelle 2) Ort
- separater Speicherbereich (reservierter Teil für Verwaltungsdaten) - in verwalteten Speicherbereichen
5.1.3.4 Belegungsstrategie 1) First Fit
Der erste zusammenhängende Speicherbereich, der die Belegungsanforderung erfüllen kann wird verwendet.
2) Best Fit
Der Speicherbereich, der durch die Belegung am wenigsten Speicher verschwendet wird verwendet.
3) Random Fit
Ein passender Speicherbereich wird zufällig ausgewählt.
4) Next Fit
Wie First Fit, jedoch mit zyklischem Suchvorgang, d. h. jeder Suchvorgang beginnt, wo der Vorgänger endete. Next Fit soll ungleichmäßige Stückelung zu Beginn des Speichers vermeiden.
5.1.3.5 Speicherverschnitt 1) interner Verschnitt
= nicht benutzter, aber als belegt gekennzeichneter Speicher.
2) externer Verschnitt
= als frei markierter Speicher, der aber (wegen Zerstückelung) für Anforderungen nicht genutzt werden kann.
5.1.3.6 Wiedereingliederung
im allgemeinen 3 Typen von Speicherbereichen:
- belegte Bereiche - freigegebene Bereiche
- noch nicht vergebener, unzerstückelter Speichervorrat Problem: Zerstückelung durch freigegebene Bereiche
Lösung: Freispeichersammlung
- in Zeiten geringen Arbeitsanfalls
- nebenläufig durch eigenständigen Prozeß - bei Erschöpfung des Vorrats
5.2 Adressierungsmechanismen
- direkt - streuend
- relativ - virtuell
Adreßraum Speicherraum (HP)
000 000
FFF FFF
000 000
xxx xxx
???
5.2.1 Direkte Adressierung
logische Adresse (Programmadresse) = physikalische Adresse (Speicheradresse)
0 1 2
3 JUMP 6 3
4 44
5 5
6 B: MOVE 6
7 (11) -> R 7
8 8
9 9
10 10
11 A: DC 5 11
12 12 13
Probleme :
- in Speicher geladenes Programm kann nicht verschoben werden => Zerstückelung des Speichers - logischer Adreßraum muß zusammen- hängend im Speicher dargestellt sein -> ungenutzte Stücke
Lösung :
Lagenunabhängige Adressierung - relativ
- streuend
Festlegung der Programmadressen a) durch Compiler/Assembler-Programm
Nachteil : Speicherbereiche für Code und Daten liegen mit Übersetzung fest
=> keine Freiheit beim Laden, physikalischen Speicher auszuwählen => Gefahr von Konflikten
wird i.a. nur noch bei dedizierten Systemen (e.g. µRechner in Nähmaschinen) angewendet.
b) zum Zeitpunkt des Ladens
- Compiler/Assembler erzeugen verschiedenen Code : - Markierung von Codeverweisen, Datenverweisen
- Adreßfestlegung bezüglich logischem Adressraum (0 .. m) - Lader legt physikalische Bereiche fest
z.B.: p .. q für Code u .. v für Daten - Lader modifiziert Code beim Laden
z.B.: a + p für Codeverweise (Sprungziele) a + u für Datenverweise
Hiermit besteht Lageunabhängigkeit bis zum Zeitpunkt des Ladens; danach i. a.
keine Verschieblichkeit mehr, da die Markierungen von Code- und Datenverweisen im gespeicherten Code nicht mehr vorhanden sind.
5.2.2 Relative Adressierung
physikalische Adresse = Basisadresse + log. Adresse
Adreßraum +
Verschieberegister zum Ausführungszeitpunkt
Speicherraum
(Programm muß komplett und zusammenhängend im Hauptspeicher stehen.)
- Code bleibt auch nach dem Laden noch verschiebbar, da Adreßmodifikation zur Laufzeit durchge-
führt wird.
- Nach Verschieben müssen lediglich die Basisadressen berichtigt werden Speicher
4
1) Lader lädt Programm, das log. Adressen enthält
2) Lader belegt Basisadreßregister
3) Prozessor addiert vor Speicherzugriff Basis- adresse zu logischer Adresse
0 1 2
3 JUMP 3 0
4 1
5 2
6 MOVE (8) -> DO 3
7 4
8 5
9 6
10 DC 20 7 11
12
- Wenn getrennte logische Adreßräume für Code und Daten vorgesehen sind, werden mehrere Basisregister benötigt (z.B. Basisregister-Code, Basisregister-Daten)
- Vorteil: Code verschiebbar
Nachteil: Schieben aufwendig, Stückelung aber nicht möglich - Variante zu separatem Basisregister :
Befehlszähler relativ,
Befehlzähler wird als Basisadreßregister verwendet Beispiel:
BS A: 10 KB B: 10 KB C: 10 KB
frei 25 KB
D: 30 KB -> kann nicht geladen werden, da zu wenig frei
wenn B fertig, kann D immer noch nicht geladen werden, da keine zusammenhängende 30 KB frei sind;
erst wenn auch C fertig ist kann D geladen werden.
5.2.3 Streuende Adressierung
=> Stückelung logischer Adreßräume im physikalischen Speicher
=> streuender Transformationsmechanismus
Vorteil : Speicherausnutzung auch ohne schieben von Stücken gewährleistet.
Arten der Transformation:
- gleichlange Teile aus eindimensionalem Adreßraum werden abgebildet - variabel lange Teile aus eindimensionalem Adreßraum werden abgebildet - variabel lange Teile aus mehrdimensionalem Adreßraum werden abgebildet Einstufige Umsetzung => Zuordnungstabellen für streuende Transformation 5.3.2.1 Stückelung in gleichlange Teile bei eindimensionalem Adreßraum Adreßzuordnung über Seitentabelle:
Programm 1
Programm 2 Seite
(Page)
Hauptspeicher
P1 P1 P1 P1 P2P2 P2 P1 P1 P2
Kachel (Frame)
Typische Seitengrößen : 512 B, 1 KB, 2 KB, 4 KB
Prinzip :
K Seite Distanz
Prg.-Adresse
Transf. Tabelle Seiten-Nr.
<--->
Kachel-Nr.
HS-Adresse
0 k-1
k | k
11
z.B.: Anzahl der Bits k = 11 => Seitengröße 2K (2 ) 12
k = 12 => Seitengröße 4K (2 )
Seitentabelle
Bsp.: Seitengröße 4K Seitentabelle
4 4 4 4 0 1 2 5 0 0 3 A 0 4 3 8 0 0 0 5 0 0 0 7 0 2 8 0 0
1 2 3 4 5
Programmadresse 2 3 3 3 5 6 8 0 1 2 4 0 0 9 2 0
4 KB = 12 Bit Distanz Seite
Speicheradresse 438 333 280 680 03A 240 125 920
Aufteilung des Speichers in mehrere logische Adreßräume - bei Seitentabellenumsetzung
a) Je logischen Adreßraum eigene Seitentabelle
b) Nur eine Seitentabelle, aber je Adreßraum zusätzlich eigenes Basisregister - bei Kacheltabellenumsetzung (nicht Prüfungsrelevant)
Nur eine Kacheltabelle, Basisadreßregister je log. Adreßraum
Speichereffizienz-Betrachtung
große Seiten hoher interner Verschnitt
kleine Seiten hoher Tabellenaufwand
L = Länge Seitentabelleneintrag (im Skript = 1) sl = Seiten / Kachel-Länge
iV = interner Verschnitt im Mittel iV = s / 2 p = Speicherlänge (-> Programmlänge)
tl = Länge der Kacheltabelle bzw. Seitentabelle tl = p / sl v = mittlerer Gesamtverlust
v = 1/p * (L* p/sl + sl / 2) 2*L
p
2*p*L v =
s = opt
Minimum bei l Beispiel:
p = 5000 sl = 100 v = 0,02 = 2%
2) Stückelung in variabel lange Teile bei eindimensionalem Adreßraum
Speicher
log. Adreßraum 0
40 55 BP = BP = BP =
0 1
2
log. Adresse z.B. 70
suchen des passenden Eintrags
+ 70 80 Stücktabelle
0 40 55
20 - 0 90 - 40
135 - 55
150 20
90
135
Suche durch Vergleich :
bi <= log.Adr. < bi+1
BP : Basisadresse des Programmstücks i
BS : Basisadresse des zugeordneten Speicherteils i Ap : Programmadresse
As : Speicheradresse Es gilt :
AS = BSi + (AP - BPi) z.B. Ap = 60
=> As = 135 + (60 - 55) = 140
realisierte Variante : Teilseiten (CDC 3300)
Neben der normalen Seiteneinteilung wird zusätzlich eine kleinere Einheit verwendet (Teilseite T).
T entsteht durch fortgesetztes halbieren der Seitengröße S.
Die Stückelung eines Programms geschieht in Seiten und einer letzten Restseite R mit R <
S und
R = K * T, K in |N. Seiten und Teilseiten können bei ganzzahligen Vielfachen von T beginnen (Teilseitengrenzen).
Programm Speicher
1 Seite 1 Seite 1 Seite 3/4 S.
A B C R
3,6 Seiten T = 1/4 Seite
B
C
R
A Kachel i
Kachel i+1 Kachel i+2
Übung : Entwickeln Sie ein konkretes Umsetzungsverfahren für S = 4K und T = 256B a) Struktur der Seitentabelle
b) Umsetzungsverfahren 4K = 212 256 = 28
K+ = Konkatinieren und addieren des überlappenden Bytes Ap = Programmadresse
As = Speicheradresse
Ap :
Teilseite Distanz
Seite Distanz
11 7 0
Ap : Seite Distanz K+
Teilkachelnummer As
Seitentabelle 0 1 0 0 1 1 2 0 0 4 2 0 0 3 6 3 0 2 5 2
Ap 000 2 00 000 7 00 001 A 00 002 F 35 003 E 20
As 100300 100800 200E00 004535 026020
200 4 A 00 200 E 00
Seite
Gewinn : Verringerung des Speicherverlustes
v = 1/p * (p/sl + T/2) T anstatt S, da T kleiner als S => besser T = S/K
2 v = p*K
opt S = 2*p*K
opt
z.B. p = 5000; K = 4 => Sopt = 200 vopt = 1%
K = Teilungsfaktor
Zweistufige Adreßumsetzung
Vorteil eindimensionaler logischer Adreßräume :
Verfahren mit guter Speicherausnutzung anwendbar
Vorteil zweidimensionaler logischer Adreßräume : (nicht Prüfungsrelevant) Erweiterte Funktionalität für Nutzung
Nachteil : ungestückelte Speicherung der Segmente => schlechte Speicherausnutzung
Vorteile beider Verfahren bei zweistufiger Umsetzung :
- Segmenteinteilung wird von Seiteneinteilung überlagert oder - Seiteneinteilung wird von Segmenteinteilung überlagert Speicher
Segment- Tabelle
Seitentabelle
Seg.-Nr. SeitenNr Distanz
+
+
Beispiel:
Seitengröße 2K, Segmentgröße 64K, 24 Bit-Adressen
0 0 0 0´ 0 0 1 1´ 0 0 1 0´ 0 1 1 1´ 0 0 0 0´ 0 1 1 1 Ap :
Segment Seite Distanz
Segmenttabelle
Seitentabelle 03
Speicheradresse Seitentabelle 03
0000 0000 0001 0001
0000 0000 1000 1111 0000 0111 0
1 2
0 1 2 3 4
pro Prozeß: 1 Segment + max. 256 Seitentabellen Vorteile :
- flexible Stückelung, Platz für nicht genutzte Seitentabellen kann eingesetzt werden - gemeinsame Speicherbereiche können effektiver realisiert werden
Shared Memory
Verschiedene Segmenttabellen zeigen auf dieselbe Seitentabelle Segtab P1
shared Seitentabelle
Segtab P2
5.3 Speicherschutz
- Speichertrennregister - Speichergrenzregister - Speicherschutzschlüssel - Speicherschutzmasken
- Schutz bei verschiedenen logischen Adreßräumen Problem :
Zur Laufzeit soll sichergestellt sein, daß ein Prozeß nur auf ihm zugeordnete Speicherbereiche
zugreift.
Schutz gegen
- Zerstörung / Störung des Betriebssystems - Zerstörung / Störung anderer Prozesse
- unberechtigte Lesezugriffe (Datenschutz) auf Daten anderer Prozesse oder des Betriebssystems
Test zur Laufzeit erfordert Hardware-Unterstützung
- Integration der Schutzmechanismen in Befehlsbearbeitung-Adresszugriffs- Mechanismus des Prozessors
- Bei Adreßumsetzungsmechanismen Kopplung mit Schutzmechanismus sinnvoll
5.3.1 Speichertrennregister
- Gliederung des Speichers in 2 Teile : geschützter Bereich und
ungeschützter Bereich
- Anwendung im allgemeinen um das Betriebssystem gegen Nutzerprogramme zu schützen
0 1 :
n Trennregister
geschützter Bereich
ungeschützter Bereich
- Überwachung durch Vergleich vor Zugriff
Adresse Trennregister
> = ? ja
nein
Zugriff
Interrupt
5.3.2 Speichergrenzregister
- in Kombination mit Adreßumsetzung per Basisregister
Basisregister gibt untere Grenze des ungeschützten Bereichs an
- zusätzlich: Grenzregister enthält obere Adresse des ungeschützten Bereichs
geschützt
geschützt ungeschützt
Basisregister
Grenzregister
- Umsetzung garantiert: Adresse >= Basisadresse
- nachgeschalteter Vergleich prüft ob Adresse <= Grenzadresse
log. Adresse
Basisregister
Grenzregister +
<= ? nein
Interrupt
Speicher- zugriff
ja
5.3.3 Speicherschutzschlüssel
- Einteilung des Speichers in Kacheln, jeder Kachel i ist ein Kennzeichen Ki zugeordnet - Jedem Prozeß p ist ein Schlüssel Sp zugeordnet
- bei Zugriff: Test ob Ki Zugang mit Schlüssel Sp erlaubt
Kacheln K1
K0
K2 K3
Speicher
5.3.4 Speicherschutzmaske
- Jedem Prozeß ist eine Maske als Bitmap für die Kacheln zugeordnet, e.g.
M[ i ] = false : Zugriff auf Kachel i verboten true : Zugriff auf Kachel i erlaubt
Speicher Maske für
Prozeß p 0 1 2 3 4 5
0 0
0
0 1 2 3 4 5
- auch mehrere Masken je Prozeß möglich : - Leseerlaubnis
- Schreiberlaubnis
5.3.5 Schutz bei verschiedenen logischen Adreßräumen - Adreßumsetzung durch Segment / Seitentabellen
- zu den bei Adreßumsetzung besprochenen Mechanismen kommt lediglich eine Tabellenlängen-
überwachung hinzu
Beispiel : Stückelung in gleichlange Teile bei eindimensionalem Adreßraum
Seitentabelle
Länge der Tabelle Seiten-Nr. Distanz
Ap:
nein Interrupt ja
Einstich
Speicheradresse +
< ?
- weitere Möglichkeiten
genauere Aufschlüsselung der Zugriffsrechte - Schreibrecht
- Leserecht
durch zusätzliche Einträge in die Tabelle
5.4 Virtuelle Speicher
- Problematik beschränkten Speichers und Lösungskonzepte - Overlay
- Swapping - Paging
- Virtueller Speicher : Prinzip - Kachel- und Seitentabellen - Operationen
- Ausführung der Operationen - Auswahl auszulagernder Seiten
- Problematik - Strategien
- Leistungsbetrachtungen - Seitentauschgrad - Trashing
- Modelle
5.4.1 Problematik beschränkten Speichers und Lösungskonzepte a) Problematik
- physikalischer Speicher ist in Kapazität durch Speicherausbau beschränkt (Adreßraum i. a. 0 .. pmax )
- logische Adreßräume sind durch max. Adressierkapazität beschränkt log. Adreßraum < 0 .. lmax
mit lmax = 2n - 1
und n = Anzahl Bits einer Adresse Problem 1 :
Für Code- und/oder Datenbereich eines Prozesses wird logischer Adreßraum benötigt, der
physikalischen Speicher übersteigt.
Problem 2 :
Während des Betriebs übersteigt die Summe der von allen Prozessen angeforderten Speicher-
bereiche die Kapazität des physikalischen Speichers.
Problem 3 :
Für Code- und/oder Datenbereich eines Prozesses wird logischer Adreßraum benötigt, der die
max. Adressierungskapazität übersteigt.
b) Lösungskonzepte generell
- Verwendung von Sekundärspeicher (e. g. Platte) zur Ablage logischer Adreßräume um Engpaß
des physikalischen Speichers zu umgehen.
- Von einem Prozeß momentan benötigte Teilstücke von Code- und Datenbereichen werden vor
Zugriff in einen Zentralspeicher geladen (eingelagert).
- Fehlt im Zentralspeicher der Platz zur Einlagerung eines Teilstücks, wird ein momentan nicht
benötigtes Teilstück vom Zentralspeicher in den Sekundärspeicher zurücktransferiert (ausgelagert).
- Vorteile
* Kosten/Bit für Sekundärspeicher gering
* gewisse Unabhängigkeit der Nutzerprogramme von Speicherausbau - Nachteile
* Aufwand zur Verwaltung der Teilstücke und des Sekundärspeichers * Aufwand zur Ein- und Auslagerung von Teilstücken
Overlay-Konzept
(programmierte Überlagerung von Teilstücken im Speicher)
* löst Problem 1 und 3, kann zur Lösung von Problem 2 nur mittelbar beitragen.
* erfordert spezielle Programmstruktur, d.h. die Überlagerung und Segmentstruktur muß bei
Programmentwurf vorgesehen werden
A B
C C
B D E
A
H F
G
A B
C D E F G H I
J K J L
I K I L
J für Code reservierter Zentralspeicher
für Daten reservierter Zentralspeicher
Code
Daten
Zugriff:
lagert I ein ggf. L vorher aus
Sprung Lagere C ein
Überlagerungsstruktur
Sprung
Seg- mente
auf Datei
Zugriff
* weder Hardware- noch Betriebssystemunterstützung notwendig
Swapping - Konzept
(Ein-/Auslagerung ganzer Code- und Datenbereiche)
* löst nur Problem 2
* nur vertretbar bei zeitunkritischen Prozessen
* Ein-/Auslagerung automatisch (BS-Unterstützung)
* oft auch in Kombination mit virtuellem Speicher (z.B. VAX / VMS)
* keine Hardwareunterstützung notwendig Zentral-
speicher
Codebereich Prozeß P1
Datenbereich Prozeß P1
P1 aus- gelagert
P1 einge- lagert
Datei: Swap File
auslagern
auslagern
einlagern
einlagern
Paging - Konzept (Virtueller Speicher)
* löst Problem 1 und 2
* Zeitaufwand paßt sich der Auslastungssituation an
* keine speziellen Maßnahmen im Programm nötig
* max. Adressierkapazität kann für logische Adreßräume bei Verfügbarkeit von entsprechenden
Sekundärspeicher erschlossen werden
Teil- stücke Kacheln
Ein / Aus- lagerung automatisch
Teilstücke : Seiten (Pages)
1 : 1 Abbildung
0
k logischer Adreßraum Datei :
PageFile Speicher
* Hardware und Betriebssystemunterstützung
c) Virtueller Speicher
1) Verwaltung des Zentralspeichers
Der Zentralspeicher ist eingeteilt in Kacheln gleicher Länge lk, i. a. lk = 2i Zur Verwaltung dient die Kacheltabelle, die i. a. ebenfalls im Zentralspeicher (in reservierten
Kacheln) untergebracht ist.
Speicher
Kacheltabelle Kachel 0
Kachel 1 Kachel 2 ...
Je Kachel ein Eintrag in Kacheltabelle :
- Kachelzustand : frei, belegt (leerend, füllend) - Besitzer : Verweis auf Prozeß, falls belegt - Seitennr.: Nummer der belegenden Seite - Wartende : Liste wartender Prozesse 2) Verwaltung des Seitenspeichers (PageFile) z.B.: mittels Vektorverfahren
PageFile ist eingeteilt in Blöcke gleicher Länge lB = lk 3) Verwaltung des logischen Adreßraums
Je Adreßraum eine Seitentabelle. Die Lage der aktuellen Tabelle(n) ist dem Prozessor bekannt
(Tabelle(n) gehören zum Prozeßkontext).
Seite 0 Seite 1 Seite 2 Seite 3 ...
Speicherbereich, logischer Adreßraum eingeteilt in Seiten
gleicher Länge l = l = l S B K
Je Seite ein Eintrag in Seitentabelle :
Ein / Auslagerungszustand : eingelagert, ausgelagert Strategieunterstützung,
z.B. Referenzindikator : Zugriff, kein Zugriff Modifikationsindikator : verändert, unverändert Kachelnummer: Kachelnummer falls eingelagert PageFile-Adresse : Adresse der Seite in PageFile
0 X X X Block 1000 1 0 0 100 Block 1004 1 1 0 102 Block 2000 1 1 1 108 Block 2001 0 X X X Block 900 Seite 0
Seite 1 Seite 2 Seite 3 Seite 4 :::
anwesend referenziert
modifiziert Kachelnr.
PF-Adresse
4) Adreßzugriff log. Adresse
Seitennr. Distanz Seitentabelle
nicht anwesend ! Interrupt : Seitenfehler
anw Kachel
1 0
100 100
PF-Ort +
PF-Ort phys.
Adresse
5) Seitenfehler - Aktion
Fordere leere Kachel an --> K ; Transferiere Seite von PF-Ort nach K ; Aktualisiere Verwaltungsdaten :
Seitentabelle, Kacheltabelle.
Setze mit Seitenfehler unterbrochenen Prozeß fort.
6) Kachelanforderung
Suche leere Kachel --> K, wenn keine freie Kachel verfügbar : - wähle Kachel K mit Seite S zum Räumen
- falls S modifiziert : Transfer nach PageFile 7) Realisierung der Seitenfehler-Reaktion
A] als hochpriore Interrupt-Routine - verursachender Prozeß wird blockiert
- Transfer wird per Interrupt-Routine angestoßen
- während Transfer kann ein anderer Prozeß weiterarbeiten - Transfer-Ende führt zur Fortsetzung des blockierten Prozesses
Problem : - ein anderer Prozeß kann ebenfalls einen Seitenfehler erzeugen
- Peripherspeicher-Transfers werden oft zu Optimierungszwecken in der Reihenfolge
vertauscht.
--> Kachelzwischenzustand ´leerend´
B] mit selbständigen Prozessen - Prozeß : Seitentauscher
erhält von Seitenfehler-Interrupt-Routine Aufträge zum Seitentausch wickelt Aufträge parallel zu übriger Prozeßbearbeitung ab
--> ´kurze´ Interrupt-Routine, entkoppelte Systemstruktur - Prozeß : Kachelräumer
räumt unabhängig von Seitenfehlern ´überfällige´ Kacheln --> Vorrat an freien Kacheln
d) Auswahl auszulagernder Kacheln
- Ziel : durch geeignete Auswahlstrategie wird die Anzahl der Transfers minimal gehalten
- optimale Strategie :
Es wird immer die Seite zur Auslagerung gewählt, die in Zukunft am längsten nicht mehr benötigt
wird.
- i. a. nicht realisierbar, da Programmablauf nicht vorhersehbar.
Beispiel : Ein Prozeß P mit log. Adreßraum Seite 0..4 stünden die Kacheln 0..2 zur Verfügung. Die Referenzfolge sei im vorraus bekannnt.
Referenzfolge 0 1 4 3 2 3 0 1 0 3 0 2 Seite in Kachel
0 0 0 0 0 0 0 0 0 0 0 0 2 Seite in Kachel
1 - 1 1 1 2 2 2 1 1 1 1 1 Seite in Kachel
2 - - 4 3 3 3 3 3 3 3 3 3 Überlagert wird die Seite, die am weitesten entfernt ist.
Die Referenzfolge {r1, r2, .... , rn} ist eine Folge von Seitennummern, die bei der Ausführung eines
Prozesses entsteht. Umfaßt ein Prozeß n Seiten, dann gilt ri (0,1,2, ... , n-1).
Beispiel (Prüfung !)
n = 5 Seitengröße = 4K
In dem Zeitintervall [ti+1 , ti] werden folgende Adressen angesprochen : 2220, 2450, 4680, 0020, 3720, 1280, 4AB0
Gesucht : Referenzreihenfolge : 2 , 2 , 4 , 0 , 3 , 1 , 4 bei Seitengröße = 2K : 4 , 4 , 8 , 0 , 6 , 2 , 9
0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 2
4
- realisierbare Strategie
Entscheidungsgrundlage : bisher aufgetretene Referenzfolge Fenster der letzten n Referenzen
- Häufigkeit (LFU) - Zeitpunkt (LRU) - Existenz (RNU) - Zufall (FIFO)
LFU - Strategie (Last Frequently Used)
Seitentabelle Seite 0
Seite 1 Seite 2 ...
Zähler
- bei Zugriff auf eine Seite
zähler[seitennr] := zähler[seitennr + 1]
falls alle zähler > 0 : alle um ´1´ erniedrigen - Wahl einer zu räumenden Kachel :
anwesende Seite mit zähler = 0 - Vereinfachung :
* zähler zu Kachel zuordnen
* bei Seitentausch alle Zähler rücksetzen - wegen hohem Aufwand selten realisiert
0 1 4 3 2 3 0 1 0 3 0 2 Seite in Kachel
0 0 0 0 0 0 0 0 1 1 1 1 2 Seite in Kachel
1 - 1 1 1 2 2 2 2 0 0 0 0 Seite in Kachel
2 - - 4 3 3 3 3 3 3 3 3 3
LRU - Strategie (Last Recently Used)
Keller der Länge k(+1) mit Referenzen; k = Anzahl der Seiten pro Task, die im HP sind.
2 3 4 1 0
3
X (wird aus Keller gelöscht)
- bei Zugriff auf eine Seite s
* falls s im Keller vorhanden, dann s aus Keller löschen
* s oben in Keller eingeben - Wahl einer zu räumenden Kachel :
unterstes Kellerelement
- wegen hohem Aufwand selten realisiert
0 1 4 3 2 3 0 1 0 3 0 2 Seite in Kachel 0 0 0 3 3 3 3 3 3 3 3 3
0
Seite in Kachel
1 - 1 1 1 2 2 2 1 1 1 1 2 Seite in Kachel
2 - - 4 4 4 4 0 0 0 0 0 0 Keller 4 3 2 3 0 1 0 3 0 2 1 1 4 3 2 3 0 1 0 3 0 0 0 0 1 4 4 2 3 3 1 1 3
|
0 -> wird überlagert
angenäherte LRU - Strategie
(Second Chance Algorithmus FINKFO First In Not Used First Out) einfache und effiziente Realisierung
Suchzeiger sz
Referenz- indikator S 0
S 1 :::
0 1 1 0
- bei Zugriff auf eine Seite s : Referenzindikator [ s ] := true - bei Suche einer zu räumenden Seite :
label1:
falls ( Referenzindikator [sz] = false ) and (Seiteanwesend [sz] --> gefunden) sonst Referenzindikator [sz] := false
sz := sz (+) 1 (+) = modulo Tablänge goto label1
0 1 4 3 2 3 0 1 0 3 0 2 Seite in Kachel
0 0
´ 0
´ - 0
´ 3
´ 3
´ 3
´ - 3
´ 1
´ 1
´ 1
´ 1
´ - 1 Seite in Kachel
1 - 1
´ 1
´ - 1 2
´ 2
´ 2
´ - 2 - 2 3
´ 3
´ 3 Seite in Kachel
2 - 4
´ 4 - 4 - 4 0
´ 0 0
´ - 0
´ - 0
´ 2
´ - = Seitenzeiger
´ = Referenzbit gesetzt
Bei größerer Anzahl von Kacheln => bessere Ergebnisse !
RNU - Strategie
Seitentabelle S 0
S 1 :::
0 1 1 0
0 999
10 :::
Zähler
Referenzindikator
reine Strategie
- Jeder Seite wird ein Zähler der Kapazität k zugeordnet
- Alle Zähler werden bei Zugriff auf eine beliebige Seite um 1 erhöht (falls R-Bit = 1; in Praxis wegen zu hohem Aufwand nicht real) - Der Zähler der referenzierten Seite wird auf 0 gesetzt - Das Referenzbit der referenzierten Seite wird auf 1 gesetzt - Bei Zählerüberlauf werden Zähler und Referenzbit auf 0 gesetzt - Zur Überlagerung wird eine Seite mit Referenzbit 0 ausgewählt
0 1 4 3 2 3 0 1 0 3 0 2 Seite in Kachel
0 0 0 0 3 3 3 3 3 3 3 3 3 Seite in Kachel
1 1 1 1 2 2 2 1 1 1 1 2 Seite in Kachel
2 4 4 4 4 0 0 0
´ 0 0 0
Zählergröße k = 2 (0,1,2)
# = Zählerüberlauf (Eintrag wird gelöscht) Probleme bei der technischen Realisierung.
FIFO - Strategie (First In First Out)
Seite 0 ´ 0 ´ 1 ´ 2 # ´ 0 ´ 1 ´
0 ´ 1 ´ 0 ´ 1 Seite 1 ´ 0 ´ 1 ´ 2 # ´ 0 ´
1 ´ 2 #
Seite 2 ´ 0 ´
1 ´ 2 # ´ 0
Seite 3 ´ 0 ´ 1 ´
0 ´ 1 ´ 2 # ´ 0 ´ 1 ´ 2 Seite 4 ´ 0 ´ 1 ´ 2 #
:::
K 0 K 1
Kacheltabelle
Zeiger - Auswahl :
Seite in Kachel, auf die Zeiger verweist, nach Räumen Zeiger um 1 erhöhen (modulo Länge).
0 1 2 3 4 0 1 5 6 0 1 2 3 5 6 K 0 0 0 0 * 0 4 4 4 * 4 6 6 6 6 6 6 6 K 1 * 1 1 1 * 1 0 0 0 * 0 * 0 * 0 2 2 2 2 K 2 * 2 2 2 * 2 1 1 1 1 1 * 1 3 3 3 K 3 * 3 3 3 * 3 5 5 5 5 5 * 5 * 5 * 5 K 0 0 0 0 0 * 0 * 0 * 0 5 5 5 5 * 5 3 3 3 K 1 * 1 1 1 1 1 1 * 1 6 6 6 6 * 6 5 5 K 2 * 2 2 2 2 2 2 * 2 0 0 0 0 * 0 6 K 3 * 3 3 3 3 3 3 * 3 1 1 1 1 * 1 K 4 * 4 4 4 4 4 4 * 4 2 2 2 2
bei 4 Kacheln : 7 Seitenwechsel bei 5 Kacheln : 8 Seitenwechsel
e) Leistungsbetrachtungen 1) Einfaches Modell für 1 Prozeß
- Programm der Größe s Seiten => Seitennr. 0, ... , s-1 Speicherangebot mit m Seiten m <= s
a) Annahme : gleichmäßiges Referenzverhalten
Wahrscheinlichkeit P (Referenz einer Seite) = 1/ s
P (Austausch) = (s - m) / s = 1 - m / s Bezeichnungen :
relatives Speicherangebot = m/s Seitentauschrate = f
o
gemessen Näherung
b) Annahme : nicht gleichmäßiges Referenzverhalten (Praxis !)
- Seiten werden nach der (gemessenen) Referenzhäufigkeit umnummeriert
P
is-1 0
1 - o P
Pn h
S0
Wendepunkt
Zur einfachen analytischen Betrachtung wird die beobachtete Kurve durch eine näherungsweise ersetzt.
Zwei - Gruppen - Verteilung
P( i ) = o / so für 0 <= i <= so
= (1 - o) / (s - so) für so < i <= s