-
Stand der Technik
-
Die Erfindung betrifft ein Verfahren und eine Vorrichtung zur Fehlerbehandlung in einer Kommunikation zwischen Software Komponenten verteilt auf zwei oder mehr Tasks, die insbesondere in Zeitintervallen mit unterschiedlicher vorgegebener Zykluszeit ausgeführt werden.
-
Bedingt durch Fehler kann das Ende einer Zykluszeit, d.h. eines Zeitintervalls erreicht sein, bevor ein Task beendet ist, dessen Ergebnis zum Ende des Zeitintervalls an einen anderen Task übergeben werden soll. Für derartige Fehler ist eine deterministische Fehlerbehandlung wünschenswert.
-
Offenbarung der Erfindung
-
Diese wird durch das Verfahren und die Vorrichtung nach den unabhängigen Ansprüchen erreicht. Ein Computerprogramm und ein Computerprogrammprodukt sind ebenfalls vorgesehen.
-
Bezüglich des Verfahrens zur Fehlerbehandlung in einer Kommunikation, bei dem zu kommunizierende Daten in einem Datenübertragungsintervall durch Lesen aus einem ersten Datenbereich zur temporären Datenspeicherung und Speichern der gelesenen Daten in einem zweiten Datenbereich zur temporären Datenspeicherung zwischen einem ersten Task und einem zweiten Task kommuniziert werden, wird ein Zeitintervall für eine Ausführung des ersten Tasks und ein Kommunikationsintervall für eine Ausführung des zweiten Tasks vorgegeben, wobei
- a) eine Ausführung des Datenübertragungsintervalls in einem ersten Kommunikationsintervall ausgelassen wird, wenn ein erster Task zeitlich unmittelbar vor dem ersten Kommunikationsintervall in einem letzten Zeitintervall eines dem Kommunikationsintervall unmittelbar vorhergehenden Kommunikationsintervalls begann, über einen Endzeitpunkt dieses letzten Zeitintervalls hinaus fortgesetzt wird und eine Ausführung eines zweiten Tasks des ersten Kommunikationsintervalls bereits begann, oder
- b) eine Ausführung des Datenübertragungsintervalls in einem ersten Kommunikationsintervall ausgelassen wird, wenn ein zweiter Task in einem dem ersten Kommunikationsintervall zeitlich unmittelbar vorhergehenden zweiten Kommunikationsintervall begann, über einen Endzeitpunkt des vorhergehenden zweiten Kommunikationsintervalls hinaus fortgesetzt wird, und eine Ausführung des ersten Tasks im ersten Kommunikationsintervall bereits begann.
-
Das Zeitintervall und das Kommunikationsintervall sind logische Intervalle eines Schedulers, die auf festen Zeitscheiben beruhen und nicht verschoben werden können. Die angegebene Implementierung des Schedulers erzwingt jedoch nicht die Einhaltung der logischen Intervalle, sondern betrachtet ein tatsächliches Intervall erst dann als abgeschlossen, wenn der Scheduler eine Taskausführung in einem auf dieses tatsächliche Intervall unmittelbar folgenden neuen Intervall auch wirklich durchführt. Dadurch ist eine deterministische Kommunikation auch bei Lastspitzen möglich, welche ein Rechensystem so beeinträchtigen, dass Tasks ein Ende eines ihnen für ihre Ausführung zugeordneten logischen Intervalls nicht einhalten können. Dies ermöglicht eine effiziente Fehlerbehandlung, mit unterschiedlichen spezifischen Details abhängig von Kategorien mit unterschiedlicher vorgegebener, statischer, Task-Verteilung und Task-Scheduling. Dies ist ein wirksames Fehlerbehandlungskonzept für einen sporadischen Ausfall von Taskausführungen.
-
Vorzugsweise wird der Beginn des Datenübertragungsintervalls durch das Ende einer Ausführung des ersten Tasks ausgelöst, wenn die Ausführung des ersten Tasks später endet als eine Ausführung des zweiten Tasks, oder dass der Beginn des Datenübertragungsintervalls durch das Ende einer Ausführung des zweiten Tasks ausgelöst wird, wenn die Ausführung des zweiten Tasks später endet als eine Ausführung des ersten Tasks.
-
Vorzugsweise wird wenn eine Ausführung des ersten Tasks über ein Ende eines des Kommunikationsintervalls hinaus andauert, in dem die Ausführung des ersten Tasks begann, und wenn der Beginn des Datenübertragungsintervalls durch das Ende der Ausführung des ersten Tasks ausgelöst wird, eine unmittelbar auf die Ausführung des ersten Tasks folgende Ausführung des zweiten Tasks bis zum Ende des Datenübertragungsintervalls verzögert. Damit treten keine inkonsistenten Daten auf.
-
Vorzugsweise unterbleibt, wenn eine Ausführung des zweiten Tasks über ein Ende des Kommunikationsintervalls hinaus andauert, in dem die Ausführung des zweiten Tasks begann, und wenn der Beginn des Datenübertragungsintervalls durch das Ende der Ausführung des ersten Tasks ausgelöst wird, eine Auslösung des Datenübertragungsintervalls in diesem Kommunikationsintervall. Damit treten keine inkonsistenten Daten auf.
-
Vorzugsweise werden die zu kommunizierende Daten im Datenübertragungsintervall durch eine oder mehrere Instanzen außerhalb einer Hardware zur Ausführung des ersten Tasks und des zweiten Tasks kommuniziert. Durch die Auslagerung der Kommunikationsaufgabe an eine oder mehrere Instanzen ist eine deterministische Abarbeitung beispielsweise durch Direct Memory Access, DMA, oder Interrupt Service Routines, ISR, gewährleistet.
-
Die genannten Fehlerbehandlungskonzepte stellen sicher, dass die Datenkonsistenz jederzeit gewährleistet ist. Transaktionen zur Kommunikation oder Ausführungen von Tasks entfallen nur dann, wenn die Datenkonsistenz ansonsten nicht mehr gewährleistet werden kann. Die Fehlerbehandlungskonzepte ermöglichen eine Reduktion der Systemlast durch den Ausfall einzelner Taskausführungen und den Ausfall einzelner Transaktionen zur Erhöhung einer Robustheit des Gesamtsystems. Die Fehlerbehandlungskonzepte können auf Scheduling Information zugreifen um Laufzeitfehler wie mehrfache Prozessaktivierungen zu erkennen.
-
Vorzugsweise ist eine Dauer des Kommunikationsintervalls ein ganzzahliges Vielfaches einer Dauer für das Zeitintervall, wobei ein Kommunikationsintervall mehrere Zeitintervalle umfasst, wobei ein frühestes der mehreren Zeitintervalle zeitgleich mit dem Kommunikationsintervall beginnt. Damit sind die logischen Intervalle synchron.
-
Vorzugsweise beginnen während eines Kommunikationsintervalls wenigstens ein Zeitintervall, wobei sich Zeitintervalle zeitlich nicht überlappen, wobei das Datenübertragungsintervall entweder vor einer ersten Ausführung des ersten Tasks im frühesten der Zeitintervalle endet, oder nach Ende einer letzten Ausführung des ersten Tasks im spätesten der Zeitintervalle beginnt. Durch ein kooperatives Scheduling wird gewährleistet, dass die Kommunikation vollständig abgeschlossen ist, bevor die erste Taskausführung im neuen Intervall stattfindet. Im präemptiven Scheduling ist durch den Scheduler gewährleistet, dass keine Unterbrechung durch die beteiligten Prozesse stattfindet und Prozesse mit niedererer Priorität ggf. verdrängt werden.
-
Vorzugsweise wird eine Statusvariable abhängig von einem ersten Zustand der Ausführung der ersten Prozesse und abhängig von einem zweiten Zustand der Ausführung der zweiten Prozesse bestimmt, wobei das Datenübertragungsintervall abhängig von einem Wert der Statusvariablen gestartet wird. Die Statusvariable wird beispielsweise mittels eines ersten Zählerstands eines ersten Zustandszählers für den ersten Zustand und mittels eines zweiten Zählerstands eines zweiten Zustandszählers für den zweiten Zustand bestimmt.
-
Vorteilhafterweise wird der erste Zustandszähler korrigiert, wenn einer der ersten Prozesse in einem Kommunikationsintervall ausfällt, weil einer der ersten Prozesse, die während des Kommunikationsintervalls ablaufen sollen, mit Ausnahme des letzten der ersten Prozesse, die während des Kommunikationsintervalls ablaufen sollen, nicht zum Ende des ihm zugeordneten ersten Zeitintervalls beendet ist, und eine Ausführung eines ersten Tasks deshalb ausfällt, wobei der erste Zustandszähler auf einen Zustand korrigiert wird, den der erste Zustandszähler bei Ausführung des ausgefallenen ersten Tasks aufweisen würde.
-
Vorteilhafterweise wird eine Statusvariable abhängig von Prioritäten bestimmt, die dem ersten Task und dem zweiten Task zugeordnet sind, wobei wenn der Task, dem die niedrigste Priorität zugeordnet ist, als letzter Task in einem der Kommunikationsintervalle ausgeführt wird, ein Beginn eines Datenübertragungsintervalls, das auf ein Ende des Tasks mit der niedrigsten Priorität unmittelbar folgt, in ein unmittelbar anschließendes Kommunikationsintervall verschoben. Ein Task mit der höchsten Priorität wird im Zeitintervall zuerst oder gleichzeitig mit anderen Tasks aktiviert. Ein Task mit der niedrigsten Priorität wird auch fortgesetzt, wenn das Kommunikationsintervall vorüber ist. Die Kommunikation erfolgt anschließend im Datenübertragungsintervall.
-
Bezüglich der Vorrichtung zur Fehlerbehandlung in einer Kommunikation ist ein Prozessor und wenigstens einen temporären Datenspeicher vorgesehen, die ausgebildet sind zu kommunizierende Daten in einem Datenübertragungsintervall durch Lesen aus einem ersten Datenbereich des wenigstens einen temporären Datenspeichers und Speichern der gelesenen Daten in einem zweiten Datenbereich des wenigstens einen temporären Datenspeichers zwischen einem ersten Task und einem zweiten Task gemäß eines der Verfahren zu kommunizieren.
-
Vorteilhafterweise umfasst die Vorrichtung ein Modul zur Kommunikation der zu kommunizierende Daten mittels eines Direct Memory Access, DMA, oder mittels Interrupt Service Routines.
-
Weitere vorteilhafte Ausgestaltungen ergeben sich aus der folgenden Beschreibung und der Zeichnung. In der Zeichnung zeigt
- 1 schematisch ein erstes zeitgesteuertes Verhalten von Tasks,
- 2 schematisch ein erstes Fehlerbehandlungskonzept,
- 3 schematisch ein zweites Fehlerbehandlungskonzept,
- 4 schematisch ein zweites zeitgesteuertes Verhalten von Tasks,
- 5 schematisch ein drittes Fehlerbehandlungskonzept,
- 6 schematisch ein viertes Fehlerbehandlungskonzept,
- 7 schematisch ein drittes zeitgesteuertes Verhalten von Tasks,
- 8 schematisch ein fünftes Fehlerbehandlungskonzept,
- 9 schematisch ein sechstes Fehlerbehandlungskonzept,
- 10 schematisch eine Vorrichtung zur Kommunikation.
-
Ein Task ist ein Computerprogramm zur Laufzeit, dessen Ausführung vom Betriebssystem durch bestimmte Aktionen dynamisch kontrolliert wird. Tasks werden von einer Task-Steuerung des Betriebssystems verwaltet, die auch Scheduler genannt wird. Diese kann einen Task entweder so lange rechnen lassen, bis er endet, oder dafür sorgen, dass nach jeweils einer kurzen Zeitdauer der gerade ablaufende Task unterbrochen wird. Die Task-Steuerung kann so zwischen verschiedenen aktiven Tasks hin und her wechseln. Tasks können unterschiedlich lang sein und zu unterschiedlichen Zeitpunkten starten.
-
Für eine zeitliche Ausführung von Tasks werden in der Task-Steuerung wiederkehrende Zeitintervalle für eine zyklische Ausführung eines ersten Tasks und wiederkehrende Zeitintervalle für eine zyklische Ausführung eines zweiten Tasks vorgesehen. Im Beispiel ist eine Dauer des Zeitintervalls für die zweiten Tasks länger als eine Dauer des Zeitintervalls für die ersten Tasks. Beispielsweise hat das Zeitintervall für die ersten Tasks eine Länge von 5 ms. Beispielsweise hat das Zeitintervall für die zweiten Tasks eine Länge von 10 ms. Die Zeitintervalle sind logische Intervalle des Schedulers, die auf festen Zeitscheiben beruhen und nicht verschoben werden können.
-
Software Komponenten in Tasks können untereinander Daten austauschen. Zur Kommunikation zwischen den Tasks können die Daten in temporären Datenspeichern, insbesondre Buffern, zwischengespeichert werden. Zur Kommunikation werden beispielsweise zu kommunizierende Daten in einem Datenübertragungsintervall durch Lesen aus einem ersten Buffer und Speichern der gelesenen Daten in einem zweiten Buffer zwischen dem ersten Task und dem zweiten Task kommuniziert. Im Beispiel ist dem ersten Task ein erster Kanal mit einem ersten 5 ms Buffer für nur lesenden Zugriff und einem zweiten 5 ms Buffer für lesenden und schreibenden Zugriff zugeordnet. Im Beispiel ist dem zweiten Task ein zweiter Kanal mit einem ersten 10 ms Buffer für nur lesenden Zugriff und einem zweiten 10 ms Buffer für lesenden und schreibenden Zugriff zugeordnet. Allgemein können für eine Anzahl n Tasks n Kanäle mit 2n derartiger Buffer vorgesehen sein.
-
Die anhand der folgenden Beispiele angegebenen Implementierungen des Schedulers erzwingen nicht die Einhaltung der logischen Intervalle, sondern betrachten ein tatsächliches Intervall erst dann als abgeschlossen, wenn der Scheduler eine Taskausführung in einem auf dieses tatsächliche Intervall unmittelbar folgenden neuen Intervall auch wirklich durchführt. Allgemein sind bei der Fehlerbehandlung in einer Kommunikation zwischen Tasks die im Folgenden angegebenen Fehlerfälle klassifizierbar.
-
Scheduling Fehler:
-
- a) Schedule ist unvollständig oder nicht deterministisch
- b) Task ist nicht aktiviert (wurde ausgelassen)
- c) Task ist spontan aktiviert
- d) Buffer eines Kanals werden vor ihrer Initialisierung verwendet
-
Lastabhängige Fehler:
- a) Task-Ende wird überschritten (bei mehrfacher Task-Aktivierung)
- b) Kommunikation wurde in letztem Datenübertragungsintervall nicht beendet
- c) Kommunikation wurde in letztem Datenübertragungsintervall nicht ausgeführt
-
Speicher Fehler:
-
- a) Kanalzustand ist beschädigt
-
Die Scheduling Fehler a) bis c) können nur mittels externer Zeitreferenz, beispielsweise von einer Uhr oder einem Zähler, erkannt werden.
-
Die übrigen Fehler können zuverlässig mittels einer Kanalzustandsmaschine erkannt werden. Die folgenden Beispiele beschreiben Details eines Kommunikationsverfahrens und einer Fehler-Erkennung und Fehler-Heilung basieren auf dieser Kanalzustandsmaschine.
-
Ein Algorithmus welcher in einem Rechensystem das Kommunikationsverfahren und/oder das Fehlerbehandlungskonzept auf Basis der Scheduling Information selektiert verwendet eine Task zu Kern Zuordnung, einen Scheduling Typ, beispielsweise präemptiv oder kooperativ, sowie eine Priorität der an einer Kommunikation beteiligten Tasks und eine eventuell sequenzielle Ausführung durch ein Aktivierungs-Muster im System.
-
Es wird eine Kategorie „Concurreny Level“ ermittelt. Der Kategorie ist ein Kommunikationsverfahren und/oder ein entsprechendes Fehlerbehandlungskonzept zugeordnet.
-
Mögliche Kategorien des „Concurrency Level“ sind
-
Cooperative Core Local:
-
Die an der Kommunikation beteiligten Tasks weisen ein ausschließlich kooperatives Scheduling auf und werden auf demselben Rechenkern ausgeführt.
-
Preemtive Core Local:
-
Die an der Kommunikation beteiligten Tasks weisen ein präemptives Scheduling auf und werden auf demselben Rechenkern ausgeführt.
-
Parallel Cross Core:
-
Tasks werden auf mindestens zwei Rechenkernen ausgeführt.
-
Sequential Core Local:
-
Die Tasks werden sequentiell auf demselben Rechenkern ausgeführt.
-
Sequential Cross Core:
-
Die Tasks werden sequentiell auf mindestens zwei Rechenkernen ausgeführt.
-
Das Kommunikationsverfahren für eine Kommunikation in der Kategorie „Cooperative Core Local“ wird anhand der 1 beschrieben.
-
Das Kommunikationsverfahren ermöglicht eine Verteilung der Kommunikationslast auf alle beteiligten Tasks. Das Kommunikationsverhalten ermöglicht eine effiziente deterministische Kommunikation in einem Echtzeitsystem. Dabei wird eine Statusvariable S für eine Bestimmung von Kommunikationszeitpunkten verwendet. Die Statusvariable S kann einen der folgenden Zustände annehmen, die im Folgenden auch als Phasen der Statusvariable bezeichnet werden:
-
PROC_ACTIVE:
-
Mindestens einer der beteiligen Tasks verwendet die in den Buffern bereitgestellten Daten. Ein Überschreiben der Lesebuffer ist aus Konsistenzgründen nicht zulässig.
-
PROC_COMPLETE:
-
Alle Tasks habe die in einem logischen Intervall erforderliche Anzahl an Aktivierungen (unter Berücksichtigung evtl. Fehlerszenarien) abgeschlossen und die bereitgestellten Daten werden in diesem logischen Intervall nicht mehr benötigt.
-
TRANS_ACTIVE:
-
Die Lesebuffer der einzelnen Tasks werden aktualisiert. Eine Berechnung mit den enthaltenen Daten ist aus Konsistenzgründen nicht zulässig.
-
TRANS_COMPLETE:
-
Die Aktualisierung der Buffer ist abgeschlossen. Die Daten können für Berechnungen verwendet werden. Es ist allerdings kein Task aktiv.
-
In einem Kommunikationsintervall durchläuft die Statusvariable S die Zustände PROC_ACTIVE, PROC_COMPLETE, TRANS_ACTIVE, TRANS_COMPLETE, in dieser Reihenfolge. Die Zustände PROC_COMPLETE und TRANS_COMPLETE können übersprungen werden. In jedem Kommunikationsintervall soll ein Datenübertragungsintervall K ausgeführt werden. Während des Datenübertragungsintervalls K wird auf die Buffer schreibend und oder lesend zur Aktualisierung der Buffer zugegriffen. Das Kommunikationsintervall ist, wie in den folgenden Beispielen beschrieben synchron zu den logischen Intervallen des Schedulers definiert. In den beschriebenen Beispielen wird die Statusvariable S immer dann auf den Zustand PROC_ACTIVE gesetzt, wenn wenigstens ein Task ausgeführt wird. Die Statusvariable S wird während der Datenübertragungsintervalle K auf den Zustand TRANS_ACTIVE gesetzt. Der Zustand PROC_COMPLETE wird nach Abschluss aller Ausführungen eines Kommunikationsintervalls gesetzt. Der Zustand TRANS_COMPLETE wird erst nach Ende des Datenübertragungsintervalls gesetzt.
-
Für eine periodisch stattfindende Kommunikation berechnet sich das Kommunikationsintervall 12 als kleinstes gemeinsames Vielfaches, KGV, von Intervallen T1, T2, ..., Tn, die miteinander kommunizieren sollen.
-
Tn bezeichnet ein Intervall eines Tasks n. Die logischen Intervalle sind zeitlich synchron zu der Periode der einzelnen Tasks ablaufend definiert. Tasks werden vom Scheduler aktiviert. Bis zum Ende des Kommunikationsintervalls 12 sollten alle Task und das Datenübertragungsintervall K abgelaufen sein. Den Tasks sind jeweils Deadlines zugeordnet, bis zu denen die Tasks beendet sein müssen. Falls eine Berechnung eines Tasks nach seiner Aktivierung nicht rechtzeitig vor der diesem Task zugeordneten Deadline beendet werden kann, erfolgt eine darauf folgende Aktivierung dieses Tasks durch den Scheduler nicht. Falls zwar die Berechnung des Tasks nach seiner Aktivierung rechtzeitig vor der diesem Task zugeordneten Deadline beendet wird, das in diesem Kommunikationsintervall 12 vorgesehene Datenübertragungsintervall K jedoch nicht, ist die Fehlerbehandlung für die Kommunikation erforderlich.
-
Für das Beispiel aus
1 gilt für das Kommunikationsintervall
-
Anstelle des KGV können auch andere gemeinsame Vielfache verwendet werden.
-
Im Folgenden wird anhand der 1 beschrieben, wie Phasen der Statusvariablen S sequentiell durchlaufen werden. Die Statusvariable S wird abhängig von einem ersten Zustand der Ausführung der ersten Tasks und abhängig von einem zweiten Zustand der Ausführung der zweiten Tasks bestimmt.
-
Die Kommunikation findet in dem Datenübertragungsintervall K statt, das abhängig von einem Wert der Statusvariablen S gestartet wird.
-
Die Statusvariable S wird beispielsweise mittels eines ersten Zählerstands eines ersten Zustandszählers Z1 für den ersten Zustand und mittels eines zweiten Zählerstands eines zweiten Zustandszählers Z2 für den zweiten Zustand bestimmt. Der erste Zustandszähler kann, wie in 1 dargestellt, die Zustände 2, 1, 0 annehmen. Der zweite Zustandszähler kann, wie in 1 dargestellt, die Zustände 1, 0 annehmen.
-
Der erste Zustandszähler Z1 beginnt in dem in 1 dargestellten zeitlichen Verlauf links mit dem ersten Zählerstand 2. Zu einem Zeitpunkt t1, der synchron zum ersten logischen Intervall 11 beginnt, beginnt eine erste Ausführung eines ersten Tasks T1. Zu einem Zeitpunkt t2, am Ende der ersten Ausführung des ersten Tasks T1 wird der erste Zählerstand auf 1 gesetzt. Zu einem Zeitpunkt t3, der synchron zur ersten Wiederholung des ersten logischen Intervall 11 beginnt, beginnt eine zweite Ausführung des ersten Tasks T1. Zu einem Zeitpunkt t4, am Ende der zweiten Ausführung des ersten Tasks T1 wird der erste Zählerstand auf 0 gesetzt.
-
Anschließend wird zum Zeitpunkt t4 das Datenübertragungsintervall K gestartet. Das Datenübertragungsintervall K endet zum Zeitpunkt t5. Zum Zeitpunkt t5 wird der erste Zählerstand auf 2 gesetzt.
-
Eine zweite und eine dritte Wiederholung des ersten logischen Intervalls 11 sind in 1 ebenfalls dargestellt. In der zweiten Wiederholung beginnt eine dritte Ausführung des ersten Tasks T1 synchron mit der zweiten Wiederholung des ersten logischen Intervalls 11 zu einem Zeitpunkt t6 und endet zu einem Zeitpunkt t7. Der erste Zählerstand wird zum Zeitpunkt t7 von 2 auf 1 gesetzt.
-
In der dritten Wiederholung beginnt eine vierte Ausführung des ersten Tasks T1 synchron mit der dritten Wiederholung des ersten logischen Intervalls 11 zu einem Zeitpunkt t8 und endet zu einem Zeitpunkt t9. Der erste Zählerstand wird zum Zeitpunkt t9 von 1 auf 0 gesetzt.
-
Der zweite Zustandszähler Z2 beginnt in 1 links mit dem zweiten Zählerstand 1. Zum Zeitpunkt t1 beginnt das zweite logische Intervall 12 synchron mit dem ersten logischen Intervall 11. Die erste Ausführung eines zweiten Tasks T2 beginnt nach Ende der ersten Ausführung des ersten Tasks T1 im Zeitpunkt t2. D.h. der erste Task T1 wird zwischen dem Zeitpunkt t1 und dem Zeitpunkt t2 verarbeitet als der zweite Task T2.
-
Die erste Ausführung des zweiten Tasks T2 endet zu einem Zeitpunkt t10, im Beispiel vor dem Zeitpunkt t3. Zum Zeitpunkt t10 wird der zweite Zählerstand von 1 auf 0 gesetzt. Am Ende des Datenübertragungsintervalls K, d.h. zum Zeitpunkt t5 wird der zweite Zählerstand von 0 auf 1 gesetzt.
-
Eine Wiederholung des zweiten logischen Intervalls 12 ist in 1 ebenfalls dargestellt. Zum Zeitpunkt t6 beginnt die Wiederholung des zweiten logischen Intervalls 12 synchron mit der dritten Wiederholung des ersten logischen Intervalls 11. Die zweite Ausführung eines zweiten Tasks T2 beginnt nach Ende der dritten Ausführung des ersten Tasks T1 im Zeitpunkt t7. D.h. der erste Task T1 wird zwischen dem Zeitpunkt t6 und dem Zeitpunkt t7 verarbeitet als der zweite Task T2. In der Wiederholung wird die zweite Ausführung des zweiten Tasks T2 zwischen den Zeitpunkten t8 und t9 zur vierten Ausführung des ersten Tasks T1 unterbrochen, um die vierte Wiederholung des ersten Tasks T1 vorzunehmen. Zum Zeitpunkt t9 wird die Wiederholung des zweiten Tasks T2 fortgesetzt und endet zu einem Zeitpunkt t11. Zum Zeitpunkt t11 wird der zweite Zählerstand auf 0 gesetzt und das Datenübertragungsintervall K wiederholt. Die Wiederholung des Datenübertragungsintervalls K endet zum Zeitpunkt t12. Der erste Zählerstand wird zum Zeitpunkt t12 auf 2 gesetzt. Der zweite Zählerstand wird zum Zeitpunkt t12 auf 1 gesetzt.
-
Zwischen den Zeitpunkten t1 und t4 sowie t6 und t9 ist ein Zugriff auf den ersten 5 ms Buffer B51 und den zweiten 5 ms Buffer B52 erlaubt. Zwischen den Zeitpunkten t1 und t10 sowie t6 und t11 ist der Zugriff auf einen ersten 10 ms Buffer B101 und einen zweiten 10 ms Buffer B102 erlaubt. Der Zugriff aus dem 5ms Task erfolgt im Beispiel zwischen t1 und t2, t3 und t4, t6 und t7 sowie t8 und t9, d.h. während der Ausführungen des ersten Tasks T1. Der Zugriff aus dem 10 ms Task erfolgt im Beispiel zwischen t2 und t10, d.h. während der ersten Ausführung des zweiten Tasks T2 sowie t6 und t7, d.h. pre-emptive vor der Ausführung der Wiederholung des zweiten Tasks T2. Im Datenübertragungsintervall K ist der Zugriff auf alle Buffer für die Tasks untersagt. Die Zugriffe aus den Tasks auf den ersten 5 ms Buffer B51 und ersten 10 ms Buffer B101 werden in 1 mit ein-direktionalen Pfeilen dargestellt. Die Zugriffe aus den Tasks auf die anderen Buffer werden in 1 mit bidirektionalen Pfeilen dargestellt. Im Datenübertragungsintervall K wird vom zweiten 5 ms Buffer B52 auf den zweiten 10 ms Buffer B102 geschrieben und vom ersten 10 ms Buffer B101 auf den ersten 5 ms Buffer B51 geschrieben.
-
Die Statusvariable S hat zwischen den Zeitpunkten t1 und t4 den Zustand PROC_ACTIVE.
-
Die Statusvariable S hat zwischen den Zeitpunkten t4 und t5 zwischen denen sowohl der erste Zustandszähler Z1 den ersten Zustandswert 0 hat als auch der zweite Zustandszähler Z2 den zweiten Zustandswert 0 hat, den Zustand TRANS_ACTIVE.
-
Die Statusvariable S hat zwischen den Zeitpunkten t5 und t6 den Zustand TRANS_COMPLETE.
-
Die Statusvariable S hat zwischen den Zeitpunkten t6 und t11 den Zustand PROC_ACTIVE.
-
Die Statusvariable S hat zwischen den Zeitpunkten t11 und t12 zwischen denen sowohl der erste Zustandszähler Z1 den ersten Zustandswert 0 hat als auch der zweite Zustandszähler Z2 den zweiten Zustandswert 0 hat, den Zustand TRANS_ACTIVE.
-
Die Statusvariable S hat in 1 ab dem Zeitpunkt t12 den Zustand TRANS_COMPLETE.
-
Da die Kommunikation im Kontext der Tasks stattfindet ist PROC_COMPLETE in diesem Szenario ein rein logischer Status der beim direkten Übergang von PROC_ACTIVE nach TRANS_ACTIVE entfällt.
-
Bei einer tatsächlichen Ausführung von Tasks kann das tatsächlich für eine vollständige Ausführung der Tasks und der Kommunikation erforderliche Kommunikationsintervall aufgrund der genannten Fehler vom Kommunikationsintervall abweichen. Eine Fehlerbehandlung wird anhand der 2 und der 3 beschrieben. Für Elemente, die bereits anhand der 1 beschrieben wurden, werden dieselben Bezugszeichen verwendet und auf die Beschreibung zu 1 verwiesen.
-
Im Unterschied zu der in 1 dargestellten Situation, erfolgt wie in 2 dargestellt während der ersten Wiederholung des ersten logischen Intervalls 11 eine Unterbrechung der zweiten Ausführung des ersten Tasks T1 zu einem Zeitpunkt t20. Die zweite Ausführung wird zu einem Zeitpunkt t21 vor dem Zeitpunkt t6 fortgesetzt und endet zu einem Zeitpunkt t22 vor dem Zeitpunkt t6. Zum Zeitpunkt t6 wird das Datenübertragungsintervall K begonnen. Das Datenübertragungsintervall K endet zu einem Zeitpunkt t23, der im Beispiel nach dem Zeitpunkt t6 liegt. Dies bedeutet, das Datenübertragungsintervall K endet nach dem Beginn der zweiten Wiederholung des ersten logischen Intervalls 11.
-
Die zweite Ausführung des zweiten Tasks T2 beginnt zum Zeitpunkt T23. Damit erhält die zweite Ausführung des zweiten Tasks T2 die neuesten Daten vom ersten Task T1. Die dritte Ausführung des ersten Tasks T1 wird in der dritten Wiederholung des ersten Intervalls 11 unterdrückt. Damit kann die zweite Ausführung des zweiten Tasks T2 vor Abschluss der dritten Wiederholung des ersten Intervalls 11 abgeschlossen werden.
-
Im Unterschied zu der in 1 dargestellten Situation, erfolgt wie in 3 dargestellt während der ersten Wiederholung des ersten logischen Intervalls 11 eine Unterbrechung der ersten Ausführung des zweiten Tasks T2 zum Zeitpunkt t3. Die zweite Ausführung des ersten Tasks T1 wird zu einem Zeitpunkt t30 nach dem Zeitpunkt t3 begonnen und endet zu einem Zeitpunkt t31 vor dem Zeitpunkt t6, d.h. während der ersten Wiederholung des ersten logischen Intervalls 11. Zum Zeitpunkt t31wird die erste Ausführung des zweiten Tasks T2 fortgesetzt. Zum Zeitpunkt t6 wird die erste Ausführung des zweiten Tasks T2 erneut unterbrochen, um die dritte Ausführung des ersten Tasks T1 bis zu einem Zeitpunkt T32 durchzuführen. Zum Zeitpunkt T32 wird die erste Ausführung des ersten Tasks T1 fortgesetzt und endet zu einem Zeitpunkt t33 vor dem Zeitpunkt t8. Zum Zeitpunkt t8 beginnt die vierte Ausführung des ersten Tasks T1. Zu einem Zeitpunkt t34 endet die vierte Ausführung des ersten Tasks T1. Zum Zeitpunkt t34 wird das Datenübertragungsintervall K begonnen. Das Datenübertragungsintervall K endet zu einem Zeitpunkt t35.
-
Die zweite Ausführung des zweiten Tasks T2 wird in der Wiederholung des logischen zweiten Intervalls 12 unterdrückt.
-
Durch Unterdrücken, d.h. Auslassen der jeweiligen Ausführung wird das Rechensystem determiniert entlastet. Ein Überschreiten einer logischen Intervallgrenze durch einen in Ausführung befindlichen Task wird im Folgenden als Task Deadline Verletzung bezeichnet. Als Reaktion auf eine derartige Task Deadline Verletzung resultiert ein Ausfall der nächsten periodischen Taskausführung durch die Kommunikationsinfrastruktur.
-
Dabei sind prinzipiell zwei Varianten zu Unterscheiden.
-
Variante 1:
-
Die Deadline Verletzung findet bei der letzten Ausführung eines Tasks im Datenübertragungsintervall statt.
-
Bei Variante 1 werden zwei weitere Varianten unterschieden:
-
Variante 1A:
-
Die Deadline Verletzung findet bereits vor dem Start einer Transaktion statt. Einer der beteiligten Tasks hat bereits mit der Berechnung im neuen Intervall begonnen. Der Statusübergang von PROC_ACTIVE geht in das neue Datenübertragungsintervall über. Die Aktualisierung der Buffer entfällt.
-
Variante 1B:
-
Hier findet wie in 2 dargestellt bereits eine Aktualisierung der Buffer statt. Der Status TRANS_ACTIVE ist gesetzt, während eine Deadline Verletzung stattfindet. Durch kooperatives Scheduling wird gewährleistet, dass die Kommunikation vollständig abgeschlossen ist bevor die erste Taskausführung im neuen Intervall stattfindet.
-
Variante 2:
-
Die Deadline Verletzung findet nicht bei der letzten Ausführung eines Tasks im Datenübertragungsintervall statt.
-
Bei Variante 2 werden lediglich die durch den Ausfall der Taskausführung verfälschten Zählerstände korrigiert. Dies hat keinen Einfluss auf die Kommunikation.
-
In 4 ist ein Kommunikationsverfahren für eine Kommunikation welche der Kategorie „Parallel Cross Core“ entspricht, dargestellt. Bezüglich der Elemente mit übereinstimmendem Bezugszeichen wird auch auf die Beschreibung zu 1 verwiesen.
-
Im Unterschied zu den vorher beschriebenen Beispielen werden Tasks auch parallel gerechnet. Zudem erfolgt die Durchführung der Kommunikation im Datenübertragungsintervall K durch ein Modul 400 zur Kommunikation der zu kommunizierende Daten mittels eines Direct Memory Access, DMA, oder mittels Interrupt Service Routines. Zum Start des Datenübertragungsintervalls K dient ein erster Trigger 301 und zum Start der Wiederholung des Datenübertragungsintervalls K dient ein zweiter Trigger 302.
-
Durch eine Auslagerung der Kommunikationsaufgabe an eine oder mehrere Instanzen wie DMA Hardware oder ISRs ist eine deterministische Abarbeitung gewährleistet. Die Instanzen können den Anforderungen entsprechend ebenfalls priorisiert werden und ermöglichen eine Verteilung der Kommunikationslast auf weitere Rechenkerne oder dedizierte Hardware Ressourcen.
-
Wie in 4 dargestellt findet aus den Tasks jeweils nur die Aktivierung der Aktualisierung statt. Die eigentliche Aktualisierung der Buffer wird durch eine weitere Instanz durchgeführt. Da alle beteiligten Tasks vollständig parallel ablaufen können, muss zu Beginn einer Ausführung der Status geprüft werden.
-
Im Falle von TRANS_ACTIVE wird die Ausführung so lange verzögert, bis die Aktualisierung der Daten Abgeschlossen ist. Bei der Verwendung eines Basic Task Modells wird dies durch Busy Wait erreicht. Der Zustand TRANS_COMPLETE wird ausschließlich in dem Kontext gesetzt, in welchem die Aktualisierung stattfindet.
-
In diesem Fall ist ein Fehlerbehandlungskonzept für den sporadischen Ausfall von Taskausführungen für eine Kommunikation möglich, welche der Kategorie „Parallel Cross Core“ entspricht. Dieses wird anhand der 5 und 6 näher erläutert. Bezüglich der Elemente mit übereinstimmendem Bezugszeichen wird auch auf die Beschreibung zu 2 verwiesen.
-
Im Unterschied zu den vorher beschriebenen Beispielen wird die erste Ausführung des zweiten Tasks zu einem Zeitpunkt t51 nach dem Zeitpunkt t2 unterbrochen und zu einem Zeitpunkt t52 vor dem Zeitpunkt t3 fortgesetzt. Zudem endet die erste Ausführung des zweiten Tasks T2 nach dem Zeitpunkt t3 und dem Zeitpunkt t20 vor dem Zeitpunkt t21 zu einem Zeitpunkt t53. Dies bedeutet, erste Tasks und zweite Tasks werden in diesem Beispiel zumindest zeitweise parallel gerechnet.
-
Zudem erfolgt die Durchführung der Kommunikation im Datenübertragungsintervall K durch das Modul 400 zur Kommunikation der zu kommunizierende Daten mittels des Direct Memory Access, DMA, oder mittels Interrupt Service Routines. Zum Start des Datenübertragungsintervalls K dient ein dritter Trigger 501, der am Ende der zweiten Ausführung des ersten Tasks T1 ausgelöst wird.
-
In 6 ist eine Kommunikation wie in 3 dargestellt. Bezüglich der Elemente mit übereinstimmendem Bezugszeichen wird insoweit auf die Beschreibung zu 3 verwiesen.
-
Im Unterschied zu den vorher beschriebenen Beispielen wird die erste Ausführung des zweiten Tasks T2 nicht zum Zeitpunkt t31 fortgesetzt, sondern bereits zu einem Zeitpunkt t61, der vor dem Zeitpunkt t31 und nach dem Zeitpunkt t30 liegt. Zudem wird die erste Ausführung des zweiten Tasks T2 nicht zum Zeitpunkt t6 unterbrochen. Dies bedeutet, erste Tasks und zweite Tasks werden in diesem Beispiel zumindest zeitweise parallel gerechnet.
-
Im Unterschied zu den vorher beschriebenen Beispielen erfolgt die Durchführung der Kommunikation im Datenübertragungsintervall K durch das Modul 400 zur Kommunikation der zu kommunizierende Daten mittels des Direct Memory Access, DMA, oder mittels Interrupt Service Routines. Zum Start des Datenübertragungsintervalls K dient ein vierter Trigger 601, der am Ende der vierten Ausführung des ersten Tasks T1 ausgelöst wird.
-
In 7 ist eine Kommunikation für ein Fehlerbehandlungskonzept für einen sporadischen Ausfall von Taskausführungen für eine Kommunikation dargestellt, welche der Kategorie „Preemtive Core Local“ entspricht, dargestellt. Bezüglich der Elemente mit übereinstimmendem Bezugszeichen wird auch auf die Beschreibung zu 1 verwiesen.
-
In dem im Folgenden anhand 7 beschriebenen Beispiel werden Tasks sequentiell gerechnet. Die ersten Tasks T1 werden dabei mit einer höheren Priorität gerechnet als die zweiten Tasks T2. Dies bedeutet, der Scheduler unterbricht eine Ausführung eines zweiten Tasks T2 sobald laut seiner Schedule eine Berechnung eines ersten Tasks T1 erforderlich ist.
-
Im Beispiel beginnen in dem in 7 dargestellten zeitlichen Ablauf bei einem Zeitpunkt t1 sowohl das erste logische Intervall 11 als auch das zweite logische Intervall 12 synchron. Der erste Zählerstand steht zu Beginn auf dem Wert 2, der zweite Zählerstand steht zu Beginn auf dem Wert 1. Die Statusvariable S hat vor dem Zeitpunkt t1 den Zustand TRANS_COMPLETE und ab dem Zeitpunkt t1 den Zustand PROC_ACTIVE. Aufgrund der Priorisierung beginnt die erste Ausführung des ersten Tasks T1 zum Zeitpunkt t1 und endet zu einem Zeitpunkt t2. Zum Zeitpunkt T1 wird der erste Zählerstand auf 1 gesetzt. Die Ausführung des zweiten Tasks T2 beginnt zum Zeitpunkt t2 und wird zu einem Zeitpunkt t3 unterbrochen, zu dem die erste Wiederholung des ersten logischen Intervalls 11 zeitgleich mit der zweiten Ausführung des ersten Tasks T1 beginnt. Zu einem Zeitpunkt t4 endet die zweite Ausführung des ersten Tasks T1 und der erste Zählerstand wird auf 0 gesetzt. Die Ausführung des zweiten Task T2 wird zum Zeitpunkt t4 fortgesetzt und endet zu einem Zeitpunkt t5, zu dem der zweite Zählerstand auf 0 gesetzt wird. Die Statusvariable S wird zum Zeitpunkt t5 auf den Wert PROC_COMPLETE gesetzt.
-
Da die Ausführung des zweiten Tasks T2 nach der zweiten Ausführung des ersten Task T1 endete, beginnt das Datenübertragungsintervall K erst zu einem Zeitpunkt t6, zu dem synchron die zweite Wiederholung des ersten logischen Intervalls 11 und die Wiederholung des zweiten logischen Intervalls 12 beginnen. Die Statusvariable S wird zwischen den Zeitpunkten t6 und t7 auf TRANS-ACTIVE gesetzt. Die dritte Ausführung des ersten Tasks T1 beginnt zu einem Zeitpunkt t7 am Ende des Datenübertragungsintervalls K. Zum Zeitpunkt t7 wird der erste Zählerstand auf 2 gesetzt, wird der zweite Zählerstand auf 1 gesetzt und wird die Statusvariable S auf PROC_ACTIVE gesetzt.
-
Die dritte Ausführung des ersten Tasks T1 endet zu einem Zeitpunkt t8, zu dem der erste Zählerstand auf 1 gesetzt wird. Die Wiederholung der Ausführung des zweiten Tasks T2 beginnt zum Zeitpunkt t8 und endet zu einem Zeitpunkt t9, zu dem der zweite Zählerstand auf 0 gesetzt wird. Zu einem auf den Zeitpunkt t9 folgenden Zeitpunkt t10 beginnt die dritte Wiederholung des ersten logischen Intervalls 11 und die vierte Ausführung des ersten Tasks T1. Zu einem Zeitpunkt t11 endet die vierte Ausführung des ersten Tasks T1. Der erste Zählerstand wird auf 0 gesetzt. Da die Wiederholung des zweiten Tasks T2 zum Zeitpunkt t11 bereits abgeschlossen ist, wird die Statusvariable S auf den Zustand TRANS_ACTIVE gesetzt. Die Wiederholung des Kommunikationsintervalls beginnt zum Zeitpunkt t11 und endet zum Zeitpunkt t12. Zum Zeitpunkt t12 wird die Statusvariable S auf den Zustand TRANS_COMPLETE gesetzt. Der erste Zählerstand wird auf den Wert 2 gesetzt, der zweite Zählerstand wird auf den Wert 1 gesetzt. Die Zugriffe der Tasks auf die Buffer finden wie zuvor beschrieben während der Ausführungen der Tasks statt.
-
In diesem Fall ist ein Fehlerbehandlungskonzept möglich, welches anhand der 8 und der 9 näher erläutert. Bezüglich der Elemente mit übereinstimmendem Bezugszeichen wird bezüglich der 8 auch auf die Beschreibung zu 2 und bezüglich 9 auch auf die Beschreibung zu 3 verwiesen.
-
In dem in 8 dargestellten Beispiel wird der erste Task T1 mit höherer Priorität als der zweite Task T2 ausgeführt. Zum Zeitpunkt t22 endet die zweite Ausführung des ersten Tasks T1. Zum Zeitpunkt t22 beginnt das Datenübertragungsintervall K. Dieser Zeitpunkt t22 ist kurz vor dem Zeitpunkt t6, zum dem die zweite Wiederholung des ersten Intervalls 11 beginnen sollte. Das Datenübertragungsintervall K startet somit noch während des zweiten logischen Intervalls 12, dauert jedoch noch über den Zeitpunkt t6 hinaus bis zum Zeitpunkt t23 an. Daher wird die Wiederholung des zweiten Tasks T2 bis zum Ende des Datenübertragungsintervalls K, d.h. bis zum Zeitpunkt t23 verzögert. Trotz der höheren Priorität des ersten Tasks T1 wird in diesem Fall der zweite Task T2 ununterbrochen ausgeführt, da der erste Task T1 in der zweiten Wiederholung des ersten Intervalls 11 ausgelassen wird. Dies bedeutet, der erste Task T1 wird zwar mit höherer Priorität ausgeführt, zur Fehlerbehandlung wird der erste Task T1 ausgelassen, wenn dies erforderlich ist.
-
In dem in 9 dargestellten Beispiel wird der erste Task T1 mit höherer Priorität als der zweite Task T2 ausgeführt. Die Ausführung des zweiten Tasks T2 dauert bis zum Zeitpunkt t33 an, der nach dem Zeitpunkt t6, d.h. innerhalb der Wiederholung des zweiten logischen Intervalls 12 liegt. Der zweite Task 2 wird bis zu seinem Ende Ausgeführt. Da das Datenübertragungsintervall K bis dahin noch nicht ausgeführt wurde, wird die Wiederholung des zweiten Tasks T2 nicht ausgeführt, sondern entfällt, unabhängig von Prioritäten der Tasks.
-
Wenn der Scheduling Fehler d) Buffer eines Kanals werden vor ihrer Initialisierung verwendet, einer der lastabhängigen Fehler a) Task-Ende wird überschritten (bei mehrfacher Task-Aktivierung), b) Kommunikation wurde in letztem Datenübertragungsintervall nicht beendet, c) Kommunikation wurde in letztem Datenübertragungsintervall nicht ausgeführt, oder der Speicher Fehler a) Kanalzustand ist beschädigt erkannt wurde, fällt in den Beispielen entweder ein Task aus, oder das Datenübertragungsintervall K wird verschoben. Ein Task fällt im Beispiel dadurch aus, dass seine Ausführung vom Scheduler nicht aktiviert wird. Das Datenübertragungsintervall wird im Beispiel dadurch verschoben, dass der Scheduler die Ausführung der Tasks und des Datenübertragungsintervalls zu den passenden Zeitpunkten aktiviert.
-
Die Verwendung einzelne Kommunikationsverfahren und Fehlerbehandlungskonzepte sind nicht auf die aufgeführten Kategorien „Concurrency Level“ beschränkt. Sie können auch in anderen Szenarien oder Kategorien wie „Sequential Core Local“ oder „Sequential Cross Core“ zur Anwendung kommen.
-
Die Kommunikationsverfahren und Fehlerbehandlungskonzepte sind nicht auf eine Kommunikation zwischen zwei Tasks beschränkt. In den Figuren wird der Übersichtlichkeit wegen auf eine Ausführung mit mehr als zwei Tasks verzichtet.
-
Eine Vorrichtung 1000 zur Kommunikation ist in 10 dargestellt. Die Vorrichtung 1000 umfasst einen Prozessor 1001 und wenigstens einen temporären Datenspeicher 1002 die ausgebildet sind zu kommunizierende Daten in dem Datenübertragungsintervall K durch Lesen aus dem ersten Datenbereich B51, B52 des wenigstens einen temporären Datenspeichers 1002 und Speichern der gelesenen Daten in dem zweiten Datenbereich B101, B102 des wenigstens einen temporären Datenspeichers 1002 zwischen dem ersten Task T1 und einem zweiten Task T2 gemäß des beschriebenen Verfahrens zu kommunizieren.
-
Die Vorrichtung nach Anspruch umfasst in einem Beispiel ein Modul 1003 das wie für das Modul 400 beschrieben zur Kommunikation der zu kommunizierende Daten mittels eines Direct Memory Access, DMA, oder mittels Interrupt Service Routines ausgebildet ist.