aicas news l Frühjahr 2016 aicas realtime aicas news Frühjahr 2016 News für Software-Entwickler kritischer Anwendungen Lambdas für JamaicaVM Editorial Lieber Leser, Functional Programming in JamaicaVM 8.0 das aicas-Team bietet auf Basis einer Echtzeit-Java Virtual Machine nun schon seit 15 Jahren Lösungen für Embedded Systems an. In dieser Zeit hat sich viel verändert. Sowohl in den Märkten, als auch in den Produkten, die aicas anbietet. Doch das Herz unserer Technologien ist und bleibt immer noch unsere deterministische Garbage Collection. Version 8 der JamaicaVM, aicas‘ Vorzeigeprodukt für Echtzeit-, Embedded- und Multicore-Programmierung, ist jetzt verfügbar! Neben deterministischer Garbage Collection, statischer Kompilierung und Realtime APIs, unterstützt ­JamaicaVM 8 nun auch die OpenJDK-8-Klassen und Erweiterungen für eine funktionale Programmierung. JamaicaVM-8-Nutzer können die ganze Stärke von Lambda Expressions in Embedded-Umgebungen nutzen, ohne die Echtzeitfähigkeit zu opfern. Dieses Release aktualisiert JamaicaVM mit den neuesten APIs für Java-Programmierung und verbessert die Unterstützung anderer Sprachen wie Scala, Groovy, Clojure und JRuby. Frühe Systeme bestanden einfach aus kompletten Java-Programmen, kompiliert, um auf einem eingebetteten RTOS zu laufen. Es dominierten zwei Arten von Anwendungen: diejenigen, die Echtzeit benötigten und jene, die einen robusten Weg brauchten, um Features wie Grafik oder sichere Kommunikation der eingebetteten Anwendung hinzuzufügen. JamaicaVM machte diese Aufgaben damals wie heute einfacher und schneller. Aber die Zeiten haben sich geändert. Heutige Embedded Systems müssen aktualisierbar und dabei sicher sein. Eine kurze “Time to Market” ist ein wichtiges Erfolgskriterium. Einfach die richtige Sprache und Laufzeit zu unterstützen, reicht nicht immer aus. Das aicas-Team hat darauf reagiert, indem es umfangreichere Lösungen auf JamaicaVM-Basis bietet. JamaicaCAR und Jamaica-IoT sind hochmoderne Plattformen für HMI und Headless Embedded Systems. Sie bringen Leistung und sichere Updates auf dynamische Systeme. Ich wünsche Ihnen viel Spaß, hier darüber zu lesen. Dr. James J. Hunt, CEO Mit seinem ­Streaming-API bietet Java 8 ein neues Paradigma zur Programmierung sich wiederholender Aufgaben. Statt einer Schleife, die durch die Datenstrukturen iteriert, schreibt der Programmierer eine Funktion, die auf jedes Element der Datenstruktur angewendet wird. Das minimiert Daten-abhängigen Code im Programm und vereinfacht die Parallelisierung dieses Codes, sei es durch Threads, GPU-Beschleunigung oder FPGA-Code. JamaicaVM 8 springt bei den Klassenbibliotheken direkt von Java 6 nach Java 8. Somit stehen JamaicaVM-Entwicklern jetzt alle neuen Features von Java 7 und Java 8 zur Verfügung. Das bringt nicht nur Functio- nal Programming und verbessertes Ressourcen-Management, sondern auch weniger dramatische Features wie kompaktere „Catch Clauses“, Jamaica bessere Unterstützung von binären Konstanten und vorzeichenlosen Werte, Datum und Zeit, sowie Unicode. Natürlich wurden auch die Virtual Machine, der Builder und weitere Tools nicht vernachlässigt. Der Compiler nutzt jetzt eine strikte „Static Single Assignment“-Repräsentation und eine Regel-basierte Engine für die Graph- und damit für die Code-Optimierung. Dieselbe Engine verwendet der neue Jamaica JAR Accelerator für bessere Leistung bei dynamisch geladenem Code. Diese wird zusammen mit dem JAR auf einer kompatiblen VM geladen, dadurch laufen diese Methoden voll kompiliert mit maximaler Leistung. Das ist besonders nützlich für Frameworks wie OSGi. JamaicaVM 8 ist die Basis für unsere Plattformlösungen, die nächste Generation von JamaicaCAR und Jamaica-IoT. Das aicas-Team aktualisiert JamaicaVM auch weiterhin, um die beste Leistung und die besten Features für ­Java und Java-artige Sprachen in Embedded Systems zu liefern. Dazu zählen ein schneller Startup, ein kleiner Footprint und flüssige Echtzeitreaktion für Steuerungs- und UI-Anwendungen. News JamaicaVM 8 für Compact Profiles ab sofort verfügbar Jamaica JAR ­Accelerator 8 ist jetzt verfügbar Industrial Internet Consortium (IIC®) kündigt erstes Security Testbed an JamaicaVM 8 ermöglicht Entwicklern nun, Anwendungen mit OpenJDK 8 Compact Profilen zu entwickeln und auszuführen. Mit diesem Sprung von OpenJDK Version 6 auf Version 8 ist JamaicaVM up to date. Das erste Release unterstützt Linux und QNX 6.6 mit Compact 1 und Compact 2. Unterstützung für größere Profile und andere Betriebssysteme, wie z.B. VxWorks und PikeOS, wird folgen. Mit dem Jamaica JAR Accelerator 8 können Entwickler einzelne Java Archive (JAR) zu CPU-Maschinenbefehlen für dynamisches Laden zur Laufzeit vorkompilieren. Der JAR Accelerator nutzt den AoT-Compiler des JamaicaVM Builders und liefert deterministischen Hochleistungsdurchsatz, während „Aufwärmzeiten“ beim Laden, die durch JIT-Kompilierung entstehen, eliminiert werden. Das IIC® hat seine erste Testumgebung für Sicherheitsprüfungen vorgestellt, das „Security Claims Evaluation Testbed“. Die IICMitglieder UL, Xilinx, aicas und PrismTech kooperieren bei diesem Projekt zur Bereitstellung einer offenen, leicht konfigurierbaren Cybersecurity-Plattform zur Evaluierung der Sicherheitstauglichkeit von Endpoints, Gateways und anderen Netzwerkkomponenten. Datenquellen zur Analyse des sicheren Betriebs können Endpoints von Industrie-, Automotive-, medizinischen und anderen relevanten Anwendungen sein.. 1 aicas news l Frühjahr 2016 Industrie 4.0 möglich machen Herausforderungen und Lösungen für dynamische Embedded Systems Das Internet of Things dreht sich nicht nur um die Verbindung aller Geräte, es geht darum, in der Lage zu sein, das Verhalten von Geräten im Feld zu verändern. Das ist eine große Herausforderung, nicht zuletzt, da man nicht alle Änderungen vorhersehen kann, die in den nächsten Jahren benötigt werden und erst recht nicht, was im nächsten Jahrzehnt nötig sein wird. Noch wichtiger ist, je mehr das Verhalten eines Geräts über das Internet verändert werden kann, desto wichtiger wird es, sicherzustellen, dass nur autorisierte Änderungen durchgeführt werden können. Ein Virus in einem Gerät kann viel gefährlicher sein als in einem Laptop oder Desktop PC. Der Trend zu dynamisch programmierbaren Geräten hat sich schon in Mobiltelefonen gezeigt, aber das ist nur die Spitze des Eisbergs. Zwei Dinge unterscheiden Mobiltelefone von Industriesystemen und anderer kritischer Infrastruktur. • Die meisten Mobiltelefone werden alle zwei bis vier Jahre ersetzt • Es kann nur relativ wenig physischer Schaden durch die Installation von Malware auf einem Mobiltelefon entstehen Alle indizierten Operationen müssen grenzüberprüft sein • Kein Pointer darf verändert werden • Starke Objekt-Typisierung • Kein Objekt darf explizit freigegeben werden eine Referenz auf seine Typendefinition hat, um Typenprüfung zur Laufzeit zu ermöglichen. Der Compiler kann die meisten dieser Typenprüfungen statisch durchführen, aber manche Laufzeitprüfungen sind immer nötig. Nicht in der Lage zu sein, Objekte direkt freizugeben, ist etwas kostspieliger, da dann ein Garbage Collector notwendig ist, der Objekte, die nicht länger referenziert werden, wieder der Freiliste übergibt. Der Vorteil, einen Garbage Collector zu verwenden, ist, dass zwei Klassen von Fehlern eli- Die Wichtigkeit von Grenzprüfungen ist ziemlich offensichtlich, aber sie sind mit Kosten verbunden. Das System muss fähig sein, zu zeigen, dass kein Index über sein Objekt hinausgeht. Das wird nor- Ein Beispiel für Industrie 4.0 GUI Node User Xlets DB XMPP JamaicaCAR JamaicaVM RTOS XMPP PLC RTSJ Field Bus Jamaica-IoT JamaicaVM RTOS Typensicherheit: Die Basis für Sicherheit Unglücklicherweise wird Embedded-Code immer noch in Sprachen geschrieben, die sich seit den 1970ern nicht wesentlich weiterentwickelt haben. Pufferüberläufe machen immer noch einen großen Teil der Sicherheitslücken aus, etwas, das durch einfache Grenzüberprüfung verhindert werden könnte. Das sind Attribute, die Unterstützung durch eine Programmiersprache erfordern, da sie zu detailliert sind, um sie auf Modelling-Ebene anzugehen. Sprachen mit Garbage Collection verhindern die meisten dieser Probleme durch Festhalten an vier Kernpunkten. Message Servers MQTT Analytics Enterprise Servers Big Data AMQT Control Node Industriesysteme sind ganz anders. Sie werden häufig für zwei oder mehr Jahrzehnte eingesetzt und steuern oft lebenserhaltende Systeme oder Prozesse, die in großem Rahmen lebensbedrohlich werden könnten. 2 • Gateway Node XMPP Jetty DB Jamaica-IoT JamaicaVM RTOS malerweise mit einer Laufzeitprüfung gemacht, die jedoch die Leistung behindert. Programmanalyse im Compiler kann überflüssige Laufzeitprüfungen entfernen, indem gezeigt wird, dass ein gegebener Index nie seine Grenzen überschreitet, aber irgendeine eine Form der Prüfung wird immer nötig sein. Einem Programm nicht zu erlauben, Pointer zu verändern, bedeutet, dass ein Pointer nur dereferenziert werden kann. Das verhindert, dass ein Teil des Programms einfach Daten aus einem anderen Teil erhält, für den es keine Referenz hat, indem es einfach eine beliebige Nummer zum Pointer hinzufügt und versucht, ihn zu dereferenzieren. Um das sicherzustellen, muss das Laufzeitsystem genau wissen, welcher Wert nur eine Nummer ist und welcher Wert eine Referenz ist. Man beachte, dass Indizes eine Art eingeschränkte Referenz sind, weshalb Grenzprüfungen für Indizes nötig sind, aber nicht für Referenzen. Starke Typisierung ist nötig, um sicherzugehen, dass alle Pointer-Dereferenzierungen auf gültige Objektfelder zugreifen. Das setzt voraus, dass jedes Objekt Processing Node JNI GPGPU DB Jamaica-IoT JamaicaVM RTOS miniert werden, Memory Leaks und mehrdeutige Objektinstanzen. Objekte, die nicht länger referenziert werden, werden automatisch gesammelt, aber der Benutzer kann kein Objekt freigeben, für das noch eine Referenz existiert. Ohne einen Garbage Collector kann vorschnell freigegebener Speicher für ein anderes Objekt alloziert werden, obwohl noch eine Referenz darauf existiert. Das Resultat ist eine mehrdeutige Speicherreferenz. Zwei verschiedene Referenzen können den Speicher als zwei unterschiedliche Objekte behandeln, was zu Datenkorruption oder sogar der Möglichkeit führt, einen zufälligen Pointer zu erhalten, der die Konsistenz des Heaps bricht und damit auch die Sicherheit verletzt. Gleichermaßen, kann die Unfähigkeit Objekte freizugeben dazu führen, dass der Speicher erschöpft wird. Im Gegensatz zu Garbage Collection enthält manuelle Speicherverwaltung im Allgemeinen keine Heap-Kompaktierung, somit ist die Erschöpfung des Heap durch Fragmentierung ein großes Problem. Ein ordentlich definierter Garbage Collector verhindert, dass der Heap fragmentiert wird. aicas news l Frühjahr 2016 Speicherreferenzfehler sind dafür bekannt, 20-40% aller Fehler auszumachen, die während SoftwareTests in Sprachen wie C und C++ gefunden werden. Selbst mit diesem Zusatzaufwand gibt es keine Garantie, dass alle Fehler gefunden werden. Manchmal wird behauptet, dass Memory Leaks auch in Sprachen mit Garbage Collection auftreten, aber das ist nicht wirklich wahr. Ein Programm kann Referenzen auf Daten behalten, die nicht mehr gebraucht werden, aber solche Fehler sind viel einfacher zu finden als wirklich verlorene Objekte. Solche Objekte sind noch erreichbar und können durch die Untersuchung der Objekterreichbarkeit gefunden werden. Da die oben genannten Kosten im Vergleich zu den gelösten Problemen gering sind, sind Desktopund besonders Server-Entwickler auf Sprachen mit Garbage Collection migriert, von denen Java bei Weitem die Beliebteste ist. Statische Embedded Systems Um fair zu den Entwicklern von Embedded Systems zu sein, muss man sagen, dass ihre Anforderungen und Umgebungen stark von Serversystemen abweichen. Ihre Ressourcen sind stärker beschränkt und sie müssen oft in einem wohldefinierten Zeitrahmen reagieren. Wenn ein Webserver etwas langsamer reagiert, ist das egal. Das Gleiche gilt nicht für die Steuerung eines Roboterarms. In einer Welt, in der Embedded Systems einfach und statisch sind, ist das nicht so wichtig. Wenn die Steuerung nicht mehr als ein Zustandsautomat ist, ist dynamische Allozierung auch unnötig und das System kann vollständig modelliert werden, so dass die ganze Programmierung auf Modell-Ebene stattfinden kann. So lange Kommunikation mit der Außenwelt nicht benötigt wird, können Systeme als Speicherprogrammierbare Steuerung (SPS) beschrieben werden. Soft-SPS-Sprachen, wie die IEC 61131-3 Sprachfamilie und PLCopen, werden oft für Embedded-Entwicklung verwendet. Echtzeiteigenschaften für Tasks sind auch notwendig. Für viele Anwendungen sind asynchrone und getimete Event Handler ein besseres Paradigma als Threads. Für Java definiert die Realtime Specification for Java diese Eigenschaften, sowie Eigenschaften für direkten Gerätezugriff und Kostenund Deadline-Überwachung. Anwendungsisolation Eine Programmiersprachen-Laufzeitumgebung mit einer echtzeitfähigen Laufzeitumgebung ist nur der Anfang. Für sichere Software-Aktualisierung ist eine Art der Isolation zwischen Anwendungen nötig. Der normale Mechanismus, das zu ermöglichen, ist die Bereitstellung eines separaten Adressraums für jede Anwendung. Das geht zwar Speicherprobleme an, aber keine Timing- und Kommunikationsprobleme. Konventionelle Hypervisors gehen den nächsten Schritt, indem sie zeitliche Partitionierung als auch räumliche Partitionierung bieten. Das ist eine schwergewichtige Lösung, da fast jeder Context Switch bedingt, dass sowohl das virtuelle Memory Page Mapping, als auch der Thread-Kontext geändert werden müssen, aber das macht die Kommunikationskanäle nicht sicherer. In einer Umgebung mit Garbage Collection, wie der Java Virtual Machine, kann Isolation durch Class Loader erreicht werden. OSGi verwendet Class Loader, um eine modulare Umgebung zu bieten, wo Dienste, sogenannte Bundles, zur Laufzeit ersetzt werden können. Ein starkes Import-ExportModell wird genutzt, um sicherzustellen, dass ein Bundle nur verwendet, was ihm erlaubt ist. OSGi bietet eine viel effizientere Modularisierung als es separate Prozesse tun. Seine Schwäche ist, dass sein Life Cycle Management kooperativ ist. Es gibt keinen Weg, ein Bundle zur Beendigung zu zwingen, wohingegen ein Prozess oder eine Partition terminiert werden kann. Cost Enforcement Jedoch ändern sich zwei Dinge rasant, die Leistung von Embedded Systems holt zu Desktop-Systemen auf und die Konnektivität solcher Systeme steigt. Beide Faktoren ermöglichen die Verwendung viel komplexerer Überwachungs- und Steuerungssysteme, die den Bedarf für sichere, dynamische Speicherverwaltung antreiben. OSGi bietet ein kooperatives Ausführungsmodell. Eine außer Kontrolle geratene Anwendung kann die ganze VM abschießen. Das bedeutet, selbst ein kleiner Fehler in einem Bundle kann dazu führen, dass das ganze System einfriert. Ein Mechanismus für Cost Enforcement ist nötig, um das zu verhindern. Embedded Garbage Collection Die Realtime Specification for Java 2.0 bietet CostEnforcement-Mechanismen für individuelle Threads und Thread-Sammlungen. Ein Task oder eine Gruppe von Tasks, die mehr Zeit nutzen als ihnen zugewiesen wurde, können ausgesetzt werden, bis ihr Budget erneuert wurde. Natürlich hängt die Länge der Erneuerungsperiode von der allge- Pünktlichkeit ist eine kritische Eigenschaft vieler Embedded Systems, besonders solcher, die für Maschinen- oder Umweltsteuerung verwendet werden. Dafür ist ein konventioneller Garbage Collector nicht ausreichend. Garbage-Collection-Pausen können den Betrieb des Systems zu leicht stören. In der Tat können sogar grafische Benutzeroberflächen unsicher werden, wenn der Garbage Collector für eine flackernde Darstellung sorgt. Glücklicherweise gibt es deterministische Garbage Collectors, die keine Pausen in der Antwortzeit verursachen. Für sehr kurze Deadlines sind WorkBased Collectors mit festgelegten Zuweisungsblöcken am passendsten, da sie nicht auf einen gesonderten Garbage Collection Thread angewiesen sind. Einem Collector dieses Typs kann mit einer Zeitverzögerung zuvorgekommen werden, die eine ähnlichen Dauer wie bei einem normalen Context Switch in einem RTOS hat. Für Echtzeitreaktion braucht die Sprach-Laufzeitumgebung nicht nur einen deterministischen Collector, Prioritäts-bewusste Synchronisierung und meinen Leistung und den Latenz-Anforderungen des Systems ab. Eine OSGi-Implementierung kann angepasst werden, um dieses Cost Enforcement zu bieten. Jedem Bundle kann ein eigenes Kostenbudget zugewiesen werden. Das Framework könnte dieses Budget dann zur Laufzeit durchsetzen. Kostenbudgets können auch verwendet werden, um sicherzustellen, dass den laufenden Anwendungen genug Rechenleistung zur Verfügung steht, währen verhindert wird, dass die Gesamtkosten das vordefinierte Limit überschreiten. Chain of Trust Kostenkontrolle kann dem Framework helfen, die Reaktionsfähigkeit bei Störungszustand zu bewahren. Das reicht aber nicht, um ein System vor bösartigem Code zu schützen. Der einzige Weg dafür, ist sicherzustellen, dass nur validierter Code auf der Plattform ausgeführt werden kann. Dazu ist es nötig, die Quelle jedes Codes zu kennen und zu wissen, was jeder Anwendung erlaubt ist. Der Java Class Loader kann verwendet werden, um Signaturen vor dem Laden zu prüfen und die APIs eines Bundles auf Modul-Basis einzuschränken. Das bedeutet, einem Bundle ohne bekannte Signatur kann der Zugriff auf die Plattform verwehrt werden. Selbst mit einer bekannten Signatur können verfügbare APIs limitiert werden, dadurch wird eine fein justierbare Kontrolle darüber geboten, wessen Code was machen kann. Jamaica-IoT Jamaica-IoT Jamaica-IoT kombiniert all diese Eigenschaften, deterministische Garbage Collection, OSGi Framework, Cost Enforcement und ein fein justierbarer Kontrollmechanismus, um eine sichere Plattform für das Internet of Things bereitzustellen. Im Gegensatz zu anderen OSGi-Implementierungen können Echtzeit-Tasks auch als Bundles laufen. Kombiniert mit einer sicheren Plattform mit sicherem Booten und Onboard-Ver- und Entschlüsselung, kann man Geräte bauen, die sowohl sicher als auch dynamisch aktualisierbar sind. Mit Jamaica-IoT kann man Geräte entwickeln, die kontinuierlich aktualisiert werden können, um mit den sich unaufhörlich ändernden Erfordernissen mitzuhalten, ohne die Gefahr, die Kontrolle über das gesamte System zu verlieren. Java-Code mit JamaicaVM auf FPGA oder GPU? Das aicas-Team hat zusammen mit Forschern der University of York einen Prozess entwickelt, um Java-Code in ein effizientes FPGA-Layout zu konvertieren, und es aus einem Embedded-JavaProgramm heraus zu starten. Das wurde als Teil einer hochparallelen Big-Data-Plattform im Rahmen des FP-7-Projekts Juniper demonstriert. Juniper wurde erfolgreich mit dem höchsten Assessment Level fertiggestellt. Das Projekt nutzt den JamaicaVM Builder, um den Input für die Xilinx Vivado Toolchain zu erzeugen. Die Zwischenausgabe des ­Jamaica­­VM Builder wird automatisch verarbeitet, um den Input für Vivado zu liefern, in der sie in ein Bitstream-Encoding für Xilinx FPGAs übersetzt wird. Das Ergebnis wurde in ein Java-Programm integriert, das den FPGA-Code zur Laufzeit aufruft. Das führt nicht nur zu einer signifikanten Beschleunigung, sondern auch zu viel geringerem Jitter., signifikant geringer als ihn Code liefern könnte, der das RTOS betreibt. Das aicas-Team plant, beides in den JamaicaVM Builder und den Jamaica JAR Accelerator zu integrieren. Dann könnte eine JAR-Datei zu einem FPGA-Executable kompiliert werden, um das FPGA „on the fly“ umzuprogrammieren. Jamaica-IoT könnte diesen Code dann sicher laden. Ähnliche Mechanismen existieren auch zur Erzeugung von GPU-Code. 3 aicas news l Frühjahr 2016 JamaicaCAR auf der Überholspur Die zweite Generation ist unterwegs JamaicaCAR ist ein Anwendungs-Framework für grafische Anwendungen. Es wird hauptsächlich in der Automobilindustrie für Infotainment-Systeme eingesetzt. JamaicaCAR bietet eine App-Fähigkeit ähnlich zu Andro- Com App NAVI App • • • • Plattform App Sonstige App Manager App LWUIT & OpenGL ES 1.1 Grafik Netzwerk-Konnektivität (Apache Client) Application Management Services Location API JamaicaME id, aber mit einem viel stärkeren Sicherheitsmodell. Dieses gibt den Plattformbesitzern die volle Kontrolle darüber, welcher Code auf dem jeweiligen System laufen darf. Da Apps vollständig in einer virtuellen Maschine laufen, gibt es in einer App keine Abhängigkeiten vom darunterliegenden Betriebssystem. JamaicaCAR läuft auf jedem OS, das von JamaicaVM unterstützt wird. Die Verwendung der deterministischen Garbage Collection stellt sicher, dass Animationen und visuelles Feedback flüssig und vorhersagbar bleiben, um den Benutzer nicht abzulenken. Das ist besonders wichtig bei Automobilanwendungen. JamaicaCAR kann mit anderen Anwendungen auf dem System koexistieren. Jamaica CAR JamaicaCAR bietet zusätzliche Sicherheit durch die Einschränkungen der Ressourcennutzung und des API-Zugriffs jeder App, die darauf läuft. Zum Beispiel kann ein Automobil-OEM festlegen, welche Organisation Apps zur Nutzung auf ihrem System entwickeln kann und welche Ressourcen Apps von definierten Organisationen zur Verfügung stehen. Dadurch sichert sich der OEM die volle Kontrolle über seine Systeme. Über fünf Millionen Instanzen von ­JamaicaCAR Version 1 sind bereits im Einsatz und Version 2 wird ausgeliefert. ­JamaicaCAR Version 2 bietet signifikante Verbesserungen bei Sicherheit und Performance, sowie Unterstützung für Java 8 Sprach-Features. RTSJ 2.0 verfeinert „Echtzeit“ Weiterentwicklung der Java-Sprache und -Runtime für IoT JSR 282 ist das größte Update der Realtime Specification for Java seit Jahren und bringt die Spezifikation von Version 1.0.2 auf 2.0. Die Arbeit konzentriert sich nun auf die Referenzimplementierung und das Technology Compliance Kit für das finale Release. RTSJ 2.0 bringt viele Erklärungen und Updates zu den Realtime Java APIs und der Runtime, ohne von der Java-Sprache abzuweichen. In der neuen Spezifikation gibt es viele Bereiche mit Verbesserungen: • Echtzeit-Threads • Gruppen von Threads • Scheduling • Events und ihre Handlers • Clocks • Geräteunterstützung • Dokumentation • Modularisierung Die RealtimeThread-Klasse unterstützt jetzt nicht nur periodische Events, sondern auch aperiodische Events. Ein ­RealtimeThread der beide Typen unterstützt, kann die neue ­waitForNextRelease-Methode statt Veranstaltungen Besuchen Sie uns auf einer der folgenden Veranstaltungen: Hannovermesse 2016 Hannover, Deutschland 25. April 2016 - 29. April2016 IoT Developer Conference 2016 Santa Clara, CA, USA 25. Mai 2016 - 26. Mai 2016 ESE Kongress Sindelfingen, Deutschland 28. November 2016 - 2. Dezember 2016 4 ­ aitForNextPeriod nutzen, um auf ein periodiw sches oder aperiodisches Release zu warten. Die release-Methode kann jetzt verwendet werden, um den nächsten aperiodischen Release zu signalisieren. ThreadGroup wurde um die neuen Klassen ­SchedulingGroup und ProcessingGroup erweitert. Diese ermöglichen mehr Kontrolle darüber, was Threads erben können. Ein Thread kann nur von einem Echtzeit-Scheduler festgelegt werden, wenn er in einer ­SchedulingGroup ist. ProcessingGroup fügt mehr „cost and overrun“Überwachung, sowie bessere Durchsetzungsfähigkeiten hinzu. Zwei große Änderungen wurden beim Scheduling durchgeführt. Es gibt nun einen FIFOScheduler und einen Round-Robin-Scheduler. Beide sind Unterklassen der PrioritySchedulerKlasse. Beide Scheduler können verwendet werden, um Java-Threads (­java.lang.Thread) von einem konventionellen Java-Scheduler zu einem Echtzeit-Scheduler zu befördern. Echtzeit-Threads können auch für normales Java-Scheduling heruntergestuft werden. Das gibt Programmierern mehr Kontrolle über das Scheduling. Die größten Änderungen gab es bei Events und deren Handler. Es gibt nun Typen, die Events mit Nutzdaten unterstützen. Die Event-Hierarchie wurde um Happenings als erste Klassen-Objekte für externe Events, ­POSIXSignal und POSIXRealtimeSignal, bereichert. Alle implementieren das ActiveEvent-Interface mit Dispatchern für asynchrone Event Trigger. Diese Veränderungen verbessern nicht nur die Kontrolle des Benutzers über das Event Handling, sondern bieten auch ein vereinheitlichtes Modul mit Timers. Es gibt nun eine Read-Only Version von Clock: Chronograph, ein Interface, das Clock jetzt implementiert. Beide unterstützen die Definition eines Anwendungs-spezifischen Chronograph oder Clock mit Board-spezifischer Hardware. So kann ein Entwickler ohne Anbieter-spe- zifische Änderungen zusätzliche Clocks und Chronographs in einer Anwendung zur Verfügung stellen. Die Geräteprogrammierung wurde verbessert. Happenings bieten Second Level Interrupt Handling für externe Events. Das Raw Memory Interface wurde verbessert und bietet effizienteres Lesen und Schreiben von Geräte-Registern direkt aus Java. Die RTSJ bietet sogar Unterstützung für DMA und First Level Interrupt Handling durch ­DirectMemoryByteBufferund ­InterruptServiceRoutine. Folglich können vollständige Gerätetreiber in Java geschrieben werden, ohne JNI zu nutzen! Die letzte große Änderung ist, dass die RTSJ jetzt modular ist. Eine Implementierung muss nicht alle Module enthalten, die in der Spezifikation definiert sind. Dies, zusammen mit einer sehr viel ausführlicheren Dokumentation, macht es einfacher, eine grundlegende Implementierung der RTSJ zu liefern. Mit der Sicherheit der Garbage Collection, den Sicherheits-Features der Java-Sprache und diesen RTSJ-Erweiterungen, ist Realtime Java eine ideale Plattform, um dynamische Systeme für das Internet of Things zu bauen. Kontakt aicas GmbH Haid-und-Neu-Straße18 76131 Karlsruhe, Germany +49 721 663 968-0 aicas incorporated 6 Landmark Square, Suite 400 Stamford, CT 06901, USA +1 203-359-5705 aicas Frankreich 9/11 Allée de l’Arche 92671 Paris La Defense. France +33 1 49 97 17 62 [email protected] webwww.aicas.com