Just-In-Time-Compiler (2)

Ähnliche Dokumente
Assembler - Einleitung

Assembler - Adressierungsarten

Hardware-basierte Virtualisierung

Hardware-basierte Virtualisierung

Bibliotheks-basierte Virtualisierung

Aufgabe 1 Entwicklung einer Virtuellen Maschine

FAKULTÄT FÜR INFORMATIK

CPU. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Assembler-Programmierung

Haskell auf der Überholspur mit LLVM. Henning Thielemann

Cache. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester

Übung 1 - Betriebssysteme I

Design and Implementation of a Soft-error Resilient OSEK Real-time Operating System

Multiuser Client/Server Systeme

Codesigned Virtual Machines

Die Mikroprogrammebene eines Rechners


Betriebssystem-basierte Virtualisierung

Komponenten/Busse. Dr.-Ing. Volkmar Sieh. Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2010/2011

Echtzeit-Multitasking

Grundlagen Rechnerarchitektur und Betriebssysteme

Komponenten/Busse. Dr.-Ing. Volkmar Sieh

Diplomarbeit Antrittsvortrag

Wie groß ist die Page Table?

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Projekt für Systemprogrammierung WS 06/07

Betriebssystem-basierte Virtualisierung

4D Server v12 64-bit Version BETA VERSION

Busse. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2008/2009

Kontrollstrukturen MySQL Funktionen. MySQL 4, 5. Kapitel 20a: PHP Teil 2. Marcel Noe

x86 Open Source Virtualisierungstechniken Thomas Glanzmann

Tutorübung 7: Mikroprogrammierung I

Einführung in die C-Programmierung

Daniel Betz Wintersemester 2011/12

Smartphone Entwicklung mit Android und Java

Software-basierter Speicherschutz durch spezialisierte Java-VMs auf Mikrocontrollersystemen

IRS in virtualisierten Umgebungen

Paravirtualisierung (2)

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Vortrag zum Seminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Bruno Kleinert 20. Juni 2007

Virtual Machines. Peter Schmid Hochschule für Technik Zürich Master of Advanced Studies, Informatik

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Übersicht. Virtueller Speicher CPU-Modi Virtuelle Maschinen. ISM SS Teil 4/ProtectionI

CLR CIL MCS ECMA-335. Linux.Ne t Albrecht Liebscher, Erlanger Linux Tage

Optimierung der Code-Generierung virtualisierender Ausführungsumgebungen zur Erzielung deterministischer Ausführungszeiten

Lösungsvorschlag zur 4. Übung

Fragenkatalog zur Klausur Computersysteme

Virtual Machines. Peter Schmid Hochschule für Technik Zürich Master of Advanced Studies, Informatik

5 Speicherverwaltung. bs-5.1 1

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Moderne C-Programmierung

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg Universitätsstraße 31, Regensburg

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Virtueller Speicher. SS 2012 Grundlagen der Rechnerarchitektur Speicher 44

Grundlagen zur nebenläufigen Programmierung in Java

Legen Sie den Ausweis (mit Lichtbild!) griffbereit auf den Platz! Dieses Aufgabenheft umfasst 18 Seiten. Überprüfen Sie die Vollständigkeit!

Messwerterfassung mit Mittelwertbildung

Einführung in Betriebssysteme

Intel Cluster Studio. Michael Burger FG Scientific Computing TU Darmstadt

Linux Paging, Caching und Swapping

9 Strukturierte Programmierung

(a) Wie unterscheiden sich synchrone und asynchrone Unterbrechungen? (b) In welchen drei Schritten wird auf Unterbrechungen reagiert?

Paging. Einfaches Paging. Paging mit virtuellem Speicher

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Inhaltsverzeichnis. Definition Motivation Idee Problem auf x86. QEMU KVM Quickstart Speichermedien Beispiele Monitor Ausblick.

2. Aufgabenblatt Musterlösung

Debuggen mit GDB (Gnu DeBugger) unter Eclipse

Von der Platte zur Anwendung (Platte, Treiber, Dateisystem)

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Betriebssysteme Vorstellung

Instruktionssatz-Architektur

Virtualisierung unter GNU/Linux für Einsteiger

Code-Erzeugung aus UML-Klassendiagrammen

Ein Laufzeitsystem für hochgradig parallele Simulationen

Proseminar Technische Informatik A survey of virtualization technologies

3. Die Programmiersprache Java

Betriebssysteme Teil 4: Übersetzung von C-Programmen

Softwaretechnik (WS 11/12)

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

Anbindung eines Forth- Targets an einen Forth-Host. Rechner z.b. PC steuert ein Target System z.b. Evaluation Board

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Grundlagen der Programmierung in C++ Kontrollstrukturen

Computergrundlagen Programmiersprachen, Interpreter, Compiler, Linker

Programmierung. Programme, Compiler, virtuelle Maschinen, Java

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

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

Technische Informatik 1 - HS 2016

Was machen wir heute? Betriebssysteme Tutorium 2. Organisatorisches. Frage 2.1.a. Theorieblätter Abgabe. Antwort. Probleme mit OS/161?

D i g i t a l l a b o r

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Compiler und Codegenerierung. Hw-Sw-Co-Design

Transkript:

Just-In-Time-Compiler (2) Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2011/2012 Just-In-Time-Compiler (2) 1/13 2011-09-12

Just-In-Time-Compiler (2) Hauptproblem JIT: Viele reale Assembler-Instruktionen lassen sich nur aufwändig emulieren. Z.B. berechnen fast alle Arithmetik-Befehle die Condition-Codes/Flags neu. Gebraucht werden die Condition-Codes/Flags aber i.a. nur von bedingten Sprüngen. => Idee: neu entworfene, speziell auf JIT angepasste Hardware Just-In-Time-Compiler (2) 2/13 2011-09-12

Just-In-Time-Compiler (2) Schwierig/aufwändig zu emulieren: Exception Interrupts Condition-Code-Flags MMU/Segmentierung berechnete Sprünge selbst-modifizierender Code Just-In-Time-Compiler (2) 3/13 2011-09-12

Just-In-Time-Compiler (2) Exceptions nahezu jede Instruktion kann Fehler produzieren Fehler unterbrechen linearen Code-Block für einen Retry muss kompletter CPU-Zustand zum Fehlerzeitpunkt bekannt sein (CC-Flags, IP, Register,... ) => Instruktionen müssen praktisch komplett und der Reihe nach emuliert werden. => Exceptions sind schwierig zu emulieren. => Fehler vermeiden (z.b. keine MMU, Typ-sichere Pointer,... ) Retry einzelner Instruktionen nicht zulassen (statt dessen z.b. try/catch-blöcke) Just-In-Time-Compiler (2) 4/13 2011-09-12

Just-In-Time-Compiler (2) Interrupts Idee: Interrupts müssen vor Ausführung jeder Instruktion abgefragt werden. Sehr aufwändig. Interrupts müssen vor Ausführung jedes Blocks abgefragt werden. In kurzen Schleifen sehr aufwändig. Interrupts weglassen nebenläufige Prozesse zulassen Just-In-Time-Compiler (2) 5/13 2011-09-12

Just-In-Time-Compiler (2) Condition-Code-Flags Auf echter Hardware werden die Condition-Code-Flags parallel zum Rechenergebnis mitberechnet (kein Zeit-Overhead). Auf emulierter Hardware nicht parallel möglich => großer Aufwand. In den meisten Fällen werden die Condition-Code-Flags jedoch von der nächsten Instruktion überschrieben. In der Praxis zu >95% nur zwischen cmp-befehl und nachfolgendem bedingten Sprung gebraucht. => JIT-freundliche Hardware berechnet Condition-Codes nur mit cmp-befehl. Alle anderen (Arithmetik-) Befehle brauchen Condition-Code-Flags nicht berechnen. Just-In-Time-Compiler (2) 6/13 2011-09-12

Just-In-Time-Compiler (2) MMU Auf realer Hardware dient MMU u.a. zum gegenseitigen Schutz verschiedener User-Prozesse. Schutz nicht notwendig, wenn nur eine Applikation läuft. Schutz auch möglich, wenn sichere Pointer verwendet werden: Typ-Prüfung der Assembler-Instruktionen notwendig; Pointer dürfen nicht berechnet werden; damit Typ-Prüfung möglich ist, muss Code bestimmten Kriterien genügen Garbage-Collection notwendig Just-In-Time-Compiler (2) 7/13 2011-09-12

Just-In-Time-Compiler (2) berechnete Sprünge movl..., %eax movl..., %eax jmp *%eax call *%eax Problem: JIT kann hier nicht weiter-compilieren. %eax kann hier 2 32 Werte annehmen. Weiter ist nichts bekannt. Just-In-Time-Compiler (2) 8/13 2011-09-12

Just-In-Time-Compiler (2) berechnete Sprünge Beim Übersetzen moderner Programmiersprachen wird jmp *%eax nur für switch-konstrukte gebraucht. Idee: %eax kann nur wenige Werte annehmen (die Adressen der case-statements). Spezielle switch -Assembler-Instruktion einführen. => mögliche Sprungziele dem JIT-Compiler bekannt => JIT-Compiler kann über die switch -Anweisung hinaus weiter-compilieren. Just-In-Time-Compiler (2) 9/13 2011-09-12

Just-In-Time-Compiler (2) berechnete Sprünge call *%eax braucht einer Compiler beim Übersetzen moderner Programmiersprachen nur für Aufrufe virtueller Methoden. Die Anzahl der virtuellen Methoden, die an einer Stelle im Code aufgerufen werden können, ist i.a. klein und zur Compile-Zeit bekannt. Idee: Virtuellen Methoden vor dem Erzeugen eines Objektes JIT-compilieren. Adresse der virtuellen Methoden beim Erzeugen eines Objektes im Objekt speichern. => JIT-Compiler kann davon ausgehen, dass bei einem Aufruf einer virtuellen Methode, diese schon compiliert wurde. => JIT-Compiler kann über die call virtual -Anweisung hinaus weiter-compilieren. Just-In-Time-Compiler (2) 10/13 2011-09-12

Just-In-Time-Compiler (2) Selbst-modifizierender Code Reale Hardware gestattet es i.a., dass Software sich selbst modifiziert. Dies führt zu Problemen: Modifikation muss detektiert werden, um generierten Code verwerfen zu können. Code-Cache muss es erlauben, Code verwerfen zu können. => JIT-freundliche Hardware verbietet, einmal compilierten Code zu invalidieren. Just-In-Time-Compiler (2) 11/13 2011-09-12

Just-In-Time-Compiler (2) Werden alle obigen Punkte berücksichtigt, kann JIT-Compiler ganze Funktionen oder ganze Applikationen am Stück übersetzen. => optimale Optimierungsmöglichkeiten für JIT-Compiler => JIT-compilierter Code läuft in der VM etwa so schnell wie der gleiche Code compiliert für den Host Just-In-Time-Compiler (2) 12/13 2011-09-12

Just-In-Time-Compiler (2) Nachteile: Vorteile: JIT muss Code bei jedem Programmstart neu übersetzen. JIT muss Code bei jedem Programmstart neu optimieren. JIT kann sich auf Code beschränken, der wirklich gebraucht wird. JIT muss nur die Code-Bereiche optimieren, die häufig durchlaufen werden. JIT kann Laufzeit-Wissen nutzen, dass normaler Compiler nicht hat. JIT kann auf die aktuelle Hardware optimieren. JIT-Code kann effizienter sein als direkt für den Host compilierter Code! Just-In-Time-Compiler (2) 13/13 2011-09-12