Speicherverwaltung. Gliederung. Speicherverwaltung. Motivation. Übersicht: 1. Einführung und Übersicht. 2. Prozesse und Threads. 3.



Ähnliche Dokumente
Betriebssysteme I WS 2013/2014. Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B 8404

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Betriebssysteme I WS 2016/2017. Betriebssysteme / verteilte Systeme Tel.: 0271/ , Büro: H-B 8404

Betriebssysteme BS-S SS Hans-Georg Eßer. Foliensatz S: Speicherverwaltung. Dipl.-Math., Dipl.-Inform. v1.0, 2015/04/14

wichtigstes Betriebsmittel - neben dem Prozessor: Speicher

Einführung in die technische Informatik

Technische Informatik II Wintersemester 2002/03 Sommersemester Heiko Holtkamp

5 Speicherverwaltung. bs-5.1 1

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl (gbs-ws11@mailschlichter.informatik.tu-muenchen.de)

Memory Management. Peter Puschner Institut für Technische Informatik

Konzepte von Betriebssystemkomponenten Disk-Caches und Dateizugriff

Kapitel VI. Speicherverwaltung. Speicherverwaltung

Technische Realisierung (1)

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/13

Übung zu Grundlagen der Betriebssysteme. 13. Übung

Speicher Virtuelle Speicherverwaltung. Speicherverwaltung

Kapitel 6 Speicherverwaltung Seite 1 zum Teil nach: Silberschatz&Galbin, Operating System Concepts, Addison-Wesley)

Wenn alle Referenzbits gleich 1, wird nach FIFO entschieden

CA Übung Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder

Leichtgewichtsprozesse

Leichtgewichtsprozesse

Virtueller Speicher und Memory Management

Betriebssysteme Teil 10 B: Fragen rund um Seitenfehler

Universität Bielefeld Technische Fakultät AG Rechnernetze und verteilte Systeme. Vorlesung 4: Memory. Wintersemester 2001/2002. Peter B.

RO-Tutorien 15 und 16

Tutorium Rechnerorganisation

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Inhaltsübersicht. Speicherverwaltung Teil I. Motivation. Prinzipielle Arten der Speicherverwaltung

Naiver Ansatz. Blöcke und Seiten. Betriebssysteme I Sommersemester 2009 Kapitel 6: Speicherverwaltung und Dateisysteme

Zwei Möglichkeiten die TLB zu aktualisieren

Paging. Einfaches Paging. Paging mit virtuellem Speicher

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Technische Informatik I. Übung 3 Speicherhierarchie. v t d 0 d 1 d 2 d Technische Informatik I Übung 3. Technische Informatik I Übung 3

Teil 2: Speicherstrukturen

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung. Maren Bennewitz

Wunschvorstellung der Entwickler vom Speicher

Welche der folgenden Aussagen gelten? a) Im allgemeinen gilt: ein Deadlock tritt auf gdw. der Resource-Allocation Graph einen Zykel

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

How to do? Projekte - Zeiterfassung

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

DOKUMENTATION VOGELZUCHT 2015 PLUS

Updatehinweise für die Version forma 5.5.5

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

20. Algorithmus der Woche Online-Algorithmen: Was ist es wert, die Zukunft zu kennen? Das Ski-Problem

MMU Virtualisierung. ISE Seminar Thomas Schaefer 1

Banner T 1 T 2. Bild T 7 T 8. Fließtext T 9

Installationsanleitung

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

2.3 Prozessverwaltung

SJ OFFICE - Update 3.0

Workshop: Eigenes Image ohne VMware-Programme erstellen

Formular»Fragenkatalog BIM-Server«

Betriebssysteme Kap J, Teil C: Paging, Pagereplacement

Paravirtualisierung (2)

teischl.com Software Design & Services e.u. office@teischl.com

Rechnernutzung in der Physik. Betriebssysteme

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Einführung in PHP. (mit Aufgaben)

Betriebssysteme. Speicherverwaltung - Grundlegende Konzepte. Sommersemester 2014 Prof. Dr. Peter Mandl. Prof. Dr. Peter Mandl Seite 1.

4.3 Hintergrundspeicher

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Übung Praktische Informatik II

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

TIMI: Technische Informatik für Medieninformatiker

Systemsoftware (SYS) Fakultät für Informatik WS 2008/2009 Christian Baun. Übungsklausur

6 Speicherverwaltung

System-Update Addendum

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Speicherverwaltung (Swapping und Paging)

Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

OPERATIONEN AUF EINER DATENBANK

Kleines Handbuch zur Fotogalerie der Pixel AG

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Verwendung des IDS Backup Systems unter Windows 2000

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Besprechung des 9. Übungsblattes Virtuelle Speicherverwaltung Aufgaben

Professionelle Seminare im Bereich MS-Office

Step by Step Webserver unter Windows Server von Christian Bartl

Prozesse und Scheduling

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

NODELOCKED LIZENZ generieren (ab ST4)

Visio Grundlagen. Linda York. 1. Ausgabe, Oktober 2013

Betriebssystem-basierte Virtualisierung

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Installation SQL- Server 2012 Single Node

Win 7 optimieren. Unser Thema heute: Meine erstellten Daten in eine andere Partition verschieben.

Installationsanleitung

Installationshinweise BEFU 2014

Transkript:

Gliederung 1. Einführung und Übersicht 2. Prozesse und Threads 3. Interrupts Speicherverwaltung 4. Scheduling 5. Synchronisation 6. Interprozesskommunikation 7. Speicherverwaltung Speicherverwaltung Cl. Schnörr / HM 1 Gliederung Cl. Schnörr / HM 2 Speicherverwaltung Motivation Übersicht: Aufgaben der Speicherverwaltung Code-Verschiebung, Speicherschutz Zusammenhängende Speicherzuteilung Partitionen fester / variabler Größe Swapping Methoden zur Verwaltung freien Speichers Segmentierung Nicht zusammenhängende Speicherzuteilung Virtuelle Speicherverwaltung (Paging) Mehrstufiges Paging Demand Paging Page Faults und deren Behandlung Strategien für die Seitenersetzung Motivierende Fragen: Wie setzt sich eine Speicheradresse zusammen? Was geschieht bei einem Adreßzugriff? Wie kann man als Administrator oder Softwareentwickler Nutzen aus Kentnissen der Speicherverwaltung ziehen? wie funktioniert Shared Memory? was sind Memory-mapped Files? Wie entsteht ein Segmentation Fault? Wie erreicht man einen virtuellen Adreßraum? Speicherverwaltung Cl. Schnörr / HM 3 Speicherverwaltung Cl. Schnörr / HM 4

Speicherhierarchie Aufgaben Register Cache Hauptspeicher Magnetspeicher (Festplatte) Magnet-Bandspeicher Verwaltung durch: Programmierer / Compiler Hardware (+ Compiler / BS) BS: Speicherverwaltung BS: Dateiverwaltung Welche Aufgaben übernimmt im BS die Speicherverwaltung? Finden und Zuteilung freier Speicherbereiche z.b. bei Erzeugung eines neuen Prozesses bei Speicheranforderung durch bestehenden Prozess Effiziente Nutzung des Speichers: verschiedene Aspekte gesamter freier Speicher sollte nutzbar sein Prozess benötigt nicht immer alle Teile seines Adreßraumes Adreßräume aller Prozesse evtl. größer als verfügbarer Hauptspeicher Speicherschutz Threads eines Prozesses dürfen nur auf Daten dieses Prozesses zugreifen Speicherverwaltung Cl. Schnörr / HM 5 Speicherverwaltung Cl. Schnörr / HM 6 Monoprogramming Monoprogramming Aufteilung des (RAM + ROM) in Bereiche für Betriebssystem Anwenderprogramm Einfache historische Ansätze Beim Beenden eines Programms: Überlagern des Programmbereichs durch neues Programm Gerätetreiber (ROM) %xfff... Anwenderprogramm Betriebssystem (RAM) 0 Speicherverwaltung / historisch Cl. Schnörr / HM 7 Speicherverwaltung / historisch Cl. Schnörr / HM 8

Multiprogramming (1) Multiprogramming (2) Multiprogramming, feste Partitionen Multiprogramming, feste Partitionen Programme warten vergleichsweise häufig (I/O, etc.) Lösung: mehrere Programme gleichzeitig im Speicher Voraussetzung: verschiebbarer Code und Speicherschutz Partition 3 Partition 2 Partition 1 BS %xfff... 0 Nachteile: ineffiziente Speichernutzung unflexibel, Grad des Multiprogramming starr vorgegeben wenn n Programme mit Wahrscheinlichkeit p zu einem Zeitpunkt warten: CPU-Nutzung = 1 - p n Aufteilung des Hauptspeichers in Partitionen fester, ggf. unterschiedlicher Größe Zuweisung neuer Programme über Warteschlange für Speicherzuteilung gemeinsam oder je Partition Speicherverwaltung / historisch Cl. Schnörr / HM 9 Speicherverwaltung / historisch Cl. Schnörr / HM 10 Code-Verschiebung Code-Verschiebung: Adressierungsanforderungen Code-Verschiebung (Relokation) Programm muss an verschiedenen Stellen im Speicher laufen können Zwei Möglichkeiten: Linker vermerkt, welche Code-Stellen absolute Adressen sind. Beim Laden des Programms werden diese Stellen entsprechend abgeändert. Rechner hat ein spezielles Hardware-Register, ein sog. Basisregister: Bei jeder Adreßberechnung (zur Laufzeit) wird die Adresse im Basisregister zu der Adresse im Programm addiert. Speicherverwaltung / historisch Cl. Schnörr / HM 11 Speicherverwaltung / historisch Cl. Schnörr / HM 12

Speicherschutz Unterstützung für Code-Verschiebung und Speicherschutz Speicherschutz: Programm darf nicht auf Speicherbereich anderer Programme zugreifen. Zwei Möglichkeiten: Schutzcode Rechner nutzt spezielles Hardware - Längenregister Überprüfung, ob zugegriffene Adresse noch im Bereich der dem Programm zugewiesenen Partition liegt. Speicherverwaltung / historisch Cl. Schnörr / HM 13 Speicherverwaltung / historisch Cl. Schnörr / HM 14 Arten der Speicherverwaltung (1) Arten der Speicherverwaltung (2) Zwei prinzipielle Arten der Speicherverwaltung: Zusammenhängende Speicherzuteilung jede Anforderung nach einer Menge Speicher muss das BS durch zusammenhängenden (contiguous) Speicher erfüllen Nicht-zusammenhängende Speicherzuteilung Speicheranforderung kann erfüllt werden durch Heutzutage: Hauptspeicher fast immer nicht-zusammenhängend (virtuelle Speicherverwaltung) Zusammenhängende Speicherverwaltung bei Verwaltung von Plattenplatz Verwaltung des Platzes in Page- und Swap-Dateien / -Partitionen Zuweisung mehrerer kleiner Speicherbereiche, die zusammen die geforderte Menge Speicher ergeben Wiederauffinden der verstreuten Speicherbereiche muss Speicherverwaltung transparent leisten Speicherverwaltung Cl. Schnörr / HM 15 Speicherverwaltung Cl. Schnörr / HM 16

Aufteilung in feste Partitionen (1) Aufteilung des Speichers in Partitionen fester, ggf. unterschiedlicher Größe Zuweisung eines Programms zu einer freien Partition: Alternativen: Zusammenhängende eine Warteschlange: erstes Programm, das in die freie Partition passt FIFO je Partition (mehrere WS) Speicheraufteilung Partition 4 Partition 4 700 K Partition 3 Partition 3 Eine Warteschlange Partition 2 Partition 1 Betriebssystem Mehrere Warteschlangen 400 K Partition 2 200 K Partition 1 100 K Betriebssystem Speicherverwaltung Cl. Schnörr / HM 17 Cl. Schnörr / HM 18 Aufteilung in feste Partitionen (2) Aufteilung in variable Partitionen (1) gleiche Größe: Anzahl und Größe der Partitionen werden dynamisch festgelegt: Verschwendung bei kleinen Programmen Programme passen in jede freie Partition ungleiche Größe: bessere Speicherausnutzung evtl. ungeschickte Belegung Generell: evtl. große freie Bereiche in der Partition: Interne Fragmentierung C C C C C B B B B E A A A D D D Zeit es bleiben evtl. viele kleine freie Bereiche (Löcher) im Hauptspeicher --> externe Fragmentierung evtl. müssen diese Löcher durch Verschieben der Partitionen entfernt werden --> memory compaction Cl. Schnörr / HM 19 Cl. Schnörr / HM 20

Aufteilung in variable Partitionen (2) Swapping (1) Was, wenn der Speicherbedarf eines Prozesses wächst? ggf. Partition über benachbarten freien Speicherbereich vergrößern ggf. Reservierung und Verschiebung der Inhalte in neue, ausreichend große Partition (Relokation) einem Prozess kann auch ein größerer Speicherbereich als angefordert zugewiesen werden --> Vermeidung einer Verlagerung wenn keine ausreichend große Partition verfügbar: Swapping Auslagerung einer oder mehrerer Prozesse auf Platte Swapping: zeitweise Auslagerung aller Speicherbereiche eines Prozesses (oder zumindest kompletter Segmente) auf Festplatte anschließende Suspendierung des Prozesses später Wiedereinlagerung, ggf. an anderer Stelle im Speicher Bei zusammenhängender Speicherzuteilung einzige Möglichkeit, mehr Programme gleichzeitig auszuführen, als Platz im Hauptspeicher vorhanden, müssen Speicherbereiche eines Prozesses, die dynamisch wachsen, u.u. ausgelagert und an anderer Stelle eingelagert werden --> Relokation i.d.r. über Basisregister Cl. Schnörr / HM 21 Cl. Schnörr / HM 22 Swapping (2) Swapping (3) Beispiel: Kriterien für die Auslagerung, z.b.: Prozeßzustand Prozeßpriorität Prozeßgröße (im Hauptspeicher) Zeit, die der Prozeß im Hauptspeicher war innerhalb des Swapbereichs auf Platte: Zuteilung und Verwaltung des Platzes mit einem der Verfahren der zusammenhängenden Speicherverwaltung. Probleme: Ein- und Auslagerung sehr aufwendig Prozess kann zur Laufzeit mehr Speicher anfordern benötigt evtl. Verschiebung oder Auslagerung mehrerer Prozesse schlechte Speichernutzung: Prozess benötigt i.d.r. nicht seinen gesamten Adreßraum besseres Verfahren: --> Paging Cl. Schnörr / HM 23 Cl. Schnörr / HM 24

Dynamische Speicherverwaltung Zuteilung freien Speichers (1) BS muss bei Prozesserzeugung oder Einlagerung passenden Speicherbereich finden Suchverfahren / Strategien: --> BS benötigt Informationen. typisch: Liste aller belegten und freien Speicherbereiche belegt oder frei (P/H=Hole) Anfangsadresse Länge Zeiger auf nächsten Eintrag bei Speicherfreigabe: Verschmelzung der Einträge aneinandergrenzender freier Bereiche --> doppelt verkettete Liste, sortiert nach Adressen A B C D E 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0... 8 16 24 P 0 5 H 5 3 P 8 6 P 14 4 H 18 2 P 20 6 P 26 3 H 29 3 Anm.: Problem/Lösung identisch zur Verwaltung des Heaps... First Fit: verwende ersten freien Speicherbereich (einfach, relativ gut) Best Fit: kleinsten ausreichenden freien Bereich zuordnen aufwendiger, da gesamte Liste zu durchsuchen starke Fragmentierung des freien Speichers in viele kleine Bereiche Worst Fit: größten freien Bereich zuteilen es bleiben verhältnismäßig große freie Bereiche übrig Quick Fit: mehrere Listen für freie Bereiche mit gebräuchlichen Größen, z.b. 4kB, 8kB, 12kB,... schnelle Suche und Zuteilung möglich Problem: Verschmelzen freier Bereiche aufwendig Variante: Buddy-System Cl. Schnörr / HM 25 Cl. Schnörr / HM 26 Zuteilung freien Speichers: Beispiel Zuteilung freien Speichers (2) Buddy-System Speicherbelegung vor und nach separate Listen freier Bereiche in 2er-Potenzen bei Freigabe eines Bereiches nur eine Liste zu durchsuchen, um Möglichkeit einer Verschmelzung freier Bereiche zu prüfen bei Splits und Merges umhängen in andere Liste der Allokation eines 16-MByte Bereiches Anforderungen: anfangs 70 35 80 Freigabe A 60 Freigabe B Freigabe D Freigabe C 0 128K 256K 384K 512K 640K 768K 896K 1M 1024 A 128 256 512 A A B 64 256 512 B 64 C 128 512 128 B 64 C 128 512 128 B D C 128 512 128 64 D C 128 512 256 C 128 1024 512 Cl. Schnörr / HM 27 Cl. Schnörr / HM 28

Zuteilung freien Speichers (3) Segmentierung (1) Buddy-System: Zustandsbaum Zustand vor der Freigabe von Prozess D 1024 512 256 128 64 Ausgangslage: große Programme ein-/auslagern zu aufwendig ggf. zuwenig Speicher für große Programme vorhanden Zerlegung von Programmen in Segmente Nachladen von Segmenten (Programmteilen) bei Bedarf Bsp.: Overlay-Programmierung (noch in Verantwortung des Programmierers) Bsp.: Aufteilung in Code-, Daten- und Stacksegment(e) Adressberechnung von Segmenten über Segmentadresstabelle und Register in Hardware Segmente noch zu groß / unflexibel --> heutzutage: Paging 128 64 D C 128 512 Cl. Schnörr / HM 29 Cl. Schnörr / HM 30 Segmentierung (2) Overlay-Programmierung: Turbo-Pascal (1985-1990): program GrossProjekt; overlay procedure kundendaten; overlay procedure lagerbestand;... begin while input <> exit do begin case input of 1: kundendaten(); 2: lagerbestand(); end; end; end. Nicht - zusammenhängende Speicheraufteilung Virtuelle Speicherverwaltung Cl. Schnörr / HM 31 Speicherverwaltung Cl. Schnörr / HM 32

Virtueller Adressraum (1) Virtueller Adressraum (2) Virtueller Adreßraum: Ort und Funktion der MMU im Rechner: strikte Trennung zwischen logischen (virtuellen) Adressen, die der Prozess sieht / verwendet, physischen Adressen, die der Hauptspeicher sieht Idee: bei jedem Speicherzugriff wird die vom Prozess erzeugte logische Adresse auf eine physische Adresse abgebildet durch Hardware: MMU (Memory Management Unit) Vorteile: keine Code-Verschiebung beim Laden eines Prozesses erforderlich Prozess sieht transparent seinen linearen zusammenhängenden Speicherbereich, unabhängig davon, wie dieser auf Hardware abgebildet wird Anm.: auch mit Segmenten realisierbar Speicherverwaltung / virtuell Cl. Schnörr / HM 33 Speicherverwaltung / virtuell Cl. Schnörr / HM 34 Paging: Seitenbasierte Speicherabbildung Paging Aufteilung der Adreßräume in Blöcke fester Größe: Paging: Adressumsetzung Paging: Adressumsetzung (1) Berechnung virtuelle Programmadresse --> physikalische Hauptspeicheradresse Seite (Page): Block im virtuellen Adressraum Kachel (Seitenrahmen / page frame): Block im physischen Adressraum typische Seitengrößen: 512-8192 Byte Abbildung des linearen zusammenhängenden (virtuellen) Adressraums auf beliebige, nicht zusammenhängende Seitenrahmen Dadurch nur eine Liste freier Seitenrahmen vom BS zu verwalten einfache Zuteilung von Hauptspeicher (alle Blöcke gleich groß) keine externe, geringe interne Fragmentierung transparent (kein Aufwand für Programmierer) zur Laufzeit muss von Hardware unterstützt werden mittels Umsetzungstabelle (Seitentabelle / page table) je Prozess Seite 0 Seite 1 Seite 2 Seite 3 virtueller Adressraum Prozess 1 Index 0 1 2 3 1 4 3 6 Seitentabelle P1 Rahmen-Nr. 0 1 Seite 0 2 Seite 0 3 Seite 2 4 Seite 1 5 6 Seite 2... phys. Hauptspeicher 2 7 6 Seitentabelle P2 Index 0 1 3 Seite 0 Seite 1 Seite 2 virtueller Adressraum Prozess 2 Cl. Schnörr / HM 35 Cl. Schnörr / HM 36

Paging: Adressumsetzung (3) Seitennummer ist Index in Seitentabelle typischer Aufbau der Einträge: /Valid Cl. Schnörr / HM 38 Paging: Adressumsetzung (4) Paging: Adressumsetzung (5) CPU p d MMU-Register virtuelle Adresse p f physikalische Adresse f d f d Hauptspeicher Adressumsetzung: Zusammenspiel zwischen BS und MMU BS setzt für jeden Prozess eine Seitentabelle auf Startadresse wird bei Prozesswechsel im Register gesetzt MMU realisiert Adressumsetzung falls Seite nicht im Speicher steht, ihr also kein Rahmen zugeordnet ist, ist das Present-Bit gelöscht: Seitentabelle spezielles Register (MMU) enthält Anfangsadresse der Seitentabelle für aktuellen Prozess je Hauptspeicherzugriff ein zusätzlicher Hauptspeicherzugriff auf Seitentabelle notwendig dies muss durch Hardware-Caches beschleunigt werden --> MMU erzeugt Ausnahmebehandlung/Exception (--> Seitenfehler / Page Fault) --> ausgelagerte Seite wird vor Zugriff eingelagert Speicherschutz automatisch gegeben, da Seitentabelle nur auf prozesseigene Rahmen verweist zusätzlich: Zugriffsrechte für einzelne Seiten z.b. Schreibschutz für Programmcode, bei Verletzung: Ausnahmebehandlung Cl. Schnörr / HM 39 Cl. Schnörr / HM 40

Translation Look-Aside Buffer (1) Translation Look-Aside Buffer (2) Translation Lookaside Buffer (TLB): schneller Hardware-Cache, mit den zuletzt benutzten Einträgen der Seitentabelle Assoziativ-Speicher: bei Übersetzung einer Adresse wird deren Seitennummer (Index) gleichzeitig mit allen Einträgen des TLB vergleichen logical address CPU p d page frame number number p TLB miss TLB f p TLB hit f f d physical address physical memory Treffer im TLB --> Speicherzugriff auf Seitentabelle unnötig Fehltreffer --> Zugriff auf Seitentabelle und alten Eintrag im TLB aktualisieren Trefferquote (hit ratio) beeinflusst durchschnittliche Zeit einer Adreßübersetzung Lokalitätsprinzip: Programme greifen meist auf benachbarte Adressen (in gleicher Seite) zu --> auch bei kleinen TLBs hohe Trefferquoten (typisch 80-98 %) Inhalt des TLB prozessspezifisch! Zwei Möglichkeiten: jeder Eintrag im TLB enthält valid bit. Bei Prozesswechsel (Context Switch) wird gesamter Inhalt des TLB invalidiert jeder Eintrag im TLB enthält PID, die mit PID des zugreifenden Prozesses verglichen wird ggf. page fault page table / TLB Cl. Schnörr / HM 41 / TLB Cl. Schnörr / HM 42 Lokalitätsprinzip Translation Look-Aside Buffer (3) Beispiel: AMD-Opteron: Speicher-Hierarchie: 64 KB L1 Instruction Cache, 64 KB L1 Data-Cache 512 KM L2 Cache, 2 MB L3 Cache mittlere L2 miss-latency: 100 Cycles Adresse / Seitennr. Data TLB: 64-entry, fully associative L1 D-TLB 512-entry, 4-way L2 D-TLB Instruction TLB: 32-entry, fully associative L1 I-TLB 512-entry, 4-way L2 I-TLB Ausführungszeit / TLB Cl. Schnörr / HM 43 / TLB Cl. Schnörr / HM 44

Paging: Adressumsetzung (6) Mehrstufiges Paging (1) Was macht das BS? Page-Table-Register laden (bei Prozesswechsel) bei Page-Fault: Seite einlagern und Seitentabelle aktualisieren evtl. vorher: Seitenverdrängung: welche Seite aus dem Hauptspeicher verdrängen? (--> später) Alles andere in Hardware: Zugriff auf TLB und ggf. auf Seitentabelle wenn Seite im Speicher: Berechnung der phys. Adresse Inhalt aus Cache oder ggf. aus Hauptspeicher laden Problem: zu große Seitentabellengrößen Beispiel 1: 32-bit virtuelle Adressen mit 4 kbyte Seitengröße (== 12 Bit) 4 Byte je Tabelleneintrag --> 2 20 Seiten --> 4 MByte Tabellengröße (pro Prozess!) Beispiel 2: bei 64-Bit virtuellen Adressen: --> 2 52 Seiten --> 16 PByte (PetaByte) Aber... Prozess nutzt virtuellen Adressraum i.a. nicht vollständig --> mehrstufige Seitentabellen sinnvoll: z.b. für 2 20 Seiten: 1. Stufe: Hauptseitentabelle mit 1024 Einträgen 2. Stufe: <= 1024 Seitentabellen mit je 1024 Einträgen Cl. Schnörr / HM 45 Cl. Schnörr / HM 46

Mehrstufiges Paging (4) Speicherschutz Größe der Seitentabellen: Beispiel 32-Bit-Adresse: p1 (10 Bit), p2 (10 Bit), d (12 Bit): bei jeweils 1024 Einträgen und 4 Byte/Eintrag: --> Seitentabellen sind 4 kbyte groß, genau passend zur Größe eines Seitenrahmens Zahl der Speicherzugriffe: jede Adressübersetzung benötigt noch mehr Speicherzugriffe: --> der Einsatz von TLBs noch wichtiger --> als Schlüssel für TLB dienen alle Teile der Seitennummer (p1, p2,...) Schutz vor Zugriff anderer Prozesse: jeder Prozess hat eigene Seitentabelle --> andere Prozesse können nicht zugreifen --> Implementierung gemeinsamer Speicherbereiche aufwendiger Schutz vor (z.b.) unberechtigtem Schreiben: Einträge der Seitentabellen enthalten u.a. Zugriffsrechte (vgl. S.38) Festlegung des Schutzcode durch Compiler/Linker: Einteilung des Programms in Abschnitte, Größe ist Vielfaches der Seitenrahmengröße pro Abschnitt ein Schutzcode in Programmdatei vermerkt Loader setzt Schutzcode in Seitentabelleneinträgen Cl. Schnörr / HM 49 Cl. Schnörr / HM 50 Seiten-Sharing Demand-Paging (1) Theoretisch: Einträge verschiedener Seitentabellen zeigen auf gleichen Seitenrahmen Problem: wie stellt man fest, ob Seite bereits von anderen Prozessen verwendet wird? bei Änderungen (z.b. des verwendeten Seitenrahmens) wären viele Seitentabellen anzupassen Praktisch: gemeinsamer Teil des Adreßraumes entweder als gemeinsames Segment mit eigener Seitentabelle (Kombination von Segmentierung und Paging z.b. bei Unix) oder als eine Art Pseudo-Prozess-Adressbereich mit eigener globaler Seitentabelle (z.b. Windows) Virtueller Speicher: Teile von Programmen werden nicht ständig benötigt Lokalitätsprinzip: Zugriffe auf Daten und Programmcode häufig lokal gruppiert Idee: nur Teilmenge an Seiten eines Prozesses werden im Hauptspeicher gehalten: Resident Set Dadurch --> bessere Systemauslastung: mehr Prozesse gleichzeitig im System ein Prozess kann viel mehr Speicher anfordern als physikalisch verfügbar Demand Paging: eine Seite wird in den Speicher geladen, wenn auf sie zugegriffen wird kann auch wieder aus dem Speicher entfernt (verdrängt) werden Cl. Schnörr / HM 51 Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 52

Demand-Paging (2) Voraussetzungen Working Set eines Prozesses P: w(k,t) zur Zeit t: Menge an Seiten, die P bei den letzten k Speicherzugriffen verwendet hat Abhängigkeit von k: Present / Valid-Bit: in Einträgen der Seitentabelle, gibt an, ob Seite im Speicher page-fault Exeption: Ausnahmebehandlung, wenn Prozess ausgelagerte Seite anspricht page-fault Handler: BS-Routine, die benötigte Seite in den Speicher lädt Seitenersetzungsstrategie: für genügend großes k: w(k,t) nahezu konstant meist deutlich kleiner als Prozessadressraum wenn kein freier Seitenrahmen für Einlagerung verfügbar Strategie für Auswahl einer zu ersetzenden Seite Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 53 Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 54 Page-Fault Behandlung Seitenersetzung 3 Seite ist auf Platte Ablauf eines Seitenwechsels: Betriebssystem MMU löst page-fault-exception (Seitenfehler-Ausnahme) aus load M ansprechen 1 6 Instruktion neu starten I 2 trap Seitentabelle freie Seite 5 Seitentabelle anpassen 4 Seite in den Hauptspeicher holen BS ermittelt virtuelle Adresse bzw. die benötigte Seite S Falls kein freier Seitenrahmen verfügbar: bestimme zu verdrängende Seite S' falls S' modifiziert (Modified-Bit = 1): Inhalt von S' sichern S' auf Platte schreiben (im Page- oder Swap-Bereich) Seitentabelleneintrag für S' aktualisieren (u.a. Present-Bit = 0) Seite S von Platte in freien Seitenrahmen (ggf. den von S') laden Seitentabelleneintrag für S aktualisieren (u.a. Present-Bit = 1) Hauptspeicher abgebrochenen Befehl weiterführen oder wiederholen Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 55 Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 56

Kosten von Seitenwechseln Strategien zur Seitenersetzung Kosten von Seitenwechseln: Mittlere Speicherzugriffszeit bei Wahrscheinlichkeit p für Seitenfehler: t Z = t HS + p t PF t HS : Zugriffszeit auf Hauptspeicher (ca. 10-100 ns) t PF : Zeit für Behandlung eines Seitenfehlers (domoniert durch Plattenzugriff (ca. 10 ms) --> p muss klein sein --> max. ein Seitenfehler bei mehreren Millionen Zugriffen <-> thrashing (Seitenflattern) (--> später) Ziel: möglichst wenige Page-Faults Abrufstrategien (Wann? --> später) Austauschstrategien: Wo wird nach Verdängungskandidaten für Seiten gesucht? lokale Strategie: verdränge nur Seiten des Prozesses, der neue Seite anfordert - Adressraumgröße fest oder variabel - Größe sollte Working-Set entsprechen - Einstellung z.b. aufgrund der Seitenfehlerfrequenz Prozess mit vielen Page-Faults beeinträchtigt nicht das Gesamtsystem globale Strategie: suche Verdrängungskandidaten unter den Seiten aller Prozesse - Prozesse nehmen sich gegenseitig Seiten weg - Prozess mit vielen Page-Faults erhält mehr Seiten (kann vor- und nachteilig sein) Speicherverwaltung / virtuell / Demand-Paging Cl. Schnörr / HM 57 Cl. Schnörr / HM 58 Optimale Strategie und FIFO Nutzung eines Referenz-Bits Optimale Strategie Verdränge die Seite, die künftig am längsten nicht mehr benötigt wird verursacht kleinste Zahl an Page-Faults ist nicht implementierbar kann modellhaft zur Bewertung anderer Strategien dienen First In First Out (FIFO) Verdränge die Seite, die am längsten im Hauptspeicher ist einfach umzusetzen, aber schlechte Strategie Zugriffsverhalten (Working-Set) wird ignoriert bspw. kann ersetzte Seite dauernd in Verwendung sein -> gleich wieder einzulagern Rerefenz-Bit (R-Bit) kann in Seitentabelleneinträgen stehen wird von MMU (Hardware) bei Zugriff auf Seite gesetzt wird nach bestimmten Kriterien vom BS (Software), z.b. regelmäßig, wieder gelöscht liefert Information, ob auf Seite nach letztem Löschen zugegriffen wurde sagt nichts über Zeitpunkt des Zugriffs, über Reihenfolge der Zugriffe auf mehrere Seiten R-Bit und weitere Bits in Einträgen der Seitentabelle sind Basis für weitere Strategien: NRU (Not Recently Used) Second-Chance LRU (Least Recently Used) Cl. Schnörr / HM 59 Cl. Schnörr / HM 60

Not Recently Used (NRU) Second-Chance Algorithmus Not Recently Used (NRU) Basis: von MMU gesetzte Statusbits in Seitentabelle: R-Bit: M-Bit: Seite wurde referenziert Seite wurde modifiziert R-Bit wird vom BS in regelmäßigen Abständen gelöscht Bei Verdrängung: vier Prioritätsklassen 0: nicht referenziert, nicht modifiziert 1: nicht referenziert, modifiziert 2: referenziert, nicht modifiziert 3: referenziert, modifiziert Auswahl innerhalb einer Klasse zufällig nicht besonders gut, aber einfach Second Chance Erweiterung von FIFO Idee: verdränge älteste Seite, auf die seit dem letzten Seitenwechsel nicht zugegriffen wurde Implementierung: Seiten im Hauptspeicher werden nach Alter sortiert in Ringliste angeordnet Zeiger zeigt auf älteste Seite bei Seitenfehler: betrachte Seite, auf die der Zeiger zeigt R = 0: verdränge Seite, fertig R = 1: lösche R-Bit, setze Zeiger eins weiter wiederhole von vorne --> kürzlich referenzierte Seite erhält zweite Chance Cl. Schnörr / HM 61 Cl. Schnörr / HM 62 Least Recently Used (LRU) Beispiele Least Recently Used (LRU) Verdränge die Seite, die am längsten nicht benutzt wurde Vermutung: wird auch in Zukunft am längsten nicht mehr benutzt nahezu optimal, wenn Lokalität gegeben Problem: (Software-) Implementierung bei jedem Zugriff muss ein Zeitstempel aktualisiert werden --> Näherungen, z.b. Aging über einen Zähler Cl. Schnörr / HM 63 Cl. Schnörr / HM 64

Thrashing Weitere Design-Möglichkeiten (1) Thrashing: Prozess erzeugt exzessiv viele Page-Faults (alle paar tausend Instruktionen) --> Prozess verbringt meiste Zeit mit Ein- und Auslagern von Speicherseiten --> Systemleistung sinkt dramatisch entsteht, wenn Prozess mehr Seiten aktiv verwendet als Seitenrahmen für ihn verfügbar Austauschstrategien: --> siehe zuvor Abrufstrategien: Wann werden Seiten ein-/ausgelagert? erst bei Bedarf, also bei Seitenfehlern: Demand Paging im Voraus: Prepaging, z.b, bei Programmstart: gewisse Anzahl Seiten laden, noch bevor sie angesprochen werden z.b. lade Folgeseiten auf Platte gleich mit CPU utilization thrashing Lösungen: falls freier Speicher vorhanden: Zuteilung weiterer Seitenrahmen: Working-Set anpassen globale Ersetzungsstrategie asynchron: modifizierte Seiten vorab auslagern, wenn - I/O-Last gering oder - Vorrat freier Seiten zu klein degree of multiprogramming falls kein freier Speicher: Swapping ganzer Prozesse Cl. Schnörr / HM 65 Cl. Schnörr / HM 66 Weitere Design-Möglichkeiten (2) Abrufstrategien:... Clustering: bei Page-Fault nicht einzelne Seiten, sondern Einlagern ganzer Cluster modifizierte Seiten als Cluster auf Platte schreiben Locking von Seiten im Speicher: einzelne Seiten eines Prozesses werden vom Paging ausgenommen (implementiert über privilegierten System-Call) Praxisbeispiele Auch das Design der Programme hat Auswirkungen auf die Zahl der Page Faults und somit auf die Laufzeit des Programms selbst wie auch auf die Leistung des gesamten Systems! Cl. Schnörr / HM 67 Speicherverwaltung Cl. Schnörr / HM 68

Praxis: Übersicht Praxis: File Mapping (1) Shared-Memory --> Kapitel IPC mmap Grundidee eines file mapping ist es, den Inhalt einer Datei in den virtuellen Adreßraum abzubilden und dann ohne den Overhead des Dateisystems zuzugreifen. Ein file mapping kann prozeßprivat oder gemeinsam genutzt (shared) sein. Um eine Datei in den Adreßraum abzubilden verwendet man den System Call paddr = mmap( addr_hint, len, prot, flags, fd, offset ) wodurch der Byte-Bereich [offset,offset+len) in der durch den file descriptor fd angegebenen Datei auf den Adreßbereich [paddr,paddr+len) abgebildet wird. Für das Argument flag kann entweder MAP_SHARED oder MAP_PRIVATE angegeben werden. File Mappings können von Applikationen und von der Speicherverwaltung selbst genutzt werden. Speicherverwaltung / Praxis Cl. Schnörr / HM 69 Speicherverwaltung / Praxis Cl. Schnörr / HM 70 Praxis: File Mapping (2) #include <fcntl.h> //O_RDWR #include <sys/mman.h> //mmap, munmap #include <unistd.h> //open, close #include <new> //new() []... fildes = open( "test.data", O_CREAT O_RDWR O_TRUNC ); void * address = mmap( (caddr_t) 0, len, (PROT_READ PROT_WRITE), /*MAP_PRIVATE*/ MAP_SHARED, fildes, offset ); Object * ptr = new (address) Objekt[len] (); ptr[...] =...; Zusammenfassung msync( address, len, MS_SYNC ); //flush munmap( address, len );... close( fildes ); Speicherverwaltung / Praxis Cl. Schnörr / HM 71 Speicherverwaltung Cl. Schnörr / HM 72

Zusammenfassung (1) Zusammenfassung (2) Ziele der Speicherverwaltung: effiziente Speicherzuteilung, Speicherschutz Wichtig: Unterscheidung logischer / physischer Adressraum Swapping: Ein-/Auslagern kompletter Adressräume Suche nach freiem Speicher: First Fit, Quick Fit Virtuelle Speicherverwaltung: Paging Einteilung des logischen Adressraums in Seiten (Pages) des physischen Adressraums in Seitenrahmen (Page Frames) Hardware (MMU) bildet bei jedem Speicherzugriff logische auf physische Adresse ab Beschreibung der Abbildung in Seitentabelle pro Prozess pro Seite ein Eintrag, enthält u.a. Nummer des Seitenrahmens Present-Bit: ist der Seite ein Seitenrahmen zugewiesen? mehrstufige Seitentabellen Tabellen tieferer Stufen nur vorhanden, falls nötig TLB: Cache in der MMU speichert zuletzt verwendete Tabelleneinträge jede Seite kann auf beliebige Seitenrahmen im Speicher abgebildet werden auf Festplatte ausgelagert werden Speicherverwaltung / Praxis Cl. Schnörr / HM 73 Speicherverwaltung / Praxis Cl. Schnörr / HM 74 Zusammenfassung (3) Zusammenfassung (3) Seitenersetzungsstrategien bestimmen, welche Seite wann verdrängt wird Optimale Strategie NRU: vier Klassen gemäß R und M-Bit FIFO: die Seite, die am längsten im Speicher ist Second Chance: die älteste Seite, die seit letztem Seitenwechsel nicht benutzt wurde Clock-Algorithmus: effiziente Implementierung Dynamische Seitenersetzung (Demand-Paging) nur aktuell benötigte Seiten (Working Set) werden im Hauptspeicher gehalten Rest auf Plattenspeicher verdrängt bei Zugriff auf ausgelagerte Seiten: Seitenfehler (Page Fault) BS lädt Seite in Hauptspeicher, BS muss ggf. andere Seite verdrängen (Seitenersetzung) LRU: die Seite, die am längsten nicht benutzt wurde Speicherverwaltung / Praxis Cl. Schnörr / HM 75 Speicherverwaltung / Praxis Cl. Schnörr / HM 76