Hauptspeicherverwaltung - Www I6 Informatik Rwth Aachen
Hauptspeicherverwaltung - Www I6 Informatik Rwth Aachen
Hauptspeicherverwaltung - Www I6 Informatik Rwth Aachen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Contents<br />
7 <strong>Hauptspeicherverwaltung</strong> (Main Memory)<br />
7.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . 255<br />
7.1.1 Speicherhierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255<br />
7.1.2 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259<br />
7.1.3 Adressenbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262<br />
7.1.4 Logische vs. physikalische Adressen . . . . . . . . . . . . . . . . . . . . . . 264<br />
7.1.5 Dynamisches Laden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267<br />
7.1.6 Dynamisches Linken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268<br />
7.1.7 Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269<br />
7.2 Swapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270<br />
7.3 Zusammenhängende Speicherbelegung . . . . . . . . . . . . 273<br />
7.3.1 Memory Mapping and Protection . . . . . . . . . . . . . . . . . . . . . . . . 274<br />
7.3.2 Speicherbelegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276<br />
7.3.3 Fragmentierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287<br />
7.4 Buddy-Systeme . . . . . . . . . . . . . . . . . . . . . . . . . 288<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
253
7.5 Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292<br />
7.5.1 Prinzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292<br />
7.5.2 Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302<br />
7.5.3 Shared Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305<br />
7.5.4 Hardware und TLB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307<br />
7.6 Struktur der Page Table . . . . . . . . . . . . . . . . . . . . . 312<br />
7.6.1 Hierarchical Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312<br />
7.6.2 Hashed Page Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318<br />
7.6.3 Inverted Page Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320<br />
7.7 Segmentierung . . . . . . . . . . . . . . . . . . . . . . . . . . 322<br />
7.8 Beispiel: Intel Pentium . . . . . . . . . . . . . . . . . . . . . . 329<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
254
7.1 Grundlagen<br />
7.1.1 Speicherhierarchie<br />
• Der Hauptspeicher in Verbindung mit der Festplatte kann selbst<br />
als Ressource betrachtet werden, die vom OS verwaltet wird.<br />
• Ziel ist es, einen guten Kompromiß zwischen Kosten und<br />
Leistung (= Zeit + Größe) zu erreichen.<br />
• Der Hauptspeicher sieht nur die Folge der Speicherreferenzen,<br />
unabhängig von der Art der Adressierung.<br />
Wiederholung: Darstellung der Speicherhierarchie<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
255
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
256
CPU-Auslastung und Multiprogramming:<br />
CPU utilization and multiprogramming<br />
• probabilistisches Modell:<br />
– CPU-Auslastung wird durch I/O behindert<br />
– Wahrscheinlichkeit, daß 1 Prozeß auf I/O wartet: ϑ<br />
– Wahrscheinlichkeit, daß alle n Prozesse warten: ϑ n<br />
• Ergebnis:<br />
CPU-Auslastung = 1 − ϑn (siehe Darstellung im nächsten Bild)<br />
• typische Situation (interaktive Prozesse):<br />
– ϑ = 0.80<br />
– n = 10 Prozesse müssen im Hauptspeicher sein,<br />
damit die CPU-Auslastung bei 90% liegt<br />
Beachte die Näherung:<br />
– Modell: Berechnung basiert auf unabhängigen Prozessen<br />
– Wirklichkeit: zu jedem Zeitpukt kann nur 1 Prozeß die CPU benutzen<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
257
CPU utilization (in percent)<br />
100<br />
80<br />
60<br />
40<br />
20<br />
0<br />
CPU utilization and multiprogramming<br />
20% I/O wait<br />
50% I/O wait<br />
80% I/O wait<br />
1 2 3 4 5 6 7 8 9 10<br />
Degree of multiprogramming<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
258
7.1.2 Hardware<br />
CPU und Speicherzugriffe:<br />
• Cache: extrem schneller Speicher zwischen CPU und Hauptspeicher,<br />
um ’langsamem’ Hauptspeicher entgegenzuwirken.<br />
• legale oder gültige Adressen:<br />
– jeder Prozeß hat eigenen Speicherbereich<br />
– Hardware: base register und limit register<br />
– Vergleich erfolgt bei jedem Speicherzugriff<br />
• OS verwaltet diese beiden Register:<br />
– Schutz der Speicherbereiche der anderen Prozesse<br />
– Schutz des OS-Speicherbereichs<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
259
Definition of logic address space using base and limit registers<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
260
HW address protection with base and limit registers<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
261
7.1.3 Adressenbindung<br />
Erstellung des ausführbaren Codes erfolgt in mehreren Schritten.<br />
Adressen können zu verschiedenen Zeiten und in verschiedenen<br />
Varianten festgelegt werden:<br />
• Compilierzeit (compile time):<br />
– ’absolute code’: Startaddresse muß bekannt sein<br />
– ’relocatable code’: Adressen relativ zur Startadresse<br />
• Ladezeit (load time):<br />
– ’relocatable code’: absolute Adressen werden jetzt festgelegt<br />
• Laufzeit (execution or run time):<br />
– Speicherbereich kann sich während der Laufzeit ändern<br />
– Hardware erforderlich: MMU (memory management unit)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
262
Multistep Processing of a User Program<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
263
7.1.4 Logische vs. physikalische Adressen<br />
Unterscheide zwei Arten von Adressen:<br />
• logische oder virtuelle Adressen:<br />
Adreßraum der CPU<br />
= Adreßraum des Programms<br />
• physikalische Adresse:<br />
reale Adresse des (physikalischen) Hauptspeichers<br />
• Memory Management Unit (MMU):<br />
– setzt die logischen in physikalische Adressen um<br />
– einfachste Form: relocation register = base register<br />
– typische Form: Paging (und/oder Segmentierung)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
264
Relocation register and logical vs. physical addresses<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
265
CPU<br />
Memory mangagement unit (MMU) and its function<br />
CPU<br />
package<br />
The MMU sends physical<br />
addresses to the memory<br />
The CPU sends virtual<br />
addresses to the MMU<br />
Memory<br />
management<br />
unit<br />
Memory<br />
Disk<br />
controller<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
266<br />
Bus
7.1.5 Dynamisches Laden<br />
Motivation:<br />
– gesamtes Programm im Hauptspeicher<br />
– Aufteilung des Programms zur besseren Nutzung des Hauptspeichers<br />
Dynamisches Laden (dynamic loading):<br />
• Prinzip:<br />
eine Routine wird erst zum Zeitpunkt des Aufrufs geladen<br />
• Festplatte: Routinen in ’relocatable’ Format<br />
• Ablauf:<br />
– aufrufendes Programm prüft, ob Routine schon geladen ist<br />
– gegebenenfalls Aufruf der entsprechenden Lade-Routine<br />
• Vorteil:<br />
– Routinen werden nur bei Bedarf geladen<br />
– gegeignet für Routinen für Fehlerbehandlung und (seltene) Sonderfälle<br />
• Verantwortlichkeit:<br />
liegt beim Programmierer<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
267
7.1.6 Dynamisches Linken<br />
Dynamisches Linken (dynamic linking):<br />
• Prinzip (ähnlich zu dynamischem Laden):<br />
der Link-Vorgang wird aufgeschoben bis zur Laufzeit<br />
• typische Anwendung:<br />
Routinen, die von mehreren Prozessen benötigt werden<br />
(z.B. system and language subroutine libraries)<br />
• Vorteile:<br />
– Speicherplatz (Hauptspeicher und Festplatte) wird nur einmal benötigt<br />
– library updates: kein neuer Link-Vorgang nötig<br />
• Realisierung:<br />
– ’stub’: kurzer Code am Anfang jedes ’image’ einer library routine<br />
– lokalisiert die library routine im Hauptspeicher oder lädt sie bei Bedarf<br />
• Mitwirkung des OS bei ’memory protection’:<br />
mehrere Prozesse benutzen denselben Speicherbereich<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
268
7.1.7 Overlays<br />
Overlay-Technik (nicht mehr benutzt):<br />
• Es gibt Teile des Programms, die niemals gleichzeitig<br />
im Hauptspeicher benötigt werden.<br />
• Diesen Teilen wird derselbe Adreßbereich zugeordnet,<br />
d.h. sie werden ‘übereinandergelegt’.<br />
• Entwurf dieser Overlay-Struktur erfolgt durch den Programmierer.<br />
• Problem: mühsam und fehleranfällig<br />
Erweiterung dieses Konzepts:<br />
virtueller Speicher, bei dem die Verwaltung vom OS übernommen wird<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
269
7.2 Swapping<br />
Swapping:<br />
• Prozeßauslagerung vom Hauptspeicher auf Hintergrundspeicher (backing store)<br />
oder Festplatte (hard disk) und umgekehrt.<br />
• Multiprogramming erfordert Swapping, da nicht alle Prozesse<br />
gleichzeitig im Hauptspeicher gehalten werden können.<br />
Swapping kostet Zeit:<br />
• (head) seek time: 0 msec (hier; sonst typisch: 15 msec)<br />
• (rotational) latency time: 8 msec<br />
• transfer time: 40 MByte/sec<br />
Prozeß mit 10 MByte: 2 · 258 msec (1 GByte: 2 · 25 sec!)<br />
(Faktor 2: ein- und ausladen)<br />
Konsequenz:<br />
• Prozeßwechsel soll zwischen Prozessen stattfinden,<br />
die bereits im Hauptspeicher sind.<br />
• deswegen: mehrere Prozesse gleichzeitig im Hauptspeicher<br />
• Aufgabe der Speicherbelegung<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
270
Swapping and backing store (hard disk)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
271
Swapping und I/O-Operationen:<br />
Swapping: Einzelheiten<br />
• Methode A: Prozeß, der I/O ausführt (ohne CPU!),<br />
darf nicht ausgelagert werden.<br />
• Methode B: I/O erfolgt in 2 Schritten:<br />
a) zwischen I/O-Gerät und OS-Speicherpuffer<br />
b) zwischen OS-Speicherpuffer und Prozeß-Speicherbereich<br />
Varianten des Swappings:<br />
• standard swapping: nicht mehr weit verbreitet,<br />
weil Swapping-Zeit zu groß ist im Vergleich zur Bearbeitungszeit<br />
• weitere Varianten:<br />
– UNIX: nur falls zuviele Prozesse laufen und Memory knapp wird<br />
– MS Windows (Version 3.1): Steuerung durch den Benutzer<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
272
7.3 Zusammenhängende Speicherbelegung<br />
• einfachste Form der Speicherbelegung:<br />
(bisher mehr oder weniger vorausgesetzt):<br />
– jeder Prozeß hat einen zusammenhängenden Bereich im Hauptspeicher<br />
– gilt für OS und Benutzerprozesse<br />
• Hardware (meistens):<br />
Interrupt-Vektoren im niedrigen Adreßbereich<br />
(verweist auf die Addresse der Interrupt-Service-Routine)<br />
• deswegen meistens:<br />
OS ebenfalls im unteren Adreßbereich<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
273
7.3.1 Memory Mapping and Protection<br />
Verwendung der ’relocation-’ und ’limit-’Register:<br />
• Prozeß (nach Auswahl durch CPU-Scheduler und vor Start):<br />
’relocation-’ und ’limit-’Register werden geladen.<br />
• Speicherschutz:<br />
für die Speicherbereiche des OS und der anderen Prozesse<br />
• dynamische Anpassung:<br />
Speicherbereich eines Prozesses (und des OS) kann sich dynamisch verändern.<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
274
Hardware support for relocation and limit registers<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
275
7.3.2 Speicherbelegung<br />
Zusammenhängende Speicherbelegung:<br />
• einfachste Form der Nutzung des Hauptspeichers<br />
• Unterteilung des Hauptspeichers in sog. Partitionen oder Bereiche:<br />
a) Die Partitionen variieren in ihrer Größe.<br />
b) Die Partitionen werden vom OS verwaltet und den Jobs zugewiesen.<br />
• Vorstufe zu modernen Verfahren:<br />
Paging und Segmentieren<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
276
OS<br />
process 5<br />
process 8<br />
process 2<br />
Example of Contiguous Memory Allocation<br />
OS<br />
process 5<br />
process 2<br />
OS<br />
process 5<br />
process 9<br />
process 2<br />
OS<br />
process 5<br />
process 9<br />
process 10<br />
process 2<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
277
system<br />
system <br />
system<br />
system <br />
system<br />
system <br />
system<br />
Memory allocation changes as processes come into memory and leave it<br />
Time<br />
C<br />
C<br />
C<br />
C<br />
B<br />
B<br />
B<br />
A<br />
A<br />
A<br />
A<br />
D<br />
D<br />
D<br />
Operating Operating Operating Operating Operating Operating Operating<br />
(a)<br />
(b)<br />
(c)<br />
(d)<br />
(e)<br />
(f)<br />
(g) BC<br />
278<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008
unterscheide:<br />
• Speicherbelegung grenzt an Lücke:<br />
Prozeß kann wachsen<br />
Dynamisch wachsender Speicherbedarf<br />
• Speicherbelegung grenzt nicht an Lücke:<br />
Prozeß muss ausgelagert werden und warten,<br />
bis genügend zusammenhängender Speicherbereich verfügbar ist.<br />
• alternative Strategie:<br />
von vorneherein Platz für Wachstum einplanen<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
279
AA-Program<br />
B<br />
Operating<br />
system<br />
Allocating memory for growing segments<br />
Room for growth<br />
in use<br />
Room for growth<br />
Actually in use<br />
Actually<br />
B-Stack<br />
B-Data<br />
B-Program<br />
A-Stack<br />
A-Data<br />
Operating<br />
system<br />
(a) (b)<br />
Room for growth<br />
Room for growth<br />
growing data segment only growing stack and growing data segment<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 280<br />
c○RWTH <strong>Aachen</strong> 28. Januar 2008
• Bitmaps: 0 frei, 1 belegt<br />
Verwaltung der Speicherbelegung<br />
• Linked List (verkettete Liste):<br />
Partition := belegter oder freier Speicherbereich<br />
Liste der Partitionen mit den folgenden Einträgen:<br />
– Flag (belegt/frei),<br />
– Startadresse der Partition,<br />
– Größe der Partition,<br />
– Zeiger zum nächsten Eintrag<br />
Dabei ist ein Sortieren nach Startadresse vorteilhaft<br />
• weitere Varianten:<br />
– getrennte Listen für belegte und freie Partitionen<br />
– freie Partitionen: sortieren nach der Größe<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
281
Memory allocation for five processes<br />
A B C D E<br />
8 16 24<br />
1 1 1 1 1 0 0 0 P 0 5 H 5 3 P 8 6 P 14 4<br />
(a)<br />
1 1 1 1 1 1 1 1<br />
1 1 0 0 1 1 1 1<br />
1 1 1 1 1 0 0 0<br />
H 18 2 P 20 6 P 26 3 H 29 3 X<br />
Hole Starts Length<br />
Process<br />
at 18 2<br />
(b) (c)<br />
a) Speicherbelegung (5 Prozesse, 3 Lücken)<br />
b) zugehörige Bitmap<br />
c) zugehörige verkettete Liste<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
282
• einfache und effiziente Listenoperationen<br />
• zweckmässig: doppelt-verzeigerte Liste<br />
Before X terminates A<br />
(a) A X B<br />
(b) A X(c) X B<br />
(d) X<br />
Aktualisieren der verketteten Liste<br />
becomes<br />
becomes<br />
becomes<br />
becomes<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 283<br />
c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
After X terminates<br />
BAB
• First Fit:<br />
die erste passende Lücke wird ausgewählt.<br />
Belegungsstrategien<br />
• Best Fit:<br />
die kleinste passende Lücke wird ausgewählt.<br />
• Worst Fit:<br />
die größte Lücke wird ausgewählt.<br />
• Rotating First Fit (auch: Next Fit):<br />
fast wie First Fit: der Speicher wird jeweils ausgehend<br />
von der letzten Plazierung zirkulär durchsucht.<br />
• Quick Fit:<br />
separate Listen für verschiedene Partitionsgrößen<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
284
Beispiel: Belegungsstrategien<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
285
Beispiel: Belegungsstrategien<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
286
7.3.3 Fragmentierung<br />
• Beobachtung:<br />
der Hauptspeicher wird zerstückelt (’Fragmentierung’)<br />
• Gegenmaßnahmen:<br />
’Garbage Collection’ oder ’Compaction’<br />
Fragmentierung des Hauptspeichers:<br />
• interne Fragmentierung:<br />
ungenutzter Speicher innerhalb einer Partition<br />
(kleinste Einheit: 1 KByte)<br />
• externe Fragmentierung:<br />
Lücken zwischen den belegten Partitionen<br />
• 50%-Regel (im zeitlichen Mittel) für externe Fragmentierung:<br />
Bei N belegten Partitionen gibt es 0.5N freie Partitionen<br />
(Asymmetrie: Lücken werden vereinigt, Prozesse nicht).<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
287
7.4 Buddy-Systeme<br />
Speicher-Segmente mit festen Längen:<br />
• Anforderungen nur in 2-er Potenzen<br />
• Ansatz:<br />
Binär-Darstellung der Speicheradressen wird als binärer Baum interpretiert<br />
• Liste der freien und belegten Speicherbereiche<br />
mit den Operationen:<br />
– sukzessives Verschmelzen (falls möglich) bei Freiwerden eines Segmentes<br />
– sukzessives Spalten eines freien Segmentes, bis passende 2-er Potenz erreicht ist.<br />
• Vorteil: effizientes Verschmelzen und Spalten der Segmente<br />
• Nachteil: erhebliche Fragmentierung<br />
Terminologie (siehe Beispiel):<br />
Paare von Buddies (=Kumpel): (AL, AR), (BL, BR), (CL, CR)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
288
Buddy System Allocator<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
289
Darstellung aller 4-Bit-Folgen:<br />
Binär-Darstellung für Buddy-Systeme<br />
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1<br />
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1<br />
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1<br />
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1<br />
Darstellung der 4-Bit-Folgen durch binären Baum:<br />
0 1<br />
0 1 0 1<br />
0 1 0 1 0 1 0 1<br />
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
290
Beispiel: Anforderung der Größe 2 16<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
291
7.5 Paging<br />
7.5.1 Prinzip<br />
Unterteilung des Adreßraums in Blöcke fester Größe<br />
• Logischer Speicher: (Virtual) Pages (= Seiten)<br />
• Physikalischer Speicher: (Page) Frames (= Rahmen, Kacheln)<br />
• Adresse mit n Bits wird zerlegt: n = p + d<br />
– p Bits = page number: 2 p Pages<br />
– d Bits = displacement (=page offset): Offset innerhalb der Page<br />
Fragmentierung des Speichers:<br />
• externe Fragmentierung:<br />
existiert nicht bei Paging<br />
• interne Fragmentierung:<br />
existiert nur für die ’letzte Page’<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
292
Paging Model of Logical and Physical Memory<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
293
Paging Example: Pages of 4 Bytes<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
294
Adreßkonvertierung: von virtuellen zu physikalischen Adressen<br />
(4+12 Bits → 3+12 Bits)<br />
Virtual<br />
address<br />
space<br />
60K-64K<br />
56K-60K<br />
52K-56K<br />
48K-52K<br />
44K-48K<br />
40K-44K<br />
36K-40K<br />
32K-36K<br />
28K-32K<br />
24K-28K<br />
20K-24K<br />
16K-20K<br />
12K-16K<br />
8K-12K<br />
4K-8K<br />
0K-4K<br />
X<br />
X<br />
X<br />
X<br />
7<br />
X<br />
5<br />
X<br />
X<br />
X<br />
3<br />
4<br />
0<br />
6<br />
1<br />
2<br />
Virtual page<br />
Physical<br />
memory<br />
address<br />
28K-32K<br />
24K-28K<br />
20K-24K<br />
16K-20K<br />
12K-16K<br />
8K-12K<br />
4K-8K<br />
0K-4K<br />
Page frame<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
295
Page<br />
table<br />
MMU: Konvertierung der Adressen<br />
(4+12 Bits → 3+12 Bits)<br />
1 1 0 0 0 0 0 0 0 0 0 0 1 0 0<br />
15<br />
14<br />
13<br />
12<br />
11<br />
10<br />
9<br />
8<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
000<br />
000<br />
000<br />
000<br />
111<br />
000<br />
101<br />
000<br />
000<br />
000<br />
011<br />
100<br />
000<br />
110<br />
001<br />
010<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
Virtual page = 2 is used<br />
as an index into the<br />
page table<br />
110<br />
Present/<br />
absent bit<br />
0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0<br />
12-bit offset<br />
copied directly<br />
from input<br />
to output<br />
Outgoing<br />
physical<br />
address<br />
(24580)<br />
Incoming<br />
virtual<br />
address<br />
(8196)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
296
Paging Hardware<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
297
• Interpretation des Paging:<br />
spezielle Form einer dynamischen Relokation<br />
• typische Größe einer Page:<br />
4-8 KByte<br />
• virtueller Adreßraum für 32 bit:<br />
– Anzahl der Speicherzellen: 2 32 = 2 2 · 2 30 = 4G<br />
– Größe einer Page: 2 12 = 4K<br />
– Anzahl der Pages: 2 20 = 1M<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
298
Allokation freier Frames<br />
• neuer Prozeß:<br />
braucht eine Anzahl freier Frames (siehe Beispiel)<br />
• OS verwaltet den physikalischen Hauptspeicher:<br />
frame table: spezielle Datenstruktur mit den Informationen:<br />
– frei oder belegt;<br />
– falls belegt, welcher Prozeß<br />
• OS:<br />
separate Page Table für jeden Prozeß<br />
(wie PC und CPU-Register; Teil des PCB)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
299
Allocation of Free Frames<br />
Before allocation After allocation<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
300
Paging: Konzept<br />
• Wunsch des Pogrammierers:<br />
– einheitlicher Adreßraum von 0 bis ∞ (oder 2 32 = 4G)<br />
– kein Interesse an Speicherverwaltung<br />
• Realisierung durch Paging:<br />
– Speicherbereiche können über den Hauptspeicher verteilt sein<br />
– Zuordnung erfolgt mittels Page Table<br />
• Vorteile des virtuellen Adreßraums:<br />
– kann deutlich größer sein als der physikalische;<br />
– inaktive Programmteile werden vom OS auf Hintergrundspeicher ausgelagert.<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
301
7.5.2 Protection<br />
• für jeden Page Frame:<br />
read-only, read-write, execution<br />
• zusätzliches Bit: legale vs. illegale Adressen<br />
valid-invalid bit<br />
• Sonderfall (interne Fragmentierung):<br />
die letzte Page (siehe Beispiel)<br />
• illegale Adressen:<br />
trap zum OS<br />
manchmal zusätzlich:<br />
PTLR: page table length register<br />
= aktuelle Größe der Page Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
302
Valid/Invalid Bit In A Page Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
303
• Nummer des Page Frames<br />
• valid/invalid-Bit (auch: present/absent)<br />
• Protection-Bits:<br />
read/write, read only, execute only, ...<br />
Struktur der Einträge der Page Table<br />
• Modified- und Referenced-Bits:<br />
– Modified (= dirty): die Page ist beschrieben worden<br />
– Referenced (= Use): die Page ist gelesen oder beschrieben worden<br />
• caching-Bit: für I/O-Operationen<br />
Caching<br />
disabled Modified Present/absent<br />
Referenced Protection<br />
Page frame number<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
304
7.5.3 Shared Pages<br />
• Code, der von mehreren Programmen benutzt wird:<br />
– z.B. Texteditor, Compiler, Datenbanksysteme, Laufzeit-Bibliotheken, ...<br />
• Voraussetzung:<br />
– re-entrant code (reiner Code)<br />
(sollte vom OS geprüft werden!)<br />
– jeder Prozeß: Daten + CPU-Register<br />
• Konzept: vergleichbar mit Threads<br />
(shared: Adreßraum)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
305
Example of Shared Pages<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
306
7.5.4 Hardware und TLB<br />
Beispiel eines 16-bit-Minicomputers: DEC PDP 11<br />
• Entwurf des Paging: 16 = 3+13<br />
– page size of 8K = 2 13 : 13 Bits<br />
– 3 Bits für die Pages: Tabelle mit 2 3 = 8 Einträgen<br />
• Hardware:<br />
– 8 spezielle Register (schneller als Hauptspeicher)<br />
Beispiel eines 32-bit-Prozessors:<br />
• Entwurf des Paging: 32 = 20 + 12<br />
– page size of 4K = 2 12 : 12 Bits<br />
– 20 Bits für die Pages: Tabelle mit 2 20 = 1M Einträgen<br />
• Hardware:<br />
– Page Table wird im normalen Hauptspeicher gehalten<br />
– PTBR: ’page table base register’ zeigt auf die Page Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
307
Zugriffszeit und TLB:<br />
• Page Table:<br />
– befindet sich im Hauptspeicher<br />
– Problem: Verdoppelung der Zugriffszeit<br />
• Abhilfe:<br />
– spezielle (und teure) Hardware innerhalb der MMU<br />
– assoziativer Speicher: Translation Look Aside Buffer (TLB)<br />
• Größe des TLB: 64 - 1024 Einträge<br />
d.h. nur ein Teil der Page Table wird im TLB gehalten<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
308
Paging Hardware With TLB<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
309
Mit den Größen:<br />
• TMem = 100 nsec: Zugriffszeit des Hauptspeichers<br />
• TTLB = 20 nsec: Zugriffszeit des TLB<br />
• q: hit ratio (’Adresse steht im TLB’)<br />
ergibt sich die effektive (=mittlere) Zugriffszeit:<br />
T = q · (TTLB + TMem) + (1 − q) · (TTLB + 2 TMem)<br />
= TTLB + TMem + (1 − q) · TMem<br />
q[%] T[nsec]<br />
0 220<br />
80 140<br />
90 130<br />
98 122<br />
100 120<br />
Folgerung: ’hit ratio’ sollte bei 98% und höher liegen.<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
310
TLB<br />
• Einträge im TLB:<br />
– die ausgewählten Pages müssen laufend aktualisiert werden<br />
– Frage der Ersetzungstrategie (vgl. Paging)<br />
• Aufbau der Einträge im TLB: i.w. wie Page Table<br />
<br />
<br />
Valid Virtual page Modified Protection Page frame <br />
<br />
<br />
<br />
<br />
<br />
1 140 1 RW 31<br />
<br />
<br />
<br />
<br />
<br />
1 20 0 R X 38 <br />
<br />
1 130 1 RW 29 <br />
<br />
<br />
1<br />
<br />
129<br />
<br />
<br />
1<br />
<br />
RW<br />
<br />
62<br />
<br />
<br />
<br />
<br />
<br />
<br />
1 19 0 R X 50 <br />
<br />
1 21 0 R X 45 <br />
<br />
<br />
<br />
1<br />
<br />
<br />
860<br />
<br />
<br />
1<br />
<br />
<br />
RW<br />
<br />
<br />
14<br />
<br />
<br />
<br />
1 861 1 RW 75 <br />
• manchmal zusätzlich: Prozeß-ID<br />
Vorteil: keine Initialierung des TLB bei Prozeßwechsel erforderlich<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
311
7.6 Struktur der Page Table<br />
7.6.1 Hierarchical Paging<br />
virtueller Adreßraum mit 32 Bits:<br />
• Größe der Page: 2 12 = 4KByte<br />
• Größe der Page Table:<br />
– 2 32 /2 12 = 2 20 = 1M Einträge<br />
– 4 Byte pro Eintrag<br />
• Ergebnis:<br />
4 MByte werden für die Page Table benötigt!<br />
• Gegenmaßnahmen:<br />
– Hierachical Paging<br />
– Hashed Page Table<br />
– Inverted Page Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
312
Two-Level Page-Table Scheme<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
313
Address Translation Scheme<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
314
Beispiel:<br />
• Prozeß:<br />
– Programm-Code<br />
– Daten<br />
– Stack<br />
jeweils: 4 MByte<br />
• erste Stufe des Paging:<br />
jeder Eintrag steht für 2 22 = 4 MByte<br />
• zweite Stufe des Paging:<br />
jeder Eintrag steht für 2 12 = 4 KByte<br />
• Speicher: effiziente Nutzung<br />
– erste Stufe: Page Table<br />
– zweite Stufe: 3 Page Tables<br />
Beispiel: Zweistufiges Paging<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
315
Bits 10 10 12<br />
PT1 PT2 Offset<br />
(a)<br />
Beispiel: Zweistufiges Paging<br />
1023<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
Top-level<br />
page table<br />
1023<br />
(b)<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
Second-level<br />
page tables<br />
Page<br />
table for<br />
the top<br />
4M of<br />
memory<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
316<br />
To<br />
pages
Zerlegung der Adresse mit 64 Bits:<br />
= 42 + 10 + 12<br />
= (32+10) + 10 + 12<br />
d.h. dreistufiges Paging (?)<br />
Three-Level Paging: 64 Bits<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
317
7.6.2 Hashed Page Table<br />
logischer Adreßraum: 64 bit<br />
• hierachisches Paging: zu ineffizient<br />
• Abhilf: Hashing<br />
weitere Einzelheiten:<br />
– kann mit TLB kombiniert werden<br />
– Clustering: mehrer Pages werden zu einem Cluster zusammengefaßt.<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
318
Hashed Page Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
319
7.6.3 Inverted Page Table<br />
Adreßraum: 32 und 64 Bits (Page Size: 2 12 = 4K Byte)<br />
• 32 Bits: 2 20 · 4 Byte = 4 MByte (noch machbar)<br />
• 64 Bits: 2 52 · 8 Byte = 32 Millionen GByte (unmöglich)<br />
Ansatz: eine einzige Page Table für alle Prozesse<br />
• Vorteil: weniger Speicherplatz<br />
• Nachteil: mehr Aufwand bei Adreßkonvertierung:<br />
– Eintrag: (pid,p,d)<br />
– Suche nach (pid,p)<br />
• Effizienzsteigerung:<br />
– Verwendung eines TLB<br />
– Hash Table<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
320
Inverted Page Table Architecture<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
321
7.7 Segmentierung<br />
• Sicht des Programmierers:<br />
Programm besteht aus verschiedenen Teilen (= Segmenten), z.B.:<br />
– Hauptprogramm<br />
– Subroutinen<br />
– Stack<br />
– lokale Variable<br />
– globale Variable<br />
– Tabellen<br />
– (große) Arrays<br />
• Ergebnis:<br />
logischer Adressraum ist zweidimensional: (segment, offset)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
322
Segmentierung: Sicht des Programmierers<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
323
Segmentierung<br />
Abbildung der Programmierer-Sicht auf eindimensionalen Adreßraum:<br />
3<br />
1<br />
4<br />
2<br />
user space physical memory space<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
324<br />
1<br />
4<br />
2<br />
3
Segmentation Hardware<br />
• logische Adresse: (s,d)<br />
s= Segment-Nummer<br />
d= Verschiebung (Displacement oder Offset)<br />
• Segment Table: Adreßkonvertierung in physikalische Adressen<br />
– limit: Länge des Segmentes<br />
– base: Startadresse des Segmentes<br />
• zwei Register für die Segment Table:<br />
– STBR: segment table base register<br />
– STLR: segment table length register<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
325
Segmentation Hardware<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
326
Example of Segmentation<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
327
Vergleich: Paging und Segmentierung<br />
• Zweck der Methode:<br />
– Paging: großer linearer logischer Adreßraum<br />
– Segmentierung: Zerlegung des Programms in logisch unabhängige Teile<br />
• Hat der Programmierer sich darum zu kümmern?<br />
– Paging: Nein, Segmentierung: Ja<br />
• Wieviele lineare Adreßräume gibt es?<br />
– Paging: 1, Segmentierung: mehrere<br />
• Kann der logische Adreßraum größer sein als der physikalische?<br />
– Paging: Ja, Segmentierung: Ja<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
328
7.8 Beispiel: Intel Pentium<br />
Segmentierung, Paging und Kombination dieser Methoden:<br />
• Segmentierung:<br />
– 8 private Segmente: ’private for each process’<br />
– 8 globale Segmente: ’shared among all processes’<br />
• Paging mit 32-Bit-Adresse:<br />
zwei Größen der Pages:<br />
– 4 MByte: einstufiges Paging: 10 + 22<br />
– 4 KByte: zweistufiges Paging: 10 + 10 + 12<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
329
Logical-to-Physical Address Translation in Pentium<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
330
Segmentation on Pentium<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
331
Pentium Paging Architecture<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
332
Linux unterstützt Segmentierung nur begrenzt;<br />
es verwendet 6 Segmente:<br />
• kernel code<br />
• kernel data<br />
• user code<br />
• user data<br />
Pentium und Linux<br />
• state-task segment<br />
(hardware context during context switches for each process)<br />
• local descriptor table (LDT) (i.d.R. nicht benutzt)<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
333
Linear Address in Linux<br />
Pentium-Hardware:<br />
– hat nur zweistufiges Paging<br />
– middle directory: 0 Bits<br />
Pentium und Linux<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
334
Three-Level Paging in Linux<br />
Ney: Betriebssysteme und Systemsoftware, WS 2007/8 c○RWTH <strong>Aachen</strong> 28. Januar 2008<br />
335