diff --git a/score/mw/com/design/shared_mem_layout/README.md b/score/mw/com/design/shared_mem_layout/README.md index 443b2544f..b1da04f4b 100644 --- a/score/mw/com/design/shared_mem_layout/README.md +++ b/score/mw/com/design/shared_mem_layout/README.md @@ -7,7 +7,7 @@ within shared-memory by `Lola`. Other parts of the design documentation e.g. [event and field description part](../events_fields/README.md#introduction) already describe/hint in their class diagrams via the stereotype `<>` in the following form: -![Stereotype](artifacts/stereotype.svg) +![Stereotype](stereotype.svg) whether some classes (instances of it) are partially placed within shared-memory. We use the same stereotype here, but give a complete overview. @@ -36,13 +36,13 @@ The following class diagram provides an overview of the classes, whose instances also a rough indication how the provider side (in the form of `LoLa` skeleton) and the consumer side (in the form of `LoLa` proxy/proxy-event) interact with them. -![Class View](broken_link_k/swh/ddad_score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_classdiagram.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d) + This object diagram below (showing a concrete instantiation of the class diagram above for some example service instance) depicts more clearly the relation between the `SharedMemoryResource` instances representing a shared-memory object and the anchor/root elements placed within shared-memory: -![Object View](broken_link_k/swh/ddad_score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_objectdiagram.uxf?ref=18c835c8d7b01056dd48f257c14f435795a48b7d) + So - the first object/element created within the shared-memory object for **Data** (represented by `SharedMemoryResource` instance `shmResource_storage_SI_1`) is the instance `serviceDataStorage_SI_1` of class `ServiceDataStorage` and diff --git a/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_classdiagram.uxf b/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_classdiagram.uxf deleted file mode 100644 index 8ce22b5d7..000000000 --- a/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_classdiagram.uxf +++ /dev/null @@ -1,674 +0,0 @@ - - - 9 - - UMLClass - - 837 - 369 - 648 - 90 - - <<Shared Memory>> -lola::ServiceDataStorage --- -+events_ : score::memory::shared::Map<ElementFqId, score::memory::shared::OffsetPtr<void> > -+events_metainfo_ : score::memory::shared::Map<ElementFqId, EventMetaInfo> -+skeleton_pid_ : pid_t - - - - UMLClass - - 1314 - 522 - 396 - 72 - - <<Shared Memory>> -lola::EventMetaInfo --- -+data_type_info : DataTypeMetaInfo -+event_slots_raw_array : memory::shared::OffsetPtr<void> - - - - - UMLClass - - 1314 - 648 - 270 - 117 - - <<Shared Memory>> -lola::DataTypeMetaInfo --- -+size_of_ : std::size_ -+align_of_ : std::uint8_t - - - - - - UMLClass - - 774 - 513 - 504 - 135 - - <<Shared Memory>> -template=SampleType -lola::EventDataStorage -<<typedef>> --- -using score::containers::DynamicArray<SampleType, - std::scoped_allocator_adaptor< - memory::shared::PolymorphicOffsetPtrAllocator<SampleType> - >> - - - - Relation - - 909 - 450 - 54 - 90 - - lt=<<<<<- -m2=1..n - 10.0;10.0;10.0;80.0 - - - Relation - - 1377 - 450 - 54 - 90 - - lt=<<<<<- -m2=1..n - 10.0;10.0;10.0;80.0 - - - Relation - - 1377 - 585 - 27 - 81 - - lt=<<<<<- - 10.0;10.0;10.0;70.0 - - - UMLClass - - 837 - 963 - 756 - 90 - - <<Shared Memory>> -lola::ServiceDataControl --- -+event_controls_ : score::memory::shared::Map<ElementFqId, EventControl> -+uid_pid_mapping_ : UidPidMapping<score::memory::shared::PolymorphicOffsetPtrAllocator<UidPidMappingEntry>> - - - - - UMLClass - - 963 - 1395 - 297 - 72 - - <<Shared Memory>> -<<typedef>> -lola::EventDataControl --- - - - - - UMLClass - - 1350 - 1395 - 693 - 90 - - <<Shared Memory>> -lola::detail_event_data_control::EventDataControlImpl<> --- --- --state_slots_: std::vector<std::atomic<EventSlotStatus::value_type>, - memory::shared::PolymorphicOffsetPtrAllocator<std::atomic<EventSlotStatus::value_type>>> --transaction_log_set_ : TransactionLogSet - - - - - Relation - - 1251 - 1413 - 117 - 36 - - lt=<- -r1=type - 110.0;20.0;10.0;20.0 - - - Relation - - 855 - 1044 - 54 - 225 - - lt=<<<<<- -m2=1..n - 10.0;10.0;10.0;230.0 - - - UMLClass - - 0 - 117 - 765 - 171 - - lola::Skeleton --- --- --CreateSharedMemoryForData(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&) : bool --CreateSharedMemoryForControl(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&, QualityType) : bool --storage_ : ServiceDataStorage* --control_qm_ : ServiceDataControl* --control_asil_b_ : ServiceDataControl* --storage_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> --control_qm_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> --control_asil_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> - - - - Relation - - 423 - 279 - 432 - 126 - - lt=<. -creates in CreateSharedMemoryForData() - 460.0;120.0;10.0;120.0;10.0;10.0 - - - Relation - - 423 - 279 - 432 - 720 - - lt=<. -creates in CreateSharedMemoryForControl() - 460.0;780.0;10.0;780.0;10.0;10.0 - - - Relation - - 756 - 189 - 342 - 198 - - lt=<<<<- -r2=storage_ -m1=1 -m2=1 - 10.0;10.0;300.0;10.0;300.0;200.0 - - - Relation - - 369 - 279 - 486 - 765 - - lt=<<<<- -r2=control_<qm|asil_b>_ -m1=1 -m2=1..2 - 10.0;10.0;10.0;820.0;520.0;820.0 - - - UMLClass - - 1008 - 9 - 297 - 117 - - memory::shared::SharedMemoryResource --- -{innerclass -ControlBlock --- -+alreadyAllocatedBytes : std::size_t --start : OffsetPtr<void> -innerclass} --- --controlBlock : ControlBlock* - - - - Relation - - 369 - 0 - 657 - 135 - - lt=<<<<- -m1=1 -m2=2..3 - 10.0;130.0;10.0;10.0;710.0;10.0 - - - UMLClass - - 1629 - 126 - 486 - 135 - - lola::Proxy --- -+GetEventDataControl(const ElementFqId element_fq_id) const : EventDataControl* -+GetRawDataStorage(ElementFqId) const : const void* -+GetEventMetaInfo(ElementFqId) const : const EventMetaInfo& --- --control_ : std::shared_ptr<memory::shared::ManagedMemoryResource> --data_ : std::shared_ptr<memory::shared::ManagedMemoryResource> --quality_type_: QualityType - - - - - Relation - - 1296 - 18 - 423 - 126 - - lt=<<<<- -m1=1 -m2=2 - 440.0;120.0;440.0;10.0;10.0;10.0 - - - UMLClass - - 1782 - 441 - 315 - 90 - - lola::ProxyEventCommon --- --- --slot_collector_ : SlotCollector - - - - Relation - - 1179 - 675 - 738 - 738 - - lt=<<<<- -r2=event_data_control_ -m1=n -m2=1 - 790.0;10.0;790.0;490.0;10.0;490.0;10.0;800.0 - - - UMLClass - - 1827 - 324 - 180 - 54 - - lola::ProxyEvent --- - - - - Relation - - 1899 - 252 - 54 - 90 - - lt=<<<<<- -m2=1..n - 10.0;10.0;10.0;80.0 - - - Relation - - 1899 - 369 - 36 - 90 - - lt=<<<<<- -m2=1 - 10.0;10.0;10.0;80.0 - - - Relation - - 909 - 36 - 117 - 90 - - lt=<<<<<- -r2=controlBlock - 110.0;80.0;70.0;80.0;70.0;20.0;110.0;20.0 - - - UMLClass - - 1854 - 594 - 315 - 90 - - lola::SlotCollector --- --- --event_data_control_ : EventDataControl* - - - - Relation - - 1152 - 351 - 693 - 459 - - lt=<. -Uses in GetNewSamples() - 10.0;330.0;10.0;490.0;650.0;490.0;650.0;10.0;750.0;10.0 - - - Relation - - 1980 - 522 - 36 - 90 - - lt=<<<<<- -m2=1 - 10.0;10.0;10.0;80.0 - - - UMLClass - - 549 - 1251 - 324 - 72 - - <<Shared Memory>> -lola::EventControl --- -+data_control : EventDataControl -+subscription_control : EventSubscriptionControl - - - - Relation - - 864 - 1278 - 117 - 180 - - lt=<<<<<- - - 10.0;10.0;90.0;10.0;90.0;180.0;110.0;180.0 - - - UMLClass - - 963 - 1494 - 297 - 72 - - <<Shared Memory>> -<<typedef>> -lola::EventSubscriptionControl --- - - - - - UMLClass - - 1350 - 1503 - 693 - 117 - - <<Shared Memory>> -lola::detail_event_subscription_control::EventSubscriptionControlImpl<> --- --- --current_subscription_state_ : std::atomic_uint32_t --max_subscribable_slots_ : const SlotNumberType --max_subscribers_ : const SubscriberCountType --enforce_max_samples_ : const bool - - - - Relation - - 864 - 1305 - 117 - 234 - - lt=<<<<<- - - 10.0;10.0;70.0;10.0;70.0;240.0;110.0;240.0 - - - Relation - - 1251 - 1512 - 117 - 36 - - lt=<- -r1=type - 110.0;20.0;10.0;20.0 - - - UMLClass - - 135 - 1134 - 639 - 90 - - <<Shared Memory>> -lola::UidPidMapping --- -+RegisterPid(const uid_t uid, const pid_t pid) : score::cpp::optional<pid_t> --- --mapping_entries_ : score::containers::DynamicArray<UidPidMappingEntry, mapping_entry_alloc> - - - - - Relation - - 765 - 1044 - 90 - 153 - - lt=<<<<<- - - 80.0;10.0;80.0;150.0;10.0;150.0 - - - UMLClass - - 135 - 1287 - 243 - 90 - - <<Shared Memory>> -lola::UidPidMappingEntry --- -+key_uid_status_ : std::atomic<key_type> -+pid_ : pid_t - - - - Relation - - 180 - 1215 - 54 - 90 - - lt=<<<<<- -m2=0..n - 10.0;10.0;10.0;80.0 - - - UMLClass - - 1350 - 1134 - 693 - 198 - - <<Shared Memory>> -lola::TransactionLogSet -{innerclass -TransactionLogNode --- --is_active_ : bool --needs_rollback : bool --transaction_log_ : lola::TransactionLog --transaction_log_id_: TransactionLogId - -innerclass} --- --- --proxy_transaction_logs_ : std::vector<TransactionLogNode, - memory::shared::PolymorphicOffsetPtrAllocator<TransactionLogNode>> --skeleton_tracing_transaction_log_ : TransactionLogNode - - - - UMLClass - - 2097 - 1197 - 513 - 135 - - <<Shared Memory>> -lola::TransactionLog --- --reference_count_slots_ : std::vector<TransactionLogSlot, - memory::shared::PolymorphicOffsetPtrAllocator<TransactionLogSlot>> -- subscribe_transactions_ : TransactionLogSlot --subscription_max_sample_count_ : score::cpp::optional<MaxSampleCountType> - - - - - - Relation - - 2034 - 1215 - 81 - 27 - - lt=<<<<<- - 10.0;10.0;70.0;10.0 - - - UMLClass - - 2178 - 972 - 288 - 162 - - <<Shared Memory>> -lola::TransactionLogSlot --- -+SetTransactionBegin(bool) : void -+SetTransactionEnd(bool) : void -+GetTransactionBegin() : bool const -+GetTransactionEnd() : bool const - -- --transaction_begin_ : std::uint8_t : 1; --transaction_end_ : std::uint8_t : 2; - - - - - - Relation - - 2304 - 1125 - 54 - 90 - - lt=<<<<<- -m2=1..n - 10.0;80.0;10.0;10.0 - - - Relation - - 1737 - 1323 - 27 - 90 - - lt=<<<<<- - 10.0;80.0;10.0;10.0 - - diff --git a/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_objectdiagram.uxf b/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_objectdiagram.uxf deleted file mode 100644 index e44d199e2..000000000 --- a/score/mw/com/design/shared_mem_layout/artifacts/shared_mem_layout_objectdiagram.uxf +++ /dev/null @@ -1,238 +0,0 @@ - - - 10 - - UMLClass - - 850 - 520 - 720 - 100 - - <<Shared Memory>> -serviceDataStorage_SI_1 : lola::ServiceDataStorage --- -+events_ : score::memory::shared::Map<ElementFqId, score::memory::shared::OffsetPtr<void> > -+events_metainfo_ : score::memory::shared::Map<ElementFqId, EventMetaInfo> - - - - UMLClass - - 110 - 90 - 850 - 190 - - skeleton_SI_1 : lola::Skeleton --- --- --CreateSharedMemoryForData(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&) : bool --CreateSharedMemoryForControl(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&, QualityType) : bool --storage_ : ServiceDataStorage* --control_qm_ : ServiceDataControl* --control_asil_b_ : ServiceDataControl* --storage_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> --control_qm_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> --control_asil_resource_ : std::shared_ptr<score::memory::shared::ManagedMemoryResource> - - - - UMLClass - - 230 - 520 - 430 - 130 - - shmResource_storage_SI_1 : SharedMemoryResource --- -{innerclass -ControlBlock --- -+alreadyAllocatedBytes : std::size_t --start : OffsetPtr<void> -innerclass} - - - - UMLClass - - 230 - 670 - 430 - 130 - - shmResource_control_qm_SI_1 : SharedMemoryResource --- -{innerclass -ControlBlock --- -+alreadyAllocatedBytes : std::size_t --start : OffsetPtr<void> -innerclass} - - - - UMLClass - - 230 - 820 - 430 - 130 - - shmResource_control_asil_SI_1 : SharedMemoryResource --- -{innerclass -ControlBlock --- -+alreadyAllocatedBytes : std::size_t --start : OffsetPtr<void> -innerclass} - - - - Relation - - 300 - 270 - 160 - 270 - - lt=<<<<- -m2=1 -r2=storage_resource_ - 10.0;10.0;10.0;250.0 - - - Relation - - 50 - 270 - 200 - 480 - - lt=<<<<- -m2=1 -r2=control_qm_resource_ - 130.0;10.0;130.0;450.0;180.0;450.0 - - - Relation - - 50 - 270 - 200 - 590 - - lt=<<<<- -m2=1 -r2=control_asil_resource_ - 80.0;10.0;80.0;560.0;180.0;560.0 - - - UMLClass - - 850 - 670 - 630 - 100 - - <<Shared Memory>> -serviceDataControl_qm_SI_1 : lola::ServiceDataControl --- -+event_data_control_ : score::memory::shared::Map<ElementFqId, EventDataControl> -+skeleton_pid_ : pid_t - - - - UMLClass - - 850 - 820 - 630 - 100 - - <<Shared Memory>> -serviceDataControl_asil_SI_1 : lola::ServiceDataControl --- -+event_data_control_ : score::memory::shared::Map<ElementFqId, EventDataControl> -+skeleton_pid_ : pid_t - - - - Relation - - 650 - 720 - 220 - 40 - - lt=<- -r1=start - 200.0;20.0;10.0;20.0 - - - Relation - - 650 - 870 - 220 - 40 - - lt=<- -r1=start - 200.0;20.0;10.0;20.0 - - - Relation - - 650 - 570 - 220 - 40 - - lt=<- -r1=start - 200.0;20.0;10.0;20.0 - - - Relation - - 920 - 270 - 90 - 270 - - lt=<<<<- -m2=1 -r2=storage_ - 10.0;10.0;10.0;250.0 - - - Relation - - 950 - 240 - 740 - 480 - - lt=<<<<- -m2=1 -r2=control_qm_ - 10.0;10.0;720.0;10.0;720.0;450.0;530.0;450.0 - - - Relation - - 950 - 200 - 760 - 690 - - lt=<<<<- -m2=1 -r2=control_qm_ - 10.0;10.0;740.0;10.0;740.0;660.0;530.0;660.0 - - diff --git a/score/mw/com/design/shared_mem_layout/shared_mem_layout_classdiagram.puml b/score/mw/com/design/shared_mem_layout/shared_mem_layout_classdiagram.puml new file mode 100644 index 000000000..abec7a2c5 --- /dev/null +++ b/score/mw/com/design/shared_mem_layout/shared_mem_layout_classdiagram.puml @@ -0,0 +1,168 @@ +@startuml shared_mem_layout_classdiagram +title "Shared Memory Layout Class Diagram" + +class "lola::Skeleton" { + -CreateSharedMemoryForData(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&) : bool + -CreateSharedMemoryForControl(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&, QualityType) : bool + -storage_ : ServiceDataStorage* + -control_qm_ : ServiceDataControl* + -control_asil_b_ : ServiceDataControl* + -storage_resource_ : std::shared_ptr + -control_qm_resource_ : std::shared_ptr + -control_asil_resource_ : std::shared_ptr +} + +class "lola::ServiceDataStorage" <> { + +events_ : score::memory::shared::Map> + +events_metainfo_ : score::memory::shared::Map + +skeleton_pid_ : pid_t +} + +class "lola::EventMetaInfo" <> { + +data_type_info : DataTypeMetaInfo + +event_slots_raw_array : memory::shared::OffsetPtr +} + +class "lola::DataTypeMetaInfo" <> { + +size_of_ : std::size_ + +align_of_ : std::uint8_t +} + +class "lola::EventDataStorage" <> <> { + using score::containers::DynamicArray>> +} + +class "lola::ServiceDataControl" <> { + +event_controls_ : score::memory::shared::Map + +uid_pid_mapping_ : UidPidMapping> +} + +class "lola::EventDataControl" <> <> { +} + +class "lola::detail_event_data_control::EventDataControlImpl<>" as EventDataControlImpl <> { + -state_slots_: std::vector, memory::shared::PolymorphicOffsetPtrAllocator>> + -transaction_log_set_ : TransactionLogSet +} + +class "memory::shared::SharedMemoryResource" { + -controlBlock : ControlBlock* +} + +class "ControlBlock" { + +alreadyAllocatedBytes : std::size_t + -start : OffsetPtr +} + +class "lola::Proxy" { + +GetEventDataControl(const ElementFqId element_fq_id) const : EventDataControl* + +GetRawDataStorage(ElementFqId) const : const void* + +GetEventMetaInfo(ElementFqId) const : const EventMetaInfo& + -control_ : std::shared_ptr + -data_ : std::shared_ptr + -quality_type_: QualityType +} + +class "lola::ProxyEventCommon" { + -slot_collector_ : SlotCollector +} + +class "lola::ProxyEvent" { +} + +class "lola::SlotCollector" { + -event_data_control_ : EventDataControl* +} + +class "lola::EventControl" <> { + +data_control : EventDataControl + +subscription_control : EventSubscriptionControl +} + +class "lola::EventSubscriptionControl" <> <> { +} + +class "lola::detail_event_subscription_control::EventSubscriptionControlImpl<>" as EventSubscriptionControlImpl <> { + -current_subscription_state_ : std::atomic_uint32_t + -max_subscribable_slots_ : const SlotNumberType + -max_subscribers_ : const SubscriberCountType + -enforce_max_samples_ : const bool +} + +class "lola::UidPidMapping" <> { + +RegisterPid(const uid_t uid, const pid_t pid) : score::cpp::optional + -mapping_entries_ : score::containers::DynamicArray +} + +class "lola::UidPidMappingEntry" <> { + +key_uid_status_ : std::atomic + +pid_ : pid_t +} + +class "lola::TransactionLogSet" <> { + -proxy_transaction_logs_ : std::vector> + -skeleton_tracing_transaction_log_ : TransactionLogNode +} + +class TransactionLog { + -is_active_ : bool + -needs_rollback : bool + -transaction_log_ : lola::TransactionLog + -transaction_log_id_: TransactionLogId +} + +class "lola::TransactionLog" <> { + -reference_count_slots_ : std::vector> + -subscribe_transactions_ : TransactionLogSlot + -subscription_max_sample_count_ : score::cpp::optional +} + +class "lola::TransactionLogSlot" <> { + +SetTransactionBegin(bool) : void + +SetTransactionEnd(bool) : void + +GetTransactionBegin() : bool const + +GetTransactionEnd() : bool const + -transaction_begin_ : std::uint8_t : 1 + -transaction_end_ : std::uint8_t : 2 +} + + +lola::Skeleton "1" *-- "1" lola::ServiceDataStorage : storage_ +lola::Skeleton ..> lola::ServiceDataStorage : creates in CreateSharedMemoryForData() + +lola::Skeleton "1" *-- "1..2" lola::ServiceDataControl : control_ +lola::Skeleton ..> lola::ServiceDataControl : creates in CreateSharedMemoryForControl() + +lola::Skeleton "1" o-up- "2..3" memory::shared::SharedMemoryResource +memory::shared::SharedMemoryResource *-- ControlBlock + +lola::Proxy "1" o-up- "2" memory::shared::SharedMemoryResource +lola::SlotCollector "n" *-- "1" lola::EventDataControl : event_data_control + +lola::Proxy *-- "1..n" lola::ProxyEvent +lola::ProxyEvent *-- "1" lola::ProxyEventCommon +lola::ProxyEventCommon *-- "1" lola::SlotCollector +lola::ProxyEvent ..> "lola::EventDataStorage" : Uses in GetNewSamples() + +lola::ServiceDataStorage *-- "1..n" "lola::EventDataStorage" +lola::ServiceDataStorage *-- "1..n" lola::EventMetaInfo +lola::EventMetaInfo *-- lola::DataTypeMetaInfo + +lola::ServiceDataControl *-- "1..n" lola::EventControl +lola::ServiceDataControl *-- lola::UidPidMapping + +lola::EventControl *-- lola::EventDataControl +lola::EventControl *-- lola::EventSubscriptionControl + +lola::UidPidMapping *-- "0..n" lola::UidPidMappingEntry + +lola::EventDataControl .> EventDataControlImpl : type +lola::EventSubscriptionControl .> EventSubscriptionControlImpl : type + +EventDataControlImpl *-- lola::TransactionLogSet +lola::TransactionLogSet *-- lola::TransactionLog +lola::TransactionLog *-- "1..n" lola::TransactionLogSlot + +TransactionLog -left-+ lola::TransactionLogSet + +@enduml \ No newline at end of file diff --git a/score/mw/com/design/shared_mem_layout/shared_mem_layout_objectdiagram.puml b/score/mw/com/design/shared_mem_layout/shared_mem_layout_objectdiagram.puml new file mode 100644 index 000000000..70d5621c2 --- /dev/null +++ b/score/mw/com/design/shared_mem_layout/shared_mem_layout_objectdiagram.puml @@ -0,0 +1,60 @@ +@startuml shared_mem_layout_objectdiagram +title "Shared Memory Layout Object Diagram" + +object "skeleton_SI_1 : lola::Skeleton" as skeleton { + -CreateSharedMemoryForData(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&) : bool + -CreateSharedMemoryForControl(LolaServiceInstanceDeployment&, LolaServiceTypeDeployment&, QualityType) : bool + -storage_ : ServiceDataStorage* + -control_qm : ServiceDataControl* + -control_asil_b : ServiceDataControl* + -storage_resource : std::shared_ptr + -control_qm_resource : std::shared_ptr + -control_asil_resource : std::shared_ptr +} + +object "shmResource_storage_SI_1 : SharedMemoryResource" as storage_resource { + +alreadyAllocatedBytes : std::size_t + -start : OffsetPtr +} + +object "shmResource_control_qm_SI_1 : SharedMemoryResource" as control_qm_resource { + +alreadyAllocatedBytes : std::size_t + -start : OffsetPtr +} + +object "shmResource_control_asil_SI_1 : SharedMemoryResource" as control_asil_resource { + +alreadyAllocatedBytes : std::size_t + -start : OffsetPtr +} + +object "<< Shared Memory >>\nserviceDataStorage_SI_1 : lola::ServiceDataStorage" as storage { + +events_ : score::memory::shared::Map> + +events_metainfo_ : score::memory::shared::Map +} + +object "<< Shared Memory >>\nserviceDataControl_qm_SI_1 : lola::ServiceDataControl" as control_qm { + +event_data_control_ : score::memory::shared::Map + +skeleton_pid_ : pid_t +} + +object "<< Shared Memory >>\nserviceDataControl_asil_SI_1 : lola::ServiceDataControl" as control_asil { + +event_data_control_ : score::memory::shared::Map + +skeleton_pid_ : pid_t +} + +skeleton o-- storage_resource : storage_resource +skeleton o-- control_qm_resource : control_qm_resource +skeleton o-- control_asil_resource : control_asil_resource + +skeleton o-- storage : storage +skeleton o-- control_qm : control_qm +skeleton o-- control_asil : control_asil_b + +control_qm_resource -right-> control_qm : start +control_asil_resource -right-> control_asil : start +storage_resource -right-> storage : start + +control_qm_resource -[hidden]-> control_asil_resource +control_asil_resource -[hidden]-> storage_resource + +@enduml \ No newline at end of file diff --git a/score/mw/com/design/shared_mem_layout/artifacts/stereotype.svg b/score/mw/com/design/shared_mem_layout/stereotype.svg similarity index 100% rename from score/mw/com/design/shared_mem_layout/artifacts/stereotype.svg rename to score/mw/com/design/shared_mem_layout/stereotype.svg