Betriebssystem mit Virtualisierung

Portable Software für IoT-Geräte

12. Januar 2017, 15:38 Uhr |
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Ein Betriebssystem fürs ­Betriebssystem

Aufbau von MicroEJ: Über dem Betriebssystem befinden sich weitere Abstraktionsebenen, die die Anwendungs-Software vollständig portabel machen.
Aufbau von MicroEJ: Über dem Betriebssystem befinden sich weitere Abstraktionsebenen, die die Anwendungs-Software vollständig portabel machen.
© Quelle: MicroEJ

Ein Betriebssystem, das ein Betriebssystem benötigt – das ist schon mal die erste Besonderheit an MicroEJ. Denn streng genommen ist MicroEJ kein Betriebssystem, sondern eine Abstraktionsschicht, die Hardware und Software trennt, oder besser: Betriebssystem und Anwendungs-Software. Denn obwohl ein Betriebssystem diese Aufgabe erledigen sollte, bleiben bei Embedded-Systemen eine Menge Hardware-Abhängigkeiten bestehen, die dazu führen, dass Anwendungsprogramme nicht einfach auf einer anderen Hardware oder gar einem anderen Prozessor laufen. Und schließlich gibt es auch Software-Abhängigkeiten, sprich: die Application Programming Interfaces (APIs) des Betriebssystems, auf die die Anwendungsprogramme zugreifen. Auch diese APIs abstrahiert MicroEJ.

Auf der Hardware muss also zunächst ein Embedded-Betriebssystem installiert werden. Als solches kann MicroEJ mit freeRTOS (Wittenstein), µC/OS (Silicon Labs, bis vor Kurzem: Micrium), Thread X (Express Logic) und EmbOS (Segger) zusammenarbeiten. Das Betriebssystem übernimmt die Kernaufgaben Scheduling und Taskverwaltung. Darüber wird MicroEJ installiert (Bild), das praktisch eine Virtualisierungsschicht über dem Betriebssystem bildet. Die Kernkomponenten von MicroEJ enthalten einen virtuellen Prozessor, eine Java-VM sowie die Speicherverwaltung und das Power Management. In einer darüber liegenden Ebene befindet sich die Middleware, die aus den Treibern für IO-Geräte, den Protokollen für drahtlose und drahtgebundene Kommunikation und den Dateisystemen besteht.

Nun kann man einwenden, dass diese Funktionen auch von den oben genannten Betriebssystemen bzw. der Middleware der Betriebssystem-Anbieter erledigt werden. Hat man allerdings seine Software z.B. auf den TCP/IP Stack von Express Logic abgestimmt und wechselt dann zu Micrium, dann werden wieder Änderungen erforderlich sein. Genau dieses Problem beseitigt MicroEJ nun, da die Anwendungsprogramme nur noch mit MicroEJ in Berührung kommen und dadurch voll portabel sind. Zusätzlich hält MicroEJ noch Middleware für IoT-Geräte bereit, wie z.B. die Protokolle MQTT, CoAP und XMPP. Trotz der starken Abstraktion hält sich der Hardware Overhead für MicroEJ in Grenzen: Der Zeitbedarf fürs Booten verlängert sich um max. 2 ms (auf einem Cortex-M4 mit 120 MHz), der Speicherbedarf beträgt 40 KB im Flash und 1,5 KB im RAM, die Stack-Größe weniger als 1 KB pro Thread.

Java als bevorzugte ­Programmiersprache

Durch mehrere Faktoren wird MicroEJ besonders sicher. Es ist primär für Java-Anwendungen entwickelt worden, obgleich auch C- und C++-Programme direkt ausgeführt werden können. Die einzelnen Anwendungen sind durch einen Software-Mechanismus voneinander abgeschirmt und mit Berechtigungen ausgestattet. Eine MMU ist nicht erforderlich. Der Entwickler kann aber konfigurieren, auf welche MicroEJ-APIs die Apps zugreifen dürfen. So können z.B. nicht benötigte Kommunikationsprotokolle für eine App gesperrt werden.

Als Entwicklungsumgebung bietet MicroEJ eine IDE auf Eclipse-Basis an, kann aber auch mit existierenden C-/C++-Entwicklungs-Tools zusammenarbeiten. Ferner gibt es für Test und Optimierung der Software verschiedene Tools wie eine Code-Coverage-Analyse, eine Trace-Funktion für die Stack- und Speicher-Nutzung sowie eine Test Engine.

passend zum Thema


  1. Portable Software für IoT-Geräte
  2. Ein Betriebssystem fürs ­Betriebssystem

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu Componeers GmbH

Weitere Artikel zu Betriebssysteme

Weitere Artikel zu IIoT-Protokolle (OPCUA, MQTT, ...)