AutoSar AP CM中的序列化总结
一、序列化的概念
Serialization(见 [11])是将特定数据结构转换为标准化格式以便在发送方和接收方之间进行交换的过程。在网络通信中,当数据在网络节点间传输时,必须遵循商定好的规则才能在接收方正确解释数据。这是因为进行通信的模块可能基于不同字节序和数据字大小的微控制器,具有不同的对齐方式。
二、AUTOSAR CP 中的序列化
在 AUTOSAR CP 中,Serialization 在节点内部通信中不起作用,内部内存数据可直接从发送方复制到接收方,这基于三个假设:
- 所有本地软件组件(SWC)的字节序相同。通常 “内部” 通信在单核或多核微控制器及多处理器系统中字节序相同,只有在不同微控制器系列的 CPU 组成的系统中此假设可能无效。
- 所有本地 SWC 中某些数据结构的对齐方式一致。在 CP 中,整个单地址空间系统的静态映像由源文件或目标文件构建,要求映像不同部分的编译器设置保持一致。
- 交换的数据结构在内存中是连续的。在 CP 中不允许软件组件间通信使用非连续数据类型建模。
三、AUTOSAR AP 中的序列化
在 AUTOSAR AP 中情况不同。运行时加载可执行文件是受支持的用例,不同的 ara::com 应用程序编译器设置在对齐决策方面可能不同,所以 AP 产品的 IPC 绑定实现必须支持交换数据的序列化,其序列化方式由 AP 供应商决定。AP 对数据类型限制较少,例如支持交换 std::map 等非连续数据类型,传输时需进行深拷贝。产品供应商可采用优化策略消除通信路径中的序列化和反序列化阶段,如允许系统集成商配置对齐兼容性、通过交换检查模式验证对齐设置、提供关心连续性的向量实现避免深拷贝问题。
四、零拷贝影响
在 IPC / 中间件实现中,避免数据发送方和接收方之间不必要的复制是性能优化的首要任务之一,“零拷贝” 被广泛用于描述这种模式。在 AP 中,对单独进程中运行的应用程序提供内存保护,典型通信方法需至少一次数据复制,高度优化的 IPC / 中间件实现可通过设置共享内存区域消除单一复制步骤,但如果产品供应商不解决序列化问题,就无法从共享内存方法中受益,无法实现 “零拷贝”。