开发者在选择嵌入式产品RTOS时,实时性能是最重要的标准之一。嵌入市场研究公司Evans Data和Venture Development(VDC)最新的研究报告称,“实时性能”是开发者选择商用实时操作系统最重要的因素。但问题是,何为实时性能,又如何测量呢?
实时性能
实时性能可定义为RTOS(或类似软件)在响应某事件时执行相关操作的速度。实时意味着软件必须在独立的第二个事件发生前对第一事件作出响应。
例如,当汽车引擎进气阀打开时,引擎控制软件必须计算正确的空气燃料混合比,并在阀门关闭之前将其注入到汽缸里,为压缩冲程作准备。因此及时完成第一事件的响应是非常关键的,这样才能满足第二事件的要求。这个响应可能包括一系列操作,但最重要的是中断处理和系统服务。
中断处理
实时系统通常是基于反应机制的,系统需要作出响应的事件通常叫做中断。处理器一旦识别到中断,就会采取相关措施,执行响应该事件的指令。
大多数情况下,处理器在遇到中断之前正在执行一些指令。一旦有中断产生,这些处理必须暂停,当中断的关键实时响应完成后,再继续原先的处理。大多数RTOS都为开发者提供了中断处理和应用程序规划及执行管理的功能。中断处理通常包括如下操作:
* 暂停当前正在执行的线程,
* 保持该线程继续执行时需要的有关数据,
* 将控制权交给中断服务子程序(ISR),
* 在ISR中执行一定的操作以决定需要采取哪些措施,
* 提取/保存该中断相关的关键(引入的)数据,
* 设置所需的与设备相关的(输出)值,
* 确定当中断及相关处理引起环境变化时需要执行哪个线程,
* 清除中断硬件以识别下一个中断,
* 将控制转交给选择的线程,包括提取该线程上次中断时保持的环境数据。
所有这些(也许还有更多操作,具体操作与RTOS相关)都属于中断处理,但这仅是实时性能的一个方面。无庸置疑的是,在特定RTOS执行这些操作会造成实时性能的显著区别。
系统服务
实时操作系统并不仅限于响应中断。他们还必须规划并管理应用程序线程的执行。RTOS处理来自各线程的请求,执行规划、信息传递、资源分配及很多其它服务。大多数情况下服务必须迅速执行,这样线程可以在下一中断产生时完成相关的操作。
系统服务尽管不属于中断处理,它也一项关键的实时响应,系统的成败关键取决于系统服务。系统服务处理包括如下内容:
* 规划未来事件发生时相应的任务或线程,
* 在线程间传递消息,
* 从通用池内声明资源
系统服务的实现虽然比中断处理更多变,但在改善RTOS实时性能方面占据同样重要的地位。系统服务和中断处理一起实现RTOS要求的重要处理。不同RTOS的功能实现及架构都有所不同,因而性能各异。
为何性能如此关键?
执行这些功能所需的时间是实时系统中最关键的指标,时间必须确定,而且要求响应速度快,这样才不致丢失数据,或者导致系统出现基本故障。
例如,飞行控制系统必须及时响应导航输入以避免系统运作停止,磁盘控制器必须将磁盘读写头的位置精确控制到相关点;DSL路由器也必须快速响应高速数据包抵达的中断,这样避免丢失数据,减少再次操作。
处理器速度在执行所有RTOS指令方面非常关键,但仅此并不能满足系统要求,也不能提供最经济有效的方案。
尽管2GHz处理器的代码执行速度另人满意,但成本、功耗或者物理封装等方面的性能均不适合嵌入式产品。相比之下,采用有效RTOS的经济型处理器并不一定逊色,还可能会胜出,而且不会引起快速处理器相关的成本、功率/散热/封装问题。
如何测量实时性能?
实时性能的测量注重最重要的方面,使用通用硬件平台严格测量各项指标,以比较不同RTOS。
因此开发者可以通过特定功能的执行情况,比较每个RTOS的性能,以量化实时性能,为产品开发作出正确的决定。需要测量的关键RTOS功能包括:
* 环境切换(CS) : 需要保存当前线程环境所需的时间,查找优先级最高的线程并保存其环境。
* 中断潜伏范围(ILR): 中断被禁止的时间。
* RTOS系统服务
o tx_thread_suspend. 暂停应用程序线程。
o tx_thread_resume. 继续先前暂停的线程。
o tx_thread_relinquish. 取消对其它应用程序线程的控制。
o tx_queue_send . 向消息队列发送消息。
o tx_queue_receive. 从消息队列获取消息。
o tx_semaphore_get. 从计数信号获得实例。
o tx_semaphore_put. 在计数信号中放置实例。
o tx_mutex_get. 获得互斥体的所有权。
o tx_mutex_put. 释放互斥体的所有权。
o tx_event_flags_set. 设置或清除事件标志。
o tx_event_flags_get. 提取事件标志。
o tx_block_allocate. 分配内存模块。
o tx_block_release. 释放内存模块。
o tx_byte_allocate. 分配内存字节。
o tx_byte_release. 释放先前分配的内存区域。
对于如上的每个系统服务,必须测量如下指标:
o 立即响应:需要立即处理请求所需的时间,比如没有线程暂停或线程恢复。
o 线程暂停(TS): 由于资源无效需要暂停线程时处理请求所需时间。
o 线程恢复(TR): 当前一暂停的线程(优先级相同或者较低)恢复时处理请求所需时间。
o 线程恢复及环境切换(TRCS): 当前一暂停的高优先级线程恢复后处理请求所需时间。由于恢复的线程优先级高,针对恢复线程的环境切换也将在该请求中完成。
这些功能的时间示例如下表所示。参考平台使用的是主频40MHz的ARM9处理器,采用ThreadX RTOS。这些时间对大多数32位处理器可根据时钟速率作线性缩放。