This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

通过实时虚拟化简化软件分离

在汽车、工业控制和医疗保健等诸多市场中,电子系统日益复杂。汽车开始具备自动驾驶能力,工业机器人的协作性越来越强,医疗系统也能够自动提供手术或给药辅助。这一趋势并不是一种新现象。上一代产品的高端功能常常会演变为未来新一代的标准配备,过去不曾想到的新功能会加入进来,系统也会扩展。当然,支撑这一发展趋势和复杂性加剧的是硬件和软件的功能。复杂性加剧为系统中的软件管理带来更多挑战。

ARM® 的全新 Cortex®-R52 增添了相应的支持功能,能够在单一处理器中更好地控制软件,提供代码分离并实现虚拟化,并且不会影响许多实时应用必需的确定性执行。

 

软件复杂性加剧

在早期嵌入式系统中,简简单单一个超级循环便能实施软件控制,管理整个应用。而随着系统日益复杂,添加或修改代码的难度也在加大,一段代码里的细微变化可能会给另一段代码造成重大影响。这种影响在实时系统中特别恼人,导致需要大量的资源才能进行相对简单的更改。目前,大多数系统使用的操作系统能够更加容易地整合新的特征、功能和增强。

01.png

单一系统中可能会存在多个不同供应商的软件。过去,单一系统中涉及的供应商数量屈指可数;但随着复杂性的加剧以及标准化版本生成的需求,需要使用多种来源的软件来增强重复使用和利用特殊专长。总而言之,复杂性的加剧加大了在单一处理器中整合软件的难度。

在需要功能安全性的系统中,与不同重要程度代码的任何意外交互都可能对系统运行造成不可预见的严重影响。为应对这种风险,通常需要验证和认证完整的软件堆栈。这也是一个复杂而昂贵的步骤;而且,软件大小的增加也会造成难度增大。多处理器系统中可通过一种方法来减轻这一负担,那就是在不同处理器之间分割软件任务。关乎系统安全性的任务可以部署到单独的处理器上,分别分配专用的硬件资源。这种方法在某些情形中或许有用,但不能提供完整的解决方案,因为其灵活性有限,而且依赖于全面知晓任务之间是否存在交互。在某些系统的传统软件中,区分安全关键型代码和非安全关键代码的定义可能不明确,或者区分难度很高,使得此方法不太可行。

02.png

简化软件分离

较好的解决方案是保障安全关键型代码或敏感代码的独立性,通过清晰划分软件的不同重要程度来简化功能安全性软件的开发。这样的独立性或许意味着更改或增强可能不需要彻底重新认证,关键任务的软件可以和非关键软件共存于同一处理器,从而可简化解决方案的实施并提高灵活性。

 

作为 ARMv8-R 架构的一部分,Cortex-R52 中的硬件可以允许监控软件或系统管理程序提供软件之间的分离,从而简化软件之间的交互以及共享资源的访问。这可用于保持在单一处理器上运行同一操作系统的任务之间的分离,或者在不同操作系统之间的分离,从而避免干扰的发生。此代码的一些元素可能没有要明确支持关键功能的要求。这可以合并到执行安全检查功能(如执行软件自检例程和启动逻辑 BIST 检查)的处理器中,或者它也可用于启动安全操作或管理安全事件。

利用 Cortex-R52,对任务之间共享资源的访问可通过在新的较高异常级别运行的监控器或系统管理程序进行管理。任务通过系统管理程序请求对必要共享资源的访问,其中单独的内存保护单元 (MPU) 用于提供硬件保护来防止意外访问。这种方法不限于两种不同的重要程度,可支持在单一处理器上混合多个不同的重要程度,并可确保关键软件按照预期运行。可以创建相应的沙盒,使代码能够存在于受保护的环境中,防止其他任务意外控制或访问它所使用的资源。这使得关键任务(如功能安全性)优先于其他任务,并且能够在不受系统中其他软件干扰的前提下运行。

通过在任务之间提供明确的硬件支持隔离,将这些活动限制到具有最高敏感度的软件区域或者已发生更改的区域,可减少软件的验证和认证工作。

通过虚拟化进行合并

为帮助降低成本并简化整个系统,出现了将功能整合到一起的趋势。

03.png

 

将不同功能并入单一设备或处理器时,这样的整合可能会需要耗费大量的精力。这种整合需要评估系统之间的所有交互活动,以确保运行正确。

有一种方法能够简化这一整合过程,那就是将功能虚拟化并与其操作系统整合,利用系统管理程序来管理其分离。操作系统之间不需要互相了解,从而简化了它们的协作。Cortex-R52s 处理器硬件可以实现这一目标。这可用于帮助专门为共同实施而开发的系统(在应用合并情形中),或者用于帮助逐步添加新功能到现有系统中。

在预计要部署 Cortex-R52 的实时系统中,要执行的任务在构建时已知,也不需要在运行时创建额外的虚拟机。因此,内存系统使用固定地址映射来编写;而且,与使用内存管理单元 (MMU) 的完全虚拟化系统不同,其内存映射不会虚拟化。如需进一步了解如何在 Cortex-R 处理器上进行虚拟化,可以参加将于 11 9 日举办的免费网络研讨会

实时虚拟化

在许多虚拟化方法中,使用 MMU 可能会影响确定性执行。虽然页表命中不会带来损失,但页表未命中可能会导致页表获取路径较长(提供支持的内存速度较慢时),并造成上下文更改或异常产生显著的延迟。对实时系统而言,这一差距或不确定性可能会引发问题。Cortex-R52 可以在不影响确定性执行的前提下实现虚拟化。其保护通过两个级别的 MPU 来施行,这两者始终会执行单一循环内权限检查。与前几代 Cortex-R 处理器相比,Cortex-R52 中使用的新编程模型意味着区域大小更加灵活,编程的速度也更快,即使在实施系统管理器程序时也一样。

在许多嵌入式应用中,中断加载可能很重要。如果没有高效的中断处理和确定的响应时间,这些频繁的中断可能会给实时系统带来问题,并且可能会导致系统性能大幅降低。Cortex-R52 的处理器群集中整合了一个中断控制器,可帮助实现低延迟中断进入和高效虚拟中断管理。再配合对虚拟化任务的快速上下文切换支持,处理器能够为这些嵌入式系统所控制的众多运算提供快速响应的界定反应。

04.png