Micro RTX - Multitasking auf dem ST

Mit dem Begriff „Multitasking" verbinden ST-Kundige zunächst Accessories oder RTOS/PEARL. Wer in die Zukunft blickt, denkt vielleicht an OS-9. In unserem Softwaretest berichtet Jürgen Leonhard über eine Alternative: „Micro RTX" von Beckemeyer Development Tools.

Anders als bei RTOS und OS-9 handelt es sich dabei nicht um ein Betriebssystem, sondern um einen RealTime Multitasking-Systemkern. Das heißt, daß RTX weder GEM noch TOS beeinflußt, sondern nur Anwendungsprogramme den Kernel benutzen, um bei einer Anwendung mehrere Tasks parallel laufen zu lassen. Damit ist RTX ein Werkzeug für Entwickler, die ihre Programme multitaskingfähig machen wollen. Die Sprache, für die RTX entwickelt wurde, ist C bzw. Assembler. Die Objektcode-Bibliotheken werden für das Entwicklungspaket von ATARI mitgeliefert. Damit steht der Verwendung von RTX unter GEMDOS PASCAL (plus) nichts im Wege. Bei unserem Test wurde RTX auch für den Megamax C Compiler angepaßt. Dies war mit den mitgelieferten Assemblersourcen nahezu kein Problem. Allein BASIC-Fans werden enttäuscht sein: RTX läuft bis jetzt noch auf keinem der bekannten BASIC-Interpreter.

Mit RTX merkt man erst so richtig, welche CPU-Leistung beim ST verschwendet wird, wenn der Rechner darauf wartet, daß sein Meister sich entscheidet, ob er GOTO 100 oder GOTO 1000 eingibt, denn beim Test stellte sich heraus, daß es kein Problem ist, folgende Dinge gleichzeitig laufen zu lassen:

  1. Eine File von Diskette zu lesen,
  2. Daten auf dem Drucker auszugeben,
  3. Ein Zeichen von der Tastatur zu lesen und anschließend auf dem Bildschirm auszugeben,
  4. Ein Zeichen von der V24-Schnittstelle zu lesen und anschließend als Echo wieder zu schreiben (9600 Baud).

Alle vier Tasks wurden in einer unglaublichen Geschwindigkeit abgearbeitet. Die Antwortzeiten für das Tastatur bzw. Terminalecho waren annähernd identisch mit denen, die ohne zusätzliche Aufgaben erzielt wurden. Ganz ohne Tricks ging die Sache allerdings nicht. RTX bietet die Möglichkeit, jeder Task eine individuelle Priorität zuzuordnen. Gibt man den interaktiven Tasks (3. und 4.) eine höhere Priorität als den anderen, stellt der Benutzer keinen Geschwindigkeitsverlust fest, Die Tasks 1. und z. laufen jedoch tatsächlich langsamer, als wenn sie allein den Prozessor zur Verfügung hätten.

Soviel zur Anwendung. Doch RTX bietet mehr als nur die Möglichkeit, mehrere Prozesse parallel ablaufen zu lassen:
Das Memory Management schützt die Speicherbereiche der einzelnen Prozesse. Jedem Prozess wird bei seiner Erzeugung ein Speichersegment zugeteilt und nach Terminierung des Prozesses wieder freigegeben. Das gleiche gilt für jene Speicherbereiche, die ein Prozess während der Laufzeit anfordert.

Der Scheduler basiert auf dem Round-Robin Verfahren. Dabei kann man sich die CPU-Zeit wie bei einem Kuchen vorstellen und die einzelnen Prozesse wie Stücke aus diesem Kuchen (siehe Bild 1). Die Größe jedes Kuchenstücks steht für die Zeitdauer, die der entsprechende Prozess zur Verfügung hat. Wenn die Zeit abgelaufen ist, bekommt der nächste Prozess die Rechenzeit der CPU usw., bis alle Prozesse abgearbeitet sind. Die Zeitdauer kann für jeden Prozess angegeben und während der Laufzeit vom Prozess selbst oder von anderen Prozessen verändert werden. Das gleiche gilt für die Priorität eines Prozesses.

Die Kommunikation zwischen einzelnen Prozessen erfolgt über sogenannte „Message-Queues". Jeder Prozess kann Daten in eine Message-Queue schreiben oder von ihr lesen. Durch diesen Mechanismus können Prozesse synchronisiert werden, die voneinander abhängig sind. So kann ein Prozess, der Daten zum Drucken aufbereitet, diese über eine Queue an einen Prozess weiterleiten, der sie dann auf dem Drucker ausgibt.

Ein weiteres mittel zur Prozess-Synchronisation sind Events. Es stehen sieben Signale zur Verfügung, die entweder einzeln oder kombiniert an einen bestimmten Prozess gesendet werden können. Der Empfänger versetzt sich durch den Aufruf der Funktion 'e-wait' in einen Wartezustand, bis ein Signal von einem anderen Prozess gesendet wird. Erst dann wird der Programmablauf des Empfängers fortgesetzt. Um zu verhindern, daß das System hängen bleibt, wenn kein Signal gesendet wird, kann die maximale Wartezeit angegeben werden. Nach so viel grauer Theorie nun zur Praxis. RTX stellt 20 Funktionen zur Verfügung, mit denen auch sehr komplexe Multitasking-Anwendungen geschrieben werden können. Hier ein Blick auf die einzelnen Aufrufe und deren Funktion:

RTX-INSTALL muß als erstes aufgerufen werden, um das System zu initialisieren. Mit P-CREATE wird ein Prozess erzeugt. Als Parameter werden ein Zeiger auf eine Funktion und auf die Argumente sowie die gewünschte Priorität und Zeitdauer übergeben. Die Priorität muß zwischen 1 und 255 liegen, wobei 255 angibt, daß dieser Prozess in Echtzeit durchlaufen werden soll und nicht dem Sheduling unterliegt. Als Returnwert wird die Prozess ID (pid) geliefert, durch die ein Prozess eindeutig identifizierbar ist. Die pid wird von jenen Funktionen als Parameter benötigt, die Prozesse in irgendeiner Art und Weise manipulieren.

P_DELETE ist das Äquivalent zu P_CREATE, löscht also einen Prozess.

Die Funktion P_PRIORITY erlaubt es, die Priorität eines Prozesses zu verändern. Ein Prozess kann seine Priorität oder die anderer Prozesse verändern.

Das Gleiche gilt für P_SLICE zum Verändern der Prozesszeit.

Durch Q_CREATE kann eine Queue erzeugt werden. Jede Queue hat einen Namen und eine ID (qid), um sie eindeutig zu identifizieren.

Mit Q_DELETE wird eine Queue gelöscht und der Speicherplatz wieder freigegeben.

Zum Senden von Daten in eine Queue dienen die Funktionen Q_SEND und Q_JAM. Mit Q_SEND werden Messages an das Ende einer Queue geschrieben. Q_JAM schreibt an den Anfang einer Queue.

Mit Q_REQ wird aus einer Queue gelesen. Wenn die Queue leer ist, wird gewartet, bis Daten anliegen. Die oben erwähnten Signale werden mit den Funktionen E_SIGNAL und E_WAIT gesendet bzw. empfangen.

Zeitschleifen können mit der Funktion P_PAUSE programmiert werden. Als Parameter wird die Anzahl Millisekunden, die gewartet werden soll, angegeben.

Das Memory Management stellt M_ALLOC und M_FREE zur Verfügung. Beide Funktionen arbeiten wie von GEMDOS her gewohnt. Um den gleichen Speicherbereich für mehrere Prozesse zugänglich zu machen, gibt es außerdem noch M_ASSIGN, um Zugriffsberechtigungen zuzuweisen.

Die pid eines Prozesses bzw. die qid einer Queue können anhand des Namens durch die Prozeduren P_LOOKUP und Q_LOOKUP ermittelt werden.

Informationen über den aktuellen Zustand eines Prozesses liefert P_INFO. Folgende Zustände gibt es:
Der Prozess

Als letzter Aufruf vor dem Ende einer Applikation muß noch RTX-REMOVE ausgeführt werden, um RTX zurückzusetzen.

Der Kernel von RTX muß nicht zu jedem Programm gelinkt werden, sondern wird einmal beim Systemstart im RAM installiert und steht danach jedem Programm zur Verfügung. Kompatibilitätsprobleme gab es im Test nur mit Programmen, die ebenfalls die Vektorleiste des 68 000 verändern (Templmon und EX06) und auch nur darin, wenn diese Programme nach RTX gestartet werden.

Der Hersteller sichert zu, daß alle Programme, die die Standard Systemaufrufe benutzen, auf jeden Fall laufen, Wenn es auch im Handbuch nicht erwähnt ist: RTX arbeitet auch mit GEM zusammen. Vorsicht ist jedoch bei den Line-A-Traps geboten. Wenn zwei parallel laufende Prozesse Line-A-Traps ausführen, kann (und wird) es krachen. Das liegt daran, daß diese (ohnehin nicht sehr feine) Art von Systemroutinen nicht re-entrant ist. Wie schon bei anderen Systemen dieser Art stellt sich auch bei RTX die Frage nach dem Copyright. Wenn man ein Programm mit RTX entwickelt hat und es verkaufen will, braucht der Benutzer auch RTX. In diesem Fall muß beim Hersteller eine Lizenz erworben werden, die es erlaubt, den Kernel an den Endkunden weiterzugeben. Der Preis für diese Lizenz war vor Redaktionsschluß leider nicht in Erfahrung zu bringen.

Das abschließende Urteil:
RTX ist für Software-Entwickler ein geeignetes Werkzeug, um Programme zu schreiben, die die Hardware Ressourcen des ATARI ST effektiv nutzen. Im Verlauf des Tests sind keine Abstürze aufgetreten, die nicht auf Programmierfehler zurückzuführen waren. Ein gewisses Manko stellt indes das englische Handbuch dar. Es ist für Anfänger zu knapp gehalten und für den Einstieg in die Problematik von Multitasking ungeeignet. Als Ausgleich werden zwei gut dokumentierte Demoprogramme in C mitgeliefert, bei denen man sieht, wie's geht. Weiterhin wird der Assembler-Sourcecode der RTX-Aufrufe mitgeliefert. Dies ermöglicht die Anpassung an andere Compiler.

Bezugsquelle für Micro RTX
Computerware
Gerd Sender
Moselstraße 39
5000 Köln 50
oder
Softline
Schwarzwaldstr. 8a
7602 Oberkirch

Preis: ca. 200 DM (JL)



Aus: ST-Computer 12 / 1986, Seite 112

Links

Copyright-Bestimmungen: siehe Über diese Seite