AUTOSAR_AP_EXP_ARARustApplications
FIG-6cc03f7a354d424c
566 × 588 px
3 Release(s)
Figure 4.1: async function execution
SHA-256 Inhalts-Fingerabdruck:
6cc03f7a354d424cfb45d67ce5d9043a06122b00db85ac2f3b8f673aae13603b
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Sequenzdiagramm (UML 2.x Sequence Diagram) mit kombiniertem Fragment (
opt-Block / Schleife[0..N times]). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Spezifikation
AUTOSAR_AP_EXP_ARARustApplications. - Technischer Zweck: Spezifikation des kooperativen, zustandsbasierten asynchronen Ausführungsmodells (Pull-/Poll-basiertes Modell) für Rust-basierte Adaptive Applications (AA) im Kontrast zum klassischen, ereignisgesteuerten C++-Modell (
ara::core::Future/std::future).
2. Komponenten, Entitäten & Schnittstellen
- Akteure / Lifelines:
Main: Aufrufender Thread / übergeordneter Ausführungskontext der Applikation.async function: Aufgerufene asynchrone Funktion, compiler-seitig transformiert in eine diskrete Zustandsmaschine (State Machine).Future: Instanz des Traitscore::future::Future, kapselt den aktuellen Zustand, lokale Variablen und den Program Counter/Yield-Offset.Executor: Asynchrone Task-Laufzeitumgebung (Runtime Scheduler), zuständig für Task-Multiplexing und Fortschrittstrigger.
- Schnittstellen & Operationen:
Call function→Immediately return Future: Synchrone Initialisierungsphase ohne Start der Funktionslogik.spawn(Future)/await or block_on: Registrierung der Task beim Scheduler bzw. Blockieren/Suspendieren des aufrufenden Kontextes.poll: Treiberschnittstelle (core::future::Future::poll(&mut Context<'_>)).- Rückgabewerte: Varianten des Enums
core::task::Poll:Pending: Kooperativer Rückzug (Yield), Operation noch unvollständig.Ready(value): Terminierung der Zustandsmaschine mit Ergebnisübergabe.
- Beziehungen & Kardinalitäten:
- 1:1-Zuordnung zwischen Aufruf der
async functionund erzeugtemFuture-Objekt. - 1:N-Beziehung zwischen
Executorundpoll-Aufrufen (0..N Zyklen imopt-Fragment bis zum Eintreffen vonReady).
- 1:1-Zuordnung zwischen Aufruf der
3. Dynamisches Verhalten & Sequenzablauf
- Lazy Creation (Verzögerte Ausführung):
Mainruft dieasync functionsynchron auf.- Die Funktion generiert die
Future-Struktur zur Speicherung der lokalen Variablen und Zustände. - Kritische Eigenschaft: Die eigentliche Funktionslogik startet nicht (
function does _not_ start executing). DasFuture-Objekt wird unmittelbar anMainzurückgegeben.
- Scheduler-Übergabe:
Maindelegiert die Ausführung viaspawn(Future)an denExecutorund übergibt die Kontrolle viaawaitoderblock_on.
- Kooperative Polling-Schleife (
opt [0..N times]):Executorruftpollauf demFutureauf.- Erstaufruf: Einstieg am Kopf der Funktion.
- Folgeaufrufe: Wiedereinstieg am exakten Punkt des letzten
await. - Bei unvollendeten E/A- oder Rechenoperationen unterbricht die Funktion via
awaitund signalisiertPendingan denExecutorzurück (Thread bleibt nicht-blockierend für andere Tasks frei).
- Terminierung & Teardown:
- Ein finaler
poll-Aufruf führt die Funktion bis zumreturn. - Rückgabe von
Ready(value)an denExecutor; dieFuture-Ressourcen werden deallokiert. - Der
Executorpropagiert den EndwertvalueanMain.
- Ein finaler
4. Normative Relevanz & Entwickler-Hinweise
- Pull- vs. Push-Semantik: Im Gegensatz zu C++ ARA (
ara::core::Promise/Future), bei denen asynchrone Berechnungen typischerweise unmittelbar eager im Hintergrund anlaufen, ist RustsFuturerein lazy. Wird ein Rückgabewert einerasync fnnicht gepollt (#[must_use]), findet keinerlei Ausführung oder Fortschritt statt. - Echtzeit- und Blockierverbot: Innerhalb einer
async functiondürfen keine synchron blockierenden Systemrufe (z. B. POSIXpthread_mutex_lock, blockierendes Socket-Read,sleep) verwendet werden. Sie blockieren den gesamten Thread-Pool desExecutorund verletzen das deterministische Scheduling der Adaptive Platform. - Speicherlayout & ASIL-Konformität: Die durch den Rust-Compiler erzeugte State Machine besitzt eine feste Größe, benötigt zur Compile-Zeit jedoch bekannte Größen (
Sized). Rekursiveasync-Pfade oder dynamische Trait-Objekte (Box<dyn Future>) erfordern dynamische Allokationen auf dem Heap, die in deterministischen Safety-Kontexten (ISO 26262) strikt vermieden oder über statische Allokatoren gekapselt werden müssen. - Integration mit Execution Management (EM): Der
Executorbildet die Brücke zwischen dem AUTOSAR AP OS/EM-Threading-Modell und den kooperativen Rust-Tasks. Prioritäten und CPU-Affinitäten müssen auf Ebene der Worker-Threads des Executors im ARXML-Manifest konfiguriert werden.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.