Rechnerarchitektur und Betriebssysteme (CS2): Virtual Memory 19 November 23 Prof Dr Christian Tschudin Departement Mathematik und Informatik, Universität Basel Wiederholung / Diskussion 1 Was ist ein inode? 2 Was ist ein file descriptor, die Tabelle dazu? 3 Was ist ein sparse file, wie implementiert? 4 Was ist ein file lock? c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 2/33
(Haupt-)Speicherverwaltung Idealisiertes Memory Layout für Unix (Bsp Linux) Kernel Virtual Memory Stack Memory-mapped region Memory-mapped region Memory-mapped region Run-time data Uninitialised data Initialised data Program text Memory invisible to user mode code the brk pointer Forbidden region Linux: linearer Adressraum Regionen: code (text) initial var (data) uninit var (bss) Heap Libraries Stack Kernel c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 3/33 Hauptspeicherverwaltung: Problemstellung Physikalischer Speicher begrenzt, oft zu klein Logischer (Speicher-) Adressraum abbilden auf physikalischen Speicher Wann wird einer Speicheradresse die Speicherzelle zugewiesen? Kompilation, Linking Laden des Programms Ausführen des Programmes Virtueller Speicher: Binding erfolgt zur Laufzeit, muss von der Hardware (bei jedem Zugriff) übersetzt werden c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 4/33
Repetition: Swapping Swapping = Disk-Auslagerung eines (ganzen) Prozesses Swapping = Unix: Swap-Partition, Windows: swap-datei operating system 1 swap out process P 1 2 swap in process P 2 user space backing store main memory c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 5/33 Virtueller Speicher Virtueller Speicher = Separierung des logischen Speichers von den physikalischen Speichermöglichkeiten (RAM, Harddisk) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 6/33
Virtueller Speicher (Forts) Prozesse ausführen, die grösser sind als der Hauptspeicher Prozess-Memory-Teile können sich befinden: im physikalischen Hauptspeicher auf Harddisk (swap space) Transfer zwischen Harddisk und Hauptspeicher: Swapping vs (Demand) Paging welches Programm/ Page ist im Haupt-/Sekundärspeicher? wann welches Programm/Page transferieren? c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 7/33 Memory Management: Paging In einem Multiprogrammiersystem: Mehrere Programme gleichzeitig im Speicher, nach Ausführung eines Programms entstehen nichtzusammenhängende Zonen mit freiem Speicher: wie zusammenführen? Physikalischer Speicher in Frames einteilen, logischer Speicher in Pages (Grösse: 05 bis 4 KB) Logischer Page-Bereich abbilden auf physikalische Frames Adressübersetzung c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 8/33
Paging (Forts) Paging = Memory Mgmt für nicht-zusammenhängenden Speicher CPU logical address p d f d physical address physical memory Abbildung von Pages (Speicher- Seiten ) auf Frames (Speicher- Rahmen ): Page Table p f page table Adressübersetzung durch Hardware: memory management unit (MMU) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 9/33 Memory Management: Page Table (Beispiel) frame number page 0 0 page 1 0 1 1 4 1 page 0 page 2 2 3 3 7 2 page 3 page table 3 page 2 logical memory 4 page 1 5 6 7 page 3 physical memory c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 10/33
Memory Management: Page Table Implementierung Page Table selbst benötigt 1 Frame, bleibt im Hauptspeicher Wird von MMU (memory management unit) bei jedem (!) Speicherzugriff ausgelesen Inhalte eines Page Table-Eintrages: Attribute (abgebildet oder nicht, read-only, swapped) Frame-Nummer (oder Block-Nummer falls ausgelagert) Nun zweifacher Speicherzugriff! Cache nötig: TLB (translation look-aside buffer) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 11/33 Valid/Accessed/Dirty Bits Page Table für die Buchhaltung Bisher in der Page Table: Frame-Nummer Zusätzliche Attribute: present-bit (dh im Hauptspeicher, gemapped) sonst: invalid, oder auf Harddisk #define _PAGE_PRESENT 0x0 #define _PAGE_PSE 0x080 #define _PAGE_RW 0x002 #define _PAGE_GLOBAL 0x100 #define _PAGE_USER 0x004 #define _PAGE_UNUSED1 0x200 #define _PAGE_PWT 0x008 #define _PAGE_UNUSED2 0x400 #define _PAGE_PCD 0x0 #define _PAGE_UNUSED3 0x800 #define _PAGE_ACCESSED 0x020 #define _PAGE_FILE 0x040 #define _PAGE_DIRTY 0x040 c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 12/33
Memory Management: mehrstufige Pagetables Bei grossem virtuellen Speicher werden die Page-Tables zu gross: 2 GB mit 4 KB-Pages: 05 M Einträge jeder Prozess braucht seine Tabelle deshalb mehrstufige Page Tables, erlaubt Löcher analog sparse files (siehe nächstes Slide) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 13/33 Memory Management: mehrstufige Pagetables 0 outer-page table 1 500 100 708 929 900 page of page table page table 1 100 500 708 900 929 memory c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 14/33
Memory Management: mehrstufige Pagetables (Forts) Beispiel: 4K Pages, 32-Bit-Architektur (32-Bit-Adressen) Aufteilung Page-Nummer: 20 Bits Page Offset: 12 Bits Page-Nummer in zwei Teile à je 10 Bits: addr (32 bits) = p1 (10 bits) p2 (10 bits) offs (12 bits) p1: Index in äusserer Page Table, p2: Index innerhalb der durch p1 referenzierten Page c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 15/33 Memory Management: Tricks mit Page Tables Shared Pages (shared code, shared memory): nur einmal im physikalischen Speicher vorhanden mehrfach in Adressraum von Prozessen eingeblendet Memory Protection: jeder Prozess hat sein eigener virtueller Speicher Zugriff ausserhalb der allozierten Zonen: Programmabbruch Dynamische Zuteilung: Stack und Heap: brk-limite Swapping: einzelne Seiten auf Harddisk auslagern, Info in Page-Table c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 16/33
Memory Management: Segmente / Pages Segment-Konzept: unterschiedliche Zonen (Code, Daten), deshalb Segmente Adresse = segment-descriptor + Offset CPU führt Buch über mehrere Segment: segment table (physikalischer) Ort des Stack-Segments, Code, OS etc implizite Referenzierung: Stack-Segment, Code-Segment Intel x86-architektur: ab x286: segments ab x386: paged segments Linux: linearer Adressraum (nur 1 Segment) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 17/33 Page Fault Virtueller Speicher grösser als physikalischer Speicher Hardware (MMU) erkennt Zugriff auf nicht gemappte Seiten page fault trap Betriebssystem kann Grund untersuchen: ungültiger Adressbereich (Zone)? Dies kann aufwendig sein (viele Zonen) Sonst demand paging : Seite wird vom Harddisk geholt c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 18/33
Ablauf bei Page Fault c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 19/33 Page Fault-Handling: Schwierigkeiten Restart des Befehls nötig Einfachster Fall: Page fault wegen Operand zuerst Page holen, dann Instruktion ausführen Schwieriger: Page fault wegen Resultat Operation muss nochmals ausgeführt werden Probleme mit Seiteneffekte (zb Y++) Noch grössere Seiteneffekte denkbar: Kopier-Operationen ganzer Speicherbereiche (zb teilweises Kopieren rückgängig machen?) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 20/33
Paged Kernel-Speicher? Können Teile des OS auch ge-paged werden? ja! Für Daten (zb Daten-Puffer) Prinzipiell auch für Code möglich, Performance c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 21/33 Copy-On-Write (COW) Prozess-Start unter UNIX fork(): Erzeugt neben dem Eltern- ein Kind-Prozess Dabei wird nur die Speicher-Map kopiert, nicht der Inhalt: Page Tables beider Prozesse zeigen auf selben Speicher Zusätzlich: das RW-Flag wird weggenommen (dh readonly page) Beim nächsten Page-Fault: dem Kind-Prozess eine eigene Kopie anfertigen beim Eltern-Prozess das RW-Flag wieder setzen c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 22/33
On-Demand Paging Seiten werden nur geladen, wenn sie benötigt werden Prozess starten: Speicher-Map initialisieren Data-Bereich füllen nur erste (Code-) Seite laden Kontrolle an Prozess übergeben Weitere (Code-) Seiten werden bedarfsweise (on demand) geholt c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 23/33 Zitat am Anfang der Veranstaltung vorgestellt The Linux memory manager implements demand paging with a copy-on-write strategy relying on the 386 s paging support A process acquires its page tables from its parent (during a fork()) with the entries marked as read-only or swapped Then, if the process tries to write to that memory space, and the page is a copyon-write page, it is copied, and the page is marked read-write An exec() results in the reading in of a page or so from the executable The process then faults in any other pages it needs Linux Kernel Hacker s Guide 05 c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 24/33
On Demand Paging Seiten-Ersetzung Multi-Programming: Wettstreit um freie Frames Falls mehrere Programme aktiv sind: wer bekommt wieviele Frames? welche Pages werden auf HD ausgelagert? Aktivität und Alter eine Seite: welche Seiten wurden angetastet (ACCESSED Bit)? least recently used (LRU)-Seite bestimmen Verschiedene Algorithmen, um sich LRU anzunähern (volles LRU wäre zu aufwendig) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 25/33 Thrashing Pageing funktioniert wegen der Lokalität ein Prozess arbeitet meistens mit wenigen Seiten diese Seiten verschieben sich langsam Falls ein Prozess zuwenig Seiten im Hauptspeicher hat: hohe page-fault Rate niedrige CPU-Nutzung Trashing: ein Prozess ist mit Paging (in und out) beschäftigt, tangiert auch andere Prozesse (weniger CPU und IO-Bandbreite) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 26/33
Thrashing (Fortsetz) CPU utilization thrashing degree of multiprogramming Dieses Verhalten kann durch simples Programm provoziert werden: definiere grosses Array (> physikalischer Hauptspeicher) randomisierter Zugriff auf einzelne Elemente des Arrays c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 27/33 Compiling, Linking, Loading Compiling: erzeugt Objektcode gewisse Adressen noch festzulegen (externe Funktionen) gewisse Adressen noch anzupassen (Relokation) Linking: erzeugt ein Binary löst noch offene externe Referenzen auf klassisch: static linking Loading: laden des Programms in den Hauptspeicher Memory-Allokation (ev nur wenige Seiten, falls demand paging) Relokation c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 28/33
Shared Libraries, Uebersicht Varianten Vorteile von shared libraries (*so): gleicher (phys) Speicher für mehrere Prozesse, systemweiter Upgrade einfach (1 Datei ändern, kein re-compilieren oder re-linken) Zusätzliche Definitionen nach Compiling, Linking und Loading : Dynamic Loading Dynamic Linking c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 29/33 Optimierung: Dynamic Loading Binaries können sehr gross werden wegen Libraries: verzögertes Laden bessere Speicherausnutzung: nicht benutzte Subroutinen nie laden Implementierung: Aufrufer überprüft zuerst, ob Routine schon geladen falls nein wird der run-time loader aufgerufen run-time loader aktualisiert interne Adress-Tabelle der Aufruf kann gemacht werden Keine OS-Unterstützung nötig: Linker kann dies implementieren c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 30/33
Optimierung: Dynamic Linking Mehrere Programme nutzen gleiche Subroutinen, deshalb nur einmal im Hauptspeicher ablegen: verzögertes Linken OS muss Unterstützung geben (getrennte Adressräume): führt Liste aller Libraries, die geladen sind Zu Link-Time Vorkehrungen treffen: Library-Aufruf geht an eine Ersatz-Routing ( Stub ) Stub muss Subroutine lokalisieren oder zuerst noch laden anschliessend ersetzt sich der Stub ab dann direkter Sprung in die Routine c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 31/33 Dynamic Linking Implementierung Linux: OS muss den Ort der Libraries kennen: ldconfig, und /etc/ldsoconf Siehe auch ldso (dynamic linker/loader) Um den Auflösungsprozess zu analysieren: ldd Windows: DLL (dynamically linked library) c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 32/33
Abschluss Speicherverwaltung: Memory Mapping Weitere Tricks mittels Memory Mapping Shared Memory: schnelle Interprozess-Kommunikation (IPC) kein Umkopieren wie bei Pipes Memory Mapped Files ganze Datei in Speicher abbilden Paging sorgt dafür, dass nur benötigte Blöcke geladen werden c Christian Tschudin CS2 Rechnerarchitektur und Betriebssysteme, 23-11-19, 33/33