10.10.2013 Aufrufe

Betriebssysteme I - Betriebssysteme und verteilte Systeme

Betriebssysteme I - Betriebssysteme und verteilte Systeme

Betriebssysteme I - Betriebssysteme und verteilte Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!