Fakultät Informatik, Institut für Angewandte Informatik, Professur Technische Informationssysteme Überblick über Java-Umgebungen auf Tony Müller Dresden, 12.12.2011
Inhalt 1 Einleitung 2 Java-Plattform 3 Java ME 4 Bytecode-Abarbeitung 5 Beispiele: - Kertasarie VM - Sun SPOT - LeJOS - GCJ - SHAP 6 Zusammenfassung Folie 2 von 15
Einleitung Motivation Warum Java in eingebetteten System einsetzen? Vorteile von Java objektorientiert, wiederverwendbar plattformunabhängig keine Zeigerarithmetik (Sicherheit) automatische Speicherverwaltung (Garbage Collection) umfangreiche Klassenbibliotheken Probleme und Hindernisse nicht echtzeitfähig (keine Sprachelemente für Echtzeit, nichtvorhersagbares Verhalten des Garbage Collectors) langsamer als C/C++ hoher Speicherverbrauch (VM, JIT-Compiler, Garbage Collector) kein direkter Hardwarezugriff Folie 3 von 15
Java-Plattform verschiedene Geräteklassen Unterteilung in Editionen, Konfigurationen, Profile Unterschiede in Sprachumfang, API-Spezifikation, JVM Funktionalität vs. Geschwindigkeit vs. Speicherbedarf [1] Folie 4 von 15
Java Micro Edition HW-Anforderungen CDC (Connected Device Configuration) 32-Bit Prozessor, 2 MB RAM, 2,5 MB ROM CLDC (Connected Limited Device Configuration) 16/32-Bit Prozessor, 32 KB RAM, 160 KB ROM VM-Referenz CVM von Sun KVM von Sun Eigenschaften kaum Einschränkungen Reflection und Serialisierung vorhanden aber keine RMI-API optionale Pakete keine GUI-API Profile keine selbstdefinierten Classloader, kein Reflection, keine Serialisierung kein RMI kein Java Native Interface (JNI) eingeschränkte Collection-API (nur Vector, Stack, Hashtable, Enumeration) Generic Connection Framework (GCF) für Kommunikation keine GUI-Klassen Profile Profile Foundation Profile Personal Basis Profile Personal Profile Mobile Information Device Profile GUI-API (kein AWT/Swing) MIDlets Information Module Profile TU Dresden, 28.11.2011 embedded Plattformen Folie 5 von 15
Bytecode-Abarbeitung Bytecode-Verarbeitung Hardware Software direkte Bytecode- Ausführung Hardware-JIT Befehlssatzerweiterung Kompilation Interpretation AOT JIT Hotspot nach [1] Bytecode- Ausführung Interpretation ++ - ++ + JIT-Compiler -- + - -- Hotspot-Compiler -- ++ -- + AOT-Compiler -- + ++ ++ Portierbarkeit Geschwindigkeit Speicherbedarf Startup- Verzögerung nach [1] Folie 6 von 15
Beispiele - Kertasarie VM CDC-API eigene GUI-API (Nutzung nativer GUI-Elemente) netzwerkzentriert Unterstützung von Sockets, Reflection, Serialisierung TinyRMI (eigene RMI-Implementierung, unterstützt TCP und UDP) echtzeitfähig (highest-priority-first Scheduling mit priority-inheritance, echtzeitfähiger GC) Green-Threads Modell (gesamte VM als ein OS-Thread) kein JNI nativer Code statisch in VM einkompiliert Bytecode-Interpreter und JIT-Compiler Plattformen: Linux (x86, ARM, PowerPC) WindowsCE (StrongARM) ecos (ARM) Codegröße 80-120 KB ähnlich wie KVM, bei ähnlicher Geschwindigkeit wie CVM Folie 7 von 15
Beispiele Sun SPOT Allgemeines Experimentierplattform für Wireless Sensor Networks Hardware und Software Open Source Sun SPOT JDK 315 (2 Sensorknoten + Basisstation) IDE-Unterstützung (Netbeans) + Emulator Hardware 400 MHz 32-Bit ARM-Prozessor, 1 MB RAM, 8 MB Flash- Speicher Temperatur-, Licht-, Beschleunigungssensor eigene Sensorboards 2.4 GHz Funk Modul nach IEEE 802.15.4 [7] Software Squawk VM (läuft ohne OS direkt auf der Hardware) CLDC-API + Bibliotheken für Zugriff Hardware 802.15.4 MAC-Schicht Basis für Zigbee [6] Folie 8 von 15
Beispiele - LeJOS Lego Mindstorms NXT 32-Bit ARM-Prozessor @48 MHz, 256 kb Flash- Speicher, 64 kb RAM Sensoren, Aktoren, USB, Bluetooth LeJOS Open Source Java-Programmierumgebung Firmware, die für NXT angepasste JVM zur Verfügung stellt grundlegende Java-Bibliotheken + Bibliotheken für Zugriff auf Sensoren/Aktoren, Kommunikation (Bluetooth) und Robotik-Algorithmen (Lokalisierung, Wegfindung etc.) Werkzeuge für Installation der Firmware, Laden der Programme auf NXT Eclipse und Netbeans Plugins Interpretation des Bytecodes nxj-dateiformat (kein Reflection, kein dynamisches Laden von Klassen) [9] Folie 9 von 15
Beispiele GCJ The GNU Compiler for the Java Programming Language Frontend für GCC übersetzt Java Byte-/Quellcode in nativen Maschinencode Laufzeitsystem libgcj (enthält freie Implementierung der Java-Klassenbibliotheken, Garbage Collector und Bytecode-Interpreter) Klassenbibliotheken noch nicht vollständig implementiert (z.b. AWT und Swing unvollständig) Interpreter für dynamisch geladene Klassen CNI (Compiled Native Interface) als Alternative zu JNI (Java Native Interface) Schnittstelle zu C++ Folie 10 von 15
Beispiele - SHAP Eigenschaften Multicore Java-Bytecode-Prozessor Agentensystem Programmausführung direkt in Hardware FPGA (Xilinx Spartan 3) echtzeitfähig durch preemptives Round- Robin-Scheduling und nebenläufige Garbage Collection CLDC-API (phoneme) Floating-Point-Arithmetik in Software emuliert dynamisches Laden von Klassen [17] Workflow Quellcode mit Standard-Java-Compiler übersetzen Applikation+Shap Runtime ShapLinker.shap-Datei FPGA Folie 11 von 15
Zusammenfassung Fazit Eigenschaften von Java machen Einsatz in eingebetteten Systemen attraktiv, sorgen aber auch für Probleme verschiedene Ansätze um Probleme zu minimieren Java und eingebettete Systeme passt das zusammen? JA, aber immer Abwägung von Funktionalität, Geschwindigkeit und Speicherbedarf Folie 12 von 15
Quellen [1] Stephan Gatzka: Java in eingebetteten Systemen, Dissertation, TU Dresden, 2009 [2] Stephan Gatzka, Christian Hochberger, Thomas Geithner: The Kertasarie VM. In: Organisatoren Net.ObjectDays, c/0 transit GmbH (Hrsg.): Net.ObjectDays 2003 Tagungsband, IGT Colordruck GmbH, 2003. ISBN 3 9808628 2 8, S. 285 299. The Kertasarie VM., 2003 [3] Kertasarie VM Projektseite GIANT GmbH, http://www.kertasarie.de [4] Kertasarie VM Projektseite Universität Rostock https://wwwra.informatik.uni-rostock.de/100.0.html [5] Sun SPOT Website, http://www.sunspotworld.com [6] Sun SPOT Wiki, http://java.net/projects/spots/pages/home [7] Sun SPOT Bild, http://blogs.oracle.com/reichart/entry/vortrag_sun_spot Folie 13 von 15
Quellen [8] LeJOS Website, http://lejos.sourceforge.net [9] Lego Mindstorms NXT Bild, http://isklrobotics.blogspot.com [10] GCJ Website, http://gcc.gnu.org/java [11] Per Bothner: Compiling Java with GCJ, Artikel, Linux Journal, 2003, http://www.linuxjournal.com/article/4860 [12] GCC Logo, http://gcc.gnu.org/img/gccegg.svg [13] SHAP Projektwebseite, http://shap.inf.tu-dresden.de [14] Martin Zabel, Thomas B. Preußer, Rainer G. Spallek: Real-time Java processor for monitoring and test. In 1st Cooperation Workshop of Computer Science. Brandenburg University of Technology at Cottbus. Computer Science Report 03/06, Oct. 2006 embedded Plattformen Folie 14 von 15
Quellen [15] Thomas B. Preußer, Martin Zabel, Peter Reichel: The SHAP Microarchitecture and Java Virtual Machine. Fakultät Informatik, Technische Universität Dresden, Tech. Rep. TUD-FI07-02. April 2007, ISSN 1430-211X [16] Martin Zabel, Thomas B. Preußer, Peter Reichel, Rainer G. Spallek: SHAP -- SecureHardware Agent Platform. In Dresdner Arbeitstagung Schaltungs- und Systementwurf (DASS'07). TUDpress, 2007, pp. 119--126 [17] SHAP Bild, http://tu-dresden.de/die_tu_dresden/fakultaeten/fakultaet_informatik/ tei/vlsi/forschung/shap_vlsi embedded Plattformen Folie 15 von 15