Betriebssysteme I - Betriebssysteme und verteilte Systeme
Betriebssysteme I - Betriebssysteme und verteilte Systeme
Betriebssysteme I - Betriebssysteme und verteilte Systeme
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Wiederholung<br />
➥ Scheduling<br />
➥ Entscheidung welcher Prozeß wann wie lange rechnen<br />
darf<br />
➥ Unterschiedliche Anforderungen, je nach Sichtweise <strong>und</strong><br />
Betriebsmodus<br />
➥ Nicht-präemptives <strong>und</strong> präemptives Scheduling<br />
➥ präemptiv: BS kann Prozeß die CPU zwangsweise<br />
entziehen<br />
➥ Scheduling-Algorithmen<br />
<strong>Betriebssysteme</strong> I<br />
WS 2005/2006<br />
Roland Wismüller, Univ. Siegen<br />
roland.wismueller@uni-siegen.de<br />
Tel.: 0271/740-4050, Büro: H-B 8404<br />
Stand: 27. Januar 2006<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 1<br />
➥ FCFS: FIFO-Warteschlange rechenbereiter Prozesse,<br />
nicht-präemptiv<br />
➥ SJF: Shortest Job First<br />
➥ optimiert Durchlaufzeit von Jobs<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 309<br />
Wiederholung ...<br />
➥ Scheduling-Algorithmen ...<br />
➥ Ro<strong>und</strong> Robin (RR): präemptive Version von FCFS<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 310<br />
<strong>Betriebssysteme</strong> I<br />
WS 2005/2006<br />
➥ Prozesse dürfen nur bestimmte Zeit rechnen<br />
➥ Prioritätenbasiertes Scheduling:<br />
➥ nur der Prozeß mit höchster Priorität bekommt CPU<br />
➥ Multilevel Scheduling<br />
➥ mehrere Warteschlangen mit eigener Auswahlstrategie<br />
➥ Beispiel: Prioritätsklassen, RR innerhalb einer Klasse<br />
➥ Beispiel: Multilevel Feedback Scheduling<br />
➥ mehrere Warteschlangen mit unterschiedlicher<br />
Auswahlstrategie<br />
➥ dynamische Zuordnung Prozeß → Warteschlange<br />
6 Speicherverwaltung<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 311
6 Speicherverwaltung ...<br />
Inhalt:<br />
➥ Einführung, Gr<strong>und</strong>lagen<br />
➥ Swapping <strong>und</strong> dynamische Speicherverwaltung<br />
➥ Virtueller Speicher: Paging<br />
➥ Gr<strong>und</strong>lagen<br />
➥ Dynamische Seitenersetzung<br />
➥ Seitenersetzungsalgorithmen<br />
➥ Segmentierung<br />
➥ Tanenbaum 4<br />
➥ Stallings 7, 8<br />
➥ Nehmer/Sturm 4<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 312<br />
6.1 Einführung, Gr<strong>und</strong>lagen<br />
Wichtige Unterscheidung / Begriffe<br />
➥ Adreßraum: Menge aller verwendbaren Adressen<br />
➥ logischer (virtueller) Adreßraum: aus Sicht eines<br />
Programms bzw. Prozesses gesehen<br />
➥ Adressen, die der Prozeß verwendet / verwenden kann<br />
➥ physischer Adreßraum: aus Sicht der Hardware<br />
➥ Adressen, die die Speicher-Hardware verwendet /<br />
verwenden kann<br />
➥ nicht immer identisch! (siehe später: Paging)<br />
➥ Speicher: das Stück Hardware, das Daten speichert ...<br />
➥ (oft: Speicher als Synonym für physischer Adreßraum)<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 313<br />
6.1.1 Logischer Adreßraum<br />
Wie ist der Adreßraum eines Prozesses strukturiert?<br />
➥ Ein Prozeß enthält:<br />
➥ Code<br />
➥ Daten (incl. Heap)<br />
➥ Keller (Rückkehradressen, ...)<br />
➥ Keller <strong>und</strong> Heap wachsen<br />
aufeinander zu<br />
➥ Jeweils in getrennten Segmenten<br />
abgelegt<br />
➥ Segment = logisch zusammengehöriger<br />
Teil des Adreßraums<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 314<br />
6.1.2 Verwaltung des physischen Adreßraums<br />
Erinnerung: Speicherhierarchie<br />
Register<br />
Cache<br />
Hauptspeicher<br />
Magnetspeicher (Festplatte)<br />
Magnetband<br />
Typische Einteilung:<br />
FFF...:<br />
Verwaltung durch:<br />
Programmierer / Compiler<br />
Hardware (+ Compiler / BS)<br />
BS: Speicher−<br />
verwaltung<br />
BS: Datei−<br />
verwaltung<br />
Keller<br />
unbenutzt<br />
Code<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 315<br />
0:<br />
Daten<br />
(Heap)
6.1.2 Verwaltung des physischen Adreßraums ...<br />
Aufgaben der Speicherverwaltung im BS<br />
➥ Finden <strong>und</strong> Zuteilung freier Speicherbereiche<br />
➥ z.B. bei Erzeugung eines Prozesses<br />
➥ Effiziente Nutzung des Speichers: verschiedene Aspekte<br />
➥ gesamter freier Speicher sollte für Prozesse nutzbar sein<br />
➥ Prozeß benötigt nicht immer alle Teile seines Adreßraums<br />
➥ Adreßräume aller Prozesse evtl. größer als verfügbarer<br />
Hauptspeicher<br />
➥ Speicherschutz<br />
➥ Prozesse sollten nur auf eigene Daten zugreifen können<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 316<br />
6.1.3 Einfache historische Ansätze<br />
Speicherverwaltung bei Einprogrammbetrieb<br />
➥ Feste Einteilung des Speichers<br />
➥ BS (im RAM oder ROM)<br />
➥ Benutzerprogramm<br />
➥ Zu jeder Zeit nur ein Programm im<br />
Hauptspeicher<br />
➥ Heute noch z.B. in eingebetteten<br />
<strong>Systeme</strong>n, Palmtops, etc.<br />
Beispiel:<br />
FFF...:<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 317<br />
0:<br />
Betriebssystem<br />
(im ROM)<br />
Benutzer−<br />
programm<br />
6.1.3 Einfache historische Ansätze ...<br />
Mehrprogrammbetrieb mit festen Partitionen<br />
➥ Einfachste Speicherverwaltung bei Mehrprogrammbetrieb<br />
➥ Hauptspeicher in Partitionen fester Größe eingeteilt<br />
➥ Festlegung bei Systemstart<br />
➥ Anzahl legt Multiprogramming-Grad fest<br />
➥ <strong>und</strong> damit auch erreichbare CPU-Auslastung<br />
➥ Größe der Partitionen kann verschieden sein<br />
➥ Bei Ankunft eines Auftrags (Start eines Programms)<br />
➥ Einfügen in Warteschlange für Speicherzuteilung<br />
➥ je eine Warteschlange pro Partition<br />
➥ oder gemeinsame Warteschlange für alle Partitionen<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 318<br />
6.1.3 Einfache historische Ansätze ...<br />
Mehrprogrammbetrieb mit festen Partitionen ...<br />
Getrennte Eingangs−<br />
warteschlangen<br />
Partition 4<br />
Partition 3<br />
800K<br />
700K<br />
400K<br />
Partition 2<br />
200K<br />
Partition 1<br />
100K<br />
BS−Bereich<br />
0<br />
Gemeinsame Eingangs−<br />
warteschlange<br />
Partition 4<br />
Partition 3<br />
Partition 2<br />
Partition 1<br />
BS−Bereich<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 319
6.1.3 Einfache historische Ansätze ...<br />
Relokation <strong>und</strong> Speicherschutz<br />
➥ Programmcode enthält Adressen<br />
➥ z.B. in Unterprogrammaufrufen oder Ladebefehlen<br />
➥ Beim Laden des Programms in eine Partition:<br />
➥ Adressen im Code müssen angepaßt werden (Relokation)<br />
➥ möglich durch Liste in Programmdatei, die angibt, wo sich<br />
Adressen im Code befinden<br />
➥ Anpassen der Adressen beim Laden löst nicht Problem des<br />
Speicherschutzes<br />
➥ Prozeß kann auf Partitionen anderer Prozesse zugreifen<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 320<br />
6.1.3 Einfache historische Ansätze ...<br />
Relokation <strong>und</strong> Speicherschutz ...<br />
➥ Unterstützung durch Hardware:<br />
➥ zwei spezielle, privilegierte Prozessorregister:<br />
➥ Basisregister: Anfangsadresse der Partition<br />
➥ Grenzregister: Länge der Partition<br />
➥ vom BS beim Prozeßwechsel aktualisiert<br />
➥ bei jedem Speicherzugriff:<br />
➥ vergleiche (logische) Adresse mit Grenzregister<br />
➥ falls größer/gleich: Ausnahme auslösen<br />
➥ addiere Basisregister zur (logischen) Adresse<br />
➥ Ergebnis: (physische) Speicheradresse<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 321<br />
6.2 Swapping <strong>und</strong> dyn. Speicherverwaltung<br />
➥ Feste Partitionen (nur) für Stapelverarbeitung geeignet<br />
➥ Bei interaktiven <strong>Systeme</strong>n:<br />
➥ alle aktiven Programme zusammen benötigen evtl. mehr<br />
Speicher, als vorhanden ist<br />
➥ Lösung: Speicherbereiche temporär auf Festplatte auslagern<br />
➥ Einfachste Variante: Swapping<br />
➥ kompletter Prozeßadreßraum wird ausgelagert <strong>und</strong> Prozeß<br />
suspendiert<br />
➥ Wieder-Einlagern evtl. an anderer Stelle im Speicher<br />
6.2.1 Swapping<br />
Beispiel<br />
A<br />
BS<br />
➥ Relokation i.d.R. über Basisregister<br />
➥ (Bessere Variante: virtueller Speicher, siehe später)<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 322<br />
B wird ausgelagert<br />
D wird eingelagert<br />
A wird eingelagert<br />
A wird ausgelagert<br />
B<br />
A<br />
BS<br />
C<br />
B<br />
A<br />
BS<br />
C<br />
B<br />
BS<br />
Zeit<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 323<br />
C<br />
B<br />
D<br />
BS<br />
C<br />
D<br />
BS<br />
C<br />
A<br />
D<br />
BS
6.2.1 Swapping ...<br />
Diskussion<br />
➥ Unterschied zu festen Partitionen:<br />
➥ Zahl, Größe <strong>und</strong> Ort der Partitionen variabel<br />
➥ Löcher im Speicher können im Prinzip durch Verschieben<br />
zusammengefaßt werden<br />
➥ Probleme:<br />
<strong>Betriebssysteme</strong> I<br />
WS 2005/2006<br />
23.01.06<br />
Roland Wismüller, Univ. Siegen<br />
roland.wismueller@uni-siegen.de<br />
Tel.: 0271/740-4050, Büro: H-B 8404<br />
Stand: 27. Januar 2006<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 324<br />
➥ Ein- <strong>und</strong> Auslagern ist sehr zeitaufwendig<br />
➥ Prozeß kann zur Laufzeit mehr Speicher anfordern<br />
➥ benötigt evtl. Verschiebung oder Auslagerung von<br />
Prozessen<br />
➥ Schlechte Speichernutzung: Prozeß benötigt i.d.R. nicht<br />
immer seinen ganzen Adreßraum<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 325<br />
6.2.2 Dynamische Speicherverwaltung<br />
➥ BS muß bei Prozeßerzeugung oder Einlagerung passenden<br />
Speicherbereich finden<br />
➥ Dazu: BS benötigt Information über freie Speicherbereiche<br />
➥ Typisch: Liste aller freien Speicherbereiche<br />
➥ Listenelemente jeweils im freien Speicherbereich<br />
➥ Wichtig bei Speicherfreigabe: Verschmelzen der Einträge für<br />
aneinandergrenzende freie Speicherbereiche<br />
➥ dazu: doppelt verkettete Liste, sortiert nach Adressen<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 326<br />
6.2.2 Dynamische Speicherverwaltung ...<br />
Suchverfahren<br />
10,20 21,40 41,45<br />
➥ Bei Speicheranforderung: suche passenden Eintrag in<br />
Freispeicherliste<br />
➥ benötigten Anteil an Prozeß zuweisen<br />
➥ Rest wieder in Freispeicherliste eintragen<br />
➥ First Fit: verwende ersten passenden Speicherbereich<br />
➥ d.h. den mit der kleinsten Adresse<br />
➥ Next Fit: wie First Fit, aber Suche startet an zuletzt<br />
gef<strong>und</strong>ener Position statt am Anfang<br />
10,45<br />
➥ schlechter als First Fit: Fragmentiert gesamten physischen<br />
Adreßraum<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 327
6.2.2 Dynamische Speicherverwaltung ...<br />
Suchverfahren ...<br />
6.2.2 Dynamische Speicherverwaltung ...<br />
Beispiel<br />
Ausgangssituation:<br />
Zuletzt zugeteilter Block<br />
0 FFF...<br />
8<br />
➥ Best Fit: verwende am besten passenden Bereich<br />
➥ schlechter als First Fit: erzeugt viele, sehr kleine<br />
Freibereiche<br />
➥ Worst Fit: verwende am schlechtesten passenden Bereich<br />
➥ schlechter als First Fit: vernichtet große Freibereiche<br />
➥ Quick Fit: verschiedene Listen für Freibereiche mit<br />
gebräuchlichen Größen<br />
➥ schnelle Suche<br />
➥ Problem: Verschmelzen freier Speicherbereiche<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 328<br />
12 22 18 8 6<br />
Nach Zuteilung eines 16MByte−Blocks:<br />
8 12 6 2 8 6<br />
32<br />
MByte<br />
First Fit Best Fit Next Fit Worst Fit<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 329<br />
16<br />
40<br />
MByte<br />
0 FFF...<br />
24<br />
6.3 Virtueller Speicher (Paging)<br />
➥ Gr<strong>und</strong>lage: strikte Trennung zwischen<br />
➥ logischen Adressen, die der Prozeß sieht / benutzt<br />
➥ physischen Adressen, die der Hauptspeicher sieht<br />
➥ Idee: bei jedem Speicherzugriff wird die vom Prozeß<br />
erzeugte logische Adresse auf eine physische Adresse<br />
abgebildet<br />
➥ durch Hardware: MMU (Memory Management Unit)<br />
➥ Vorteile:<br />
➥ kein Verschieben beim Laden eines Prozesses erforderlich<br />
➥ auch kleine freie Speicherbereiche sind nutzbar<br />
➥ Speicherschutz ergibt sich (fast) automatisch<br />
➥ ermöglicht, auch Teile des Prozeßadreßraums auzuslagern<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 330<br />
6.3 Virtueller Speicher (Paging) ...<br />
Ort <strong>und</strong> Funktion der MMU im Rechner<br />
CPU−<br />
Chip<br />
CPU<br />
MMU<br />
CPU schickt<br />
virtuelle Adressen<br />
zur MMU<br />
MMU schickt<br />
physische Adressen<br />
zum Hauptspeicher<br />
Speicher<br />
E/A−<br />
Controller<br />
Bus<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 331
6.3.1 Gr<strong>und</strong>lagen<br />
Paging: Seitenbasierte Speicherabbildung<br />
➥ Abbildung von virtuellen auf physische Adressen über Tabelle<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
Gr<strong>und</strong>idee des Paging<br />
FFF...<br />
➥ Tabelle wird vom BS erstellt <strong>und</strong> aktualisiert<br />
➥ Dazu: Aufteilung der Adreßräume in Blöcke fester Größe<br />
➥ Seite: Block im virtuellen Adreßraum<br />
➥ Kachel (Seitenrahmen): Block im physischen Adreßraum<br />
➥ Typische Seitengröße: 4 KByte<br />
➥ Umsetzungstabelle (Seitentabelle) definiert für jede Seite:<br />
➥ physische Adresse der zugehörigen Kachel<br />
(falls vorhanden)<br />
➥ Zugriffsrechte<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 332<br />
0<br />
virtueller<br />
Adreßraum<br />
Prozeß 1<br />
*<br />
...<br />
Seite Kachel<br />
physischer Adreßraum<br />
Hauptspeicher<br />
FFF...<br />
...<br />
...<br />
FFF...<br />
Betriebssystem<br />
0<br />
* Diese Seiten sind nicht in den Hauptspeicher abgebildet<br />
Sie könnten z.B. auf Hintergr<strong>und</strong>speicher ausgelagert sein.<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 333<br />
0<br />
virtueller<br />
Adreßraum<br />
Prozeß 2<br />
...<br />
*<br />
*<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
0:<br />
1:<br />
2:<br />
3:<br />
... 4:<br />
Prinzip der Adreßumsetzung<br />
Die Größe des virtuellen <strong>und</strong> des<br />
physischen Adreßraums kann<br />
auch verschieden sein!<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 334<br />
Typischer Aufbau der Seitentabelleneinträge<br />
Seitentabelle<br />
...<br />
31<br />
31<br />
Index = Seitennummer<br />
virtuelle Adresse (vom Prozeß generiert)<br />
Seitennummer<br />
...<br />
Index<br />
Seitentabelle<br />
...<br />
Kachelnummer<br />
typ. 32 Bit<br />
0 1 0 101 1 Kachel−Nummer<br />
Present/Absent<br />
ist der Seite eine Kachel zugordnet?<br />
Zugriffsrechte:<br />
Lesen, Schreiben, Ausführen<br />
Verändert<br />
wird bei Schreibzugriff gesetzt<br />
Referenziert<br />
wird bei jedem Zugriff gesetzt<br />
Caching ausschalten<br />
z.B. bei speicherbasierter E/A<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 335<br />
...<br />
12 11 0<br />
12 11<br />
Offset innerhalb der Seite<br />
...<br />
Offset innerhalb der Kachel<br />
physische Adresse (an Hauptspeicher)<br />
0
6.3.1 Gr<strong>und</strong>lagen ...<br />
Adreßabbildung ist Zusammenspiel von BS <strong>und</strong> MMU<br />
➥ BS setzt für jeden Prozeß eine Seitentabelle auf<br />
➥ Tabelle wird beim Prozeßwechsel ausgetauscht<br />
➥ MMU realisiert die Adreßumsetzung<br />
➥ falls einer Seite keine Kachel zugeordnet ist (Present-Bit<br />
ist gelöscht):<br />
➥ MMU erzeugt Ausnahme (Seitenfehler)<br />
➥ Speicherschutz ist automatisch gegeben, da Seitentabelle<br />
nur auf Kacheln verweist, die dem Prozeß zugeteilt sind<br />
➥ zusätzlich: Zugriffsrechte für einzelne Seiten<br />
➥ z.B. Schreibschutz für Programmcode<br />
➥ bei Verletzung: Erzeugen einer Ausnahme<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 336<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
Mehrstufige Seitentabellen<br />
➥ Jeder Seite muß eine Kachel zugeordnet werden können<br />
➥ Problem: Speicherplatzbedarf der Tabelle<br />
➥ z.B. bei virtuellen Adressen mit 32 Bit Länge: 2 20 Seiten<br />
➥ für jeden Prozeß wäre eine 4 MByte große Tabelle nötig<br />
➥ bei 64-Bit Prozessoren sogar 2 52 Seiten, d.h. 9 PByte!<br />
➥ Aber: Prozeß nutzt virtuellen Adreßraum i.a. nicht vollständig<br />
➥ daher mehrstufige Tabellen sinnvoll, z.B. für 2 20 Seiten:<br />
➥ 1. Stufe: Hauptseitentabelle mit 1024 Einträgen<br />
➥ 2. Stufe: ≤ 1024 Seitentabellen mit 1024 Einträgen<br />
(Tabellen nur vorhanden, wenn notwendig)<br />
➥ (Alternative: Invertierte Seitentabellen)<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 337<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
Adreßumsetzung mit zweistufiger Seitentabelle<br />
MMU−Register enthält<br />
Adresse der Haupt−<br />
seitentabelle<br />
(wird bei Prozeß−<br />
wechsel umgeladen)<br />
Register<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 338<br />
6.3.1 Gr<strong>und</strong>lagen ...<br />
Adreßumsetzung mit zweistufiger Seitentabelle<br />
31<br />
Register<br />
Haupt−<br />
seitentabelle<br />
virtuelle Adresse (vom Prozeß generiert)<br />
...<br />
Haupt−<br />
seitentabelle<br />
absent<br />
...<br />
absent<br />
Seitennummer<br />
22 21<br />
absent<br />
...<br />
absent<br />
Tabelleneinträge<br />
verweisen auf<br />
Seitentabellen<br />
Seiten−<br />
tabelle<br />
...<br />
Seiten−<br />
tabelle<br />
...<br />
...<br />
...<br />
12 11<br />
...<br />
...<br />
...<br />
Tabellen liegen<br />
im Hauptspeicher<br />
Tabellen−<br />
einträge<br />
enthalten<br />
Kachel−<br />
nummern<br />
Offset<br />
physische<br />
Adresse<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 339<br />
...<br />
0
6.3.1 Gr<strong>und</strong>lagen ...<br />
TLB: Translation Lookaside Buffer<br />
6.3.2 Dynamische Seitenersetzung<br />
Motivation: Lokalitätsprinzip<br />
Adresse<br />
➥ Seitentabellen liegen im Speicher<br />
➥ für jeden Speicherzugriff mehrere zusätzliche Zugriffe für<br />
Adreßumsetzung nötig!<br />
➥ Optimierung: MMU hält kleinen Teil der Adreßabbildung in<br />
einem internen Cache-Speicher: TLB<br />
➥ Verwaltung des TLB<br />
➥ durch Hardware (MMU): bei CISC-Prozessoren (z.B. x86)<br />
➥ durch Software (BS): bei neueren RISC-Prozessoren<br />
➥ MMU erzeugt Ausnahme, falls für eine Seite kein<br />
TLB-Eintrag vorliegt<br />
➥ BS behandelt Ausnahme: Durchsuchen der Seitentabellen<br />
<strong>und</strong> Ersetzen eines TLB-Eintrags<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 340<br />
Ausführungszeit<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 341<br />
6.3.2 Dynamische Seitenersetzung ...<br />
Virtueller Speicher<br />
➥ Nur Teilmenge der Seiten eines Prozesses ist im Hauptspeicher:<br />
Resident Set<br />
➥ alle anderen Seiten auf Festplatte ausgelagert<br />
➥ Auswirkungen:<br />
➥ höherer Multiprogramming-Grad möglich<br />
➥ Prozeßadreßraum kann größer als Hauptspeicher sein<br />
➥ Working Set eines Prozesses P : w(k, t)<br />
➥ zur Zeit t: Menge der Seiten, die P bei den letzten k<br />
Speicherzugriffen benutzt hat<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 342<br />
6.3.2 Dynamische Seitenersetzung ...<br />
Abhängigkeit des Working Set von k<br />
|w(k,t)|<br />
➥ Für großes k: |w(k, t)| ist beinahe konstant<br />
➥ aber meist noch deutlich kleiner als Prozeßadreßraum<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 343<br />
k
6.3.2 Dynamische Seitenersetzung ...<br />
Thrashing<br />
➥ System muß genügend Speicher bereitstellen, um für jeden<br />
Prozeß w(k, t) für genügend großes k im Hauptspeicher zu<br />
halten<br />
➥ Falls nicht: Thrashing, Seitenflattern<br />
➥ Prozesse benötigen ständig ausgelagerte Seiten<br />
➥ zum Einlagern muß aber andere Seite verdrängt werden<br />
➥ führt zu ständigem Ein- <strong>und</strong> Auslagern<br />
➥ Systemleistung sinkt dramatisch<br />
➥ Mögliche Abhilfe: Swapping<br />
<strong>Betriebssysteme</strong> I<br />
WS 2005/2006<br />
30.01.06<br />
Roland Wismüller, Univ. Siegen<br />
roland.wismueller@uni-siegen.de<br />
Tel.: 0271/740-4050, Büro: H-B 8404<br />
Stand: 27. Januar 2006<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 344<br />
➥ verdränge einen Prozeß komplett aus dem Speicher<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 345<br />
6.3.2 Dynamische Seitenersetzung ...<br />
Strategieentscheidungen<br />
➥ Abrufstrategie: wann werden Seiten eingelagert?<br />
➥ erst bei Bedarf, also bei Seitenfehler: Demand Paging<br />
➥ im Voraus: Prepaging<br />
➥ z.B. bei Programmstart<br />
➥ oder: lade Folgeseiten auf Platte gleich mit<br />
➥ (bei Swapping werden immer alle zuvor residenten Seiten<br />
wieder eingelagert)<br />
➥ Zuteilungsstrategie: welche Kacheln werden einem Prozeß<br />
zugeteilt?<br />
➥ nur in Spezialfällen (Parallelrechner) relevant<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 346<br />
6.3.2 Dynamische Seitenersetzung ...<br />
Strategieentscheidungen ...<br />
➥ Austauschstrategie<br />
➥ wo wird nach Verdrängungskandidaten gesucht?<br />
➥ lokale Strategie: verdränge nur Seiten des Prozesses,<br />
der neue Seite anfordert<br />
➥ Adreßraumgröße fest oder variabel<br />
➥ Größe sollte Working Set entsprechen<br />
➥ Einstellung z.B. aufgr<strong>und</strong> der Seitenfehlerfrequenz<br />
➥ globale Strategie: suche Verdrängungskandidaten<br />
unter den Seiten aller Prozesse<br />
➥ welche Seite wird verdrängt?<br />
➥ Seitenersetzungsalgorithmen<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 347
6.3.2 Dynamische Seitenersetzung ...<br />
Ablauf eines Seitenwechsels (vereinfacht)<br />
1. MMU löst Seitenfehler (Ausnahme) aus<br />
2. BS ermittelt virtuelle Adresse (→ Seite S)<br />
3. Falls Schutzverletzung vorlag: Prozeß abbrechen<br />
4. Sonst: zu verdrängende Seite S ′ bestimmen<br />
5. Falls S ′ modifiziert (Modified-Bit = 1): S ′ auf Platte schreiben<br />
6. Seitentabelleneintrag für S ′ aktualisieren (Present-Bit = 0)<br />
7. Seite S von Platte in nun freie Kachel laden<br />
8. Seitentabelleneintrag für S aktualisieren<br />
9. Prozeß fortsetzen<br />
➥ abgebrochener Befehl wird weitergeführt / wiederholt<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 348<br />
6.3.2 Dynamische Seitenersetzung ...<br />
Zu den Kosten von Seitenwechseln<br />
➥ Mittlere Speicherzugriffszeit bei Wahrscheinlichkeit p für<br />
Seitenfehler:<br />
➥ tZ = tHS + p · tSF<br />
➥ tHS: Zugriffszeit des Hauptspeichers (ca. 10-100 ns)<br />
➥ tSF : Zeit für Behandlung von Seitenfehlern<br />
➥ dominiert durch Plattenzugriff (ca. 10 ms)<br />
➥ Um Leistungsverlust im Rahmen zu halten:<br />
➥ p muß sehr klein sein<br />
➥ max. ein Seitenfehler bei mehreren Millionen Zugriffen<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 349<br />
6.3.3 Seitenersetzungsalgorithmen<br />
Optimale Strategie (nach Belady)<br />
➥ Verdränge die Seite, die in Zukunft am längsten nicht mehr<br />
benötigt wird<br />
Zugriffe<br />
(Seiten)<br />
Seiten<br />
im Haupt−<br />
speicher<br />
7 0 1 2 0 3 0 4 2 3 0 3 1 2 0 7 0 1<br />
7 7 2<br />
0<br />
1 1 3<br />
➥ In der Praxis nicht realisierbar<br />
➥ Als Referenzmodell zur Bewertung anderer Verfahren<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 350<br />
6.3.3 Seitenersetzungsalgorithmen ...<br />
Not Recently Used (NRU)<br />
➥ Basis: von der MMU gesetzte Statusbits in Seitentabelle:<br />
➥ R-Bit: Seite wurde referenziert<br />
➥ M-Bit: Seite wurde modifiziert<br />
➥ R-Bit wird vom BS in regelmäßigem Abstand gelöscht<br />
➥ Bei Verdrängung: vier Prioritätsklassen<br />
Klasse 0: nicht referenziert, nicht modifiziert<br />
Klasse 1: nicht referenziert, modifiziert<br />
Klasse 2: referenziert, nicht modifiziert<br />
Klasse 3: referenziert, modifiziert<br />
➥ Auswahl innerhalb der Klasse zufällig<br />
➥ Nicht besonders gut, aber einfach<br />
0<br />
4<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 351<br />
4<br />
0<br />
3<br />
1<br />
2<br />
7
6.3.3 Seitenersetzungsalgorithmen ...<br />
First In First Out (FIFO)<br />
➥ Verdränge die Seite, die am längsten im Hauptspeicher ist<br />
➥ Einfache, aber schlechte Strategie<br />
➥ Zugriffsverhalten (Working Set) wird ignoriert<br />
➥ Zudem: Anomalien<br />
➥ teilweise mehr Seitenfehler bei mehr Kacheln<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 352<br />
6.3.3 Seitenersetzungsalgorithmen ...<br />
Second Chance<br />
➥ Erweiterung von FIFO<br />
➥ Idee: verdränge älteste Seite, auf die seit dem letztem<br />
Seitenwechsel nicht zugegriffen wurde<br />
➥ Liste aller Seiten im Hauptspeicher, geordnet nach Alter<br />
➥ älteste Seite steht als erstes in der Liste<br />
➥ Algorithmus:<br />
1. falls erste Seite der Liste R = 0 hat: Seite verdrängen, fertig<br />
2. sonst: setze R = 0, schiebe Seite ans Ende der Liste, gehe<br />
zu Schritt 1<br />
➥ Algorithmus terminiert auf jeden Fall: falls es zu Beginn keine<br />
Seite mit R = 0 gab, wird die älteste Seite verdrängt<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 353<br />
6.3.3 Seitenersetzungsalgorithmen ...<br />
Clock-Algorithmus<br />
➥ Effiziente Implementierung von Second Chance<br />
➥ Seiten in Ringliste angeordnet, Zeiger auf älteste Seite<br />
J<br />
K<br />
I<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 354<br />
6.3.3 Seitenersetzungsalgorithmen ...<br />
Least Recently Used (LRU)<br />
➥ Verdränge die Seite, die am längsten nicht benutzt wurde<br />
➥ Vermutung: wird auch in Zukunft nicht mehr benutzt<br />
➥ Nahezu optimal, wenn Lokalität gegeben ist<br />
➥ Problem: (Software-)Implementierung<br />
➥ bei jedem Zugriff muß ein Zeitstempel aktualisiert werden<br />
Zugriffe<br />
(Seiten)<br />
Seiten<br />
im Haupt−<br />
speicher<br />
L<br />
7<br />
A<br />
B<br />
H G F<br />
➥ Variante: berücksichtige auch W-Bit<br />
C<br />
E<br />
D<br />
Bei Seitenfehler:<br />
betrachte Seite, auf die der Zeiger zeigt:<br />
R = 0: verdränge Seite, fertig<br />
R = 1: lösche R, setze<br />
Zeiger eins weiter,<br />
wiederhole von vorne<br />
➥ Variante mit zwei Zeigern: durchsuche nur Teil der Liste<br />
0 1 2 0 3 0 4 2 3 0 3 1 2 0 7 0 1<br />
7 7 2 2 4 4 0 0<br />
0<br />
0 3<br />
1 1 3 3 2 2 1<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 355<br />
2<br />
3<br />
0<br />
1<br />
7<br />
2<br />
1
6.3.3 Seitenersetzungsalgorithmen ...<br />
Näherung an LRU: Aging<br />
➥ Periodische Aktualisierung eines Zählerwerts für jede Seite<br />
Seitentabelle<br />
R<br />
R<br />
R<br />
R<br />
R<br />
(3)<br />
6.4 Segmentierung<br />
(1)<br />
➥ Erinnerung: logischer Adreßraum typischerweise in Segmente<br />
unterteilt: Code, Daten, Heap, Keller, ...<br />
➥ Segmentierung stellt für jedes Segment eigenen,<br />
ab 0 adressierten Adreßraum bereit<br />
➥ Adressierung erfolgt durch Segmentnummer <strong>und</strong> Offset<br />
➥ Umsetzung auf physische Adresse durch Segmenttabelle<br />
➥ enthält für jedes Segment einen Deskriptor mit:<br />
➥ physische Anfangsadresse des Segments<br />
➥ Länge des Segments<br />
➥ Zugriffsrechte (Lesen, Schreiben, Ausführen)<br />
➥ entspricht mehreren Basis-/Grenzregistern<br />
0<br />
0<br />
0<br />
0<br />
0<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 356<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 357<br />
R<br />
R<br />
R<br />
R<br />
R<br />
Shift um 1 nach rechts<br />
Auf diese Seite wurde am<br />
längsten nicht mehr zugegriffen<br />
➥ Seite mit niedrigstem Zählerstand wird ausgelagert<br />
(2)<br />
0 0 1 0 0 0 1 1<br />
0 1 0 0 0 0 0 0<br />
0 1 0 1 0 1 1 0<br />
0 0 0 1 1 1 1 0<br />
1 0 0 0 0 1 0 0<br />
Zusatztabelle<br />
6.4 Segmentierung ...<br />
Diskussion<br />
➥ Vorteile:<br />
➥ Daten in den Segmenten sind logisch zusammengehörig<br />
➥ Segment ist sinnvolle Einheit für Rechtevergabe<br />
➥ z.B. Schreibverbot auf Code-Segment<br />
➥ Einhaltung der Segmentgrenzen exakt überwachbar<br />
➥ Segmente können unabhängig voneinander wachsen<br />
➥ Nachteile:<br />
➥ dynamische Speicherverwaltung wie beim Swapping nötig<br />
➥ Segmente können beliebig groß werden<br />
➥ Ein-/Auslagern eines Segments kann sehr lange dauern<br />
➥ keine partielle Auslagerung eines Segments möglich<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 358<br />
6.4 Segmentierung ...<br />
Kombination mit Paging: Beispiel Intel Pentium<br />
➥ Logische Adressen mit 48 Bit<br />
➥ 16-Bit Segment-Selektor, 32-Bit effektive Adresse<br />
➥ Selektoren in speziellen Segmentregistern gespeichert,<br />
Befehle legen Segmentregister <strong>und</strong> effektive Adresse fest<br />
➥ Zweistufige Umsetzung auf physische Adressen:<br />
effektive<br />
Adresse<br />
Selektor<br />
Segmentregister<br />
Segment−<br />
tabelle<br />
lineare<br />
Adresse<br />
(32 Bit)<br />
zweistufige<br />
Seiten−<br />
tabelle<br />
physische<br />
Adresse<br />
(32 Bit)<br />
➥ zweistufige Seitentabelle wie auf Folie 337 ff beschrieben<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 359
6.4 Segmentierung ...<br />
Segmentierung beim Intel Pentium<br />
15 0 31 0<br />
Segment−<br />
register<br />
Selektor<br />
Effektive Adresse (Offset)<br />
Segment−<br />
tabellen−<br />
register<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 360<br />
6.5 Zusammenfassung<br />
➥ Ziele: effiziente Speicherverwaltung, Speicherschutz<br />
➥ Swapping: Auslagern ganzer Adreßräume<br />
➥ Segmentierung:<br />
➥ logische Unterteilung des Adreßraums<br />
➥ jedes Segment durch Basisadresse / Limit beschrieben<br />
➥ Paging:<br />
➥ Unterteilung des Adreßräume in Seiten gleicher Größe<br />
➥ jede Seite kann<br />
Segmenttabelle<br />
Rechte Limit<br />
Basisadresse<br />
Rechte Limit<br />
Basisadresse<br />
...<br />
Rechte Limit<br />
Basisadresse<br />
Vergleich<br />
➥ auf beliebige Kachel im Speicher abgebildet werden<br />
➥ auf Festplatte ausgelagert werden<br />
➥ Wichtig: geeignete Seitenersetzungs-Strategie<br />
lineare<br />
Adresse<br />
Roland Wismüller<br />
<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> <strong>Betriebssysteme</strong> I 361<br />
32<br />
Deskriptor<br />
32