Atomic Basic Blocks Eine kontrollflussunabhängige Zwischendarstellung für Echtzeitsysteme
Fabian Scheler Martin Mitzlaff Wolfgang Schröder-Preikschat Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg http://www4.informatik.uni-erlangen.de/~scheler
[email protected]
1
Entwicklung am Automobilmarkt
ereignisgesteuerte Kommunikation
CAN
föderales System
ABS, ESP
zeitgesteuerte Kommunikation
OSEK/VDX
Fail-stop Semantik
integrierte Systeme
FlexRay
AUTOSAR
Fail-operational Semantik
{Steer,Break}-by-Wire
[email protected] - PEARL 2007
2
Konsequenzen
Migration
Ereignissteuerung → Zeitsteuerung
Legacy Applications
falls möglich: Wiederverwendung (z.B. virtuelle CAN-Netzwerke auf Basis von FlexRay)
sonst: Migration/Portierung
nicht sicherheitskritische Subsysteme, z.B. Komfortanwendungen sicherheitskritische Subsyteme, z.B. ABS, ESP
Portierung
arbeitsintensiv Fehlerquelle
[email protected] - PEARL 2007
3
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
4
Ein triviales Beispiel
Sensor1
Aktor Sensor2
Controller
[email protected] - PEARL 2007
5
Explizit modellierte Abhängigkeiten 1
1
2
1
Sensor1
Aktor
2 1 Versand von Nachrichten
Sensor2
2 Fadensynchronisation
[email protected] - PEARL 2007
Controller
6
Explizit modellierte Abhängigkeiten 1
das ist ein triviales Beispiel ➔ reale Anwendungen beinhalten ≥ 200 Tasks ➔ eine Größenordnung mehr 1 Abhängigkeiten statische Ablaufpläne zu erstellen ist nicht einfach weitere Signale mit hoher Frequenz abtasten 2 1 Sensor1 Berechnungen überschreiten Rechenzeit ➔ Berechnungen aufteilen ... manuell??? Aktor
2 1 Versand von Nachrichten
Sensor2
2 Fadensynchronisation
[email protected] - PEARL 2007
Controller
7
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
8
Ist Migration sinnvoll?
Lässt sich eine Migration a priori ausschließen?
wofür eignet sich Zeit- bzw. Ereignissteuerung gibt es Anwendungsfälle, die ein bestimmtes Paradigma - bevorzugen oder sogar - ausschließen
➔
nicht-funktionale Eigenschaften
Gibt es reale Anwendungsszenarien?
Will man komplette Systeme migrieren? Gibt es andere Gründe für eine Migration?
[email protected] - PEARL 2007
9
nicht-funktionale Eigenschaften zeitgesteuert Analysierbarkeit statische Ablaufpläne Vorhersagbarkeit statische Ablaufpläne Testbarkeit Erweiterbarkeit
ereignisgesteuert Antwortzeitanalyse dynamischer Ablaufplan, jedoch ist Determinismus ausreichend
WCET Analyse + statische Ablaufpläne
WCET Analyse + Antwortzeitanalyse
Neuberechnung statischer Ablaufpläne
erneute Antwortzeitanalyse
Fehlertoleranz Replikdeterminismus Ressourcennutzung (nicht-periodische Abfragebetrieb Ereignisse)
[email protected] - PEARL 2007
Leader-Follower, Gruppenkommunikation Unterbrechungsgesteuert, {aperiodische, sporadische...} Server
10
nicht-funktionale Eigenschaften
liefern kein endgültiges Entscheidungskriterium
allenfalls tendieren - Fehlertoleranz zu zeitgesteuerten Systemen - nicht-periodische Ereignisse zu ereignisgesteuerten Systemen
zeitgesteuertes System sicherheitskritisch: Absicherung durch Fehlertoleranz wenige nicht-periodische Ereignisbehandlungen ➔ Polling
ereignisgesteuertes System viele nicht-periodische Ereignisse wenige sicherheitskritische Ereignisbehandlungen ➔ Leader-Follower
[email protected] - PEARL 2007
11
Anwendungsszenarien
Migration einzelner Subsysteme
Beispiel: ESP
mehrere Sensoren und Aktoren gemeinsame Datenstrukturen notwendig
ereignisgesteuerte Systeme:
Wiederverwendung in zeit- bzw. ereignisgesteuerten Systemen
zwischen versch. Knoten: OSEK COM Messages auf demselben Knoten: OSEK Ressourcen und OSEK Events
zeitgesteuerte Systeme:
statisch berechnete Ablaufpläne Berücksichtigung aller Abhängigkeiten
[email protected] - PEARL 2007
12
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
13
Ansatz
Entkopplung von Anwendung und Laufzeitsystem
Zwischendarstellung unabhängig von der Kontrollflussabstraktion
Kombination verschiedener
Front-Ends und Back-Ends
ähnlich zum Übersetzerbau
Zwischendarstellung
Kontrollflussgraphen (CFG) Basisblöcke
[email protected] - PEARL 2007
14
Atomic Basic Blocks
Abhängigkeiten zwischen verschiedenen CFGs
Datenabhängigkeiten explizit modellierte logische und zeitliche Abhängigkeiten gegenseitiger Ausschluss
ABB-Graph überlagert einen Wald aus CFGs
ABBs aggregieren mehrere Basisblöcke
ABBs werden immer über genau einen Basisblock
verlassen und betreten
Grenzen ABB
abzweigen/einmünden von anderen CFGs kritische Abschnitte
[email protected] - PEARL 2007
15
Atomic Basic Blocks 1 2 3
Sensor1
4 3 Actor
1 2 3 4
SendMessage() Sensor2 SendMessage()/WaitEvent() Release-/GetResource() SendMessage()
[email protected] - PEARL 2007
Controller
16
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
17
Der Real-Time Systems Compiler
betriebssystemgewahrer Übersetzer
basierend auf der LLVM (Low Level Virtual Machine)
verwendet ABBs als Zwischendarstellung ➔
ABBs sind basierend auf dem LLVM-Assembler implementiert - von der LLVM verwendete Zwischendarstellung - typisierter Assembler
[email protected] - PEARL 2007
18
Eingabe & Ausgabe
Target Implementations
Source Implementations
RTSC
[email protected] - PEARL 2007
19
BS-gewahres Front- und Back-End Back-End Target Implementations
Source Implementations
RTSC
Front-End OS
Target Specifications
Source OS Specifications
[email protected] - PEARL 2007
20
Ereignisse mapping
Back-End Target Implementations
Source Implementations Target Task DB
RTSC
mapping
Front-End OS
Source Task DB
Target Specifications
Source OS Specifications
[email protected] - PEARL 2007
21
Abbildung von ABBs mapping
Back-End Target Implementations
Source Implementations Target Task DB
Analyser / Composer
mapping
Front-End OS
Source Task DB
Target Specifications
Source OS Specifications
[email protected] - PEARL 2007
22
WCET Analyse mapping
Back-End Target Implementations
Source Implementations Target Task DB
Analyser / Composer
mapping
Front-End
Timing Analysis Hardware
Source Task DB
OS
Target Specifications
Source OS Specifications
[email protected] - PEARL 2007
23
Planbarkeitsanalyse mapping
Checker Source Implementations
valid
Back-End Target Implementations
invalid
Target Task DB
Analyser / Composer
mapping
Front-End
Timing Analysis Hardware
Source Task DB
OS
Target Specifications
Source OS Specifications
[email protected] - PEARL 2007
24
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
25
RTSC: Einordnung
Resolver
Resolver Source Implementations
Extractor
verknüpft ABB-Endpunkte erzeugt globalen Graph
Extractor
generiert ABBs
mapping
Scanner
Front-End Source Task DB
Scanner
sucht ABB-Endpunkte systemabhängig
Source OS Specifications
[email protected] - PEARL 2007
26
RTSC: Einordnung
Resolver
Resolver Source Implementations
Extractor
verknüpft ABB-Endpunkte erzeugt globalen Graph
Extractor
generiert ABBs
mapping
Scanner
Front-End Source Task DB
Scanner
sucht ABB-Endpunkte systemabhängig
Source OS Specifications
[email protected] - PEARL 2007
27
Eingaben und Ausgaben
Eingabe
reduzierbarer Kontrollflussgraph - (natürliche) Schleifen - Verzweigungen (if/switch) - kein goto
Ausgabe
ABB-Graph überlagert Kontrollflussgraph
[email protected] - PEARL 2007
28
Algorithmus - Überblick Resolver Source Implementations
abb := new ABB()
Extractor
bb := nextBB()
(depth-first)
mapping
Scanner Front-End
bb != 0
false
finished
Source Task DB
true Source OS Specifications
abbTerm := scanBB(bb)
abbTerm != 0
true
(first,bb) := splitBB(bb)
false closeABB(abb,first) addBB(abb,bb)
abb := openABB(bb)
abbTerm := 0
[email protected] - PEARL 2007
29
Sequenzen abb := new ABB()
bb := nextBB()
bb != 0
(depth-first)
false
finished
true abbTerm := scanBB(bb)
abbTerm != 0
true
(first,bb) := splitBB(bb)
false closeABB(abb,first) addBB(abb,bb)
abb := openABB(bb)
(1)
abbTerm := 0
(1) hole und scanne ersten Basisblock
[email protected] - PEARL 2007
30
Sequenzen abb := new ABB()
bb := nextBB()
bb != 0
(depth-first)
false
finished
true abbTerm := scanBB(bb)
abbTerm != 0
true
(first,bb) := splitBB(bb)
false closeABB(abb,first) addBB(abb,bb)
abb := openABB(bb)
(1)
(2)
abbTerm := 0
(1) hole und scanne ersten Basisblock (2) ein ABB-Endpunkt wurde gefunden - splitte Basisblock - schließe aktuellen ABB und öffne neuen ABB
[email protected] - PEARL 2007
31
Sequenzen abb := new ABB()
bb := nextBB()
bb != 0
(depth-first)
false
finished
true abbTerm := scanBB(bb)
abbTerm != 0
true
(first,bb) := splitBB(bb)
false closeABB(abb,first) addBB(abb,bb)
abb := openABB(bb)
(1)
(2)
(3)
abbTerm := 0
(1) hole und scanne ersten Basisblock (2) ein ABB-Endpunkt wurde gefunden - splitte Basisblock - schließe aktuellen ABB und öffne neuen ABB (3) scanne zweiten Teil des Basisblocks
[email protected] - PEARL 2007
32
Sequenzen abb := new ABB()
bb := nextBB()
bb != 0
(depth-first)
false
finished
true abbTerm := scanBB(bb)
abbTerm != 0
true
(first,bb) := splitBB(bb)
false closeABB(abb,first) addBB(abb,bb)
abb := openABB(bb)
(1)
(2)
(3)
(4)
abbTerm := 0
(1) hole und scanne ersten Basisblock (2) ein ABB-Endpunkt wurde gefunden - splitte Basisblock - schließe aktuellen ABB und öffne neuen ABB (3) scanne zweiten Teil des Basisblocks (4) nächsten Basisblock holen, scannen und zum ABB hinzufügen
[email protected] - PEARL 2007
33
Verzweigungen/Schleifen
Erkennung → Tiefensuche Nachfolger im CFG - Teil eines ABB - ABB ist bereits abgeschlossen
Transformation existierender ABBs splitten von ABBs nach - nach verzweigenden Knoten - zusammenführenden Knoten - und vor Schleifenköpfen - Knoten, die eine Schleife verlassen
verschachtelte Kontrollkonstrukte rekursiv
[email protected] - PEARL 2007
34
Überblick
Das Migrationsproblem
Ist Migration sinnvoll?
Atomic Basic Blocks
Der Real Time Systems Compiler
Erzeugung von Atomic Basic Blocks
Ausblick
[email protected] - PEARL 2007
35
Ausblick
Status
einfach Prototyp eines C-Front-Ends Algorithmus zur Erzeugung von ABB-Graphen Abhängigkeiten durch - globale Variablen - Versenden/Empfangen von Nachrichten (in Arbeit) - Abzweigung von Ereignisbehandlungen
geplant
Front-Ends und Back-Ends für - OSEK OS / AUTOSAR OS - OSEK ttOS
[email protected] - PEARL 2007
36
Ausblick
Status
einfach Prototyp eines C-Front-Ends Algorithmus zur Erzeugung von ABB-Graphen Abhängigkeiten durch - globale Variablen - Versenden/Empfangen von Nachrichten (in Arbeit) - Abzweigung von Ereignisbehandlungen
geplant
Vielen Dank für Ihre Aufmerksamkeit!
Front-Ends und Back-Ends für - OSEK OS / AUTOSAR OS - OSEK ttOS
[email protected] - PEARL 2007
37