嵌入式操作系统PetOS简述
一、PetOS简介
PalOS是UCLA(加州大学洛山机分校)为传感器网络而设计微型操系统。系统轮询每个任务消息队列,如果存在消息则调用任务相应消息处理函数。但是这种简单轮询机制和系统结构无法满足更为复杂应用需求。在任务管理、系统时钟管理和中断管理等功能上,PalOS功能都有待加强。PetOS以PalOS为原型,改进了任务调度算法,引入优先级概念。每个任务可根据重要程度不同被赋予一定优先级, CPU总是让处于就绪态、优先级最高任务先运行,从而实现任务优先级管理。PetOS还提供了严格优先级调度模式和非严格优先级调度模式,用于缓解高优先级任务持续被调度时,低优先级任务出现‘饿死’现象。
二、调度算法分析及优化:
在非严格模式下,设一级、二级、三级task队列长度分别为N1,N2,N3。则二级队列中调度一个任务需要判断一级任务N1次;三级队列中调度一个任务需要在一级队列中判断N1×N2次,在二级队列中判断N2次。在一级二级任务都很少被执行,而三级队列中任务消息粒度很小且执行频率很高时,任务调度所占用系统消耗便会急剧上升。一种解决方法是:PetOS给每个消息队列加入了32Bit消息标记位。其中每一位对应一个该优先级中任务。若消息标记变量某一位为1,则代表该位对应task存在尚未响应事件;若为0,则表示该级队列所有任务事件都已经处理完毕,可以调度次优先级任务。通过消息标记位策略,若一级二级任务都不存在需要被调度任务,则三级任务被调度一次代价只是查询一级、二级任务消息标记位各一次,从而大大降低了系统消耗。
三、中断管理:
由于PetOS实时性受到事件粒度大小影响,系统需要提供一种更强有力实时性保障:中断。PetOS中断处理模块主要完成中断源判断、中断向量维护以及中断响应函数调度等工作。 PetOS支持64个中断源,并对每个中断源支持不限数目中断处理函数,因此该列表是一个双向链表,里面包涵了该中断号下中断处理函数,定位后依次执行该链表中函数。采用链表方式维护中断处理函数可以更加灵活维护中断函数列表,但是实际上,很多中断函数都是一次性,比如USB连接响应函数在被调用后,需要将自己从该中断函数列表内删除。而此时,中断处理函数正在使用该列表,这样就引起了中断函数链表不一致性。
四、中断扩展模块-系统时钟模块和定时触发函数:
中断机制保证了PetOS对硬件请求实时性响应,而对于软件请求实时性则由PetOS系统时钟/定时触发函数模块完成。该模块主要完成了两部分工作:
1、系统时钟模块:系统每隔固定时间产生一个时间中断。利用前面中断机制,我们可以模拟一个准实时,不断执行任务。具体方法为将这段代码注册为系统时钟中断处理函数。
2、定时触发函数模块:为了满足嵌入式电子产品应用程序需要,基于系统时钟模块,PetOS供了定时触发函数功能。用户可以向系统注册一个定时触发函数,并指定其被调用时间。操作系统通过预先注册好一个系统时钟中断处理函数来检查是否有需要定时触发函数到期,并执行调度。
五、PetOS不足及改进方向
目前调度算法还是存在任务优先级跨度太大问题,高优先级任务可能直接导至低优先级任务“饿死”。PetOS不可抢占任务调度机制,各任务无独立栈导致调度不够灵活,如果一个任务消息处理时间很长,则其他任务消息响应时间也会很长,使得整个系统实时性显得较差并且无法移植阻塞式应到到该系统中。PetOS并没有启用多态运行模式,而是简单将OS core和其他应用程序地址空间复用。这样虽然简化了系统结构,但是带来了OS core地址空间可能被其他应用程序直接访问隐患。