RTOS-Grundlagen

Thread-orientiertes Design

| Autor / Redakteur: Mats Pettersson * / Holger Heller

Vor Beginn der Anwendungs-Entwicklung, ist es sinnvoll zu überlegen, in welche individuellen Threads sich die Applikation aufteilen lässt. Zum Beispiel könnte eine einfache Motor-Eingabe-Steuerungs-Anwendung in folgende Teile gegliedert werden: Motortemperatur, Öldruck, Drehzahl (RPM), Nutzer-Eingabe.

Diese Module können dann wie Threads (oder Sub-Threads) eingestellt werden. Zum Beispiel:

  • Motortemperatur (Temperatur des Motors messen; LCD mit aktuellen Temperaturdaten aktualisieren)
  • Öldruck (aktuellen Öl-Druck messen; Notfall-Abschaltung des Motors durchführen)
  • Drehzahl (Drehzahl messen; LCD mit aktuellen Drehzahlinformationen aktualisieren)
  • Nutzer-Eingabe (Bestimmung des Gaspedal-Winkels; aktuell benötigten Gang einlegen)

Priorisierung von Threads

Die Zuweisung der richtigen Prioritäten der Threads ist von größter Bedeutung. Folgende grundsätzlichen Regeln sollten dabei beachtet werden:

1. So wenige Prioritätsstufen wie möglich verwenden. Es sollten nur dann verschiedene Prioritäten zugewiesen werden, wenn das Vorziehen der Ausführung bestimmter Threads unbedingt nötig ist. Das verringert die Menge der Schaltoperationen im System. (Jede Schaltoperation kostet Ausführungszeit.)

2. Sicherstellen, dass alle kritischen Timing-Vorgaben in der Anwendung erfüllt sind. Diese schwierige Aufgabe lässt sich z.B. mit dem Einsatz eines RMA (Monotone Rate Algorithm) bewältigen.

Manche Echtzeitbetriebssysteme bieten auch spezielle Unterstützung für die Zuweisung von Prioritäten an. So verfügt das ThreadX RTOS über eine „Präemptionsschwelle“, mit Schaltoperationen reduziert und eine Ausführung der Anwendungs-Threads gewährleistet werden.

Threads befinden sich im Gegensatz zu den meisten anderen Funktionen fast immer in einer Endlosschleife, die nie verlassen wird. Ein Thread befindet sich immer in dem Status „Executing“, „Ready“, „Suspended“, „Completed“ oder „Terminated“.

Diese Zustände bedeuten jeweils: Executing (aktuell ausgeführter Thread); Ready (Thread, bereit zur Ausführung); Suspended (Thread im Wartestatus, z.B. für ein Event, eine Message oder auch eine Systemzeit); Completed (Thread, der bereits erfolgreich durchgeführt wurde und sich wieder in Ausgangsposition befindet); Terminated (Thread, der nach einem thread_terminate-Befehl vollständig beendet ist). Die Echtzeitbetriebssysteme der verschiedenen Anbieter nutzen möglicherweise andere Namen für jeden Status.

Scheduler für die Priorisierung der Threads

Für die Priorisierung der Threads werden hauptsächlich zwei verschiedene Arten von Schedulern eingesetzt:

1. Event-getriebenes Scheduling (Priority Scheduling, Bild 1). Verschiedene Threads können über verschiedene Reaktionsanforderungen verfügen. Zum Beispiel benötigt in einer Anwendung, die einen Motor, eine Tastatur und ein Display steuert, der Motor eine schnellere Reaktionszeiten als die Tastatur oder das Display. Die Regel ist ganz einfach: Der Scheduler aktiviert den Thread mit der höchsten Priorität aller betriebsbereiten Threads.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 35359430 / Embedded Betriebssysteme)