Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Kapitel 8.2 Speicherverwaltung: Paging Segmentierung

Ähnliche Präsentationen


Präsentation zum Thema: "Kapitel 8.2 Speicherverwaltung: Paging Segmentierung"—  Präsentation transkript:

1 Kapitel 8.2 Speicherverwaltung: Paging Segmentierung
Systeme 1 Kapitel 8.2 Speicherverwaltung: Paging Segmentierung WS 2009/10

2 Speicherverwaltung (Wiederholung)
Grundlegende Anforderungen an Speicherverwaltung: Aufteilung des verfügbaren Hauptspeichers zwischen Betriebssystem verschiedenen Prozessen 5 Anforderungen nach Lister / Eager: Relokation: Übersetzung der Speicherreferenzen im Programmcode in tatsächliche physikalische Speicheradressen durch Prozessorhardware und Betriebssystemsoftware. Schutz Schutz von Prozessen gegen beabsichtigte oder unbeabsichtigte Störungen durch andere Prozesse mittels in Hardware integrierter dynamischer Adressüberprüfung. WS 2009/10

3 Speicherverwaltung (Wiederholung)
5 Anforderungen nach Lister / Eager (ff): Gemeinsame Nutzung Gemeinsame und kontrollierte Nutzung von Speicher durch mehrere Prozesse: z.B. Bibliotheken oder gemeinsam genutzter Speicher zur Kooperation. Logische Organisation Logische Aufteilung von linear organisierten Speicher anhand der speziellen Anforderungen der Programme. Physikalische Organisation Organisation des Datenflusses zwischen den verschiedenen Speicherarten (z.B. zwischen Hauptspeicher und Sekundärspeicher). WS 2009/10

4 Grundlegende Methoden der Speicherverwaltung
Partitionierung Aufteilung des Speichers in Bereiche mit festen Grenzen Fester, zusammenhängender Teil des Hauptspeichers für Betriebssystem und pro Prozess ein zusammenhängender Teil des Speichers Verschiedene Varianten: Statische Partitionierung Einteilung des Speichers in feste Anzahl von Partitionen Dynamische Partitionierung Einteilung in Partitionen variabler Länge Buddy-Verfahren Kombination von statischen und dynamischen Verfahren. Vorteil: geringe Komplexität Nachteil: Prozesse sind entweder ganz im Speicher oder komplett ausgelagert. -> Paging WS 2009/10

5 Relokation Nach Aus- und Wiedereinlagern von Prozessen liegen Programmcode bzw. Daten an anderer Stelle. Absolute Sprungbefehle und Datenzugriffsbefehle sollen weiterhin funktionieren. Unterscheidung: Logische Adresse: Bezug auf eine Speicherstelle unabhängig von der aktuellen Zuteilung von Daten im Speicher Relative Adresse: Spezialfall einer logischen Adresse Adresse relativ zu einem bekannten Punkt (meist Programmanfang) ausgedrückt Physikalische bzw. absolute Adresse: konkrete Stelle im Hauptspeicher WS 2009/10

6 Relokation Berechnung von absoluten Adressen aus relativen Adressen durch Hardware. Beim Einlagern eines Prozesses: Adresse des Programmanfangs in Basisregister. Zusätzlich: Zur Realisierung von Speicherschutz enthält Grenzregister die höchste erlaubte Speicheradresse WS 2009/10

7 Relokation (Relative Adresse)
Prozesskontrollblock Programm Daten Stapel Basisregister Addierer Absolute Adresse Grenzregister Vergleicher Unterbrechung an Betriebssystem Prozessabbild im Hauptspeicher WS 2009/10

8 Grundlegende Methoden der Speicherverwaltung
Einfaches Paging Im Gegensatz zu Partitionierung werden Prozessen nicht notwendigerweise zusammenhängende Speicherbereiche zugeordnet. Hauptspeicher aufgeteilt in viele gleichgroße Seitenrahmen. Speicher eines Prozesses aufgeteilt in Seiten derselben Größe. Zuordnung von Seiten zu Seitenrahmen beim Laden von Prozessen Logische Adressen der Form „Seitennummer, Offset“ Pro Prozess eine „Seitentabelle“ Seitentabelle übersetzt Seitennummern in Nummern von Seitenrahmen im physikalischen Speicher 000001 6-Bit-Seitennummer 10-Bit-Offset WS 2009/10

9 Grundlegende Methoden der Speicherverwaltung
Einfaches Paging Hier Seite 1 des Seitenrahmen physikalische Adresse mit 26 Seiten pro Prozess und 210 Bytes Seitengröße. Nachteil: Bei Auslagerung in den Hintergrundspeicher immer nur für vollständigen Prozess möglich. Paging mit virtuellem Speicher 000001 6-Bit-Seitennummer 10-Bit-Offset Seitentabelle des Prozesses 1 2 3 Logische Adresse WS 2009/10

10 Grundlegende Methoden der Speicherverwaltung
Paging mit virtuellem Speicher Wenn man im Zusammenhang mit Auslagern sowieso mit Hintergrundspeicher arbeitet, dann hat man auch die Möglichkeit, nur Teile der Daten von Prozessen ein- bzw. auszulagern. Das Programm kann momentan weiter ausgeführt werden, wenn die aktuell benötigten Informationen (Code und Daten) im Speicher sind. Wird auf Informationen zugegriffen, die ausgelagert (auf der Festplatte) sind, so müssen diese nachgeladen werden. Hauptspeicher + Hintergrundspeicher = virtueller Speicher erlaubt logische Adressen über vollen Adressraum (32 bzw. 64 Bit), da Seiten zu jeder Zeit in den Hintergrundspeicher ausgelagert werden können. WS 2009/10

11 Grundlegende Methoden der Speicherverwaltung
Paging mit virtuellem Speicher Wie bei einfachem Paging: Trennung der logischen Adressen in Seitennummer und Offset, z.B.: Logische Adresse: Seitentabelleneintrag: Umsetzung der Adresse mit Hardwareunterstützung (MMU). 22-Bit-Seitennummer 10-Bit-Offset P M Weitere Bits Seitenrahmennummer P (Present Bit), M (Modify Bit), weitere Bits für Schutzrechte etc. WS 2009/10

12 Grundlegende Methoden der Speicherverwaltung
Paging mit virtuellem Speicher Da Programmcode und Daten eines Prozesses teilweise oder vollständig ausgelagert sein können ergeben sich zwei Probleme: Eine angeforderte logische Adresse befindet sich nicht im Speicher Seitenfehler Muss eine ausgelagerte Seite geladen werden und der Hauptspeicher ist voll, dann muss Platz geschaffen werden durch Auslagerung einer anderen Seite Verdrängung WS 2009/10

13 Grundlegende Methoden der Speicherverwaltung
Paging mit virtuellem Speicher Verdrängung (MMU) stellt anhand des present bits fest, dass angefragte Seite nicht im Hauptspeicher ist (=> „Seitenfehler“ bzw. „page fault“). Der laufenden (und anfragende Prozess) muss unterbrochen werden Betriebssystemroutine zum Laden der angeforderten Seite wird gestartet Falls die angeforderte Seite auf der Festplatte existiert: Falls freier Seitenrahmen vorhanden: Lade Seite in freien Seitenrahmen Sonst Starte Betriebssystemroutine zur Verdrängung Sonst: => angeforderte Adresse ist unbekannt / ungültig Stoppe Prozess => Speicherschutzverletzung WS 2009/10

14 Verdrängung Wenn kein freier Seitenrahmen vorhanden: Verdrängen von Seitenrahmen => Festplatte. Je nach Betriebssystem: Alle Seitenrahmen sind Kandidaten für Verdrängung oder Nur Seitenrahmen des eigenen Prozesses Entscheidung unter diesen Kandidaten gemäß Verdrängungsstrategie (Ziel: gute Ausnutzung von Lokalität). Ist das Modify-Bit M gesetzt, dann muss Seite im entsprechenden Rahmen auf Festplatte zurückgeschrieben werden. Nach Verdrängen eines Seitenrahmens muss die Seitentabelle des zugehörigen Prozesses aktualisiert werden. Da Seitentabellen meist nur dünn besetzt: Suchen des verdrängten Seitenrahmens in Seitentabelle des Prozesses ineffizient Abbildung Seitenrahmennummer --> (Prozessnummer, Seitennummer) hilfreich WS 2009/10

15 Verdrängung Seitenrahmen 2 soll freigeräumt werden. Seitenrahmen 0
Hauptspeicher Seite P Rahmen 1 2 3 4 5 6 7 Seite P Rahmen 1 2 3 4 5 6 7 virtueller Adressraum Prozess 1 virtueller Adressraum Prozess 2 Seite 6 von Prozess 2 soll Aus- gelagert werden => P = 0 WS 2009/10 Seitentabelle von Prozess 1 Seitentabelle von Prozess 2

16 Verdrängung Seitenrahmen 0 Seitenrahmen 1 Seitenrahmen 2
Hauptspeicher Rahmen Prozess Seite 1 2 6 3 4 Abbildung Seitenrahmennummer -> (Prozessnummer, Seitennummer) WS 2009/10

17 Größe von Seitentabellen
Problem: Größe der Seitentabelle Bsp.: 32-Bit-Adressraum 20-Bit Seitennummer, 12-Bit Offset 220 Seiten der Größe 212 Byte Seitentabelle mit 220 Zeilen => 4 MB für Seitentabelle bei 4 Byte pro Zeile, d.h. 210 Seiten für die Seitentabelle! Für jeden Prozess! Noch schlimmer bei 64-Bit-Adressraum … Abhilfe: Zwei- und Mehrstufige Seitentabellen „Invertierte Seitentabellen“ WS 2009/10

18 Zweistufige Seitentabellen
„Hierarchische Seitentabelle“ (vgl. Pentium)‏ Idee: Speichere auch Seitentabelle im virtuellen Speicher Im Beispiel: 220 Seiten mit jeweils 212 Byte, pro Eintrag 4 Byte => 222 Byte für Seitentabelle, d.h. 210 Seiten für Seitentabelle benötigt Führe „Hauptseite“ (212 Byte) ein, die immer im Speicher liegt. Hauptseite enthält 210 Verweise auf Seiten der „Benutzerseitentabelle“, indiziert mit ersten 10-Bit der Adresse Wenn gesuchte Seite der Benutzerseitentabelle nicht im Speicher: Lade in einen freien Seitenrahmen Benutze 10 mittlere Bit, um in „Untertabelle“ den gesuchten Seitenrahmen zu finden (evtl. Nachladen von Festplatte)‏ Restliche 12-Bit wie üblich als Offset innerhalb des Seitenrahmens WS 2009/10

19 Adressumsetzung Virtuelle Adresse Reale Adresse 10-Bit 10-Bit 12-Bit
Rahmennr. Offset Register Hauptseiten- tabellenzeiger Hauptseitentabelle (210 Einträge) Seiten- rahmen Untertabelle (210 Einträge) Programm Paging-Verfahren Hauptspeicher WS 2009/10

20 Beispiel: Vierstufige Seitentabellen
Aktuelle Implementierungen verwenden meist Vierstufige Seitentabellen: Aber recht aufwändiger Berechnung. Diese Berechnungen werden sehr häufig vorgenommen => Optimierungen! Virtuelle Adresse Level 4 Index Level 3 Index Level 2 Index Level 1 Index Offset Physikalische Adresse Hauptspeicher Level 1 Eintrag Level 1 Tabelle Level 2 Eintrag Level 2 Tabelle Level 3 Eintrag Level 3 Tabelle Level 4 Eintrag Level 4 Tabelle WS 2009/10

21 Translation Lookaside Buffer (TLB)
Effizienzproblem: Bei Paging zieht ein Speicherzugriff auf Code / Daten einen zusätzlichen Zugriff auf die Seitentabelle im Speicher nach sich (sogar zwei bei zweistufiger Seitentabelle). Doppelte (dreifache) Zugriffszeit Hardwaremäßige Beschleunigung durch einen zusätzlichen Cache für Adressübersetzung: Translation Lookaside Buffer (TLB) = „Adressumsetzungspuffer“ Ablauf: Nachsehen, ob Eintrag zu virtueller Adresse in TLB Wenn ja: Lese Seitenrahmennummer aus TB Sonst: Nachsehen in Seitentabelle Evtl. Seite von Festplatte nachladen WS 2009/10

22 Translation Lookaside Buffer (TLB)
Virtuelle Adresse Hauptspeicher Seitennr. Offset Sekundärspeicher TLB TLB-Treffer Offset Seite laden Seiten- rahmen Seitentabelle TLB- Fehlschlag Rahmennr. Offset Reale Adresse Seitenfehler WS 2009/10

23 Translation Lookaside Buffer (TLB)
Der TLB ist ein Hardware-Cache. Meist realisiert als assoziativer Speicher: Einträge der Form (Seitennummer, Seitentabelleneintrag)‏ Angefragte Seitennummer wird durch Hardware parallel mit allen Einträgen in TLB verglichen. Ausgabe: Vorhanden, Seitentabelleneintrag Nicht vorhanden Bei Eintrag: Verdrängungsstrategien notwendig … Teuerste Realisierungsmöglichkeit eines Caches! WS 2009/10

24 Translation Lookaside Buffer (TLB)
Virtuelle Adresse Seitennr. Offset 5 502 Seitennr. Seitentabelleneinträge 19 128 1 5 37 90 37 502 Rahmennr. Offset Reale Adresse Adressumsetzungspuffer WS 2009/10

25 Physikalische Adresse
TLB und Caches Zusätzlich noch Caches für Programme und Daten: Caches für Programme und Daten sind TLB / MMU nachgeschaltet. Verwenden physikalische Adressen. Virtuelle Adresse MMU Physikalische Adresse Cache Hauptspeicher WS 2009/10

26 Virtuelle Cache-Adressierung
Alternative: Cache mit der virtuellen Adresse adressieren. Vorteil: Adressumsetzung und Cachezugriff parallel Nachteil: Verschiedene Prozesse benutzen gleiche virtuelle Adresse für verschiedene reale Adressen. Daten- / Programmcache bei Prozesswechsel ungültig Abhilfe bei Single-Prozessor-Umgebungen: Trage zusätzlich zur virtuellen Adresse auch PID (process identifier)-Tag ein Schwierig in Zusammenhang mit Konsistenz von Caches bei Multiprozessoren Meist reale Cache-Adressierung verwendet. Virtuelle Adresse MMU Cache Physikalische Adresse Hauptspeicher WS 2009/10

27 Invertierte Seitentabellen
Siehe Power PC, IBM AS/400 Beobachtung: Sei n die Zahl der Seiten im virtuellen Adressraum, m die Zahl der einem Prozess zugeordneten Seitenrahmen. Dann ist üblicherweise n >> m. Seitentabellen sind meist nur sehr dünn besetzt Seitentabelle zur Abbildung Seitennummer ! Seitenrahmennummer verschwendet Speicherplatz. Allgemeines Problem: Gegeben Schlüssel k1, …, km aus {0, …, n-1} oder allgemein k1, …, km aus U mit |U| = n. Gesucht ist eine Methode, die jedem Schlüssel ki einen Wert vi zuordnet. Die Zuordnung soll speicher- und laufzeiteffizient sein. WS 2009/10

28 Invertierte Seitentabellen
Methoden aus Gebiet „Algorithmen und Datenstrukturen“ (Informatik II, Algorithmentheorie)! Bei „Invertierten Seitentabellen“ benutzt: Hashing Schlüssel ki sind Seitennummern Wert vi sind Seitenrahmennummern Benutze Tabellen der Länge m (Anzahl der Seitenrahmen) (oder auch etwas größer)‏ Benutze „Hash-Funktion“ WS 2009/10

29 Invertierte Seitentabellen
Benutze „Hash-Funktion“ h: {0, …, n-1} -> {0, …, m-1} zur Abbildung von Seitennummern auf „Plätze in der Hashtabelle“ Einfaches Beispiel: h(ki) = ki mod m Bei Vergabe eines neuen Seitenrahmens vi: Speichere an Platz h(ki) das Paar (ki, vi) ab. Problem: Hashkollisionen An Stelle h(ki) kann sich schon ein Eintrag (kj, vj) befinden mit ki ≠ kj, aber h(ki) = h(kj). Zur Überprüfung muss ki bei (ki, vi) mitgespeichert werden! Lösung z.B. durch „Überläuferketten“ Suche mit Schlüssel ki: Nachschauen an Stelle h(ki)‏ Wenn Stelle belegt, überprüfe, ob Schlüssel übereinstimmt Sonst: Verfolge Überläuferkette Löschen von Einträgen: analog WS 2009/10

30 Invertierte Seitentabellen - Aufbau
Virtuelle Adresse Reale Adresse Seitennr. Offset Rahmennr. Offset Invertierte Seitentabelle Zeiger Überläuferkette Seitennr. Eintrag ki kj vj Hashfunktion h h(ki) ki Rahmennr. WS 2009/10

31 Seitengröße - Problem Wahl der Seitengröße sehr wichtig für Systemleistung Kleine Seiten: Kein zufälliges Datensegment füllt immer eine ganze Zahl von Seiten => im Durchschnitt bleibt die letzte Seite halb leer. Somit bei n zu speichernden Datensegmenten und einer Seitengröße von p Bytes werden np/2 Bytes für interne Fragmentierung verschwendet. kleine Seiten verschwenden weniger Speicher. Große Seiten: Große Seiten => Kleinere Seitentabellen => weniger Verwaltungsaufwand WS 2009/10

32 Seitengröße - Problem Analytisch:
Die durchschnittliche Prozessgröße sei s Bytes. Die Seitengröße sei p Bytes und ein Eintrag in der Seitentabelle e Bytes. Ein Prozess belegt dann s/p Seiten und damit es/p Bytes in der Seitentabelle. es/p wird kleiner mit wachsender Seitengröße. Durch interne Fragmentierung gehen nochmal p/2 Bytes verloren. p/2 wird kleiner mit schrumpfender Seitengröße. Somit lautet das Minimierungsproblem: V = es/p + p/2 Optimum durch erste Ableitung nach p Null setzen: -se/p2 + ½ = 0 => p = (2se)1/2 Beispiel: für s = 1 Mb und e = 8 Byte ist die optimale Seitengröße 4Kb. WS 2009/10

33 Seitengröße - Problem „Moderne“ Probleme: In Realität:
Objektorientierte Techniken mit vielen kleinen, verstreuten Programm- und Datenmodulen => Schwächung der Lokalität Multithreading-Anwendungen wirken Lokalität entgegen. In Realität: Seitengrößen um 4 Kbyte Teilweise auch variierbar (z.B. Pentium bis 4 Mbyte)‏ WS 2009/10

34 Grundlegende Methoden der Speicherverwaltung
Partitionierung Für Speicheraufteilung zwischen verschiedenen Prozessen eher veraltetes Konzept Betriebssysteminterne Nutzung von Partitionierung Paging Einfaches Paging Kombiniert mit Konzept des virtuellen Speichers Segmentierung Einfache Segmentierung WS 2009/10

35 Segmentierung Im Gegensatz zu Partitionierung werden Prozessen nicht notwendigerweise zusammenhängende Speicherbereiche zugeordnet. Speicher eines Prozesses aufgeteilt in Segmente, deren Größe im Gegensatz zu den Seiten beim Paging verschieden sein kann. Keine interne Fragmentierung, aber externe Fragmentierung (wie bei dynamischer Partitionierung. Segmentierung ist für Programmierer / Compiler sichtbar. Aufteilung in Codesegmente, Datensegmente, … Einfache Segmentierung: Prozesse sind entweder ganz im Speicher oder komplett ausgelagert. WS 2009/10

36 Segmentierung Logische Adresse besteht aus Segmentadresse und Offset.
Berechnung der realen Adresse durch Addition von Basisadresse des Segments Offset Segmenttabelle enthält pro Segment Basisadresse des Segments (Startadresse im Speicher)‏ Segmentlänge WS 2009/10

37 Segmentierung Bsp.: logische Adresse mit 16-Bit 0000010000000000
4-Bit-Segmentnummer 12-Bit-Offset 0001 1 2 Länge Basis Prozesssegmenttabelle 16-Bit physikalische Adresse WS 2009/10

38 Segmentierung Segmentierung mit virtuellem Speicher
Nicht alle Segmente eines nicht komplett ausgelagerten Prozesses müssen im Speicher vorhanden sein. Restliche Segmente auf Festplatte Segmenttabelleneintrag: Present-Bit P: „Segment ist im Hauptspeicher“ Modify-Bit M: „Segment wurde verändert“ Weitere Bits für Schutzrechte und gemeinsame Nutzung Schutz und gemeinsame Nutzung auf Segmentbasis einfach zu regeln Größe der Segmente unterschiedlich und dynamisch festlegbar Bei Segmentvergrößerung: Allokieren von nachfolgendem Speicher oder Verschiebung in einen größeren freien Bereich oder Auslagerung P M Weitere Bits Länge Basis WS 2009/10

39 Segmentierung und Paging kombiniert
Vorteile Paging: Für den Nutzer tranparent Feste Seitengrößen => anspruchsvolle, leistungsfähige Speicherverwaltungsalgorithmen Vorteile Segmentierung: Anpassung an dynamischen Speicherbedarf von Prozessen Gemeinsame Nutzung und Schutz auf Grundlage „natürlicher Organisationseinheiten“ Kombination beider Verfahren: Prozesse aufgeteilt in Segmente, pro Prozess eine Segmenttabelle Segmente aufgeteilt in Seiten, pro Segment eine Seitentabelle Aufbau einer Adresse: Für den Programmierer besteht Adresse aus Segmentnummer und OffsetSegmentierung. OffsetSegmentierung wird beim Paging interpretiert als (Seitennummer, OffsetPaging). WS 2009/10

40 Segmentierung und Paging kombiniert
Virtuelle Adresse Reale Adresse Seg- mentnr. Seiten- nr. Offset Rahmennr. Offset Register Segment tabellenzeiger Seitentabelle Seiten- rahmen Segmenttabelle Programm Segmentierung Paging Hauptspeicher WS 2009/10

41 Betriebssystemaufgaben bei Speicherverwaltung
Festlegung verschiedener Strategien: Abrufstrategie (Fetch Policy): Wann wird eine Seite in den Hauptspeicher geladen? „Demand Paging“ „Prepaging“ Speicherzuteilungsstrategie (Placement Policy): Wo im Speicher wird ein Prozessteil abgelegt? Nur wichtig bei Segmentierung / Partitionierung, nicht bei Paging z.B. Best-Fit, Next-Fit, First-Fit WS 2009/10

42 Betriebssystemaufgaben bei Speicherverwaltung
Festlegung verschiedener Strategien (ff): Verdrängungsstrategie (Replacement Policy): Welche Seite soll ausgelagert werden, wenn alle Seitenrahmen belegt sind? Gesperrte Seiten sind ausgenommen! Vielzahl von Verfahren, z.B. LRU (Least Recently Used) FIFO (First In First Out)‏ Clock-Algorithmus Strategien arbeiten auf der Grundlage von Daten, die durch die Hardware gesammelt werden müssen. WS 2009/10

43 Betriebssystemaufgaben bei Speicherverwaltung
Festlegung verschiedener Strategien (ff): Strategie zur Verwaltung des „Resident Set“: Welchem Prozess wird wieviel Platz im Hauptspeicher zugeteilt? Feste oder variable Zuteilung von Speicher an Prozesse Variable Zuteilung meist auf Grundlage der Seitenfehlerrate (mit Hardwareunterstützung gemessen / abgeschätzt)‏ Lokale oder globale Austauschstrategie (nur Seiten des eigenen Prozesses ausgelagert oder auch von anderen)‏ Cleaning-Strategie: Wann lagert man eine geänderte Seite in den Sekundärspeicher aus? Demand Cleaning Precleaning (Motivation: Schreiben mehrerer Seiten in Gruppen)‏ Strategie zur Lastkontrolle: Wieviele Prozesse werden gleichzeitig zugelassen (teilweise im Speicher)‏ Ab welcher Zahl von Prozessen beginnt man mit Suspendieren von Prozessen? Welche Prozesse werden suspendiert? WS 2009/10

44 Zusammenfassung Speicherverwaltungsstrategien sind extrem wichtig die Effizienz des Gesamtsystems. Moderne Betriebssysteme arbeiten mit virtuellem Speicher. Lokalität ist die Grundvoraussetzung für das effiziente Funktionieren virtueller Speicherkonzepte. In der Praxis meist vorhanden. Paging unterteilt den Speicher in viele gleich große Teile. Segmentierung unterteilt in verschieden große Teile, deren Größe variabel ist. Es ist auch möglich, Paging und Segmentierung zu kombinieren. WS 2009/10


Herunterladen ppt "Kapitel 8.2 Speicherverwaltung: Paging Segmentierung"

Ähnliche Präsentationen


Google-Anzeigen