Sie sind auf Seite 1von 60

6.

Speicher- und
Adressraumverwaltung
• Überblick
6.1 Speicherverwaltung im Betriebssystem
6.2 Speicherallokation
6.3 Speicherzuweisung und Auslagerung

Systemprogrammierung 1
6.1 Speicherverwaltung im
Betriebssystem
• Speicher ist ein „spezielles“ Betriebsmittel, das vom BS
besonders verwaltet werden muss
• Zwecke, für die Speicher benötigt wird:
➢ Prozesse
▪ Stack
▪ Heap
▪ Programm-Code und -Daten

➢ Das BS selbst!
▪ BS-Code
▪ BS-Daten
▪ Dynamisch erzeugte Verwaltungsstrukturen (PCBs etc.)

Systemprogrammierung 2
Aufgabe der
Speicherverwaltung
• Beim Starten des Systems…
1. BS ermittelt Lage und Größe des gesamten Speichers
2. BS ermittelt eigene Position im Speicher
3.  berechnet daraus freie Speicherbereiche

• Problem:
➢ Wie führt BS Buch über Verwendung des Speichers?
➢ Beispiel:
▪ Speicher: 0x0000 – 0x8000
▪ BS (Code und Daten): 0x0000 – 0x3000
▪  frei: 0x3000 – 0x8000
▪ BS möchte nun PCB für Prozess 0 anlegen, Größe 0x80…
▪ … wo wird der PCB angelegt und wie „notiert“ sich das BS das?

Systemprogrammierung 3
Verwaltungsstrukturidee 1:
Verkettete Liste
• Vor jeden Block werden Statusinformationen gesetzt, die
dessen Größe und Verwendung (frei/belegt) angeben
• Initial, der gesamte freie Speicher ist ein großer Block:
0x4FF8,
Größe

frei

Freier Speicher (0x4FF8 Bytes lang)


0x3000

0x8000
• Nach Anforderung des Speichers für PCB 0:
0x4F70,
PCB 0
belegt
Größe

Größe
0x80,

frei

Freier Speicher (0x4F70 Bytes lang)

0x8000
0x3000

Systemprogrammierung 4
Speicherverwaltung mit
Verketteter Liste (2)
• Nach einigen Anforderungen und Freigaben bildet sich
ein Flickenteppich aus freien und belegten Blöcken:

0x8000
0x3000

Freie Blöcke Belegte Blöcke Verwaltungsinformationen

• Dabei kommt es zu „Zerstückelung“ (fragmentation):


➢ Externer Verschnitt: freie Blöcke, die für viele spätere
Anforderungen zu klein sind
➢ Interner Verschnitt: Teile von belegten Blöcken, die nicht
genutzt werden (weil Anforderung aufgerundet wurde, hier
z.B. in der Regel auf Vielfache eines Maschinenwortes, also
meist 4 bzw. 8 Byte)

Systemprogrammierung 5
Exakte Definitionen:
Verschnitt und Auslastung
• Interner Verschnitt:
Größe des belegten, aber nicht genutzten Speichers
f int =
Größe des belegten Speichers

• Externer Verschnitt:
(Merke: „nicht belegbar“ ist immer bezogen auf eine
bestimmte Anforderung zu sehen, den einen Externen
Verschnitt gibt es in der Regel nicht)
Größe des freien, aber nicht belegbaren Speichers
f ext =
Größe des belegten Speichers

• Speicherauslastung
Größe des belegten Speichers
=
Größe des gesamten Speichers

Systemprogrammierung 6
Verwaltung mit Verketteter
Liste: Auswahlstrategien
• First-Fit: Durchlaufe die Liste und belege den ersten freien Block
ausreichender Größe
➢ Erstbester Block wird verwendet  hoher externer Verschnitt
➢ Aktivität konzentriert sich am Anfang  hoher Suchaufwand durch
viele unpassende, kleine Blöcke am Anfang

• Next-Fit / Rotating First-Fit: Analog zu First-Fit, die Suche beginnt


allerdings beim letzten belegten Block
➢ Zyklisches Durchlaufen der Liste
➢ Keine Konzentration der belegten Blöcke am Listenanfang
➢ Verkürzung der Suchzeiten

Systemprogrammierung 7
Auswahlstrategien (2)
• Nearest-Fit: Eine gewünschte Adresse für die Belegung wird
übergeben, von da aus First-Fit-Suche
➢ Für Arbeitsspeicher weniger relevant, eher für Festplatten:
▪ Minimierung der Armbewegungen
▪ günstige Positionierung oft benötigter Daten

• Best-Fit: Belege das kleinste, aber hinreichend große Stück


 idealerweise passt es genau, dann bleibt kein Rest übrig

• Worst-Fit: Suche und belege das größte freie Speicherstück


 Möglichst großes Reststück noch vorhanden

Systemprogrammierung 8
Verwaltungsstrukturidee 2:
Slabs („Object Pools“)
• Erkanntes Problem der verketteten Liste:
anfällig für externen Verschnitt
• Lösungsansatz: häufig vorkommende Allokationsgrößen
völlig verschnittfrei bedienen

• Bei erster Anforderung einer dieser Größen (z.B. 1kB)


wird ein Slab vordefinierter Gesamtgröße erzeugt:

1kB 1kB 1kB 1kB 1kB 1kB 1kB 1kB 1kB 1kB 1kB 1kB
Frei-
liste

frei frei frei frei frei frei frei frei frei frei frei frei

• Anforderungen und Freigaben erfordern dann nur eine


Aktualisierung der Freiliste; selten (wenn alle beste-
henden Slabs voll sind) Erzeugung eines weiteren Slabs
Systemprogrammierung 9
Verwaltung durch Object Pools:
Vor- und Nachteile
• Vorteile:
➢ Für Anforderungen der entsprechenden Größen kein
Verschnitt
➢ Schnelleres Finden eines freien Blocks
▪ Komplett gefüllte Slabs können übersprungen werden
▪ Nur Slabs der entsprechenden Größe werden betrachtet
▪ Kein Durchlaufen von Block-Listen; ein Blick in Slab-Freiliste
• Nachteile:
➢ Anforderungen anderer Größe werden entweder aufgerundet
(interner Verschnitt) oder müssen anders organisiert werden
(Verkettete Liste)
➢ Bei ungünstigem Auftreten von Anforderungen und
Freigaben können viele fast leere Slabs entstehen
 Overhead

Systemprogrammierung 10
Verwaltungsstrukturidee 3:
Halbierungsverfahren (Buddy-A.)
• Zu verwaltender Speicher habe die Größe 2n
• Mögliche Vergabe-Größen: 2i,…,2n
➢ Kleinere Anforderungen aufrunden (interner Verschnitt!)
• Für eine Anforderung der Größe 2k (i ≤ k ≤ n):
➢ Block der gewünschten Größe vorhanden  ausgeben
➢ Block der Größe 2k nicht vorhanden  freien Block der Größe 2k+1
in zwei Hälften („Partner“, buddies) zu je 2k aufteilen (bzw.
rekursiv erst einen 2k+2 in zwei 2k+1 etc.)
➢ Bei Freigaben Buddies ggf. wieder verschmelzen
▪ Adresse des Partners jeweils leicht zu berechnen (ein Bit kippen!);
dadurch schnelle Überprüfung möglich, ob frei oder belegt

Systemprogrammierung 11
Buddy-Allocator: Beispiel
• Gegeben:
➢ Speichergröße 64 Einheiten
➢ A1: alloc(7), A2: alloc(6), A3: alloc(4), R2, R1

32 32 32 32 32 32 32

64
8 8 8
16 16 16
4 4 4
4 4 4
32
8 8 8 8
16 16
8 8 8 8

A1 A1 A1 A2 …A3 R2 R1

Systemprogrammierung 12
Verwaltung durch Buddy-Alloc.:
Vor- und Nachteile
• Vorteile:
➢ Sehr einfache Implementierung
➢ Anforderungen und Freigaben sehr schnell
➢ Nach dem „Einschwingen“ wenige Teilungen und
Verschmelzungen

• Nachteile:
➢ Riesiger interner Verschnitt (2k+1  2k+1)
➢ Benötigt verhältnismäßig viele zusätzliche Verwaltungsdaten:
▪ Liste freier Blöcke für jede Größe 2k
▪ Frei/Belegt-Information nach Adresse
➢ Deshalb üblicherweise nur für große Anforderungen
verwendet (Linux: ab 212)

Systemprogrammierung 13
6.2 Speicherallokation
• Speicherallokation = Zuordnung von Speicher
• Statische Speicherallokation
➢ Einteilung des Arbeitsspeichers in mehrere Laufbereiche
▪ Nehmen einen Prozess vollständig auf
▪ Prozess blockiert  Verdrängung aus aktuellem Laufbereich und
Auslagerung auf den externen Speicher
▪ Wiedereinlagerung nach Wechsel blockiert → bereit
➢ Nachteil: Nur ganze Prozesse werden verdrängt  ineffizient
• Dynamische Speicherallokation
➢ Prozessteile werden – transparent für den Benutzer – zur Laufzeit
und erst bei Bedarf ein- und ausgelagert
➢ Grundlage: Virtuelle Adressierung
➢ Beim Zugriff auf fehlenden Inhalt wird ein Interrupt (Seitenfehler,
Page Fault) ausgelöst, der das Nachladen des Inhalts initiiert

Systemprogrammierung 14
Nachschub und Verdrängung
• Wichtig für dynamische Speicherallokation
➢ Realokierbare Prozesse können verdrängt und ohne
zusätzlichen Programmieraufwand in anderem
Speicherbereich ausgeführt werden
• Festgelegte Strategien, wann
➢ Daten in den Speicher zu laden sind (Nachschubstrategie)
➢ Prozessdaten aus dem Speicher verdrängt werden müssen
(Verdrängungsstrategie)

Systemprogrammierung 15
Datenstruktur zur
Adressraumverwaltung
• Gedankenexperiment: wir erstellen einen Adressraum

• Benötigte Struktur dafür muss für jede virtuelle Adresse


V die folgenden Dinge liefern:
➢ Gültigkeit (ist V eine gültige Adresse in diesem Adressraum,
oder löst ein Zugriff auf V einen Speicherfehler aus?)
➢ Wenn gültig:
▪ Zugehörige Physische Adresse P
▪ Lesen, Schreiben, Ausführen von dieser Adresse erlaubt?
▪ Zugriff für unprivilegierte Instruktionen erlaubt?
▪  je Eintrag brauchen wir mind. ein Maschinenwort…
(wir müssen ja P speichern plus ein paar Bits extra)

Systemprogrammierung 16
Datenstruktur zur
Adressraumverwaltung (2)
• Frage: wie granular wollen wir V zuordnen können?
➢ Extremum 1: ultrafein, d.h. jedes Byte einzeln
 dann brauchen wir mehr Speicher für die Verwaltungs-
struktur als das System überhaupt Speicher hat
➢ Extremum 2: ultragrob, z.B. 64MB
 dann belegt jeder Prozess mind. 64MB Speicher, da wir
kleinere Einheiten nicht verwalten können

• Trade-Off zwischen Effizienz des Lookups, Größe der


Verwaltungsstruktur und anderen Überlegungen
➢ Resultat für die meisten Architekturen: 4kB
 virtuelle Verwaltungseinheit ist eine Seite (page)
 physisches Pendant heißt Kachel (page frame)
 Seitentabelle oder Seite-Kachel-Tabelle (page table)
Systemprogrammierung 17
Seitenadressierung
• Bei Seitenadressierung (paging) werden der virtuelle und
der physikalische Speicher in Stücke fester Länge eingeteilt
➢ Stücke im logischen Adressraum heißen Seiten (pages)
➢ Stücke im physikalischen Speicher heißen Kacheln (page frames)
➢ Seiten und Kacheln sind gleich groß

Programmadressraum Speicher
Seite 1 Kachel 1 (frei)
Seite 2 Kachel 2 (Seite 3)
Seite 3 Kachel 3 (Seite 2)
Seite 4 Kachel 4 (frei)
Seite 5 Kachel 5 (frei)
Seite 6 Kachel 6 (Seite 4)
Kachel 7 (Seite 5)
Kachel 8 (frei)
Kachel 9 (Seite 1)
Systemprogrammierung 18
Verbindung durch Seitentabelle
• Neben der physikalischen Adresse enthält jeder Eintrag der
Seitentabelle noch Informationen über
➢ Seite im Hauptspeicher vorhanden? Präsenzbit (presence bit P)
➢ Wurde auf die Seite bereits zugegriffen? Referenzbit (reference bit R
oder access bit A)
➢ Wurde die Seite modifiziert? Modifikationsbit (dirty bit D oder
modification bit M)
Kachel Speicher
Seitentabelle oder
Seiten
Seiten-Kachel -Tabelle
1 1 1
1 0 0
0 0 0
1 1 0
0 1 0

Modifikation
Referenzierung
Präsenz

Systemprogrammierung 19
Adressübersetzung mit
Seitentabelle
• Seitenbasierte Speicherbelegung ist Standard in Betriebssystemen
• Notwendige Angaben
➢ Wo befindet sich die Seitentabelle  Tabellenbasisregister
➢ Welche Seite wird angesprochen  Seitennummer
➢ Adresse innerhalb der Seite  Wortadresse (offset, displacement )

Tabellenbasisadresse
(Im Prozessor) Seitentabelle Speicher

Seite Wortadresse K

K = Konkatenation
(Zusammenfügen)

Systemprogrammierung 20
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
Übersetzungstabelle (nur privilegiert, also vom BS, konfigurierbar)

• Schritt 1: zerlege V in Seitennummer und Offset

Verwaltungsstruktur Physischer Speicher


Tabellenbasisadressregister („Seitentabelle“)

Seitennummer Offset

Virtuelle Adresse V

Systemprogrammierung 21
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
Übersetzungstabelle (nur privilegiert, also vom BS, konfigurierbar)

• Schritt 2: verwende Seitennummer als Index in Seitentabelle

Verwaltungsstruktur Physischer Speicher


Tabellenbasisadressregister („Seitentabelle“)

Seitennummer Offset

Virtuelle Adresse V

Systemprogrammierung 22
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
Übersetzungstabelle (nur privilegiert, also vom BS, konfigurierbar)

• Schritt 3: prüfe Gültigkeit und Zugriffsrechte in den Metadaten


des Eintrags („Bits“), lese Kachelnummer
Verwaltungsstruktur Physischer Speicher
Tabellenbasisadressregister („Seitentabelle“)

Kachelnummer Bits

Seitennummer Offset

Virtuelle Adresse V

Systemprogrammierung 23
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
Übersetzungstabelle (nur privilegiert, also vom BS, konfigurierbar)

• Schritt 4: bilde aus Kachelnummer und Offset das Ergebnis, die


physische Adresse P
Verwaltungsstruktur Physischer Speicher
Tabellenbasisadressregister („Seitentabelle“)

Kachelnummer Bits

Seitennummer Offset

Kachelnummer Offset
Virtuelle Adresse V
Physische Adresse P
Systemprogrammierung 24
Datenstruktur zur
Adressraumverwaltung (3)
• Annahmen:
➢ 32-Bit-Architektur, d.h. 4GB Adressraum
➢ Verwaltungseinheit 4kB
➢  es gibt 4GB/4kB=220 Seiten pro virtuellem Adressraum
➢ Wenn die Verwaltungsstruktur eine einfache Tabelle ist,
wäre sie 220 Einträge lang (wovon häufig die allermeisten
ungültig sein werden) [Wie ein 2000-seitiges Telefonbuch,
wo hinter 99,9% der Namen keine Rufnummer steht…]

➢ Für 64-Bit-Architekturen erst recht nicht handhabbar (252!)

Systemprogrammierung 25
Datenstruktur zur
Adressraumverwaltung (4)
• Abhilfe-Idee 1: invertierte Tabelle
➢ Ein Eintrag pro Kachel, nicht pro Seite
➢ Größe der Tabelle skaliert mit dem tatsächlich vorhandenen
Speicher, nicht mit der virtuellen Adressraum-Größe

• Problem: wenn das eine Kachel-Tabelle ist, wie löst man


die Aufgabe „gegeben V, suche P“?
➢ [Wer in diesem Telefonbuch hat die Rufnummer 33344499?]
➢ Naiv: lineare Suche durch die gesamte Tabelle
➢ Etwas trickreicher: durch Einsatz von Hash-Verfahren muss
nur ein Teil der Einträge durchsucht werden…
 letztlich dennoch ineffizient

Systemprogrammierung 26
Datenstruktur zur
Adressraumverwaltung (5)
• Abhilfe-Idee 2: mehrstufige Tabelle
➢ Anstatt alle 20 Bits mit einer einzigen 220-Tabelle zu
übersetzen, mache zwei Schritte à 10 Bits
➢ Erste Tabelle enthält 210 Einträge
➢ Nur an Stellen, wo virtuelle Adressen tatsächlich übersetzt
werden sollen, verweist die erste Tabelle auf eine zweite
Tabelle zur Übersetzung der übrigen Bits dieses
Adressbereichs
 für den üblichen Fall des spärlich besetzten Adressraums:
sehr effiziente Darstellung
▪ Leerer Adressraum: eine Tabelle à 210
▪ Adressraum mit fünf Seiten: max. sechs Tabellen à 210
▪ Voll besetzter Adressraum: 210+1 Tabellen à 210
(auch nicht schlimmer als eine einzige große Tabelle)

Systemprogrammierung 27
Mehrstufige Seitentabellen
Second Level

10 10 12
PT1 PT2 Offset

Top Level

Grau = derzeit nicht


genutzt

Systemprogrammierung 28
Mehrstufiges
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
ersten Ebene der hierarchischen Übersetzungstabelle (nur
privilegiert, also vom BS, konfigurierbar)

• Schritt 1: zerlege V in Tabellen-Indices und Offset


Seitentabelle,
Tabellenbasisadressregister erste Ebene

Index #1 Index #2 Offset

Virtuelle Adresse V

Systemprogrammierung 29
Mehrstufiges
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
ersten Ebene der hierarchischen Übersetzungstabelle (nur
privilegiert, also vom BS, konfigurierbar)

• Schritt 2: benutze Tabellenbasisadressregister und Index #1 für


Lookup in der ersten Tabellenstufe
Seitentabelle,
Tabellenbasisadressregister erste Ebene

Index #1 Index #2 Offset

Virtuelle Adresse V

Systemprogrammierung 30
Mehrstufiges
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
ersten Ebene der hierarchischen Übersetzungstabelle (nur
privilegiert, also vom BS, konfigurierbar)

• Schritt 3a: wenn gültig, enthält Eintrag Basisadresse einer Tabelle


der zweiten Ebene für die Übersetzung der restlichen Bits
Seitentabelle,
Tabellenbasisadressregister erste Ebene

Tab.Basis #2 Bits

Index #1 Index #2 Offset

Virtuelle Adresse V

Systemprogrammierung 31
Mehrstufiges
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
ersten Ebene der hierarchischen Übersetzungstabelle (nur
privilegiert, also vom BS, konfigurierbar)

• Schritt 3b: benutze diese zweite Basisadresse und Index #2 für


einen weiteren Tabellen-Lookup
Seitentabelle, Seitentabelle,
Tabellenbasisadressregister erste Ebene zweite Ebene

Kachelnummer Bits

Tab.Basis #2 Bits

Index #1 Index #2 Offset

Virtuelle Adresse V

Systemprogrammierung 32
Mehrstufiges
Adressübersetzungsverfahren
• Prozessor enthält spezielles Kontrollregister für Basisadresse der
ersten Ebene der hierarchischen Übersetzungstabelle (nur
privilegiert, also vom BS, konfigurierbar)

• Schritt 4: wenn auch dieser Eintrag gültig, füge wieder


Kachelnummer und Offset zu P zusammen
Seitentabelle, Seitentabelle, Physischer Speicher
Tabellenbasisadressregister erste Ebene zweite Ebene

Kachelnummer Bits

Tab.Basis #2 Bits

Index #1 Index #2 Offset

Kachelnummer Offset
Virtuelle Adresse V
Physische Adresse P
Systemprogrammierung 33
Metadaten in der Seitentabelle
• Je ein Bit für (nur eine Auswahl, es gibt noch mehr):
➢ Seite-Kachel-Eintrag ist gültig (Present)
➢ Seite darf gelesen werden (Read)
➢ Seite darf beschrieben werden (Write)
➢ Seite darf ausgeführt werden (eXecute)
➢ Seite darf von unprivilegiertem Code benutzt werden (User);
manchmal auch mit umgekehrter Logik als (Supervisor)
➢ Auf die Seite wurde bereits lesend zugegriffen (Accessed)
➢ Auf die Seite wurde bereits schreibend zugegriffen (Dirty)
• A und D werden von der CPU aktualisiert(!)

Systemprogrammierung 34
6.3 Speicherzuweisung und
Auslagerung
• BS verwaltet sowohl die Kacheln selbst (frei/belegt, und
womit?) als auch die Adressräume (welche Kachel ist an
welcher virtuellen Adresse in welchen Adressräumen
verfügbar?)

• Wir unterscheiden zwei Fälle, in denen etwas zu tun ist


(Speicher zuweisen bzw. wieder entziehen) und wir eine
Strategie benötigen:
➢ Nachschub: ein neuer Prozess startet oder ein bestehender
fordert zusätzlichen Speicher an
➢ Verdrängung: es besteht Speicherknappheit, so dass durch
Auslagerung Platz geschaffen werden muss

Systemprogrammierung 35
Nachschubstrategien
(Fetch Policies)
• Auf Verlangen (Demand Paging)
➢ Seiten werden erst bei aktuellem Bedarf nachgeladen
➢ Bedarf äußert sich durch Zugriff auf ungültige virtuelle Adresse
( Seitenfehler tritt auf, BS „löst das Problem“)

• Vorgeplant (Pre-Paging)
➢ Voraussetzung: Prozessverhalten im Voraus bekannt
➢ Transport einer Seite in den Arbeitsspeicher so, dass die Seite zum
Referenzierungszeitpunkt zur Verfügung steht
➢ Die notwendige Kenntnis über das exakte Programmverhalten steht
meist nicht zur Verfügung

• Kombinierte Ansätze
➢ Beim Prozess-Start Pre-Paging: Programm laden, mind. eine Seite
für je Heap und Stack bereitstellen, usw.
➢ Während Laufzeit: Demand Paging

Systemprogrammierung 36
Verdrängung
• Speicherknappheit erfordert Verdrängung, d.h. Auslagerung
von Speicherinhalten auf andere Medien (z.B. Festplatte)

• Möglichkeit 1: Prozesse vollständig ein- und auslagern


➢ Prozess blockiert  Auslagerung
➢ Prozess wieder bereit  Wiedereinlagerung
➢ Aber: zu viel Arbeit, insb. bei kurzen Blockierungen  ineffizient

• Möglichkeit 2:
➢ Prozessteile (Seiten!) werden – transparent für den Benutzer –
zur Laufzeit und erst bei Bedarf ein- und ausgelagert
➢ Ausgelagerte Seiten werden in der Seitentabelle als „ungültig“
markiert, beim Zugriff darauf wird ein Seitenfehler ausgelöst
 BS kann die Seite wieder einlagern, ohne dass der Prozess
merkt, dass sie überhaupt weg war
Systemprogrammierung 37
Verdrängung
• Auslagerung von Seiten nutzt die Seitentabelle „kreativ“:
➢ Gültiger Eintrag in der Seitentabelle enthält:
▪ Gültig-Bit P = 1
▪ Virtuelle Adresse V
▪ Zugriffsrechtebits R,W,X,U
▪ Zugriffsprotokollbits A,D
➢ Für einen ungültigen Eintrag muss nur gelten: Gültig-Bit P = 0
➢ Die übrigen Felder werden von der MMU dann ignoriert
➢ Diese können also z.B. dazu genutzt werden, die Blocknummer
auf der Festplatte zu speichern, wohin der Seiteninhalt
ausgelagert wurde!

• Wenn das D-Bit in der Seitentabelle nicht gesetzt ist, kann


das Schreiben auf die Festplatte u.U. unterbleiben!
Systemprogrammierung 38
Detaillierter Ablauf
Belegen des VS Ablauf bei Seitenfehler
Ersatzspeicher belegen
Initialisierung Ja
Leere Kachel verfügbar?

Zugriff Freizuräumende Kachel wählen


Seite vorhanden? Nein
Nein: Seitenfehler aktivieren Kachelinhalt modifiziert?

Verdrängen
Ja: Setze Verarbeitung fort
Seite auslagern auf Ersatzspeicher

Freigabe des VS
Belegte Kacheln freigeben Neue Seite vom Ersatzspeicher
Ersatzspeicher freigeben einlagern

Zeitintensive Eintrag Kacheltabelle


Ersetzung

Verarbeitungsschritte
Eintrag Seitentabelle

Systemprogrammierung 39
Demand Paging
SKT = Seite-Kachel-Tabelle (anderer Name für Seitentabelle)

Systemprogrammierung 40
Demand Paging (2.)

Seitenfehler (Page Fault)

Systemprogrammierung 41
Demand Paging (3.)

Systemprogrammierung 42
Demand Paging (4.)

Systemprogrammierung 43
Demand Paging (5.)

Systemprogrammierung 44
Verdrängungsstrategien
(Replacement Policies)
• Leistungsfähigkeit von Demand Paging stark von der Anzahl
der Seitenfehler abhängig
Seitenfehler durch intelligente Verdrängung minimieren

• Welche Kachel soll geleert und der Inhalt ausgelagert


werden?
➢ Lokale Auswahlstrategie: Es wird eine Kachel geleert, welche dem
den Seitenfehler verursachenden Prozess zugeordnet ist
➢ Globale Auswahlstrategie: Eine beliebige Kachel – auch von
fremden Prozessen – darf geleert werden

• Modellierung der Seitenersetzung


➢ Ist ri die Nummer der Seite, auf der zum Zeitpunkt t zugegriffen
wird, so heißt R = r1, r2, r3,…, rn Seitenreferenzfolge
Systemprogrammierung 45
Optimale Auswahlstrategie

• Verdränge diejenige Seite, die am längsten nicht mehr


benötigt werden wird ☺
➢ Minimierung der Seitenfehleranzahl bei gegebener Speichergröße
➢ Nicht realisierbar ohne hellseherische Fähigkeiten  wird als
Messlatte für realisierbare Strategien eingesetzt, d.h. wie weit ist
eine Strategie vom optimalen Ergebnis noch entfernt

Zeit 1 2 3 4 5 6 7 8 9 10 11 12

Zugriff Seite A C E D C D A B A D A C

Kachel 1 A A A A A A A A A A A C

Kachel 2 C C C C C C B B B B B

Kachel 3 E D D D D D D D D D

Ergebnis: 3 Fehler (ohne Initialseitenfehler)


Systemprogrammierung 46
Realisierbare Strategien
• Vorhersage zukünftiger aufgrund vergangener Referenzen
• Lokalitätsprinzip
➢ Zugriffsverhalten in unmittelbarer Vergangenheit ist eine gute
Schätzung für das Verhalten in nächster Zukunft
• Auswahl basiert auf
➢ Häufigkeit der Zugriffe auf eine Seite
➢ Zeitpunkt der Zugriffe
• Strategien: Verdrängung der Seite, die
➢ Am längsten im Speicher war (First In - First Out, FIFO)
➢ Am längsten nicht benutzt wurde (Least Recently Used, LRU)
➢ Am wenigsten häufig benutzt wurde (Least Frequently Used, LFU)
➢ Innerhalb eines vorgegebenen Zeitraums nicht mehr referenziert
wurde (Recently Not Used, RNU)
Systemprogrammierung 47
FIFO-Strategie
• FIFO: 4 Seitenfehler für die betrachtete Referenzfolge
• Anomalie der FIFO-Strategie
➢ Bei steigender Kachelzahl kann die Anzahl von Seitenfehlern steigen(!)
➢ Beispiel: 4 Kacheln  7 Fehler, 5 Kacheln  8 F., 6 Kacheln  6 F.
• Erwünscht
➢ Weniger Seitenfehler, wenn mehr Speicher zur Verfügung steht
➢ Monoton fallende Seitenfehlerrate bei steigender Kachelrate

Zeit 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Zugriff Seite A B C D E A B F G A B C D F G

Kachel 1 A A A A E E E E G G G G G G G

Kachel 2 B B B B A A A A A A C C C C

Kachel 3 C C C C B B B B B B D D D

Kachel 4 D D D D F F F F F F F F

Systemprogrammierung 48
LFU-Strategie
• Verdränge Seite, die am wenigsten häufig benutzt wurde
➢ Eine kaum verwendete Seite wird auch zukünftig selten benötigt
➢ Ein Zähler pro Seite  Inkrementierung bei jedem Zugriff
➢ Bei gleicher Frequenz: 2. Strategie, z.B. FIFO

Zeit 1 2 3 4 5 6 7 8 9 10 11 12

Zugriff Seite A C E D C D A B A D A C

Kachel 1 A A A D D D D D D D D D

Kachel 2 C C C C C C B B B B C

Kachel 3 E E E E A A A A A A

A 1 1 1 (1) (1) (1) 2 2 3 3 4 4

B - - - - - - - 1 1 1 1 (1)

Zähler C - 1 1 1 2 2 2 (2) (2) (2) (2) 3

D - - - 1 1 2 2 2 2 3 3 3

E - - 1 1 1 1 (1) (1) (1) (1) (1) (1)

Systemprogrammierung 49
LRU-Strategie
• Verdränge Seite, die am längsten nicht mehr referenziert wurde
➢ Seitenzugriffs-Stapel: Seite, auf die zuletzt zugegriffen wurde, wird auf
oberste Stapelposition gelegt  oberste k Seiten im Speicher
➢ Falls Seite schon im Speicher: im Stapel wieder nach oben befördern
➢ Bei Auslagerung: k-te Seite austauschen; neu referenzierte Seite
kommt auf oberste Position  vorhandene Seiten rutschen nach
unten, k-te Seite rutscht aus dem Stapel

Zeit 1 2 3 4 5 6 7 8 9 10 11 12

Zugriff Seite A C E D C D A B A D A C

Kachel 1 A A A D D D D D D D D D

Kachel 2 C C C C C C B B B B C

Kachel 3 E E E E A A A A A A

1 A C E D C D A B A D A C
Stapel 2 - A C E D C D A B A D A
3 - - A C E E C D D B B D

Systemprogrammierung 50
RNU-Strategie
• Verdränge Seite, die innerhalb eines Zeitraums nicht mehr
referenziert wurde
➢ Definition des Zeitraums über ein Fenster, das k zuletzt
referenzierte Elemente umfasst
➢ Für eine Verdrängung kommen alle Seiten in Frage, die nicht
innerhalb des Fensters referenziert wurden
➢ Kritische Größe: Fensterbreite k>0, aber k klein
➢ Beispielreferenzfolge: 4 Seitenfehler, bei k=2

Zeit 1 2 3 4 5 6 7 8 9 10 11 12

Zugriff Seite A C E D C D A B A D A C

Kachel 1 A A A D D D D D D D D D

Kachel 2 C C C C C C B B B B C

Kachel 3 E E E E A A A A A A

Systemprogrammierung 51
Vergleich der Strategien
• Von den diskutierten Strategien zeigt LRU im Durchschnitt die
beste Leistung, d.h. geringste Seitenfehlerrate
 Häufige Anwendung in realer Systemsoftware

• Interessant
➢ LRU ist symmetrisch zu der optimalen Strategie
➢ Vom aktuellen Zeitpunkt betrachtet LRU die Vergangenheit und die
optimale Strategie die Zukunft

• Probleme bei der Realisierung


➢ Alle realisierbaren Strategien erfordern bei jedem Zugriff gewisse
Datenoperationen (Stapeloperationen, Zählerinkrementierung, …)
➢ Durchführung dieser Operationen (vollständig in Software, mit
Unterstützung von Hardware) ist zu aufwendig
➢ Daher werden hauptsächlich Annäherungsverfahren realisiert
Systemprogrammierung 52
Angenäherte LRU/NRU-Strategie
• Hardwareunterstützung beim Seitenzugriff
➢ Jede Seite besitzt Zugriffsbit (A) in der Seitentabelle
➢ Das Zugriffsbit wird beim Lesen der Seite von der CPU gesetzt
➢ Keine Information über den Zeitpunkt eines Zugriffs
• Fehlende Zeitinformation wird durch eine periodische
Rücksetzung der Zugriffsbits simuliert
• Beispiel: Second-Chance-Algorithmus (Clock-Algorithmus)

Systemprogrammierung 53
Working-Set (Arbeitsbereich)
• Menge von Seiten Wi (t, t), auf die ein Prozess i innerhalb der
letzten t Einheiten ab dem Zeitpunkt t zugegriffen hat

rt-t-1 rt-t rt-t+1 rt-3 rt-2 rt-1 rt

Working-Set der Länge t


• Lokalitätsarten
➢ Räumliche Lokalität: Nach einem Zugriff auf Adresse a ist ein Zugriff
auf eine Adresse in der Nähe von a sehr wahrscheinlich
➢ Zeitliche Lokalität: Nach einem Zugriff auf Adresse a ist ein erneuter
Zugriff (in Kürze) auf a sehr wahrscheinlich
• Warum?
➢ Meist sequentielle Ausführung von Anweisungen
➢ Schleifen
➢ Ausführung bestimmter Programmteile nur in Ausnahmefällen
➢ 90/10-Regel: Prozesse verbringen 90% der Zeit in 10% des
Adressraums
Systemprogrammierung 54
Second-Chance-Algorithmus
(Clock-Algorithmus)
• FIFO-Modifikation durch Berücksichtigung von Referenzen
➢ Sortiere die Seiten/Referenzbits gemäß Einlagerungsdauer
➢ Durchlaufe zyklisch den Vektor mit Referenzbits
▪ Falls das Referenzbit der aktuellen Seite = 1
▪ Setze das Referenzbit auf 0
▪ Betrachte die nächste Seite
▪ Falls das Referenzbit der aktuellen Seite = 0
▪ Verdränge die Seite
▪ Setze die Suche mit der nächsten Seite fort

• Rücksetzung von Teilmengen von Referenzbits (Alte bis


Neue Position). Alle anderen Seiten mit Referenzbit 0
haben eine zweite Chance, referenziert zu werden

• Clock-Algorithmus ist eine Implementierungsvariante


Systemprogrammierung 55
Second-Chance-Algorithmus
• Beispielsituation (Bitfolgen = Referenzindikatoren)

0 0 1 0
2. Chance
Auswahl- 0 Auswahl- 0 0 0
genutzt
zeiger 1 zeiger 1 1 1
1 1 1 1
1 0 0 Auswahl- 0
1 1
0 0 zeiger 0
1 1
0 Auswahl- 1 1
1 1
0 zeiger 1 1
1 1
0 0 0
0 0
1 1 1
1 1 1 0
0 0 1 0
Bei nächster Zu verdrängende
Vor Auswahl Nach Auswahl Aufforderung Seite
Systemprogrammierung 56
Solaris 2: Algorithmus
• Speicherverwaltung mit dem Prozess pageout
➢ Variante des Clockalgorithmus (Zweizeigeralgorithmus, two-handed-clock)
➢ Erster Zeiger scannt die Seiten und setzt die Referenzbits auf 0
➢ Später läuft der zweite Zeiger nach und gibt alle Seiten mit Referenzbit
immer noch 0 wieder frei
• Wichtige Parameter
➢ Scanrate: Scangeschwindigkeit (Seiten/Sekunde)
▪ Anpassung an aktuellen Systemzustand (slowscan = 100 Seiten/s bis
fastscan = Gesamtanzahl von Seiten/2 aber max = 8192)
➢ Handspread: Statischer Abstand in Seiten zwischen den Zeigern
▪ Tatsächlicher Abstand ergibt sich durch Kombination von scanrate und
handspread, z.B. scanrate = 100 und handspread = 1024  10s
zwischen den beiden Zeigern
▪ Bei höher Belastung Abstände von einigen Tausendstel nicht
ungewöhnlich
• Erweiterung: Überspringe Seiten von Shared Libraries
Systemprogrammierung 57
Paging-Daemon
• Technik zur Sicherung eines ausreichenden Vorrats an freien
Kacheln für schnelle Reaktion auf weitere Speicheranforderungen
• Grundidee
➢ Trennung von Seitenverdrängung und Seiteneinlagerung
➢ Speicherverwaltung hält eine vorab festgelegte Anzahl an Kacheln frei
 Seitenfehler können ohne Verdrängung beseitigt und neue Adressräume
direkt angelegt werden
• Realisierung
➢ Paging-Daemon wird periodisch aktiviert (Üblicher Wert: alle 250 ms)
➢ Überprüfung, ob die a-priori vorgegebene Anzahl freier Kachel
unterschritten wurde (Üblicher Wert: ca. 25% der Kachel frei)
▪ Falls ja  Auslagerung von Seiten auf die Festplatte gemäß der
eingesetzten Verdrängungsstrategie
▪ Falls nein  Blockierung des Paging-Daemons bis zum nächsten
Sollzeitpunkt

Systemprogrammierung 58
Realisierung eines Paging
Daemons in Solaris 2
• Wichtige Parameter
➢ Lotsfree: mindestens 1/4 des Speichers frei, Überprüfung alle 0.25s
➢ Desfree: Fällt die Anzahl freier Seite unter diesen Schwellwert
(Durchschnitt über 30s)  Start Swapping, Überprüfung alle 0.1s
➢ Minfree: Nur noch minimale Menge freier Seiten vorhanden 
Aufruf der Seitenersetzung bei jeder Speicheranforderung
Scanrate

Anzahl freier Seiten


Systemprogrammierung 59
Page-Fault-Frequency-Modell
• Seitenfehlerrate = Anzahl Seitenfehler / Zeiteinheit

• Für jeden Prozess wird die Seitenfehlerrate r gemessen


➢ Einführung von zwei Schwellwerten r1 (obere Intervallgrenze) und r2
(untere Intervallgrenze)
➢ Einstellung der Kachelanzahl S in Abhängigkeit von Seitenfehlerrate
▪ Verringere Anzahl Kacheln, falls r < r1, d.h. S =S -1
▪ Erhöhe Anzahl Kacheln, falls r > r2, d.h. S = S + 1

Seitenfehler-
rate r

r2 S erhöhen

r1
S verringern
Anzahl Kacheln S
Systemprogrammierung 60

Das könnte Ihnen auch gefallen