CA Übung 30.01.2006 Hallo zusammen! Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder Adrian Schüpbach: scadrian@student.ethz.ch Christian Fischlin: cfischli@student.ethz.ch 1
Virtual Memory und Kontrollpfad Lernziel: Virtual Memory verstehen Zusammenspiel von TLB, Page Table und Cache verstehen Übungen lösen können Übungen zu Virtual Memory selbstständig lösen danach Lösungsbesprechung 2
Übungsablauf Nachbesprechung der letzten Übung Repetition von Virtual Memory Lösen einer Aufgaben heute Besprechung dieser Aufgaben 3
Nachbesprechung Übung recht gut gelöst alle haben die Bonuspunkte erhalten! kurz durch Aufgaben 4
Nachbesprechung Aufgabe 1 zwei Möglichkeiten für statischen Kontrollfluss if Teil wird ausgeführt dreimal cnt++ => Wert von cnt ist 3 if Teil wird nicht ausgeführt cnt++ wird nur einmal ausgeführt => cnt==1 Somit: mögliche Werte sind: 1, 3 5
Aufgabe 1 Nachbesprechung zwei fork => drei Prozesse => drei Ausgaben Variablenwerte werden bei fork() kopiert Ausgaben: einmal 1 und zweimal 3 Reihenfolge unbekannt Prozessausführungsreihenfolge unbekannt Mögliche Ausgaben 133 313 331 6
Aufgabe 2 Nachbesprechung ein bisschen schwieriger als Aufgabe 1 Endlosschleife im Hauptprogramm beeps mit 0 initialisiert static int => einmal initialisiert behält nach Beenden der Funktion letzten Wert wichtig: if(++beeps<2)!= if(beeps++<2) 7
Aufgabe 2 ++beeps: zuerst Wert lesen dann inkrementieren beeps++: Nachbesprechung zuerst inkrementieren dann bereits inkrementierten Wert lesen 8
Nachbesprechung Beispiel ++beeps links und rechts gleiche Bedeutung beeps=0; if(++beeps<2){... } beeps=0; if(beeps<2){... } beeps=beeps+1; 9
Nachbesprechung Beispiel beeps++ links und rechts gleiche Bedeutung beeps=0; if(beeps++<2){... } beeps=0; beeps=beeps+1; if(beeps<2){... } 10
Nachbesprechung in handler if(++beeps<2) also 0<2 und 1<2 Ausgaben somit YO, YO, MA danach kill Signal an sich selber sich selber Signale senden möglich Programm terminiert also 11
Nachbesprechung Aufgabe 3 abc main: n=setjmp(stuff); while((n+=foo())<0) n=0 foo() wird aufgerufen foo: c=getc(stdin); return(bar()); c='a'; bar() wird aufgerufen 12
Nachbesprechung Aufgabe 3 abc bar: if(setjmp(more_stuff)==0) return(3); return Wert ist ==0, da setjmp() aufgerufen wird main: while((n+=3)<0){} printf(); 3 wird ausgegeben 13
Nachbesprechung Aufgabe 3 xab main: while() foo: longjmp(stuff,42); main: n=setjmp(stuff); while((n+=foo())<0) wie vorher: foo() aufrufen c=='x'; damit zu main hierhin zurück mit n=42 foo() nochmals aufrufen 14
Nachbesprechung Aufgabe 3 xab foo: c=='a' => 3 zurückgeben return(3); main: while((n+=3)<0){} printf() n==42 jetzt: n==45 Ausgabe: 45 15
Aufgabe 3 xxa funktioniert wie xab Unterschied: zweimal x Nachbesprechung d.h. zweimal kurz vor while in main springen zweimal 42 als Rückgabe longjmp/setjmp danach a Rückgabewert 3 Ausgabe also 45 16
Nachbesprechung Aufgabe 3 yab main: foo() aufrufen foo: longjmp(more_stuff,42) c=='y': more_stuff noch nicht gesetzt, undefiniert Ausgabe also undefiniert 17
Nachbesprechung Aufgabe 3 xyz main: foo() aufrufen foo: longjmp(stuff,42) longjmp(more_stuff,42) c=='x': ok, n=42 c=='y': more_stuff noch nicht gesetzt, undefiniert Ausgabe also auch hier undefiniert 18
Nachbesprechung Aufgabe 4 verschiedene Prozesse gestartet Ausführungsreihenfolge nicht voraussehbar aber wait() stoppt Parent Prozess, bis Child beendet gibt PID des Childs zurück Rückgabewert von wait() also >0 19
Nachbesprechung Aufgabe 4 298068 OK 291688 nicht möglich, 1 kann nicht ausgegeben werden 920688 OK 20
Nachbesprechung Aufgabe 4 289060 nicht möglich, zweimal 0 ausgeben nicht möglich 268908 nicht möglich, 6 vor 9 und 0 ausgeben nicht möglich wegen wait(), d.h. Child, der 9 und 0 ausgibt, muss zuerst beenden 906828 OK 21
Nachbesprechung Noch Fragen zur Nachbesprechung? 22
Warum ist das wichtig? Virtual Memory Speicherbereich vergrössern mehr Prozesse, als vorhandener Speicher, gleichzeitig ausführbar Grösse eines Prozesses kann grösser als verfügbarer Hauptspeicher sein Speicherverwaltung einfacher mit Pageing alle Blöcke im Hauptspeicher gleich gross in vielen Betriebssystemen benützt 23
Virtual Memory Funktionsweise Virtuelle Adresse aufteilen in virtuelle Page Nummer und Offset Übersetzungstabelle (Page Table) übersetzt virtuelle Page Nummer in physikalische Page Nummer virtuelle und physikalische Pages gleichgross Offset bleibt für physikalische Page das Gleiche 24
Virtual Memory Es gibt mehr virtuelle Pages als physikalische physikalische Pages auf Festplatte auslagern um Platz für andere virtuelle Page zu schaffen gleiche virtuelle Adresse muss nicht auf gleiche physikalische Adresse zeigen falls physikalische Page ausgelagert ist => Page Fault Betriebssystem lädt Page in Speicher, falls ausgelagert, sonst Page Fault (Segmentation Fault) 25
Virtual Memory Page Table Basis Register valid rechte phys. Nummer 1r/o 2 1r/w 8 0 5 virt. Nummer Offset 1 22 2 66 Offset 22 in phys. Page 2 phys. Page 0 1 2 3 4 5 6 7 8 9 10 26
Virtual Memory Cache beschleunigt Zugriff auf Daten Adress Translation vor Zugfriff auf Cache physikalische Adressen für Cache benützt nicht alle gleich => weniger Kollisionen Page Table in Hauptspeicher Problem: Zugriff und Adresstranslation langsam und durch Cache in Hauptspeicher Lösung: Translation Lookaside Buffer (TLB) Cache für Adresstranslation von virtueller nach physikalischer Nummer, d.h. für Page Table 27
TLB Funktionsweise Virtual Memory TLB funktioniert wie normaler Cache Zugriff über Index Valid Bit und Tag überprüfen physikalische Page Nummer aus TLB lesen 28
Zugriff auf ein Byte Virtual Memory Transformation virtuelle Adresse > physikalische Adresse physikalische Nummer anhand virtuelle Nummer in TLB nachschauen hit: Nummer zurückgeben miss: Zugriff auf Page Table in Hauptspeicher Page Fault: falls valid==1 => Page im Speicher => OK falls valid==0 => Page nicht im Speicher 29
Zugriff auf ein Byte Virtual Memory valid==0, Page ausgelagert Betriebssystem lädt Page in Hauptspeicher valid=1 kehrt zurück, normal weitermachen valid==0, Page existiert überhaupt nicht Betriebssystem signalisiert dem Prozess Segmentation Fault 30
Virtual Memory Zugriff auf ein Byte jetzt physikalische Adresse mit physikalischer Page Nummer und Offset zusammenstellen im Cache nachschauen, ob physikalische Adresse gespeichert ist Index in Cachezeile, valid und Tag überprüfen Cache hit: Byte an Offset Cache Offset zurückgeben Cache miss: Byte aus dem Hauptspeicher laden 31
Virtual Memory Beispiel dazu jetzt in 4 Aufgaben jetzt Lösen, danach Besprechung der Lösung gegeben TLB, Page Table, Cache, virtuelle Adresse 0x03d7 gesucht: Byte an der virtuellen Adresse 0x03d7 32
Aufgabe A Virtual Memory Aufgaben 13 Bits virtuelle Adresse einfüllen (0x03d7) mit Strichen markieren, von wo bis wo VPN (Nummer) VPO (Offset) TLBT (TLB Tag) TLBI (TLB Index) 33
Aufgabe B Virtual Memory Aufgaben Werte aufschreiben VPN TLB Index TLB Tag TLB hit? Page fault? PPN 34
Aufgabe C Virtual Memory Aufgaben 11 Bits physikalische Adresse einfüllen mit Strichen markieren, von wo bis wo Cache Tag Cache Index Cache/Byte Offset PPN PPO wie gross ist Page? (Anzahl Bytes?) 35
Aufgabe D Virtual Memory Aufgaben Werte einfüllen gibt der Cache ein Byte zurück? wenn ja, welcher Wert? 36
Aufgabe A Virtual Memory Lösungen TLBT TLBI 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 VPN VPO 37
Aufgabe B Virtual Memory Lösungen VPN 15 TLBI 3 TLBT 3 TLBhit? ja Page fault? nein PPN 0x0D 38
Aufgabe C Virtual Memory Lösungen CT CI CO 11 10 9 8 7 6 5 4 3 2 1 0 0 0 1 1 0 1 0 1 0 1 1 1 PPN PPO = VPO 39
Aufgabe D Virtual Memory Lösungen Byte Offset 3 Cache Index 5 Cache Tag 0x0D Cache hit? ja Bytes 0x36 0x72 0xF0 0x1D Cache Byte returned 0x1D 40