嵌入式系统软件技术解析
1. 虚拟机技术
在某些特定环境中,在单个真实处理器上模拟多个处理器是可行且有用的,这可以通过在裸机硬件上运行虚拟机来实现。在虚拟机之上,可以运行多个操作系统,这意味着能够在单个处理器上同时运行多个不同的操作系统。
不过,对于嵌入式系统而言,使用这种方法需要谨慎。因为这种方式的时间行为可能更具问题,并且会丧失时序可预测性。但在一些情况下,该方法仍有其用武之地,例如需要在单个硬件处理器上集成使用不同操作系统的多个遗留应用程序。
PikeOS 是一种专门针对嵌入式系统的虚拟化概念。它允许将系统资源(如内存、I/O 设备、CPU 时间)划分为不同的子集。PikeOS 带有一个小型微内核,在这个内核之上可以实现多个操作系统、应用程序编程接口(API)和运行时环境(RTE)。
2. 资源访问协议
2.1 优先级反转
为避免程序出现不确定或不期望的行为,某些任务需要对全局共享变量或设备等资源进行独占访问。这种独占访问对于嵌入式系统非常重要,例如在实现基于共享内存的通信或对某些特殊硬件设备进行独占访问时。程序中需要这种独占访问的部分被称为临界区,临界区应该尽量简短。
操作系统通常提供用于请求和释放资源独占访问的原语,也称为互斥原语。未获得独占访问权限的任务必须等待,直到资源被释放。释放操作需要检查等待任务,并恢复优先级最高的任务。
在本书中,请求操作称为 P(S),释放操作称为 V(S),其中 S 对应所请求的特定资源。P(S) 和 V(S) 是所谓的信号量操作。信号量允许最多 n 个(n 为参数)线程或进程同时使用由 S 保护的特定资源。S 是一个数据结构,用于