Speicherverwaltung Memory Management

Speicherverwaltung Memory Management Betriebssysteme VO WS 2008/2009 IAIK 1 Parkinsons Gesetz ƒ „Data expands to fill the space available for stor...
1 downloads 1 Views 4MB Size
Speicherverwaltung Memory Management Betriebssysteme VO WS 2008/2009

IAIK

1

Parkinsons Gesetz ƒ „Data expands to fill the space available for storage“ ƒ eigentlich ursprünglich: ‘WORK EXPANDS SO AS TO FILL THE TIME AVAILABLE FOR ITS COMPLETION’

IAIK

2

Der Traum ƒ Speicher: ƒ unendlich groß ƒ unendlich schnell ƒ nicht flüchtig ƒ … und billig auch noch

IAIK

3

Speicherhierarchie ƒ langsamer, billiger, nicht flüchtiger Massenspeicher, Gigabyte ƒ mittelschneller, flüchtiger, Hauptspeicher, Megabyte ƒ schneller, teurer, flüchtiger Cache, Kilobyte

IAIK

4

Verwaltung ƒ Memory-Manager Speicherverwaltung ƒ verfolgt Benutzung ƒ teilt Speicher zu ƒ gibt Speicher frei ƒ lagert Speicher aus

IAIK

5

Speicherverwaltungsysteme ƒ historische Systeme ƒ auch noch wichtig, da oft in

embedded systems oder PDA‘s eingesetzt

ƒ 2 Klassen ƒ verschiebt Prozesse zwischen

Speicher und Platte (Swapping, Paging) ƒ verschiebt nichts IAIK

6

Wenn… ƒ Verschieben zwischen Speicher und Platte nur notwendig, weil zuwenig Speicher da ƒ Bei genügend Speicher – kein Problem mehr! ƒ aber… Parkinson!

IAIK

7

Früher… ƒ ƒ

ƒ ƒ

ƒ

IAIK

1981 Mit 1.Juli 1981 wurde der Werkvertrag aufgestockt, sodaß ein zusätzlicher Diskbereich mit 243 MB zur Verfügung steht. Der Anteil am Zentralspeicher wurde um 131.000 Worte (a 36 bit) erhöht. Darüberhinaus wurden Modems mit einer Übertragungsrate von 600 Baud bzw. 1.200 Baud angeschafft. …. 1984 Der Werkvertrag mit dem RZG wurde aufgestockt. Das EDV-Konzept 82 schlug eine Bedarfsabdeckung durch ein Netz regional verteilter Versorgungsschwerpunkte vor, um eine auf die jeweiligen Benutzergruppen abgestimmte EDV-Dienstleistung zu erbringen. Neu waren der Bereichsrechner "Universitätskliniken": VAX 11/750 (3 MB Zentralspeicher, 456 MB Festplatte) und der Bereichsrechner "Attemsgasse": VAX 11/750 (4 MB Zentralspeicher, 912 MB Festplatte, 205 MB Wechselplatte). aus: http://www.kfunigraz.ac.at/edvz/memory/memory47/schwerpunkte.h tml 8

Monoprogrammierung ƒ nur ein Programm aktiv ƒ Aufteilung Programm - Betriebssystem

Mainframes, Minicomputer nicht mehr verwendet IAIK

embedded Systems Palmtops

MS-DOS

9

Multiprogramming feste Partitionen ƒ Aufteilung in n Partitionen ƒ gleich groß ƒ verschieden groß

ƒ Beispielsweise bei Systemstart eingestellt ƒ Warteschlangen ƒ globale ƒ mehrere IAIK

10

Multiprogramming feste Partitionen ƒ generell: ungenutzter Platz verloren ƒ große Partition für kleinen Auftrag verwenden – schlecht ƒ Partition lange ungenutzt lassen – schlecht IAIK

?

ungenutzt

11

Multiprogramming feste Partitionen ƒ nur eine Schlange ƒ passende Partition auswählen ƒ eventuell Warteschlange nach passendstem Auftrag (verhungern!) ƒ IBM OS-360 MFT IAIK

12

Modellierung ƒ Multiprogramming verbessert Ausnutzung der CPU ƒ aber wie? ƒ 5 Prozesse die 20% der Zeit die CPU brauchen Æ 100% Auslastung? ƒ Zu vereinfachend IAIK

13

Modellierung ƒ probabilistischer Standpunkt besser ƒ Anteil „Warten auf I/O“ sei p ƒ Wahrscheinlichkeit, dass alle warten: pn ƒ Auslastung der CPU A = 1 - pn IAIK

14

Modellierung 90%

Degree of multiprogramming IAIK

15

Modellierung ƒ Modell ist immer noch vereinfachend – Prozesse sind selten völlig unabhängig ƒ Warteschlangentheorie

IAIK

16

Modellierung ƒ Ist das Modell einsetzbar? ƒ 32 MB Hauptspeicher (16 BS, 16 Prozesse a 1 MB). ƒ Ausbau um 16 MB. Gewinn? ƒ ursprünglich Auslastung 60% ƒ danach 83% (+38%) ƒ weitere 16MB: 93% (+12%) IAIK

17

Relokation/Speicherschutz ƒ Programm muss an verschiedenen Adressen laufen können! ƒ Linker muss wissen, welche Speicheradressen Programm verwenden wird IAIK

18

Relokation beim Laden ƒ Beim Laden von der Platte Adressen anpassen ƒ Linker muss Info verfügbar machen, welche Wörter im Programm Adressen sind

IAIK

19

Speicherschutz ƒ Problem: Absolute Adressen! ÆJedes Programm kann jede Speicherzelle referenzieren. ƒ Keine gute Idee ƒ Lösung: Basis/Limitregister

IAIK

20

Basis/Limitregister

Basisregister

rel. Adresse

Programm + Limitregister

≤ Interrupt!

IAIK

zum Speicher!

21

Swapping ƒ bei Batchsystemen bleibt Prozess im Memory bis er fertig ist ƒ Timesharing: manchmal nicht genug Speicher Æ inaktive Prozesse auslagern (auf Festplatte speichern) und bei Bedarf dynamisch zurückholen ƒ zwei Ansätze: swapping und virtueller Speicher IAIK

22

Swapping

IAIK

23

Swapping ƒ Unterschied zu festen Partitionen: ƒ Anzahl dynamisch ƒ Größe dynamisch ƒ Ort dynamisch

ƒ Verbessert Speicherausnutzung ƒ Macht Zuteilung und Verwaltung komplizierter IAIK

24

Compaction ƒ Dynamische Partitionen Æ es entstehen Löcher ƒ können klein sein Æ nicht nutzbar ƒ Speicherverdichtung nötig ƒ vermieden da zu teuer (Sekundenbereich)

IAIK

25

Wieviel Speicher? ƒ Programm fest Größe: einfach ƒ Aber: object.create(…) oder malloc ƒ dynamischer Speicher nötig ƒ wenn „daneben“ noch Platz, Adressraum vergrößern ƒ sonst Prozess verschieben ƒ vorbeugend mehr Speicher! IAIK

26

Dynamischer Speicher

IAIK

27

Speicherverwaltung ƒ dynamische Zuteilung Æ Verwaltung ƒ zwei Möglichkeiten ƒ Bitmaps – Problem: Suche n freie Blöcke ƒ free lists

IAIK

28

verkettete Listen

ƒ hier nach Adressen sortiert ƒ Prozess hat normalerweise 2 Nachbarn ƒ bei Terminieren vier Möglichkeiten IAIK

29

Terminieren von X

IAIK

30

Speicherzuordnungsalgorithmen ƒ First Fit ƒ durchsuche Liste, bis ein Loch groß

genug ƒ Loch in zwei Teile teilen: eins für den Prozess, eins Loch

IAIK

31

Speicherzuordnungsalgorithmen ƒ Next Fit ƒ wie First Fit, nur beginnt dort wo er

beim letzten mal geendet hat

IAIK

32

Best Fit ƒ Durchsucht die Liste nach dem kleinsten, passenden Loch ƒ langsamer als First Fit ƒ verschwendet auch mehr Speicher! da viele kleine, nutzlose Löcher entstehen!

IAIK

33

Worst Fit ƒ wählt immer das größte Loch ƒ ist aber auch nicht gerade gut…

IAIK

34

Beschleunigung ƒ getrennte Listen für Prozesse und Löcher ƒ schnelle Zuteilung ƒ komplexere, langsamere Freigabe ƒ Löcherliste nach Größe sortieren Æ erstes Loch das passt ist optimal ƒ Bestfit und Firstfit gleich schnell – NextFit

sinnlos

ƒ Löcher als Speicher für Verwaltung der Löcher! IAIK

35

Overlays ƒ Programm zu groß für Speicher ƒ Programm in Teile aufteilen (Overlays) ƒ Management durch BS, Aufteilung durch Programmierer ƒ Overlays dürfen keine Abhängigkeiten haben! IAIK

Overlay 2

Overlay 1

36

Virtueller Speicher ƒ Aufteilung bzw Ein- und Auslagern durch Betriebssystem ƒ Virtueller Speicher Æ nicht gesamtes Programm im Speicher ƒ Multiprogramming: von allen Programmen nur Teile im Speicher

IAIK

37

Adressierung ƒ Programme referenzieren Adressen ƒ Bsp: MOV REG,1000 Inhalt der Adresse 1000 ins Register REG ƒ physische Adresse: Adresse wird auf Speicherbus gelegt ƒ virtuelle Adresse – Adresse wird von MMU (Memory Management Unit) transformiert IAIK

38

MMU ƒ Teil des CPU-Chips ƒ früher getrennt

IAIK

39

Virtuelle Adressen / Paging ƒ virtueller Adressraum in Seiten (pages) unterteilt ƒ physischer Speicher in Seitenrahmen (page frames) ƒ page size typisch 512 Byte bis 64KB

IAIK

40

Umsetzung ƒ MOV REG,0 ƒ 0 an MMU ƒ Seite: 0 Æ page frame 2 ƒ 0 Æ 8192 ƒ 8192 auf Speicherbus

IAIK

41

Umsetzung ƒ page mit X nicht im Speicher ƒ (normalerweise

present/absent bit)

ƒ Zugriff auf abwesende Seite? ƒ MMU stellt das fest Æ page fault (Seitenfehler) IAIK

42

Page fault - Seitenfehler ƒ Wenig benutzten Frame suchen ƒ Inhalt sichern ƒ Seite die pagefault ausgelöst hat in Frame laden ƒ Abbildungstabelle anpassen ƒ Befehl noch einmal ausführen

IAIK

43

Innenleben MMU

IAIK

44

MMU ƒ Seitennummer als Index in Seitentabelle ƒ present-bit 0: Seitenfehler ƒ sonst Framenummer kopieren ƒ Offset unverändert übernehmen

IAIK

45

Seitentabellen / page tables ƒ Aufteilung der virtuellen Adresse an sich beliebig ƒ verschiedene Aufteilungen ergeben verschiedene Seitengrößen ƒ pagetable bildet virtuelle Seiten auf Frames ab

IAIK

46

Probleme ƒ Größe der Pagetable ƒ Geschwindigkeit der Umrechnung

IAIK

47

Größe der Pagetable ƒ Seitengröße 4KB ƒ 32-Bit-Adressraum: eine Million Seiten ƒ Pagetablegröße? ƒ Offset: 12 Bit, framenumber: 20 Bit ƒ typisch 4 Byte pro Eintrag Æ 4 MB!

ƒ 64-Bit-Adressraum - / IAIK

48

Geschwindigkeit ƒ Typischer Befehl: ein Befehlswort und meist einen oder mehrere Operanden im Memory ƒ mehrere Speicherzugriffe ƒ ADD R1,R2 ƒ ADD R1,M[1000]

1 Zugriff 2 Zugriffe

ƒ Umrechnung muss schnell sein, sonst ist sie der Engpass IAIK

49

einfache Seitentabelle ƒ pagetable: Reihe schneller HW-Register ƒ Bei Prozess-Start, Seitentabelle in Register laden ƒ danach keine Speicherzugriffe ƒ Vorteil: einfach ƒ Nachteil: für große Tabellen teuer ƒ Nachladen bei contextswitch aufwändig

IAIK

50

Seitentabelle im Memory ƒ Register zeigt auf Startadresse ƒ Austausch bei Kontextwechsel einfach – Register neu laden ƒ Nachteil: sehr viele Speicherzugriffe

IAIK

51

Mehrstufige Seitentabellen ƒ Seitentabellen zu groß – man möchte Seitentabellen nicht im Memory halten ƒ Seitentabellen ins VM legen (oder zweistufige Seitentabellen) IAIK

PT1 10 Bit

PT2 10 Bit

Offset 12 Bit

52

Mehrstufige Seitentabellen ƒ Nicht mehr alle Seitentabellen gleichzeitig im Speicher ƒ … besonders die, die nicht gebraucht werden

IAIK

53

Beispiel ƒ Prozess belegt 12 MB Speicher – 4 Programmcode 4 Daten 4 Stack ƒ 4096 Byte Pagesize – 4 Byte PTE (Page Table Entry) ƒ 4MB pro Seite der Pagetable ƒ Nur vier Seitentabellen! IAIK

54

Seitentabelleneintrag ƒ page table entry (PTE) ƒ maschinenabhängig

IAIK

55

Seitentabelleneintrag ƒ pageframe-number ƒ present-bit ƒ protection ƒ entweder 0: read, 1: read/write ƒ oder zusätzliches Bit für execute

ƒ Modified/Referenced: protokollieren Zugriffe ƒ modified oft dirty bit

ƒ Caching-Bit für Memory-based I/O – dort wichtig, caching abzuschalten ƒ im PTE nur Infos, die von HW benötigt werden – Infos über Auslagerung auf Platte anderswo IAIK

56

Problem ƒ Seitentabellen meist im Speicher ƒ Leistungshemmend ƒ Beispiel: LD R1,#1 ƒ ohne Paging: ein Speicherzugriff ƒ mit Paging: ein Zugriff auf Pagetable

dazu ƒ mehrstufiges paging: noch ein Zugriff ƒ 2/3 Leistungseinbruch IAIK

57

Lokalitätsprinzip ƒ Lokalitätsprinzip ƒ Programme neigen dazu, viele Zugriffe auf wenige Seiten zu machen ƒ Schleifen im Programmcode ƒ Arrays ƒ häufig verwendeter Code

IAIK

58

Lösung ƒ TLB - Translation Lookaside Buffer (Assoziativspeicher) ƒ Teil der MMU, einige wenige Einträge (selten mehr als 64) ƒ Felder aus PTE übernommen

IAIK

59

TLB - Funktionsweise ƒ Virtuelle Adresse an MMU ƒ Hardware prüft ob Eintrag in TLB ƒ Seitennummer mit allen Einträgen

gleichzeitig vergleichen ƒ passender Eintrag und Schutz nicht verletzt: Framenummer verwenden ƒ Schutz verletzt: Schutzfehler

IAIK

60

TLB - Funktionsweise ƒ Was, wenn kein passender Eintrag? ƒ Eintrag aus Pagetable holen und in TLB schreiben ƒ anderer Eintrag in TLB ersetzt – dessen modified-bit in pagetable sichern ƒ alle Felder des PTE in TLB ! IAIK

61

Verwaltung durch SW ƒ Früher: jede Maschine mit virtuellem Speicher und Paging hatte ƒ Seitentabellen, die von HW verwaltet

werden ƒ TLB

ƒ Systemaufrufe nur bei Seitenfehlern IAIK

62

Verwaltung durch SW ƒ Viele RISC-Prozessoren (SPARC, MIPS, Alpha…): fast gesamte Speicherverwaltung in Software ƒ TLB-Einträge durch BS geladen ƒ PTE nicht in TLB ƒ MMU erzeugt TLB-Fehler ƒ Behandlung duch Betriebssystem ƒ … und das möglichst schnell … IAIK

63

Verwaltung durch SW ƒ SW-Verwaltung einigermaßen effizient wenn TLB groß genug Æ reduziert Fehlerrate ƒ Vorteil: MMU einfacher, mehr Platz für Cache und anderes ƒ Problem: bei der Behandlung von TLBFehlern in SW können weitere TLBFehler auftreten ƒ Lösung: großer SW-Cache, dessen PTE‘s immer im TLB bleiben, dort suchen IAIK

64

große Pagetables… ƒ 64-Bit Computer: bei 4KB pagesize pagetable: ƒ 252 Einträge ƒ 8 Byte pro Eintrag Æ30 Millionen Gigabyte

das geht wohl nicht… andere Lösung gefragt… IAIK

65

Invertierte Seitentabelle ƒ ein Eintrag pro Frame! ƒ Tabellengröße abhängig vom physischen Speicher ƒ 64 Bit Adressraum – 256MB Hauptspeicher – 65536 Einträge ƒ Pro Frame: (Prozess, Seitennummer) IAIK

66

Invertierte Seitentabelle ƒ sparen Speicherplatz ƒ wenn virtuelle Adressraum größer als

physischer Speicher ƒ Nachteil: Aufwand der Abbildung höher ƒ virtuelle Seitennummer nicht als Index verwendbar ƒ Suche nach (p,n) nötig – für jeden Speicherzugriff! IAIK

67

Invertierte Seitentabelle ƒ Lösung: TLB! ƒ alle vielbenutzten Seiten im TLB: Umrechnung genauso schnell ƒ TLB-Fehler: invertierte Tabelle per SW durchsucht werden ƒ virtuelle Adresse als Hash-Wert zur Beschleunigung der Suche IAIK

68

Invertierte Seitentabelle

IAIK

69

Seitenersetzungsalgorithmen ƒ Seitenfehler Æ welche Seite muss raus? ƒ wenn die zu ersetzende Seite modifiziert wurde: auf Festplatte zurückschreiben ƒ falls Programmcode: zurückschreiben nicht nötig ƒ nun aber: welche Seite… IAIK

70

Seitenersetzungsalgorithmen ƒ zufällige Seite? ƒ besser Seiten, die nur selten benutzt werden ƒ vielbenutzte müssten bald wieder eingelagert werden ƒ ähnliches Problem auch bei Caches (Memory oder Webserver) IAIK

71

optimal ƒ leicht zu beschreiben, schwer zu implementieren ƒ markiere alle Seiten mit der Anzahl der

Befehle, die bis zum nächsten Zugriff auf diese Seite ausgeführt werden ƒ entferne die Seite mit der höchsten Zahl

ƒ nur leider… ƒ zum Vergleich geeignet IAIK

72

Not Recently Used ƒ wenn wir schon nicht in die Zukunft schauen können… ƒ … können wir aus der Vergangenheit lernen? ƒ wenn eine Seite in der letzten Zeit nicht verwendet wurde… ƒ … wird sie vielleicht auch in der nächsten Zeit nicht gebraucht IAIK

73

Not Recently Used ƒ Statusbits: R – M ƒ werden von der Hardware gesetzt und bei jedem Speicherzugriff aktualisiert ƒ bleibt auf 1 bis von BS zurückgesetzt

R

IAIK

M

74

Not Recently Used ƒ was, wenn die HW das nicht kann? ƒ Alle PTE auf ausgelagert markieren ƒ erster Zugriff auf die Seite erzeugt Seitenfehler Æ BS setzt R-Bit, Schutz auf read-only, führt Befehl noch einmal aus ƒ Schreibzugriff: weiterer Seitenfehler, M-Bit und r/w setzen IAIK

75

Not Recently Used ƒ Prozess gestartet, alle M und RBits auf 0 ƒ regelmäßig: alle R-bits löschen ƒ nur bei kürzlich referenzierten Seiten ist R-Bit gesetzt

IAIK

76

Not Recently Used ƒ Seitenfehler tritt auf ƒ Einteilung der Seiten in vier Kategorien ƒ Klasse 0: nicht ref., nicht modif. ƒ Klasse 1: nicht ref., modif. ƒ Klasse 2: ref., nicht modif. ƒ Klasse 3: referenziert und modifiziert

ƒ NRU entfernt eine zufällige Seite aus der niedrigsten nicht leeren Klasse ƒ Leistung nicht optimal, aber oft ausreichend IAIK

77

FIFO ƒ Liste aller Seiten ƒ am Kopf die älteste Seite ƒ Seitenfehler: ƒ entferne Seite am Kopf der Liste ƒ neue Seite am Ende anhängen

ƒ kann genau die falschen Seiten rauswerfen ƒ selten unverändert eingesetzt IAIK

78

Second Chance ƒ Variante von FIFO ƒ R-Bit gelöscht: seite wählen ƒ R-Bit gesetzt: R-Bit löschen und Seite ans Ende der Liste hängen ƒ sucht nach einer möglichst alten Seite, auf die im letzten Intervall nicht zugegriffen wurde ƒ Im Grenzfall (alle R-Bits gesetzt) FIFO IAIK

79

Second Chance

IAIK

80

Clock ƒ alle Seiten in einer ringförmigen Liste ƒ Zeiger auf älteste ƒ Seitenfehler: ƒ nimm Seite auf

die Zeiger zeigt ƒ Alternativ: R-Bit berücksichtigen Æ Second Chance IAIK

81

Least Recently Used ƒ wenn wir schon nicht in die Zukunft schauen können… ƒ … können wir aus der Vergangenheit lernen? ƒ wenn eine Seite sehr lange nicht mehr verwendet wurde… ƒ … wird sie vielleicht auch in der nächsten Zeit nicht gebraucht IAIK

82

Least Recently Used (LRU) ƒ realisierbar, aber nicht billig ƒ verkettete Liste aller Seiten ƒ bei jedem Zugriff aktualisiert ƒ Approximationen

IAIK

83

Approximation 1 ƒ 64-Bit Zähler ƒ nach jedem Maschinenbefehl erhöht ƒ PTE: Feld für Zähler ƒ Speicherzugriff: speichert Zähler in PTE ƒ Seitenfehler: Liste nach niedrigstem Zähler durchsuchen IAIK

84

Approximation 2 ƒ Matrix aus n*m Bits, anfangs 0 ƒ Zugriff auf Seite k: Bits der Zeile k auf 1, Bits der Spalte k auf 0 ƒ die Zeile mit dem niedrigsten Binärwert ist die am längsten nicht benutzte

IAIK

85

LRU durch Software ƒ LRU ohne Hardware nicht realisierbar ƒ Hardware kaum vorhanden ƒ Softwarelösung: NFU – Not Frequently Used ƒ Zähler pro Seite ƒ Timerinterrupt erhöht den Zähler um R-Bit IAIK

86

NFU ƒ Problem: vergisst nix. Oft verwendete Seiten bleiben erhalten auch wenn nicht mehr benötigt ƒ Modifikation: ƒ vor Addition Rechtsverschiebung ƒ R-Bit beim höchstwertigen Bit

addieren

IAIK

87

Aging

IAIK

88

Aging versus LRU ƒ Unterscheidung innerhalb eines Intervalls nicht möglich ƒ endliche Anzahl von Bits, wenn Zähler 0 dann nicht unterscheidbar ob vor 9 oder vor 1000 Intervallen ƒ 8 bits reichen bei 20msec meist aus IAIK

89

Demand Paging ƒ Starten eines Prozesses… ƒ … wie viele Seiten soll der bekommen? ƒ Eine Strategie: Demand Paging (Einlagern bei Bedarf) ƒ Starten mit 0 Seiten im Hauptspeicher IAIK

90

Demand Paging ƒ Laden des Befehlscodes des ersten Befehls Æ page fault ƒ Weitere Seitenfehler für Stack und Datenbereich ƒ Nach einiger Zeit: alle Seiten eingelagert, die Prozess benötigt ƒ Lokalitätsprinzip macht das machbar! IAIK

91

Working Set ƒ Menge der Seiten, die ein Prozess zu einem bestimmten Zeitpunkt benötigt ƒ Working Set im Speicher Æ keine pagefaults ƒ Verfügbarer Speicher kleiner als working set Æ viele pagefaults ƒ Thrashing (system lagert fast nur mehr ein/aus) IAIK

92

Swapping ƒ Prozesse auslagern – normalerweise auf Festplatte ƒ Oft eigene Partition oder nur große Datei ƒ Idealerweise kontinuierlich auf der Platte – Geschwindigkeit ƒ Auslagern: Nur Daten mit dirty=1 ƒ Programmcode von executable file einlagern IAIK

93

Swapping ƒ Wie gehen wir vor wenn Prozess wieder eingelagert wird? ƒ Eigentlich brauchen wir nichts tun – pagefaults bis working set eingelagert ƒ Kostet aber CPU-Zeit für die Behandlung der pagefaults IAIK

94

Working-Set-Modell ƒ BS merkt sich das working set eines Prozesses ƒ Working set wird vor weiterer Ausführung des Prozesses wieder geladen ƒ prepaging

IAIK

95

Überlegungen zum ws ƒ Speicherzugriffe über Adressraum nicht gleich verteilt – konzentrieren sich auf einige wenige ƒ w(k,t) Menge der Seiten die in den letzten k Speicherzugriffen vor dem Zeitpunkt t referenziert wurden ƒ Monoton steigende Funktion IAIK

96

workingset

IAIK

97

Überlegungen zum ws ƒ Arbeitsbereich eines Prozesses ändert sich nur langsam – Seiten die Prozess nach Einlagern braucht zT vorhersehbar Æ prepaging funktioniert

IAIK

98

Implementierung WS ƒ BS muss wissen, welche Seiten im working set liegen. ƒ Seitenersetzungsalgorithmus: bei pagefault – finde Seite die nicht im working set, und lagere sie aus. ƒ wann ist aber eine Seite nicht im working set? IAIK

99

working set ƒ w(k,t) Menge der Seiten die in den letzten k Speicherzugriffen vor dem Zeitpunkt t referenziert wurden

ƒ Aber wie implementieren? ƒ Schieberegister, bei jedem Speicherzugriff Seitennummer reinschieben? … nicht effizient ƒ Annäherungen möglich ƒ statt „letzte k“ „letzte m msec“ IAIK

100

Approximation ƒ working-set-Zeit relative Prozesszeit ƒ 100 msec absolut, aber nur 20 msec für Prozess – virtuelle Zeit! ƒ workingset: die Menge der Seiten, auf die der Prozess in den letzten τ msec virtueller Zeit zugegriffen hat IAIK

101

Approximation ƒ Hardware muss R/M setzen ƒ periodisch: R bits gelöscht ƒ bei Seitenfehler ƒ alle PTE‘s durchsuchen ƒ R-Bit == 1? ƒ aktuelle virtuelle Zeit in Feld für Zeit des letzten Zugriffs eintragen ƒ Seite liegt im Arbeitsbereich IAIK

102

Approximation ƒ R-Bit == 0

ƒ Seite seit letzter Unterbrechung nicht

verwendet Æ Kandidat für Auslagerung ƒ Alter bestimmen: gespeicherte Zeit – aktueller virtueller Zeit ƒ ƒ

zu alt: aus workingset nehmen „zu jung“: meist verschonen. Nur wenn alle Seiten im Arbeitsbereich, älteste auslagern

ƒ Rest der Tabelle durchlaufen um

Zugriffszeiten zu aktualisieren

ƒ Alle R-Bits = 1? Pech. Irgendeine nehmen… IAIK

103

Approximation

IAIK

104

WSClock ƒ einfacher Algorithmus umständlich ƒ durchläuft pagetable bei jedem

pagefault bis Kandidat gefunden

ƒ Kombination aus Clock und Workingset: WSClock ƒ in realen Systemen weit verbreitet ƒ Wie Clock ringförmige Liste IAIK

105

WSClock

IAIK

106

WSClock ƒ Untersuche Seite auf die Zeiger zeigt ƒ R=1 Æ kein idealer Kandidat ƒ R Å 0 ƒ Zeiger vorrücken ƒ continue

IAIK

107

WSCLock ƒ R=0 ƒ Alter > T Æ nicht im Workingset ƒ M=0 Æ Seite kann freigegeben werden ƒ M=1 Æ vormerken, dass Seite auf Platte geschrieben werden muss. Aber weitersuchen, um Prozesswechsel zu vermeiden

IAIK

108

WSCLock ƒ Wieder am Anfang? ƒ es wurde eine Seite vorgemerkt ƒ weiterlaufen, irgendwann wird vorgemerkte im Hintergrund zurückgeschrieben ƒ es wurde keine Seite vorgemerkt ƒ alle Seiten im Arbeitsbereich Æ irgendeine Seite auslagern (am besten irgendeine saubere Seite merken, dann gibt’s die jetzt schon). IAIK

109

Zusammenfassung

IAIK

110

Modellierung ƒ FIFO 012301401234 neueste Seite

012301444233 01230111422

älteste Seite

0123000144 PPPPPPP

IAIK

PP

111

Keller-Algorithmen ƒ Jeder Prozess erzeugt Folge von Speicherzugriffen auf virtuelle Seiten ƒ Speicherzugriffe als Liste von Seitennummern darstellbar ƒ Referenzkette – reference string IAIK

Modellierung ƒ FIFO 012301401234 neueste Seite

012301444233 01230111422

älteste Seite

0123000144 PPPPPPP

PP

IAIK

112

Annahmen ƒ ein Rechner ƒ ein Prozess ƒ eine deterministische Referenzkette pro Rechner ƒ Paging-System charakterisiert durch ƒ Seitenersetzungsalgorithmus ƒ Anzahl m der physischen Seitenrahmen ƒ Referenzkette des Prozesses

IAIK

113

Simulation über Interpreter ƒ enthält interne Tabelle M – repräsentiert Zustand des Speichers ƒ M hat n Einträge, einen pro virtuelle Seite des Prozesses ƒ M hat zwei Teile ƒ oberer Teil, m Einträge: Seiten, die im

Speicher liegen ƒ unterer Teil, n-m Einträge: Seiten, die ausgelagert wurden

ƒ M zu Beginn leer IAIK

114

Prozess-Start ƒ Prozess gibt Seiten seiner Referenzkette aus. ƒ Interpreter prüft, ob Seite im Speicher. Wenn nicht – Seitenfehler. ƒ falls leerer Seitenrahmen vorhanden: dort laden (nur zu Beginn möglich) IAIK

115

Speicher voll ƒ voll: oberer Teil von M enthält m Einträge ƒ Seitenersetzungsalgorithmus aufrufen, entfernt Seite aus Speicher Æ verschieben in unteren Teil ƒ neue Seite laden oder von unteren in oberen verschieben IAIK

116

Beispiel 021 021 02 0

3 3 1 2 0

5 5 3 1 2 0

4 4 5 3 1 2 0

6 6 4 5 3 1 2 0

P P P P P P P IAIK

3 3 6 4 5 1 2 0

7 7 3 6 4 5 1 2 0 P

4 4 7 3 6 5 1 2 0

7 7 4 3 6 5 1 2 0

3 3 7 4 6 5 1 2 0

3 3 7 4 6 5 1 2 0

5 5 3 7 4 6 1 2 0 P

5 5 3 7 4 6 1 2 0

3 3 5 7 4 6 1 2 0

1 1 3 5 7 4 6 2 0 P

1 1 3 5 7 4 6 2 0

1 1 3 5 7 4 6 2 0

7 7 1 3 5 4 6 2 0

1 1 7 3 5 4 6 2 0

3 3 1 7 5 4 6 2 0

4 4 3 1 7 5 6 2 0 P

1 1 4 3 7 5 6 2 0

117

Modellierung ƒ FIFO 012301401234 neueste Seite

012301444233 01230111422

älteste Seite

0123000144 PPPPPPP

IAIK

PP

118

FIFO – 4 Frames 0

1

2

3

0

1

4

0

1

2

3

4

0

1

2

3

3

3

4

0

1

2

3

4

0

1

2

2

2

3

4

0

1

2

3

0

1

1

1

2

3

4

0

1

2

0

0

0

1

2

3

4

0

1

P

P

P

P

P

P

P IAIK

P

P

P

119

Algorithmen ƒ Algorithmen mit der Eigenschaft

M (m, r ) ⊆ M (m + 1, r ) sind besonders interessant… ƒ nach r Speicherzugriffen ist der obere Teil von M für einen Speicher von m Seiten Teilmenge des oberen Teils von M Speichers von m+1 Seiten IAIK

120

Kelleralgorithmen – stack-algorithms ƒ Algorithmen mit der Eigenschaft M (m, r ) ⊆ M (m + 1, r )

heißen Kelleralgorithmen. ƒ LRU ist ein Kelleralgorithmus ƒ FIFO nicht ƒ Keller-Algorithmen sind nicht für Beladys Anomalie anfällig

IAIK

121

Distanzkette ƒ Repräsentation der Referenzkette in abstrakterer Form zur Evaluierung der Verfahren ƒ Seitenbezeichnung durch Abstand der Seite vom oberen Ende des Stack ƒ Seiten, auf die noch nicht zugegriffen wurde: Abstand ∞ IAIK

122

Distanzkette 021 021 02 0

4 4 7 3 6 5 1 2 0 ∞∞∞∞∞∞∞4 ∞4

IAIK

3 3 1 2 0

5 5 3 1 2 0

4 4 5 3 1 2 0

6 6 4 5 3 1 2 0

3 3 6 4 5 1 2 0

7 7 3 6 4 5 1 2 0

7 7 4 3 6 5 1 2 0 2

3 3 7 4 6 5 1 2 0 3

3 3 7 4 6 5 1 2 0 1

5 5 3 7 4 6 1 2 0 5

5 5 3 7 4 6 1 2 0 1

3 3 5 7 4 6 1 2 0 2

1 1 3 5 7 4 6 2 0 6

1 1 3 5 7 4 6 2 0 1

1 1 3 5 7 4 6 2 0 1

7 7 1 3 5 4 6 2 0 4

1 1 7 3 5 4 6 2 0 2

3 3 1 7 5 4 6 2 0 3

4 4 3 1 7 5 6 2 0 5

1 1 4 3 7 5 6 2 0 3 123

Distanzkette ƒ hängt ab von ƒ Referenzkette ƒ Seitenersetzungsalgorithmus

ƒ statistische Eigenschaften der Distanzkette beeinflussen Leistungsfähigkeit des Algorithmus

IAIK

124

Distanzkette

wenige Seitenfehler bei k Seitenrahmen

IAIK

„Pech gehabt“ – keine Anzahl an Frames passt (außer n) 125

Seitenfehlerrate vorhersagen ƒ mit Hilfe der Distanzkette möglich ƒ Ziel: einmal Distanzkette durchlaufen und mit den gesammelten Infos vorhersagen, wie viele Seitenfehler bei k Frames vorkommen (k=1…n)

IAIK

126

Algorithmus ƒ durchläuft Distanzkette

C1 C2 ƒ zählt Abstände C3 C4 ∞∞ ∞∞ ∞ ∞∞ 4 ∞ 4 2 3 1 5 1 2 6 1 1 4 2 3 5 3 C5 C6 C∞ IAIK

4 3 3 3 2 1 8 127

Algorithmus

Fm =

n

∑C

k = m +1

k

+ C∞

Fm = Anzahl der Seitenfehler für gegebene Distanzkette und m Seitenrahmen IAIK

C1 C2 C3 C4 C5 C6 C∞

4 3 3 3 2 1 8

F1 F2 F3 F4 F5 F6 F∞

20 17 14 11 9 8 8 128

Design-Kriterien ƒ Bisher: Mechanik ƒ wie funktioniert Paging ƒ welche Algorithmen für

Seitenersetzung gibt es ƒ wie modelliert man diese

ƒ reicht nicht ƒ jetzt: was ist für ein leistungsstarkes System nötig? IAIK

129

Lokal – Global ? ƒ A erzeugt pagefault ƒ Welche Seiten für Ersetzung in Betracht ziehen? ƒ Nur die von A – lokale Strategie ? ƒ Alle – globale Strategie? IAIK

130

Lokal - Global ƒ lokal: fester Speicherbereich pro Prozess ƒ global: dynamische Verteilung, Anzahl der Frames eines Prozesses variabel

IAIK

131

Lokal - Global ƒ Im Allgemeinen: global Strategien besser – besonders wenn sich die Größe des Workingset ändert ƒ Speicherbedarf wächst – thrashing (obwohl Seiten „woanders“ verfügbar) ƒ Speicherbedarf schrumpft – Seiten verschwendet IAIK

132

Lokal - Global ƒ manche Seitenersetzungsalgorithmen für lokale und globale Strategien anwendbar (FIFO, LRU) ƒ andere nicht (Workingset, WSClock)

IAIK

133

Global ƒ Globale Strategie entscheidet ständig über die Anzahl der Seitenrahmen ƒ Möglichkeiten: ƒ Aging-Bits – eventuell zu grob ƒ Frames zu gleichen Teilen auf alle

Prozesse (regelmäßig anpassen) – nicht sinnvoll, wenn Prozesse unterschiedlich groß

IAIK

134

Global ƒ Im Verhältnis zur Prozessgröße? ƒ Minimum kann notwendig sein (Befehl könnte bis zu 6 Seiten im Speicher benötigen) ƒ Starten mit Seitenzahl im Verhältnis zur Größe, danach dynamische Anpassung IAIK

135

PFF-Algorithmus ƒ Page-Fault-Frequency Algorithmus ƒ bestimmt nur, wie viel Speicher ein Prozess bekommt ƒ Pagefault-Rate indirekt-proportional zur Speichergröße

IAIK

136

PFF-Algorithmus

IAIK

137

PFF-Algorithmus ƒ zu hohe Seitenfehlerrate: mehr Speicher zuteilen ƒ zu niedrige Seitenfehlerrate: Speicher wegnehmen

IAIK

138

Laststeuerung ƒ wenn working-set aller Prozesse größer als Hauptspeicher - es wird immer zu viele Seitenfehler geben! ƒ PFF-Algorithmus könnte das anzeigen: mehrere zu wenig, keiner zu viel ƒ Lösung: Prozesse auslagern IAIK

139

Laststeuerung ƒ Wenn danach die Fehlerrate sinkt – ok ƒ sonst: noch einen auslagern – bis sich Erfolg einstellt ƒ Swapping also auch bei pagingsystemen sinnvoll! ƒ Kann auch wichtig sein, welche Prozesse man auslagert IAIK

140

Seitengröße ƒ Oft einstellbarer Parameter ƒ keine optimale Lösung ƒ große Seiten – mehr interne Fragmentierung: wieviele Bytes bleiben in Seitenrahmen ungenutzt? ƒ kleine Seiten: viele Seiten, große Seitentabellen, mehr Verwaltung, Transfer kleiner Seiten dauert fast gleich lange wie großer Seiten IAIK

141

Seitengröße ƒ Platzverbrauch kann mathematisch analysiert werden ƒ Durchschnittliche Prozessgröße s ƒ Seitengröße p, PTE e Bytes, s/p-Seiten ƒ Speicherverbrauch für Seitentabelle und

Fragmentierung V=se/p+p/2 ƒ Optimum wenn -se/p2+1/2 = 0

p = 2 se IAIK

142

Seitengröße ƒ s=1MB ƒ e=8 Byte ƒ optimale Seitengröße 4KB ƒ übliche Seitengrößen heute 4 oder 8 KB

IAIK

143

getrennte Programm- und Datenbereiche

IAIK

144

Gemeinsame Seiten shared pages ƒ mehrere Benutzer benutzen das gleiche Programm ƒ Effizienter, Seiten gemeinsam zu nutzen ƒ geht aber nur für Code, nicht für Daten!

IAIK

145

Gemeinsame Seiten ƒ getrennte Adressräume für Code und Daten – gemeinsamen Adressraum für Code, getrennten für Daten

IAIK

146

Gemeinsame Seiten ƒ Betriebssystem muss gemeinsame Seiten berücksichtigen ƒ Auslagern von einem Prozess –

zweiter Prozess lagert wieder alle ein? ƒ Beenden eines Prozesses – Seiten müssen eventuell erhalten bleiben

IAIK

147

Gemeinsame Seiten ƒ Daten gemeinsam zu benutzen etwas komplizierter ƒ zB nach UNIX-fork ƒ Beide lesen: kein Problem ƒ Schreiben: ƒ Seiten auf R/O setzen ƒ Schreibzugriff: Seite kopieren – jeder Prozess eigene Kopie und auf R/W setzen ƒ copy-on-write ƒ Seiten die nie beschrieben werden, müssen nicht kopiert werden IAIK

148

Freigabe-Strategien ƒ Paging funktioniert am besten wenn genügend Seitenrahmen frei ƒ Wenn alle Pageframes voll sind und einer gebraucht wird – unangenehm. ƒ Eventuell muss freizumachende Seite noch zurückgeschrieben werden. Das dauert! IAIK

149

Freigabe-Strategien ƒ Daher: Vorbeugen ƒ Paging-Daemon ƒ meist inaktiv ƒ wacht regelmäßig auf und prüft

Speicherzustand ƒ nicht genug freie Rahmen Æ wählt Seiten aus und beginnt sie auszulagern IAIK

150

Paging-Daemon ƒ Inhalt der Seiten bleibt erhalten Æ falls doch noch benötigt, ist nichts verloren ƒ Bei einem Pagefault ist dann immer ein freier Rahmen verfügbar Æ Performancesteigerung

IAIK

151

Implementierungsprobleme ƒ Auswahl der Strategien ist eine Sache ƒ praktische Probleme bei der Implementierung eine andere

IAIK

152

Betriebssystemaufgaben bei Paging ƒ vier Punkte wo das BS Arbeit leisten muss ƒ Erzeugung des Prozesses ƒ Ausführung des Prozesses ƒ Seitenfehler ƒ Terminierung des Prozesses

IAIK

153

Erzeugung des Prozesses ƒ Größe des Programmcodes und der Daten feststellen ƒ Seitentabelle für Prozess erzeugen ƒ Speicher zuteilen und initialisieren ƒ Platz für ausgelagerte Seiten auf der Platte reservieren ƒ ev. Swapping-Bereich mit Code und Daten initialisieren IAIK

154

Ausführung des Prozesses ƒ MMU auf neuen Prozess einstellen ƒ TLB leeren ƒ aktuelle Seitentabelle auf Tabelle des Neuen Prozesses setzen ƒ eventuell prepaging

IAIK

155

Seitenfehler ƒ Hardware-Register auslesen um festzustellen, welche Adresse Fehler verursacht hat ƒ finden der benötigten Seite ƒ freien Seitenrahmen suchen ƒ eventuell alte Seite auslagern ƒ neue Seite einlesen ƒ Programmzähler auf Befehl zurücksetzen, der den Seitenfehler verursacht hat IAIK

156

Terminierung des Prozesses ƒ Seitentabelle, Seitenrahmen und Plattenplatz freigeben ƒ gemeinsam benutzte nur, wenn der letzte Prozess terminiert

IAIK

157

Behandlung von Seitenfehlern 1. Hardware PCÆ Stack, Sprung in Kernel 2. Interrupt-Serviceroutine sichern von Registern und anderer Informationen 3. OS welche virtuelle Adresse hat Fehler ausgelöst? HW-Register, oder Befehl interpretieren! IAIK

158

Behandlung von Seitenfehlern 4. Prüfen der Adresse auf Gültigkeit Schutzverletzung Æ Abbruch sonst: freien Seitenrahmen finden. keiner da? Ersetzungsalgorithmus starten. 5. Seitenrahmen modifiziert Æ Seite auf Platte schreiben lassen, Prozess suspendieren und anderen laufen lassen. Seitenrahmen als belegt markieren! IAIK

159

Behandlung von Seitenfehlern 6. Wenn Seitenrahmen sauber: laden der Seite von Platte. Prozess bleibt oder wird suspendiert. 7. Seite angekommen (Interrupt durch Festplatte): Seitentabelle anpassen. Seitenrahmen als „normal“ markieren IAIK

160

Behandlung von Seitenfehlern 8. Befehl der Unterbrechung verursacht hat, in den Anfangszustand versetzen und PC mit Adresse dieses Befehls laden 9. Prozess zur Ausführung auswählen; zurück in Assemblerroutine 10.Wiederherstellen der Register und des Zustandes und Wechsel in BenutzerModus IAIK

161

Befehlsunterbrechung ƒ Bei Pagefaults: Befehl „mittendrin“ unterbrochen, Sprung ins BS ƒ Nach Laden der Seite muss Befehl neu gestartet werden ƒ Das klingt einfacher als es ist.

IAIK

162

Ein Beispiel MOVE.L #6(A1),#2(A0) ƒ Befehl mit zwei Adressen ƒ Ladet ein Datum vom Typ Long von A von M[A1+6] auf M[A0+2] ƒ Befehl selbst ist 6 Byte lang

IAIK

163

Ein Beispiel

IAIK

164

Ein Beispiel ƒ Pagefault ƒ Befehl neu starten: was ist das erste Byte des Befehls? ƒ Wert des PC abhängig vom Operanden und der Implementierung im Microcode der CPU ƒ PC: 1000, 1002, 1004 IAIK

165

Ein Beispiel ƒ Noch schlimmer: ƒ Adressierungsmodi mit Predecrement ƒ MOVEM.L D0-D3/D6/D7,A0-A5,-(SP)

ƒ D0ÆSP-4 ƒ D1ÆSP-8 ƒ D2ÆSP-12 ƒ… IAIK

166

Was tun? ƒ Hilfe durch HW nötig ƒ Info über Originalwert des PC/Register ƒ Instruktion an der unterbrochenen Stelle fortführbar

IAIK

167

Sperren von Seiten ƒ Prozess fordert I/O-Operation an ƒ Beispiel: lesen in Puffer ƒ Prozess wird suspendiert ƒ Andere Prozesse erzeugen pagefaults ƒ Seite des Puffers könnte ersetzt werden ƒ DMA-Transfer in falschen Speicher ƒ Seite muss daher gesperrt werden (pinning) oder über Kernel transferiert IAIK

168

Hintergrundspeicher ƒ Auslagern – fein. Aber wohin? ƒ Einrichtung eines speziellen SwapBereichs ƒ Eigene Partition auf Festplatte ƒ Spezieller File im Filesystem

ƒ Jeder Prozess bekommt Block seiner Größe IAIK

169

Hintergrundspeicher ƒ Prozesstabelle enthält Plattenadresse des Swap-Bereichs ƒ Berechnung einfach: Addition ƒ Initialisierung: entweder gesamtes Image laden und auf Swap schreiben oder nach Bedarf auslagern IAIK

170

Hintergrundspeicher ƒ Problem: dynamischer Speicher ƒ Alternative: nichts reservieren, und für jede Seite eigenen Block anfordern ƒ Mehr Verwaltungsaufwand

IAIK

171

Hintergrundspeicher

IAIK

172

Segmentierung ƒ Virtueller Speicher bisher eindimensional ƒ Alle Adressen zwischen 0 und max

ƒ Oft Trennung in mehrere Adressräume nützlich

IAIK

173

Beispiel Compiler ƒ Braucht diverse Datenbereiche ƒ Quellcode ƒ Symboltabelle ƒ Tabelle für Konstanten

Wachsen ständig!

ƒ Strukturbaum ƒ Stack

IAIK

174

Eindimensional

IAIK

175

Lösung? ƒ Abbruch wenn Bereich zu klein ƒ Nicht elegant

ƒ Reallocation ƒ Mühsam

ƒ Besser: mehrere Adressräume ƒ Segmente

IAIK

176

Segment ƒ Lineare Folge von Adressen (0..max) ƒ Verschieden groß ƒ Größe kann sich unabhängig von anderen Segmenten ändern ƒ Adresse hat zwei Teile: Segmentnummer, Adresse im Segment

IAIK

177

Beispiel

IAIK

178

Hinweise ƒ Segment ist logische Einheit ƒ Programmierer berücksichtigt es ƒ Schutzmaßnahmen auf Segmentbasis ƒ Jede Prozedur in eigenes Segment: Linken wird stark vereinfacht ƒ Startadresse jeder Prozedur:

(Segmentnummer,0)

IAIK

179

Shared Libraries ƒ Gemeinsame Bibliotheken ƒ Viele Routinen die von fast allen Programmen benötigt werden ƒ Gemeinsame Nutzung spart Platz ƒ Library in ein Segment laden, kann von allen gemeinsam genutzt werden IAIK

180

Vergleich Paging/Segmentierung

IAIK

181

Implementierung ƒ Wichtiger Unterschied: ƒ Seiten haben fixe Größe ƒ Segmente nicht!

IAIK

182

Segmentierung mit Paging ƒ Kombination nutzt Vorteile beider Systeme ƒ MULTICS war das erste System ƒ Jedes Programm bis zu 218 Segmente a 65536 Worte (36 Bit) ƒ Jedes Segment war virtueller Speicher IAIK

183

VM-MULTICS ƒ Segmenttabelle, bis zu 250.000 Einträge Æ selbst Segment und kann ausgelagert werden ƒ Segmenddeskriptor zeigt an ob Segment ausgelagert oder nicht ƒ Teil des Segments im Speicher: gilt als Segment im Speicher und seine pagetable auch ƒ Deskriptor hat Zeiger auf pagetable IAIK

184

VM-MULTICS

IAIK

185

Adressen in MULTICS

IAIK

186

Speicherzugriff MULTICS ƒ Laden des Segmentdeskriptors ƒ Ist pagetable im Speicher. ƒ Nein: Segmentfehler

ƒ Pagetable untersuchen ƒ Eventuell pagefault

ƒ Offset dazu ƒ Speicherzugriff IAIK

187

Speicherzugriff MULTICS

IAIK

188

Geschwindigkeit ƒ MULTICS-HW hatte 16 Einträge großen TLB

IAIK

189

MULTICS ƒ … vor etwa 30 Jahren entstanden ƒ Viele wegweisende Ansätze ƒ Letzter Systemshutdown 31.10.2000 ! ƒ www.multicians.org

IAIK

190

Intel Pentium ƒ Virtueller Speicher ähnlich MULTICS ƒ Segmentierung und Paging ƒ 16K Segmente, bis zu einer Milliarde 32bit-Worte ƒ Größe wichtiger: öfter große Segmente und selten sehr viele IAIK

191

LDT - GDT ƒ Local Descriptor Table ƒ Für jedes Programm ƒ Lokale Segmente (u.a. Code, Daten,

Stack)

ƒ Global Descriptor Table ƒ Systemsegmente ƒ Darunter das Betriebssystem

IAIK

192

Segmentregister ƒ Sechs Segmentregister ƒ CS: Selektor für Code Segment ƒ DS: Selektor für Datensegment

ƒ Selektor

IAIK

193

Segmentregister ƒ Selektor 0 verboten – bedeutet: nicht verfügbar ƒ Selektor in Segmentregister: Deskriptor aus LDT oder GDT in internen Register gespeichert

IAIK

194

Deskriptor

IAIK

195

Adressumsetzung (Selektor, Offset) ƒ Mikroprogramm findet passenden Deskriptor in internen Registern ƒ Selektor 0 oder ausgelagert: Interrupt ƒ Offset überschreitet Segmentgröße: Interrupt IAIK

196

Adressumsetzung ƒ Limit: 20 Bit ƒ G bestimmt Granularität ƒ 0: Limit in Byte ƒ 1: Limit in Seiten

ƒ Addiert Basisfeld zum Offset ƒ Ergebnis 32 Bit lineare Adresse ƒ Paging abgeschaltet: lineare Adresse = physische Adresse IAIK

197

Segmentierung

IAIK

198

Paging ƒ Paging enabled: lineare Adresse ist virtuelle Adresse ƒ Über pagetables in physische Adresse abbilden ƒ Fixe Seitengröße 4KB Æ eine Million Seiten Æ zweistufige Seitentabellen IAIK

199

Paging

IAIK

200

Paging ƒ Seitenverzeichnis oder Page Directory ƒ 1024 32bit-Einträge ƒ Adresse in globalen Register ƒ Jeder Eintrag zeigt auf eine Seitentabelle mit 1024 Einträgen

IAIK

201

Paging ƒ TLB vorhanden ƒ Ein Selektor in alle Segmentregister: Ergebnis ist normales Paging ƒ Ist bei allen gängigen Betriebssystemen der Fall ƒ Nur OS/2 hat Features des Pentium voll ausgenutzt IAIK

202

Speicherschutz ƒ Vier Schutzebenen ƒ Zugriff auf Daten höherer Ebene legal ƒ Zugriff auf Daten niedrigerer Ebene Æ Schutzverletzung ƒ Aufruf einer Prozedur nur über Call Gates IAIK

203

Speicherschutz ƒ Konzept der Schutzringe an MULTICS angelehnt ƒ Zugriffe auf höhere Ebene ok ƒ Aufrufe auf niedrigere Ebenen über Call-Gates IAIK

204