3 Process Virtual Machines Erlaubt Programmen auf ungleichen ISA oder OS zu laufen. VM ist ebenfalls wie ein Programm auf den Host aufgesetzt. ABI ist die Schnittstelle zum HW und OS ISA. Mapping of State, Emulation of memory addressing architecture, instructions, exceptions, OS calls. 3.1. Implementation Vorgang: ‐ Der Lader schreibt in das Memory, die das Guest Memory Image hielt und der runtime Code ladet. ‐ Lader übergibt Kontrolle an Initialblock (Signal handlers for trap condition). ‐ Die Emulation Engine startet durch: o Binary Translation o Interpretation durch predecoding und im Cache wird der Code gehalten. ‐ Code cache manager räumt auf den Speicher ‐ Profile Database: Optimierung - OS call Emulator: übersetzt die calls ‐ Call/Trap – Exception Emulator Manager behandelt Fehler (von Interpreter, wie auch von Übersetzer) ‐ Side Tables enthalten anfallende Daten (Struktur). Implementierung Präzisere Exceptions. 3.2. Kompatibilität Ist das Verhalten von Host und Gast gleich? Es wird keine Leistung verglichen: ‐ nur Funktionalität! 3.2.1. Levels of Compatibility Intrinsische Kompatibilität ≈ komplette Transparenz (System/Codesigned VM): Das Verhalten ist bei Gast und Host gleich. Extrinsische Kompatibilität: Das Gastsystem hat spezielle Anforderungen an den Host. Kompatibilität nur unten bedingte Anforderungen. 3.2.2. A Compatibility Framework Kompatibilität ist schwierig zu testen, das gesamte System muss getestet werden. Zuerst aber teilen wir: i. Mapping of State ( Ressourcen): user-managed state und OS-managed state Guest-Host registers. OS-managed state können unterschiedlich gehalten werden. ii. Operationen: transferieren der Kontrolle Sufficient Compatibility Conditions 1. User State soll während den Kontrollen Transfer zugänglich sein und die Stati äquivalent sein. 2. Guest Stati muss äquivalent sein. Discussion Welche Faktoren können bei einer extrinsisch‐kompatiblen VM zur Einschränkung der ausführbaren Programme führen (fünf Faktoren): 1. Der Speicher: Es können Beschränkungen (z.B. des Limits) für den physischen Speicher geben. Nur Programme die wenig Speicher nutzen sind intrinsisch kompatibel. 2. Der Compiler: Es können Versionsunterschiede auftreten, die den Funktionsumfang reduzieren – oder bei der Binärübersetzung werden bestimmte Anweisungen (traps) eliminiert. 3. Die Instruktionen (z.B. float‐point arithmetic): Es können unterschiedliche Ausführungen stattfinden. 4. Das Betriebssystem: Es können Funktionen auftreten, die vom Host nicht unterstützt werden. 5. Die Ein‐ bzw. Ausgabegeräte: Es kann der Zugriff auf Ein‐ bzw. Ausgabegeräte eingeschränkt oder verweigert werden. 3.2.3. Implementation Dependences 1 Architechtur vs. Implementation. (Funktion vs design). Z.B. Instruktion and Data Cache Instruktion Cache flusher. Nach Selbst modifizierter Kode: funktioniert nur wenn der Cache Code explizit geleert wird. 3.3 State Mapping Logical Memory vs real memory 3.3.1. Register mapping Register context Block: existiert wenn Guest ISA Register > Host ISA Register Runtime verantwortlich für die Verwaltung der Host Register: pop, push. Guest ISA register < Host ISA register: ok, dazu gibt’s noch den Context Block Guest ISA register = Host ISA register 3.3.2. Memory Address Space Mapping A kann im Position A’ gespeichert werden. Runtime Software-Supported Translation Tables Host: multiple of Guest Pages, im Host sind nicht naheliegende. Translation: Mapping table Runtime Memory Manager entscheidet welche Blocke müssen ersetzt werden: step-by-step code intensive mapping. If all else failes: when 64bit als Guest und 32 als Host. Direct translation method HD verbundene Methode: mit offset oder mit gleiche Platzierung zwischen Guest und Host. Ein-zu-ein Übersetzung zu Ziel: load und stores. Compatibility Issues Kode und Data teilen die gleiche Addresse mit der Guest Apps. Guest Process + runtime software = grosses Host address space für direct Mapping. Intrinsische Kompatiblität 1/α performance Strategische Platzierung von runtime um die direkte Übersetzung zu ermöglichen. Runtime Kode kann verschoben werden während der Ausführung. 3.4 Memory Architecture Emulation - Overall structure of the address space: linear space technique - The access privilege types that are supported: R, W, E. - The protection/allocation granularity: smallest size and protection granularity 3.4.1. Memory Protection Software Translation table: correct aber langsam. Host-Supported Memory Protection Host OS features um das zu Emulieren: - System call von Applikations abrufe, definition R, W, E, keine. - Signal für Memory beim Access violation Linux: mprotect(param1,param2,param3) und SIGSEGV signal Page size issues Einfach wenn Guest Seite ist multiple von Host. Sondern kann eine Host Seite mehr Guest Seiten enthalten allocation, reallocation die die Portabilität reduziert. Protection Sets Übereinstimmen nicht: protecton superset, subset. Host RW, Guest RWE. Right check als Teil des OS Übersetzungsprozess 3.4.2 Self-Referencing and Self-Modifying Code Nicht der Originelle Kode wird ausgeführt, wenn der Originelle geändert wird muss es auch die Kopie sein. Basic Method Alle load und store Adresse werden gemappt Implementierung ist korrekt Source ist Schreibe-geschützt, beim Versuche den Originalen Kode zu schreiben, wird die Memory gefuscht, interpretations-modus gestartet, retranslation. Pseudo-Self-Modifying Code Schreibbare Areas sind mit Kode unterbrochen 2 Side Table Schnellere alternative mit Link/Unlink von Prolog Kode. Das erste Mal Linked/write enabled und verglichen Fine-Grain Write-Protection Man flusht nicht den gesamte cached Code. Code-Data Seiten (128byte granularity) Data sind nicht schreibgeschützt kein trap beim schreiben = kein cache flush. True Self-Modifying Code Idiom recognition (loop counter ist selbstmodifizierend), frequently Modified immediate Field. Verschidene Source Codeversionen werden gespeichert = grosses Overhead aber keine Translation Protecting Runtime Memory Für Kompatibilität und Korrekte Resultaten: nach R&W sollte das Guest Programm nicht weiter ausgeführt werden. Check von kleinen Segmenten, Host Register haltet die Segmenten. Emulation mode: übersetzte Kode wird ausgeführt Code muss geschützt werden (ref. Zum selbest, mit map table und link pointer werden jump, Brunch gemacht. Runtime mode: alles anderes (binary trans), Interpretation. Switch Mode: von Emulation zu runtime. Registers sind nativ besser Geschütze und in VM werde ausserhalb der Guest Memory gespeichert. Extrinsische Kompatibilität: Programm muss keine Memory zugreifen, die ausserhalb liegt. 3.5 Instruction Emulation High Performance Process-level Machines Performance Tradeoff Start-up time: einmalig, um das Code in einem anderen Format zu konvertieren. Steady-State Performance: durchschnittliche Zeit für die Emulation S+NT = start + N * Zeit für die Emulation Performance crossover point: wenn n > 55 Zyklen per Instruktion dann binary translation, sonst interpretation 3.5.2. Staged Emulation Runtime’s emulation manager. Meherere Emulationen in Stage Ausgeführt. Profile data: sammelt Daten über der Emulation von Blöcke. Vergrössert der Steady state. Bei exception von Interpreter, oder bei exception Kondition von Translation, die Kontrolle geht an den exception emulator. Start: Interpretation and move to binary translation von Blöcke oder Superblocks (Kombination von Basic Blocks) werden kombiniert in: - Simple Profiling: Generierung von Superblocke (Aries System, HP Dynamo) - Skip Interpretation stage und macht einfache binäre Translation on Dynamik Blocks (Sun Wabi, IA32-EL und Mojo same ISA) 3.6. Exception Emulation Exception: Trap oder Interrupt Trap: produziert von spezifischer Instruktion Interrupt: externes Ereignis Präzis: 1. Wenn alle Instruktionen bis Fehler ausgeführt werden. 2. keine Instruktion nach den Fehler ausgeführt wird 3. Fehlerhafte Instruktion wurde nicht ausgeführt 2 Kategorien: ABI visible: mit OS Signalen ABI invisible: Abi bleibt „unaware“: Timer, ev. Page Fault. 3.6.1 Exception Detection 1. Interpretive trap detection: check durch Program 2. Detected by Host Platform, hängt von Semantic match des ISA Signal calls werden von Host OS registriert und verwenden. Signal wird angepasst als Guest Quelle. 3 a. ABI trap visible in Host platform: handler invoked proper action b. ABI trap nicht visible in Host platform: checks in emulation code c. ABI trap visible in Host, nicht im Guest Plattform: extraneous trap, runtime trap entscheidet ob das zum Source Instruktion sichtbar sein wird. Ein Host Trap (float, integer) für mehrere Guest Traps. 3.6.2. Interrupt Handling ABI visible: Transfer to Interrupt Handler. VM wird auf einen besonderen Status gesetzt. Akzeptable latency <100 Instruktion. Interruptable point = code muss im runtime sein. (latency ist gross, z.B : bei loop) Runtime bei Interrupt: lokate the Block and unlink von subsequent. Link zum „Runtime“ So: a) kein loop zu translation block, b) ende jeder Block ist interruptable 3.6.3. Determin precise Guest State Complex by binary translation (Einfach in interpretation) Interpretation PC wird updated solange Interpretationen weiterlaufen. Runtime Signal handler nutzt sourcePC Binary translation: Locating the Program Counter Determin the Source PC, weil das Interrupt im übersetzten PC passiert ist (Info aus der reverse translation site table). o Linear scan: besser bei binary search für FIFO o Large table: grösser als übersetzte Kode. Target mit fixe-length instructions nur 1 Array[] o Mehrere source - ein Target. Z.B. 2 RISC 1 CISC oder Rearranged, optimized Code: man finden der korrekte Source Zustand nicht einfach Hybrid side table Strukture: heufige trapping source PC kann gecached werden Binary Translation: Register State Kein reordering, keine optimization Funktionen entfernt. Consistent register mapping (gleichzeitige Update): kann immer eingeholt werden. Dynamische Source-Target-register Map (gleiche Ordnung des Updates): Side Table wird verwendet Oder (wie bei trap PC) eine komplette Wiederherstellung der Registry Binary Translation: Memory State Memory wird wiedergeschrieben, Status will not be recovered. Wird als Optimierung im Kapitel4 gehandelt. 3.7 OS Emulation Emulation von Funktion call. Es gilt, dass nur zwei typ‐ und versionsgleiche Betriebssysteme, auch den gleichen Funktionsumfang haben. Sollte sich nun Host‐ und Gast‐Betriebssystem unterscheiden, ist der Funktionsumfang nicht gleich. Es kann im schlimmsten Fall passieren, dass das Gastsystem einen Aufruf macht, wozu es keine Funktion im Hostsystem gibt. Die Emulation ist damit nur unvollständig möglich. 3.7.1 Same Operating System Operating system call Translation Formatting arguments: match. Arguments sind im Memory stack. System call is converted to a Jump. Runtime-Implemented Operating System Functions System call rufen den Runtime, der das Signal im Side table registriert. Runtime kontrolliert die Memory direkt: z.B. die Memory Verwaltung. Nasty Realities Linux communicate at ABI level, windows at API (abnormal sind: call back, asynchronous procedures call, and exception). Events: message Queues. Event und routine werden ausgeführt. Danach geht der OS Kernel zum nächsten Message. In VM wichtig ist der Jump zum runtime vor der Beginn der routine. Dafur wartet der Runtime auf besondere OS call. 4 3.7.2 Different-Operating-System Emulation Instruction set sind logisch komplett. Time of Day: manchmal ist nicht möglich das der Host die Funktion des Guest ausführt. Emulation: ad hoc Process, man muss das gesamte System kennen. Example: Enforcing File Limits Linux: Filegrosse kann prädefiniert werden. Lösung: z.B: Wabi system von Sun Microsystem euliert nur manche Win Apps (Word, Excel) 3.8 Code Cache Unterschiede zum konventionellen Cache Verwaltung: 1. keine fixe länge 2. Chaining. Bei löschen von Blocken müssen link angepasst werden 3. Ist keine Copy 3.8.1 Code Cache Implementation Braucht eine Side-Table. - Gegeben der SourcePC finden der TargetPC. Bei Emulation control (z.B. von interpretation zu Translated code) – mit Map Table - Gegebne ein TargetPC, zu finden ein SourcePC – mit reverse translation side table 3.8.2 Replacement Alghorithms Least recently used 1. Es müssten sekundär Daten (overhead) angelegt werden, der zusätzlichen Speicher benötigt. 2. Zeigerupdate müsste gelöst werden. Eine Möglichkeit wären Backpointer, wo durch alle Referenzzeiger ermittelt werden können. In PC Map table oder side map table. 3. Wohl das größte Problem wäre, dass die Blockgröße von neuen und zu ersetzenden Block Unterschiedlich sein kann. Defragmentierung sollte gemacht werden und Size und Lokation. Reverse Translation table, binary search (=Anordnung) und lookup in reverse Table machen das LRU nicht zuverlässig. Verwendet werden Algorithmen die Brackepoint und Defragmentierung reduzieren: Flush when Full Einfach aber brutal, Superblocke und Orphans werden gelöscht. Retranslation from Scratch: Hight performance overhead. Preemptive Flush Phase Change ist verbunden mit Instruktion working set change. Vor der Phase Change Flush. Übersetzung der Working set wird vermeidet. Fine-Grained FIFO Wie ein zirkulare Buffer. Blackpoints müssen gespeichert werden. Coarse-Grained FIFO Grosse FIFO Blöcke in Cache. Wenige oder fast keine Backpoiner benötigt. Optimal: cache in 1/8 teilen. Performance Coarse-Grained FIFO in 8 geteilt beste overhead. 3.9 System Environment Integration der Process VM im Host system Umgebung, alle Daten müssen integriert wrden. Komplexe Umgebung, drei Möglichkeiten um das Korrekte Loader auszuführen: 1. Anpassung des Host kernel loader routine: binary identification loader call 2. Installation in Konvertierten Guest-Kode von Host executable Kode, der angehängt wird. 3. Host mit spezielle loader „hook“ system calls versorgt: dynamische Prozessanpassung während runtime. Z.B. CreateProcess (bootstrap method) Dll? 3.10 Case Study: FX!32 Staged emulation. Übersetzung und Optimierung zwischen Programmlauf. Profile Information speichert das Target der indirekten Jumps. 5 Translation: Speicher auf Disk oder DB, wenn Kode fehlt, fängt die Interpretation Modus. Trasparenty agent: enable some root process (login shell, service control manager, remote procedure call server) 3.11 Summary Instruction Emulation 1. Interpretation 2. Binary translation 3. Staged combination Address mapping 1. Runtime-managed table 2. Direct mapping Generelle method: instruction interpretation mit software memory mapping und Schreibschutz Bedingungen: 1. Register state guest fit the host 2. Guest memory fit in host 3. Guest Seitengrösse ist multiple von Host 4. Guest Privilege sind subset von Host privilege Schnellste: binary translation mit hardware Address mapping 6