aicas news - Aicas GmbH

Werbung
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
Herunterladen