© H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn 7 Hauptspeicherverwaltung Direkte Adressierung 7.1 Adressierung des Hauptspeichers Bei Mehrprogrammbetrieb fŸhrt die Adressbindung zur †bersetzungszeit zu Konflikten Speicher 7.2.1 ZusammenhŠngende Speicherung Direkte Adressierung Programm A Speicher Programm-/Datenadresse ¥ Programm B Die Adressen, die in einem ausfŸhrbaren Programm (z.B. als Datei auf der Platte) stehen, kšnnen direkt als Speicheradressen verwendet werden (Programmadresse = Speicheradresse) ¥ Sie werden bereits vom †bersetzer bzw. Binder festgelegt (Adressbindung zur †bersetzungszeit) ¥ Die Lage des Programms im Hauptspeicher ist daher vorgegeben Eine gute Speicherausnutzung ist nicht mšglich. Die Festlegung der endgŸltigen Adressen hat ohne Kenntnis des Belegungszustands stattgefunden, d.h. zu frŸh Programme kšnnen nur dann gemeinsam in den Speicher geladen werden, wenn die AdressrŠume disjunkt sind. 7-1 7-2 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Direkte Adressierung Relative Adressierung Daher ist es sinnvoll, die endgŸltigen Adressen erst beim Laden des Programms festzulegen Noch flexibler ist man, wenn die Adresse erst beim Zugriff gebildet wird (Adressbindung zur Laufzeit) Dies fŸhrt zur Adressbindung zur Ladezeit. Das Programm enthŠlt auch nach dem Laden in Hauptspeicher nur relative Adressen (logischer Adressraum beginnt bei 0) ¥ ¥ ProgrammadressrŠume beginnen bei Adresse 0 (verschiebbares (relocatable) Format) Ein Hilfsprogramm (ãLaderÒ) modifiziert alle Adressen Der Prozessor enthŠlt ein Basisadressregister, das beim Laden auf die Anfangsadresse gesetzt wird und bei jedem Speicherzugriff zur relativen Programmadresse dazuaddiert wird, um die Speicheradresse zu bilden. Speicher belegt MOV R1, adr : b Basisadresse : +k Programm-/Datenadresse b r k: r + Lader verschiebbares Programm Speicher 7-3 In diesem Fall ist auch ein dynamisches Umspeichern mšglich oder das Einlagern an eine andere Adresse nach einem Auslagern 7-4 © H.-U. Heiß, Uni Paderborn 7.1.2 Streuende Adressierung © H.-U. Heiß, Uni Paderborn StŸckelung in gleichlange Teile: Der Programmadressraum wird in kleinere StŸcke zerlegt, die unabhŠngig voneinander im Speicher abgelegt werden. ¥ Bessere Ausnutzung von LŸcken (geringerer externer Verschnitt) ¥ Hšherer Aufwand beim Adressieren Man spricht von dynamischer Adressumsetzung: Die Adressen im Programm (logische Adressen) werden durch eine spezielle Einrichtung des Prozessors (Speicherabbildungseinheit, Memory Management Unit (MMU)) in physikalische Adressen umgesetzt. Programmadreßraum ¥ kein externer, aber interner Verschnitt ¥ Die Teile des Adressraums hei§en Seiten (pages) ¥ Die korrespondierenden Einheiten des Speicher hei§en Seitenrahmen oder Kacheln (page frames) Programmadreßraum Speicher Speicher MMU 7-5 7-6 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn StŸckelung in gleichlange Teile (Seiten, pages) StŸckelung in variabel lange Teile (Segmente, segments) Da es nun eine variable und gro§e Anzahl von Basisadressen geben kann, kšnnen wir sie nicht alle im Prozessor halten. ¥ kein interner Verschnitt ¥ dafŸr externer Verschnitt Sie werden in einer Seitentabelle zusammengefasst und im Hauptspeicher abgelegt. Im Prozessor befindet sich nur noch die Basisadresse der Seitentabelle in einem Register Speicher Programmadreßraum belegt Die Adressen bestehen aus zwei Teilen, der Seitennummer und einer Relativadresse innerhalb der Seite (offset, displacement) Speicher Seitentabelle Tabellenbasisadresse frei + Seite frei Byte K 7-7 7-8 © H.-U. Heiß, Uni Paderborn StŸckelung in variabel lange Teile (Segmente) © H.-U. Heiß, Uni Paderborn GegenŸberstellung: Seiten- und Segmentumsetzung Da Segmente an beliebigen Adressen beginnen kšnnen, muss die Segmenttabelle volle Adressen aufnehmen kšnnen. Die Relativadresse (Byte) innerhalb des Segments wird dann zur Segmentbasisadresse addiert Tabellenbasisadresse Speicher Segmenttabelle Seitenumsetzung 0000 0001 0010 1101 0010 1011 K 11011011 + 11100000 + Segment Segmentumsetzung Byte + 0000 0001 0010 11010101 0010 1011 7-9 7-10 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Zweistufige Adressumsetzung Beschleunigung der Adressumsetzung Jedes Segment besteht aus einer variablen Menge von Seiten Problem: Segment- und Seitentabellen sind so gro§, dass sie im Hauptspeicher untergebracht werden mŸssen. Um eine effektive Hauptspeicheradresse zu bilden, muss zunŠchst die Seiten- und/oder Segmentadresse beschafft werden. Segmenttabelle Tabellenbasisadresse + FŸr jeden Zugriff (Befehl oder Daten) sind damit mindestens zwei Hauptspeicherzugriffe erforderlich. Seitentabelle + Dadurch reduziert sich die Verarbeitungsgeschwindigkeit etwa um den Faktor 2 Speicher K Segment Seite Um das zu verhindern, werden die aktuell benštigten Segment/Seitentabellen in einem schnellen Registersatz gespeichert. (TLB = Translation Lookaside Buffer) Der TLB ist ein Assoziativspeicher, d.h. eine Tabelle, bei der zu findende Eintrag simultan in allen Zeilen der Tabelle gesucht wird. Byte Er wird als eine Art Cache fŸr Seiten-/Segmenttabellen verwendet. Die Suche kann also in einem Schritt durchgefŸhrt werden. 7-11 7-12 © H.-U. Heiß, Uni Paderborn Zweistufige Adressumsetzung mit Assoziativregister © H.-U. Heiß, Uni Paderborn Typische Eigenschaften eines TLB Segmenttabelle Tabellenbasisadresse + ¥ Zeilenbreite : 4-8 Byte: Verwaltungsbits Seitentabelle ¥ + TLB (Assoziativspeicher) Segment Logische Seiten/Segment-Nr., Kachel-Nr. Zeit fŸr Adressumsetzung Erfolg (hit): ² 1 Prozesorzyklus Misserfolg (miss) 10 - 30 Prozessorzyklen ¥ Trefferrate: 99.0% - 99.99% ¥ TLB-Grš§e: 32 - 1024 Speicher Seite Kachel Zeilen (EintrŠge) K Segment Seite Byte 7-13 7-14 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn 7.2 Speicherschutz Speichertrennregister Wozu Speicherschutz ? Programmierfehler kšnnen zu Zugriffen auf Adressen au§erhalb des Programmadressraums fŸhren Im Einbenutzerbetrieb reicht es aus, das Betriebssystem gegen Fehler der Anwendungsprogramme zu schŸtzen. ¥ Durch Lesezugriffe kšnnen Prozesse Daten anderer Prozesse lesen Legt man das Betriebssystem mit allen seinen Teilen in den Randbereich des Speichers (Anfang oder Ende) so genŸgt ein einziges Register, das die kleinste oder grš§te zulŠssige Adresse eines Anwendungsprogramms festlegt. ¥ Durch Schreibzugriffe kšnnen Die Einhaltung muss von der Hardware gewŠhrleistet werden ¥ - andere Programme Betriebssystem Trennwert Teile des Betriebssystems beeintrŠchtigt, evtl. abgebrochen werden 7-15 Anwendungsprogramm 7-16 zu schützender Bereich © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Funktionsweise des Grenzregisters Speichergrenzregister (Relative Adressierung) Bei Mehrprogrammbetrieb - insbesondere Mehrbenutzerbetrieb - und relativer, zusammenhŠngender Adressierung belegt ein Programm einen zusammenhŠngenden Speicherbereich, dessen Anfang und Ende ŸberprŸft werden kšnnen ¥ Wie Ÿblich bei relativer Adressierung, wird zur (relativen) Programmadresse der Inhalt des Basisregisters hinzugezŠhlt ¥ Kleinere Adressen als die Basisadresse sind daher nicht mšglich. ¥ Die Obergrenze wird mit Hilfe des Grenzregisters geprŸft. Bei †berschreitung lšst der Prozessor eine entsprechende Unterbrechung aus Basisregister B Unterbrechung Anwendungsprogramm G Grenzregister Basisregister zu schützender Bereich B Programmadresse + ? < G Grenzregister 7-17 7-18 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Speicherschutz bei gestreuter Adressierung 7.3 Virtueller Speicher ¥ LokalitŠtsprinzip (Principle of locality) ¥ Tabellenbasisregister und SegmenttabelleneintrŠge werden um ein LŠngenfeld ergŠnzt. Bei †berschreitung wird eine Unterbrechung ausgelšst. Es kann auch nach Leseoder Schreibzugriffen differenziert werden Ein Programm greift in einem kleinen Zeitraum _t nur auf einen kleinen Teil ∆A ⊂ A seines Adressraums A zu. Tabellenbasisadresse Länge Basis Segmenttabelle differenziertes Rechtefeld (optional) ? < + Länge R ? < Basis Seitentabelle + Speicher K Segment Seite Byte 7-19 RŠumliche LokalitŠt: Wird auf eine Adresse a zugegriffen, so ist ein Zugriff auf eine Adresse in der NŠhe von a sehr wahrscheinlich. Zeitliche LokalitŠt: Wird auf eine Adresse a zugegriffen, so ist es sehr wahrscheinlich, dass in KŸrze wieder auf a zugegriffen wird. Warum ? ¥ Meistens werden die Anweisungen sequentiell ausgefŸhrt ¥ Programme verbringen die meiste Zeit in irgendwelchen Schleifen ¥ Manche Teile eines Programms werden nur in AusnahmefŠllen angesprungen ¥ Viele Felder sind nur teilweise belegt. Konsequenz: ¥ In jedem kleinen Zeitintervall wird nur ein kleiner Teil des Adressraums tatsŠchlich benštigt. Jeweils nicht benštigte Teile mŸssen nicht im Hauptspeicher sein. ¥ Es kšnnen daher auch Programme ausgefŸhrt werden, die nicht in den Hauptspeicher passen 7-20 © H.-U. Heiß, Uni Paderborn †berlagerungstechnik ¥ © H.-U. Heiß, Uni Paderborn Virtueller Speicher Kann man in einem Programm verschiedene Phasen identifizieren, die auf unterschiedliche Teile des Adressraums zugreifen, so kann man die sogenannte †berlagerungstechnik (Overlay-Technik) anwenden. ¥ Verschiedene Segmente des Adressraums, die in unterschiedlichen Phasen benštigt werden, werden im Speicher ãŸberlagertÒ. ¥ Die Zerlegung des Programms in geeignete Segmente und das Ein-und Auslagern ist Sache des Anwendungsprogrammierers. ¥ Das Zerlegen der AdressrŠume, das Ein-und Auslagern der Teile kann (mit technischer Hilfe) automatisiert werden. ¥ Die benštigten Teile werden erst auf Anforderung eingelagert (demand paging) ¥ FŸr den Benutzer / Programmierer sind diese VorgŠnge transparent ¥ Er hat den Eindruck, der Speicher sei in unbegrenzter Grš§e vorhanden. ¥ Dieser unbegrenzte Speicher ist jedoch nur virtuell vorhanden Voraussetzungen fŸr effizienten Betrieb: ¥ Das LokalitŠtsprinzip ist also dazu geeignet, Programme auszufŸhren, die als Ganzes nicht in den Speicher passen. ¥ Auch wenn der Speicher gro§ genug ist, dass jeweils ein Programm komplett hineinpasst, kann man das LokalitŠtsprinzip dazu benutzen, nur die jeweils benštigten Teile im Hauptspeicher zu halten und den Rest des Speichers anderen Programmen zur VerfŸgung zu stellen. ¥ Gestreute Adressierung (Seitentabellen) Seiten sind die Einheiten der †berlagerung ¥ Automatisches Erkennen der Abwesenheit einer Seite Zugriff auf nichtvorhandene Seite lšst Unterbrechung aus. Einlagerung der Seite wird im Rahmen der Unterbrechungsbehandlung ausgelšst. 7-21 7-22 © H.-U. Heiß, Uni Paderborn Beteiligte Komponenten (Datenstrukturen) ¥ Seitentabellen (page table) Funktion: Inhalt: ¥ Adresstransformation fŸr jede Seite: ¥ Nutzungs- und PrŠsenzinformation ¥ Physikalische Adresse (Kachelnummer) Kacheltabelle (page frame table, inverted page table) © H.-U. Heiß, Uni Paderborn Seitentabelle fŸr virtuellen Speicher ZusŠtzlich zur physikalischen Adresse enthŠlt jeder Eintrag Informationen, ob ¥ die Seite im Hauptspeicher vorhanden ist: PrŠsenzbit (presence bit, valid bit) ¥ auf die Seite zugegriffen wurde: Referenzbit (reference bit) ¥ die Seite verŠndert wurde (Schreibzugriff) Modifikationsbit (dirty bit) Speicher (Kacheln) Seiten Seitentabelle 1 1 1 Funktion: Inhalt: ¥ Speicherverwaltung fŸr jede Kachel ¥ Zustand (frei / belegt) ¥ Besitzer ¥ belegende Seite 0 0 0 1 1 0 0 0 0 1 1 1 Ersatzspeicher (swap area) Funktion: 1 0 0 Bereiche des Plattenspeichers zur Aufnahme ausgelagerter Seiten Modifikation Zugriff (Referenzierung) Präsenz 7-23 7-24 © H.-U. Heiß, Uni Paderborn Aufgaben bei der Verwaltung des virtuellen Speichers © H.-U. Heiß, Uni Paderborn Ablauf bei Seitenfehler Seitenfehler Belegen_VS Freigeben_VS Zugriff leere Kachel verfügbar ? Ja Seite präsent ? Ersatzspeicher initialisieren belegte Kacheln freigeben N J Kachel zum Räumen auswählen Strategieproblem Kachelinhalt (Seite) modifiziert ? Nein Ja Seite auslagern auf Ersatzspeicher Ersatzspeicher freigeben Zeitaufwendig! Umschalten! Neue Seite einlagern von Ersatzspeicher Einräumen Seitenfehler Ausräumen Nein Ersatzspeicher belegen Eintrag Kacheltabelle Eintrag Seitentabelle 7-25 7-26 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Parallelisierung des Seitentauschs Pufferung ¥ Da Seitenfehler oft sto§weise auftreten, ist es sinnvoll, einen Vorrat an freien Kacheln bereitzuhalten. Seitentausch ist eine zeitkritische Komponente, daher mšglichst effizient Parallelarbeit einsetzen Zu diesem Zweck kšnnen wir weiter parallelisieren und das Pufferungsprinzip einsetzen Seitentauscher Seitenfehler Seitentauscher Seitenfehler p mal E_S(STK, <S_Nr, P, Rückk> S_A(STK, <SN, PID, RK>) S_A(STK, < >) S_A(KLK, < >) S_A(KLK, < >) E_S(RK, < >) Einräumen(KN) Vorrat := Anzahl E_S(KLK, < >) S_A(KLK, < >) E_S(RK, < >) Ausräumen(KN) Kachelleerer Vorrat p? E_S(STK, < >) E_S(STRK, < >) Ausräumen() S_A(KLK, < >) Vorrat:=Vorrat+1 Vorrat:=Vorrat-1 S_A(Rückk, < >) Einräumen() S_A(RK, < >) 7-27 7-28 S_A(STRK, < >) © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn 7.4 Seitentauschverfahren Auswahlstrategie Eine kleine Rechnung: Die Seitenfehlerrate hŠngt natŸrlich stark davon ab, welche Seiten wir im Hauptspeicher halten und welche wir auslagern. Sei p pf die Wahrscheinlichkeit fŸr einen Seitenfehler (page fault), tm die Speicherzugriffszeit und t pf die Zeit zur Behandlung eines Seitenfehlers. Auswahlstrategie: Dann erhalten wir als effektive Speicherzugriffszeit im virtuellen Speicher Wenn Seitenfehler und keine Kachel frei, welche soll dann geleert werden ? ( ) teff : = 1 − p pf ⋅ tm + p pf ⋅ t pf Unterscheidung Bei halbwegs realistischen Grš§en von z.B. tm = 20 nsec und t pf = 20 msec teff = 1 − p pf ⋅ 20 + p pf ⋅ 20.000.000 ( Lokale Auswahlstrategie: ) Es wird eine Kachel desjenigen Prozesses gerŠumt, der den Seitenfehler verursacht hat = 20 + 19.999.980 ⋅ p pf Bei einer Seitenfehlerwahrscheinlichkeit von p pf = 0,001 erhalten wir eine effektive Zugriffszeit von 20 _sec, d.h. eine Verlangsamung um den Faktor 1000 ! Selbst bei einem Wert von p pf = 10 −6 verdoppelt sich die effektive Zugriffszeit. Globale Auswahlstrategie: Eine beliebige Kachel (auch fremder Prozesse) wird gerŠumt Es ist daher ungeheuer wichtig, die Seitenfehlerzahl sehr gering zu halten 7-29 7-30 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Modellierung der Seitenzugriffe Optimale Auswahlstrategie (OPTimal) Um die verschiedenen Auswahlalgorithmen vergleichen zu kšnnen, legen wir sogenannte Seitenreferenzfolgen zugrunde Es stellt sich die Frage, ob es eine optimale Strategie gibt, d.h. eine Strategie, die unter Ausnutzung der Referenzfolge die Seiten so auswŠhlt, dass die Anzahl der Seitenfehler bei einer gegebenen Speichergrš§e minimiert wird. Sei ri die Nummer der Seite, auf die zum Zeitpunkt i zugegriffen wird. TatsŠchlich gibt es eine solche Strategie und sie lautet: Dann ist R = r1 ,r2 ,r3 ,...,rn eine Seitenreferenzfolge. Es gelte ri ≠ ri +1 ∀i , d.h. aufeinanderfolgende Referenzen auf dieselbe Seite werden in der Referenzfolge zu einer Referenz zusammengefasst. Bei lokaler Strategie erhalten wir fŸr jeden Prozess eine Referenzfolge. Die Referenznummern beziehen sich auf den jeweiligen Adressraum. Bei globaler Strategie entsteht die Referenzfolge als Mischung der Referenzfolgen der Prozesse. Der Seitennummer ist die Prozesskennung beizufŸgen, so dass eine Referenz aus einem Paar (PID, Seitennummer) besteht. ãWŠhle (zum Auslagern) die Seite, die am lŠngsten nicht mehr benštigt werden wird.Ò Optimale Strategie: 3 Seitenfehler (ohne Initialseitenfehler) Zeit 1 Referenz 0 Kachel 1 0 Kachel 2 Kachel 3 2 2 0 2 3 4 0 2 4 4 3 0 2 3 5 2 0 2 3 6 3 0 2 3 7 0 0 2 3 FŸr die nachfolgende Diskussion ergibt sich daraus kein Unterschied. 7-31 7-32 8 1 0 1 3 9 0 0 1 3 10 3 0 1 3 11 0 0 1 3 12 2 2 1 3 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Realisierbare Strategien Realisierbare Strategien Die optimale Strategie hat einen schwerwiegenden Nachteil: ¥ Sie ist nicht realisierbar, da i.a. zu jedem Zeitpunkt nur die bisher stattgefundenen Referenzen, nicht aber die zukŸnftigen bekannt sind. (Die optimale Strategie dient daher nur als ãMesslatteÒ fŸr realisierbare Strategien) Daher: Versuchen, auf Grund der vergangenen Referenzen die zukŸnftigen Referenzen vorherzusagen. RAND (Random) Ausgelagert wird eine zufŠllig ausgewŠhlte Seite ¥ FIFO (First-In-First-Out) Ausgelagert wird die Seite, die am schon am lŠngsten im Speicher ist ¥ LFU (Least Frequently Used) Ausgelagert wird die Seite, die am wenigstens hŠufig referenziert wurde LokalitŠtsprinzip bedeutet: Das Zugriffsverhalten in der unmittelbaren Vergangenheit ist eine gute SchŠtzung fŸr das Verhalten in der unmittelbaren Zukunft. ¥ LRU (Least Recently Used) Ausgelagert wird die Seite, die am lŠngsten nicht mehr refenziert wurde Auswahl basiert auf ¥ ¥ ¥ HŠufigkeit der Zugriffe auf eine Seite Zeitpunkte der Zugriffe RNU (Recently Not Used) Ausgelagert wird eine Seite, die innerhalb eines vorgegebenen Zeitraums nicht mehr referenziert wurde 7-33 7-34 © H.-U. Heiß, Uni Paderborn LRU (Least Recently Used) © H.-U. Heiß, Uni Paderborn LRU (Least Recently Used) LRU bedeutet, dass die am lŠngsten nicht mehr referenzierte Seite ausgelagert wird. Man kann dies leicht mit einem Stapel (stack) realisieren, bei dem die jŸngst zugegriffene oben auf den Stapel gelegt wird. Andere Seiten ãrutschenÒ dadurch nach unten. Bei k Kacheln sind die k obersten Seiten des Stapels im Speicher Zugriff auf Seite 5 (im Stapel) 3 7 4 9 5 8 1 t=i Zugriff auf Seite 6 (nicht im Stapel) 5 3 7 4 9 8 1 3 7 4 9 5 8 1 6 3 7 4 9 5 8 t = i+1 t=i t = i+1 7-35 Beispiel fŸr LRU-Strategie (4 Seitenfehler) Zeit 1 Referenz 0 Kachel 1 0 Kachel 2 Kachel 3 0 Stapel 2 2 0 2 2 0 3 4 0 2 4 4 2 0 4 3 3 2 4 3 4 2 5 2 3 2 4 2 3 4 6 3 3 2 4 3 2 4 7 0 3 2 0 0 3 2 7-36 8 1 3 1 0 1 0 3 9 0 3 1 0 0 1 3 10 3 3 1 0 3 0 1 11 0 3 1 0 0 3 1 12 2 3 2 0 2 0 3 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn RNU (Recently Not Used) Anmerkungen zur Realisierung RNU ist Šhnlich wie LRU, arbeitet jedoch mit einem festen ãZeitfensterÒ der LŠnge k, das Ÿber die Referenzfolge geschoben wird. Alle realisierbaren Strategien erfordern bei jedem Zugriff gewisse Datenoperationen (z.B. Stack-Operationen (LRU), ZŠhlerinkrementierung (LFU),..) FŸr eine Auslagerung in Frage kommen alle Seiten, die innerhalb des Fensters nicht referenziert wurden. Sie vollstŠndig in Software durchzufŸhren ist zu aufwendig. Die Fenstergrš§e k ist so wŠhlen, dass Anzahl der RNU-Seiten klein, aber > 0 Auch eine Hardware-UnterstŸtzung (erweiterte Funktion des TLB) wird i.a. aus AufwandsgrŸnden nicht vorgesehen. Beispiel fŸr RNU-Strategie (4 Seitenfehler) Man begnŸgt sich daher mit leichter realisierbaren AnnŠherungsverfahren. (fŸr Fenstergrš§e k=2) Zeit 1 Referenz 0 Kachel 1 0 Kachel 2 Kachel 3 2 2 0 2 3 4 0 2 4 4 3 3 2 4 5 2 3 2 4 6 3 3 2 4 7 0 3 2 0 8 1 3 1 0 9 0 3 1 0 10 3 3 1 0 11 0 3 1 0 Von den diskutierten Verfahren zeigt LRU i.d.R. das beste Verhalten, d.h. LRU fŸhrt zur geringsten Seitenfehlerrate. 12 2 3 2 0 Die in realen Betriebssystemen zu findenden Seitentauschstrategien sind daher leicht realisierbare Varianten von LRU Mit der Ÿblichen Hardware-UnterstŸtzung, d.h. der Aktualisierung von Referenzbits bei jedem Zugriff auf eine Seite, lŠsst sich LRU bzw. RNU annŠhern. 7-37 7-38 © H.-U. Heiß, Uni Paderborn AngenŠherte LRU/RNU-Strategie © H.-U. Heiß, Uni Paderborn Second-Chance-Algorithmus (Clock-Algorithmus) Die Referenzindikatoren geben an, auf welche Seiten zugegriffen wurde, geben aber keine Auskunft Ÿber den Zeitpunkt des letzten Zugriffs. Der Clock-Algorithmus ist insofern geschickter, als er die Referenzindikatoren nicht alle auf einmal zurŸcksetzt, sondern immer nur Teilmengen: Da eine Seite nur bei Zugriff eingelagert wird, sind ohnehin alle Referenzindikatoren 1 und daher nicht hilfreich bei der Auswahl. ¥ Die Referenzindikatoren mŸssen deshalb periodisch zurŸckgesetzt werden, damit man erkennen kann, auf welche Seiten aktuell noch zugegriffen wird. ¥ Bei der Suche nach einem Kandidaten wird die nŠchste Seite gewŠhlt, deren Referenzbit 0 ist. Präsenzindikatoren 0 0 1 1 2 1 3 0 4 1 5 0 – Referenzindikatoren ¥ Im Zuge dieser linearen Suche werden alle besuchten Referenzindikatoren zurŸckgesetzt. 1 0 – ¥ Sie haben - bis der Zeiger das nŠchste Mal vorbeikommt - eine weitere Chance, referenziert zu werden ¥ Ausgelagert wird also eine Seite, die seit dem letzten Durchlauf des Auswahlzeigers nicht wieder referenziert wurde. Setzen bei individueller Referenz 1 – Der Vektor der Referenzbits wird zyklisch durchlaufen. Periodisch gemeinsam löschen 7-39 7-40 © H.-U. Heiß, Uni Paderborn „Second Chance“-Algorithmus (Clock-Algorithmus) © H.-U. Heiß, Uni Paderborn 7.5 Leistungsaspekte des virtuellen Speichers ¥ Referenzindikatoren ¥ 0 Auswahlzeiger 0 1 Das Prinzip des virtuellen Speichers funktioniert um so besser, je hšher die LokalitŠt der Programme ist. LokalitŠt ist dann gut, wenn auf wenige Seiten mit hoher Wahrscheinlichkeit, auf viele mit sehr geringer Wahrscheinlichkeit zugegriffen wird (kleines α) 0 0 0 1 1 1 1 0 1 0 1 0 0.7 1 0 0 0.6 1 0 1 1 0 1 1 0 0 0.4 1 0.3 α = 0.3 0.2 α = 0.5 α = 1.0 0 1 Auswahlzeiger Auswahlzeiger 1 1 1 0 0 1 0.8 p(s) Seiten-Zugriffswahrscheinlichkeit α = 0.1 α Parameter, der die Streuung ausdrückt 0.5 α = 0.2 0.1 Vor Auswahl Nach Auswahl Nach weiteren Referenzen 0 s Seiten geordnet nach Zugriffswahrscheinlichkeit 7-41 7-42 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn 7.5.1 Modellierung des Seitentauschs Modellierung des Seitentauschs Im Speicher sollten also die Seiten sein, auf die mit hoher Wahrscheinlichkeit zugegriffen wird. Sei p(s) Seiten-Zugriffswahrscheinlichkeit 0.5 s die Anzahl verfŸgbarer Kacheln s0 die Adressraumgrš§e Die s am hŠufigsten zugegriffenen Seiten seien im Hauptspeicher Treffer 0.4 Dann gilt: 0.3 s Seitenfehler Trefferwahrscheinlichkeit phit ( s ) = ∫ p( z ) dz 0 0.2 Seitenfehlerwahrscheinlichkeit 0.1 p pf ( s ) = 1 − phit ( s ) Normierung auf die Adressraumgrš§e: 0 im Speicher auf Platte s0 s Seiten geordnet nach Zugriffswahrscheinlichkeit 7-43 s 0 Speicherangebot σ = s s0 Normierte Seitenfehlerwahrscheinlichkeit p′pf (σ ) = p pf ( s ) 7-44 © H.-U. Heiß, Uni Paderborn Abhängigkeit des Seitenfehlerwahrscheinlichkeit vom Speicherangebot © H.-U. Heiß, Uni Paderborn Mehrprogrammbetrieb p′pf (σ ) Seitenfehlerwahrscheinlichkeit 1 K Anzahl Speicherkacheln n Anzahl der Programme im Hauptspeicher (Multiprogramming Level, MPL) s0 Grš§e des Programmadressraums (in Seiten) ts Zeit zwischen zwei Seitenfehlern tT Seitentransferzeit s Speicherangebot in Seiten 0.8 α = 1.0 0.6 α = 0.5 α = 0.3 0.4 α = 0.2 α = 0.1 0.2 σ = σ/s0 Speicherangebot normiert auf Programmadressraum σ 0 0.2 0.4 0.6 0.8 1 Es gilt bei n identischen Programmen: s(n) = K / n σ(n) = K / (n s0) bzw. 7-45 7-46 © H.-U. Heiß, Uni Paderborn Zwischenseitenfehlerzeit © H.-U. Heiß, Uni Paderborn Verzahnung von Rechen- und Seitentauschphasen Fall: ts > tT ts Zeit zwischen zwei Seitenfehlern tS tT tS tT ... tS ... tT tS tS tT tT tS tT t „Lifetime-Function“ Fall: ts < tT tS tT tS tS σ Speicherangebot Die Zeit zwischen zwei Seitenfehlern hŠngt vom Speicherangebot ab. Links vom ãKnieÒ kann die Funktion durch eine Parabel angenŠhert werden: 2 K ts ≈ a ⋅ σ 2 = a ⋅ n ⋅ s0 tT tS tT tS tT tS tT tS tT tS tT tT tS tT tS tT tT tS ... tT t Prozessor leer Im zweiten Fall ergeben sich Phasen, in denen der Prozessor leer steht, weil alle Prozesse auf ihre Seiten warten D.h. ts sinkt mit wachsendem n 7-47 tS 7-48 © H.-U. Heiß, Uni Paderborn 7.5.2 Thrashing-Effekt (to thrash: strampeln, zappeln © H.-U. Heiß, Uni Paderborn Thrashing ) Ziel: Gute Prozessorauslastung Das System ist nur noch mit Seitentausch beschŠftigt und kommt kaum noch zu produktiver Arbeit Viele Programme gleichzeitig bearbeiten Blockiert (warten auf Seite) Hoher Multiprogramminggrad n Geringer Speicherplatz s pro Prozeß Kurze Zeit zwischen zwei Seitenfehlern Stau am Seitentauschgerät (Platte) Bereit Rechnend Fast alle Prozesse blockiert Ergebnis: Schlechte Prozessorauslastung 7-49 7-50 © H.-U. Heiß, Uni Paderborn Thrashing-Kurve © H.-U. Heiß, Uni Paderborn †berlastphŠnomene Prozessorauslastung Thrashing-Bereich Thrashing ist eine spezielle AusprŠgung eines †berlastphŠnomens, das in vielen Bereichen (nicht nur der Informatik) auftritt und jeweils einen Leistungskollaps zur Folge haben kann: Beispiele: nmax Multiprogramminggrad n Es muss verhindert werden, dass das System in den †berlastbereich gerŠt ¥ Rechnernetze zu viele Pakete ¥ Telephonnetze: ¥ Datenbanken: ¥ Stra§enverkehr ¥ Parallelverarbeitung zu viele Prozessoren zu viele Anrufe zu viele Transaktionen zu viele Fahrzeuge Grund: Koordinationsaufwand wŠchst Ÿberproportional an 7-51 7-52 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn †berlastverhinderung Thrashing-Kurve dynamisch Um den Thrashing-Effekt zu verhindern, muss der Multiprogramminggrad begrenzt werden Prozessorauslastung n n max Virtueller Speicher Warten n < nmax Problem: Wie findet man optimales nmax ? t=1 Erschwernis: t=0 t=2 Programmverhalten Šndert sich Ÿber die Zeit: ¥ Individuelles Programmverhalten Šndert sich ¥ Zusammensetzung der Programmmenge Šndert sich (Multiprogramming-Mix) Multiprogramminggrad n nmax 7-53 7-54 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Thrashing-Verhinderung Thrashing-Verhinderung Das optimale nmax ergibt sich im Betrieb und muss dynamisch angepasst werden. Zwei StrategieansŠtze Thrashing-Verhinderung ist daher eine Regelungsaufgabe ¥ n n Indirekte oder lokale Strategie FŸr jeden Prozess i wird individuell eine sinnvolle Kachelanzahl si festgelegt. Der maximale Multiprogramminggrad ergibt sich dann indirekt max Virtueller Speicher Warten nmax : = max n n < nmax ¥ Regelung 7-55 n i=1 ∑ si ≤ K Direkte oder globale Strategie Die Messung der globalen SeitentauschaktivitŠt fŸhrt zur Berechnung eines optimalen nmax 7-56 © H.-U. Heiß, Uni Paderborn 7.5.3 Lokale Regelung der SeitentauschaktivitŠt © H.-U. Heiß, Uni Paderborn Das Page-Fault-Frequency-Modell (PFF) Seitenfehlerrate ρ Das Working-Set-Modell Der Working-Set (Arbeitsmenge) Wi (t, τ ) eines Programms i ist definiert als die Menge Seiten, auf die der Prozess innerhalb der letzten τ Zeiteinheiten zugegriffen hat (vgl. RNU) Zeitfenster der Länge τ rt-τ-1 rt-τ rt-τ+1 s erhöhen ρ2 rt-4 rt-3 rt-2 rt-1 rt Zeit ρ1 s verringern Bei geeigneter Wahl von τ gibt die Grš§e des Working-Sets wi (t , τ ) := Wi (t , τ ) die Anzahl Kacheln an, die der Prozess zum vernŸnftigen Arbeiten benštigt. wi (t , τ ) wird mit Hilfe der Referenzinformation fŸr jeden Prozess geschŠtzt. n Ein neuer Prozess x wird nur dann in den Speicher geladen, wenn w x ≤ K − ∑ wi (t , τ ) i =1 Ziel des Verfahrens ist es also, dass alle Prozesse ihre Working-Sets im Speicher unterbringen kšnnen. Anzahl Kacheln s FŸr jeden Prozess wird die Seitenfehlerrate (# Seitenfehler pro Zeiteinheit) gemessen und dient zur Einstellung der Kachelanzahl: ρ < ρ1: s: = s −1 ρ > ρ2 : s: = s + 1 Regelungsmechanismus Der Multiprogramminggrad ergibt sich dann indirekt wie beim Working-Set-Verfahren 7-57 7-58 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn 7.5.4 Globale Regelung der SeitentauschaktivitŠt Die 50%-Regel Das Kriterium der Zwischenseitenfehlerzeit (L=S-Kriterium) Thrashing liegt dann vor, wenn viele Prozesse am Seitentausch blockiert sind. Die Zeit zwischen zwei Seitenfehlern ts (bzw. L) soll so gro§ sein wie die Seitentransferzeit tT (bzw. S) Prozessorauslastung d.h. die mittlere WarteschlangenlŠnge nst an der Seitentauschplatte grš§er als 1 ist. Nach der Warteschlangentheorie entspricht nst = 1 einer Auslastung des GerŠts von 50%. Neue Prozesse werden daher nur in den Hauptspeicher geladen, wenn die (Ÿber ein lŠngeres Zeitintervall ermittelte) Auslastung des PlattengerŠts nicht Ÿber 50% liegt. 1 Auslastung tS / tT 1 Seitentauschplatte 0,5 Prozessor n nopt nL=S Der daraus resultierende Betriebspunkt liegt in der Regel etwas zu weit rechts, was aber bei der Regelung berŸcksichtigt werden kann. 7-59 nopt n n50% 7-60 © H.-U. Heiß, Uni Paderborn © H.-U. Heiß, Uni Paderborn Parabelapproximation Parabelapproximation Die Thrashing-Kurve kann im Bereich des Maximums als Parabel angenŠhert werden NŠherungsformel η = a0 + a1n + a2 n 2 1 Prozessorauslastung Die Koeffizienten a0 ,a1 ,a2 werden auf Grund von Messungen ( ηt ,nt ) dynamisch berechnet (geschŠtzt). Meßwerte Der Scheitelpunkt n* der Parabel kann dann berechnet und als Obergrenze des Multiprogramminggrades verwendet werden. Falls die SchŠtzung eine nach oben gešffnete Parabel ergibt, so kann der Scheitel nicht als Optimum verwendet werden. In diesem Fall gibt aber die 1. Ableitung der geschŠtzten Parabel immer noch einen Hinweis auf die Steigung, d.h. ob man sich links oder rechts vom Optimum befindet. tatsächliche Thrashing-Kurve geschätzte Parabel Die aktuelle Obergrenze kann daraufhin erhšht oder erniedrigt werden. n 7-61 7-62 © H.-U. Heiß, Uni Paderborn 7.6Beispiele © H.-U. Heiß, Uni Paderborn Paging 7.6.1 Speicherverwaltung in Unix ¥ Heutige Unix-Systeme verfŸgen Ÿber virtuellen Speicher (demand paging) FrŸhere Unix-Systeme besa§en noch keinen virtuellen Speicher. ¥ Bei Seitenfehler wird die fehlende Seite in eine frei Kachel eingelagert Der Hauptspeicher wurde jedoch als BM mit VerdrŠngung verwaltet, d.h. Prozesse mit ihren AdressrŠumen wurden auf Plattenspeicher ausgelagert (swapping), wenn ¥ Ein spezieller BS-Prozess (page-daemon) hat dafŸr zu sorgen, dass eine hinreichende Anzahl freier Kacheln (lotsfree) existiert. ¥ ¥ ¥ Sind zuwenig Kacheln frei, beginnt er mit dem Auslagern von Seiten ¥ Dazu wird ein globaler Second-chance-Algorithmus verwendet. ¥ Die verschiedenen Unix-Systeme unterscheiden sich in Details ¥ Zur Vermeidung von Thrashing wird auf Swapping zurŸckgegriffen, d.h. komplette Prozesse bzw. ihre AdressrŠume werden ausgelagert Swapping kein Platz fŸr Prozesserzeugung zur VerfŸgung stand eine dynamische Speicheranforderung nicht erfŸllt werden konnte Der auszulagernde Prozess wurde nach folgenden Kriterien ausgewŠhlt: ¥ ¥ Zustand:bevorzugt blockierte Prozesse auslagern PrioritŠt und Aufenthaltszeit im Hauptspeicher PrioritŠt und Zeit seit der letzten Einlagerung werden addiert. Der Prozess mit dem hšchsten Wert wird ausgeagert Verwaltung des Hauptspeichers Tabellenverfahren mit First-Fit. und des 7-63 Swap-Bereichs nach abgesetztem 7-64 © H.-U. Heiß, Uni Paderborn Aktivierung des Page daemon © H.-U. Heiß, Uni Paderborn Modifizierter ãSecond ChanceÒ-Algorithmus (Two-Hand-Clock-Algorithmus, Unix 4.2BSD) AT&T System V: Referenzindikatoren ¥ Originaler Second-chance-Algorithmus ¥ Statt lotsfree zwei Parameter min und max Aktivierung, wenn akt. Kachelvorrat < min Beendigung, wenn akt. Kachelvorrat > max Zeiger 2: Räumen Zeiger 1: Nullsetzen 4.3BSD: 0 0 1 0 0 0 1 1 1 1 0 1 0 1 0 1 Zeiger 2: Räumen 1 1 0 0 1 ¥ ¥ Modifizierter Second-chance-Algorithmus (Two-hand-clock-Algorithmus) 0 Vorgabe: Parameter lotsfree Aktivierung, wenn akt. Kachelvorrat < lotsfree Beendigung, wenn akt. Kachelvorrat > lotsfree 0 Zeiger 1: Nullsetzen 1 7.6.2 Speicherverwaltung in Windows NT ¥ Im Gegensatz zu Unix wird in NT eine lokale Seitentauschstrategie eingesetzt: Muss infolge eines Seitenfehlers eine Kachel gerŠumt werden, so geschieht das immer auf Kosten des den Seitenfehler verursachenden Prozesses. ¥ Beim Seitenfehler wird nicht nur die fehlende Seite, sondern einige mehr aus der Nachbarschaft dieser Seite eingelagert (clustering) ¥ Die Menge der aktuell im realen Speicher befindlichen Seiten eines Prozesses hei§t ãWorking SetÒ ¥ Die Seitentauschstrategie hŠngt von der Hardware ab: FIFO (modifiziert) bei Alpha-Prozessoren und Intel-Multiprozessorsystemen Clock bei Intel-Monoprozessorsystemen ¥ Die Grš§e des Working Sets wird durch Standardwerte (Min und Max) initialisiert. Bei Bedarf kšnnen Working Sets Ÿber das Maximum hinaus wachsen (Working set expansion) und auch wieder schrumpfen (Working set trimming) Beides ist abhŠngig von der Seitenfehlerrate und vom globalen Vorrat freier Seiten. ¥ FŸr das BS selbst wird ebenfalls ein Working Set Mechanismus verwendet. 1 1 1 0 0 1 Nach Aktivieren des Pagedaemon Vor Aktivieren des Pagedaemon 7-66 © H.-U. Heiß, Uni Paderborn 7-67 1 1 0 Zeiger 1: Nullsetzen 0 1 Vor Aktivieren des Pagedaemon 7-65 Zeiger 2: Räumen 0