AUTOSAR_AP_EXP_SWArchitecture
FIG-95bf98c5d39fe92d
650 × 361 px
1 Release(s)
Figure 9.20: Interfaces for memory handling
SHA-256 Inhalts-Fingerabdruck:
95bf98c5d39fe92d1a92c28edd9908cc1645eed06d0404b57187ad097ab85d9d
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08
1. Diagrammtyp & Architektur-Kontext
- Diagrammtyp: UML-Klassendiagramm / Schnittstellenspezifikation (Realisierungsdiagramm für C++-APIs).
- Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Functional Cluster Core (
ara::core), Release R24-11. - Technischer Zweck: Spezifikation der standardisierten, nativen C++-Schnittstellen zur deterministischen Speicherverwaltung (PMR – Polymorphic Memory Resources). Das Konzept adaptiert und kapselt Mechanismen gemäß ISO/IEC 14882 (C++17
std::pmr) für sicherheitsrelevante Fahrzeugsoftware, um dynamische Allokationen durch austauschbare, domänenspezifische Speicherressourcen (z. B. statische Puffer, Stack-Allokatoren, Pool-Ressourcen) kontrollierbar und echtzeitfähig zu gestalten.
2. Komponenten, Entitäten & Schnittstellen
Entitäten & Stereotypen
«aapFunctionalCluster» Core: Der funktionale Kern-Cluster der Adaptive Platform, welcher grundlegende Typen, Fehlerbehandlungsmechanismen und systemnahe Abstraktionen für alle anderen Plattform- und Applikationsprozesse (ara::*) bereitstellt.- Schnittstellenblöcke mit
«aapAPI,aapNativeInterface»: Kennzeichnen native C++-Programmierschnittstellen (Header-basierte APIs unter dem Namespaceara::corebzw. Sub-Namespaces wieara::core::memory/pmr), die direkt von Applikationen und Stacks eingebunden werden.
Dargestellte Schnittstellen & Methoden
- Globale / Standard-Ressourcenfabriken (statischer Funktionsblock links):
+ NewDeleteResource(): Liefert einen Zeiger auf die globale Standard-Speicherressource basierend auf globalemoperator new/operator delete.+ NullMemoryResource(): Liefert eine Null-Speicherressource zurück; jeder Allokationsversuch führt deterministisch zu einem Speicherfehler (wichtig für Fail-Safe-Szenarien und statische Verifikation).- (Unterstrichene Methoden = statische freie C++-Funktionen).
- Default-Ressourcenmanagement (statischer Funktionsblock Mitte):
+ GetDefaultResource(): Liest die aktuell prozessweit gesetzte Standard-Speicherressource aus.+ SetDefaultResource(): Setzt die globale Default-Speicherressource um (z. B. auf einen deterministischen Fixed-Block- oder Monotonic-Buffer-Allocator während der Initialisierungsphase).- (Unterstrichene Methoden = statische freie C++-Funktionen).
PolymorphicAllocator(Klasse rechts):- Repräsentiert das generische Allokator-Template (
ara::core::PolymorphicAllocator<T>), das die typisierten Container der Adaptive Platform (z. B. Vektoren, Maps, Strings) an die zugrundeliegende polymorphe Speicherressource bindet. - Methodeninventar:
- Speicheranforderung/-freigabe:
allocate(),allocate_bytes(),allocate_object(),deallocate(),deallocate_bytes(),deallocate_object(). - Lebenszyklusmanagement:
construct(),destroy(),new_object(),delete_object(). - Metadaten & Container-Propagation:
resource()(Liefert Zeiger auf die zugrundeliegendeMemoryResource),select_on_container_copy_construction().
- Speicheranforderung/-freigabe:
- Repräsentiert das generische Allokator-Template (
Beziehungen
- Interface Realization (gestrichelte Linie mit geschlossener, nicht ausgefüllter Pfeilspitze): Der Functional Cluster
Corerealisiert und exportiert alle drei nativen Schnittstellenkonfigurationen für darüberliegende Adaptive Applications (AAs) und Plattformdienste.
3. Dynamisches Verhalten & Sequenzablauf
- Initialisierungsphase:
- Vor dem Start zeitkritischer Threads/Routinen konfiguriert die Applikation mittels
SetDefaultResource()einen deterministischen Allokator (z. B. vorab zugewiesener Heap-Bereich oder Paging-Pool). - Alternativ instanziiert die Applikation einen spezifischen
PolymorphicAllocator, der eine dedizierte lokaleMemoryResourcereferenziert.
- Vor dem Start zeitkritischer Threads/Routinen konfiguriert die Applikation mittels
- Laufzeit-Allokationspfad (Synchron):
- Container oder Objekte rufen
allocate()/allocate_bytes()auf dem Allokator auf. - Der Allokator delegiert synchron an die hinterlegte polymorphe Ressource (
resource()->allocate(...)). - Bei statischen Sicherheitsprüfungen oder im Run-Flat-Modus verhindert
NullMemoryResource(), dass unbemerkt dynamischer Heap-Speicher angefordert wird, indem Anfragen sofort deterministisch abgewiesen werden (std::bad_allocbzw. AUTOSAR-Fehlerbehandlung).
- Container oder Objekte rufen
- Destruktionspfad (Synchron):
- Aufruf von
destroy()/delete_object()zerstört Objekte in-place; anschließendesdeallocate()gibt den Block an den Puffer zurück, ohne Kernel-Transitions (sofern Nicht-NewDeleteResource).
- Aufruf von
4. Normative Relevanz & Entwickler-Hinweise
- Echtzeit- und Safety-Restriktionen (ISO 26262 / ASIL-D):
- Die Verwendung von
NewDeleteResource()führt zu unvorhersehbaren Latenzen und Heap-Fragmentierung (Aufruf von System-malloc). Für ASIL-relevante Echtzeitpfade ist dies normativ verboten oder stark reglementiert. - Entwickler müssen stattdessen Arena-, Monotonic- oder Pool-Ressourcen über
PolymorphicAllocatorinjizieren.
- Die Verwendung von
- ABI- und Typsicherheit:
PolymorphicAllocatorentkoppelt den Container-Typ vom konkreten Allokations-Mechanismus zur Laufzeit. Verschiedene Container des gleichen Typs (ara::core::Vector<int>) bleiben binär- und typkompatibel zueinander, unabhängig davon, ob sie aus dem Stack oder aus einem geteilten Shared-Memory-Pool allokieren.
- Thread-Sicherheit:
- Aufrufe von
SetDefaultResource()sind nicht thread-sicher und dürfen ausschließlich sequentiell während der Initialisierungsphase des Prozesses vor dem Spawnen paralleler Threads ausgeführt werden.
- Aufrufe von
- NullMemoryResource als Audit-Tool:
- Vor dem Eintritt in die zyklische Ausführungsschleife kann
SetDefaultResource(NullMemoryResource())gesetzt werden, um versehentliche dynamische Allokationen im Produktivbetrieb hart zur Laufzeit abzufangen.
- Vor dem Eintritt in die zyklische Ausführungsschleife kann
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.