一种改进实时操作系统中周期性定时器时间性能的方法

文档序号:6597992阅读:170来源:国知局

专利名称::一种改进实时操作系统中周期性定时器时间性能的方法
技术领域
:本发明属于嵌入式操作系统领域,具体涉及一种改进实时操作系统中周期性定时器时间性能的方法。
背景技术
:任务是现代操作系统中最基本和最重要的概念之一,它是单处理器上实现多任务的基础。在实时操作系统中存在多种任务模型,如周期性任务模型、非周期性任务模型和偶发任务模型。其中,周期性任务模型是最广泛使用的任务模型,它被广泛用于建模时间触发任务,周期性采样任务和控制任务。定时器是实时操作系统中的重要实体之一,它具有以下两个特性1)当中断到达的时候,它的值减小一个单位;2)当一个定时器的值减小到0的时候,它将触发与其相关联的服务程序。定时器可以分为周期性定时器和非周期性定时器两种。周期性任务模型在实现的时候通常采用周期性定时器以触发相应的任务。对于一个周期性的定时器,当它的值变为0的时候,它将会被重新赋予初始值并启动一个新的周期;对于一个非周期性定时器,它的值变为0的时候停止减小,也就是说,和该任务相关联的定时器仅执行一次。定时器的维护操作,如插入、删除和减小操作将影响到任务的定时约束过长的定时器维护时间将影响任务的释放时间;定时器维护时间的变化将影响任务的释放抖动和可预测性。在实时系统中,通常使用多个具有不同周期的定时器。减小定时器的维护开销有助于增加系统中可用的计算资源和保证任务的性能。而且,保持定时器维护时间的稳定性将减小任务的释放抖动、增加系统的可调度性和可控制性。目前的定时器管理方案在对发生失效的定时器进行更新操作时需要动态插入新的失效时间,该操作的时间开销为0(n2),从而在实现周期性任务模型方面缺乏效率。
发明内容本发明针对现有技术的不足,提供一种改善嵌入式实时操作系统中周期性定时器时间性能的方法。本发明解决其技术问题所采用的关键点是在操作系统实现定时器管理的时候,通过存储一个超周期内发生的定时器失效时刻,从而避免了在定时器更新操作时动态插入新的定时器失效时刻。该方法将实时系统中的定时器管理分为两个阶段定时器配置阶段和定时器运行阶段。在定时器配置阶段,根据系统中的定时器参数,如定时器的周期、初始位相、相关联的任务等,设置定时器调度表数据结构,即设置超周期中发生定时器失效的时刻,以及定时器失效时需要触发的任务。定时器配置是离线进行的,因此不会对实时系统带来开销。在定时器运行阶段,在每次发生定时器中断的时候,如果不存在定时器失效,那么定时器更新操作仅增加计数器的值;如果发生定时器失效,那么将目前发生失效的定时器所关联的任务设置为就绪状态,并重新设置定时器下一次的失效时刻。3本发明通过将定时器发生失效的时刻预先规划好,并在定时器运行的时候判断是否发生定时器失效从而减小了定时器更新时间开销(即更新操作的时间开销),并增加了定时器运行时时间开销的稳定性和可预测性。本发明解决技术问题所采取的技术方案为步骤(1)创建一个定时器调度表。定时器调度表是一个定时器调度项的矩阵,并且最大长度等于超周期。每一个定时器调度项包括三个部分定时器失效时刻、相关联的任务链表、任务链表内的任务数目。步骤(2)初始化定时器。具体步骤如下a.将N个定时器的参数(包括周期、位相和相关联的任务)输入到数组中;b.计算N个定时器的超周期H;c.判断超周期H中的每个时刻i是否等于定时器的超时值(超周期中的时刻和定时器表项之间具有一一对应关系,即第i时刻对应于第i项),如果超周期H中的每个时刻i等于定时器的超时值,则首先添加该任务到时刻i所对应的定时器调度项中,并增加表项i所对应的任务数;如果超周期H中的每个时刻i不等于定时器的超时值,则不操作,其次判断表项i所对应的任务数是否大于零,如果表项i所对应的任务数大于零,则向配置文件中写入表项号i、表项号i中的任务号和表项i的任务链表中总的任务数目,如果表项i所对应的任务数小于等于零,则不操作;d.将超周期和总的调度表项数写入到配置文件中;步骤(3)更新定时器。具体步骤如下e、将定时器的计数值加1,并对超周期取模;f.如果定时器的值等于当前定时器调度表的失效时刻,进行以下的操作1)设置当前定时器调度表中所有任务的状态为就绪状态;2)取下一个定时器调度表项作为当前定时器调度表项;3)取当前的定时器调度表项的失效时刻作为下一次定时器的失效时刻。顺序完成步骤⑴、步骤⑵、步骤(3)即可实现周期性定时器时间性能的改进。在本发明中,通过静态和离线地决定定时器的失效时刻,并将各个失效时刻以及与其相关联的任务保存在定时器调度表中,在运行的时候,仅需要判断是否达到定时器失效值,从而将相关联的任务置于就绪状态,消除了运行时插入新的定时器失效时刻的操作,使周期性定时器的更新时间开销在不发生超时时为0(1),在发生失效时最大为0(n),并且时间开销是稳定的和可预测的。本发明具有如下优点1.本发明把定时器管理分为定时器初始化和定时器更新两个阶段,在定时器初始化阶段确定定时器的触发时刻,以及相关联的任务,在定时器更新阶段,确定发生定时器失效的时刻,以及定时器失效时需要触发的任务,从而减小了运行时定时器的开销。2.在定时器更新的时候,仅增加定时器计数值,并与当前定时器失效值相比较,以判断是否发生失效,不涉及更新各个定时器的计数值,提高了定时器更新操作的实时性。3.在定时器失效的时候,仅需要触发与当前定时器调度表项相关联的任务,并将定时器当前的表项置为定时器调度表中下一项,并将当前定时器调度表中的失效值置为下一次定时器的失效值。由于各个操作的时间是确定的,因此在发生定时器失效时定时器更新的时间也是确定的,从而提高了实时系统的可预测性。本发明实现定时器管理所需要的时间开销和空间开销很少,非常适合微内核嵌入式实时操作系统。图1定时器初始化算法流程图;图2定时器更新算法流程图;图3定时器管理实施流程图;图4定时器调度表结构图;图5定时器的失效时刻图。具体实施例方式一种改进实时操作系统中周期性定时器时间性能的方法包括如下步骤步骤(1)创建一个定时器调度表。定时器调度表是一个定时器调度项的矩阵,并且最大长度等于超周期。每一个定时器调度项包括三个部分定时器失效时刻、相关联的任务链表、任务链表内的任务数目。步骤⑵初始化定时器(如图1所示)。包括如下步骤a.将N个定时器的参数(包括周期、位相和相关联的任务)输入到数组中;b.计算N个定时器的超周期H;c.判断超周期H中的每个时刻i是否等于定时器的超时值(超周期中的时刻和定时器表项之间具有一一对应关系,即第i时刻对应于第i项),如果超周期H中的每个时刻i等于定时器的超时值,则首先添加该任务到时刻i所对应的定时器调度项中,并增加表项i所对应的任务数;如果超周期H中的每个时刻i不等于定时器的超时值,则不操作,其次判断表项i所对应的任务数是否大于零,如果表项i所对应的任务数大于零,则向配置文件中写入表项号i、表项号i中的任务号和表项i的任务链表中总的任务数目,如果表项i所对应的任务数小于等于零,则不操作;d.将超周期和总的调度表项数写入到配置文件中;步骤(3)更新定时器(如图2所示)。包括如下步骤e、将定时器的计数值增加1,并对超周期取模;f.如果定时器的值等于当前定时器调度表的失效时刻,那么进行以下的操作1)设置当前定时器调度表中所有任务的状态为就绪状态;2)取下一个定时器调度表项作为当前定时器调度表项;3)取当前的定时器调度表项的失效时刻作为下一次定时器的失效时刻。顺序完成步骤⑴、步骤⑵、步骤(3)即可实现周期性定时器时间性能的改进。如图3所示,该图阐明了定时器管理的实施步骤,它分为四个阶段,其中前三个阶段完成定时器的初始化,第四个阶段完成定时器的更新操作。首先(阶段1),根据系统中的需求,确定需要的定时器参数,包括定时器的数目,各个定时器的周期、位相、相关联的任务等;接着,确定超周期的大小,并根据各个定时器的位相和周期,确定该定时器在超周期的中的各个失效时刻;然后(阶段3),将超周期中发生定时器失效的时刻(注意按照时间的先后顺序排序)、发生失效的定时器所关联的任务、以及触发的任务的数目,作为定时器调度表中的一项,并写入参数(参数包括超周期、定时器调度表项项数,定时器初始计数、初始表项、初始的定时器失效值等)的初始化值;最后(阶段4),在系统运行的时候,每次时钟中断发生,将定时器计数的值增加1,如果没有达到当前定时器表项的失效值,则不进行任何处理,如果达到了当前定时器调度表表项的失效值,则将当前定时器调度表表项中相关联的任务置于就绪状态,并将下一个定时器调度表表项作为当前定时器调度表表项。下面结合一个实施例对本发明进一步介绍。该实施例使用基于飞思卡尔HCS12微控制器的开发板作为硬件平台,使用包含本发明实现的定时器初始化和定时器更新算法的FastOS操作系统作为本实施例中的嵌入式实时操作系统。该实施例包含四个定时器,其参数如表I所示。其中,Tr1-Tr4表示四个定时器,Oi表示定时器的位相,Pi表示定时器的周期,Ti表示定时器所关联的任务。表I实验中的定时器参数设置<table>tableseeoriginaldocumentpage6</column></row><table>这种改进实时系统中周期性定时器时间性能的方法在FastOS中的实现步骤如下1.创建一个定时器调度表Entry[4]。每个定时器调度表项包括失效时间ExpiryTime、任务链表ptaskList和任务数目taskNum三个组成部分,见图4所示。其中,失效时间ExpiryTime表示在该时刻会发生定时器失效,定时器调度表项i中的定时器失效时间表示为Entry[i].ExpiryTime;任务链表ptaskList表示在定时器失效的时候触发的任务,定时器调度表项i中的第j个任务表示为Entry[i].ptaskListU];任务数目taskNum表示任务链表中实际存储的任务数,定时器调度表项i中存储的任务数表示为Entry[i].taskNum。任务链表ptaskList指向任务矩阵T[N]的基地址,在本例中,由于最大的任务数是4,所以任务矩阵的元素数是4。2.定时器初始化算法的实现步骤如下(2.1)输入4个定时器的参数到Tr[4]中;(2.2)计算这出4个定时器的超周期H=24;(2.3)对定时器调度表中的项,从O到23依次进行步骤2.4-2.5的处理。如果处理完毕,转步骤2.6;(2.4)搜索所有4个定时器的失效时刻,如果定时器i的失效时刻等于.j,就添加与该定时器相联的任务到Entry[j].ptaskList中;在本例中,各个定时器的失效时刻如附图5所示定时器1的失效时刻为2、6、10、14、18、22,定时器2的失效时刻为4、10、16、22,定时器3的失效时刻为6、14、22,定时器4的失效时刻为10、22。(2.5)如果Entry[j].taskNum>0,则向配置文件entry,h中写入(i,Entry[j],ptaskList中的任务号,Entry[j].taskNum)的项;在本例中,从图5中可以看出在时刻2,定时器1失效;在时刻4,定时器2失效;在时刻6,定时器1和3失效;在时刻10,定时器1、2、4失效;在时刻14,定时器1、3失效;在时刻16,定时器2失效;在时刻18,定时器1失效;在时刻22,定时器1-4失效。也就是说,向entry,h中依次写入的项为(2,“TSK3”,1)、(4,“TSK1”,1)、(6,“TSK3,TSK4”,2)、(10,“TSK1,TSK3,TSK5”,3)、(14,“TSK3,TSK4”,2)、(16,“TSK1”,1)、(18,“TSK3”,1)、(22,“TSK1,TSK3,TSK4,TSK5”,4)。其中的TSK表示任务。(2.6)写常量(H,Ε)到entry,h中;(2.7)写初始值(counterValue=0,curEntry=0,curExpiryValue=Entries[curEntry].ExpiryTime至Ijentry,h中;3.定时器在运行时的更新算法如下(3.1)增加counterValue的值,并使增加后的值对H取模;(3.2)如果counterValue的值等于curExpiryValue,那么进行步骤3.3-3.5,否则,退出;(3.3)设置Entries[curEntry]·ptaskLis中所有的任务为就绪状态;(3.4)增加curEntry的值,并使增加后的值对4取模;(3.5)移动当前的定时器调度表项的指示,使curExpiryValue等于Entries[curEntry]·ExpiryTime0使用上述的定时器调度表数据结构,在完成定时器的初始化后,产生entry,h文件,将它包含到开发环境的编译文件中,并采用上述的定时器更新算法,在产生定时器时钟中断的时候,使用上述的定时器更新算法。从上述例子可以看出,本发明的方法在进行定时器更新的时候,不涉及到定时器的插入和删除操作,大大减少了定时器更新的时间,并且使定时器的更新时间更加稳定和可预测。在基于飞思卡尔的HCS12微控制器的开发板上对比采用常见方法和本发明方法的定时器开销。其中采用的操作系统是我们开发的FAST0S,微控制器HCS12的处理器为MC9S12DP256B,频率16MHz。在飞思卡尔提供的CodeWarriorDebugger上用模拟器运行,测试得到FASTOS中两种方法的定时器更新时间如表1所示。其中ti表示超周期中的时刻,Nrt表示失效的定时器数目,Ttm表示传统方法中定时器的更新时间,Tsm表示本发明的方法中定时器的更新时间,时间单位均为CPU周期。表1采用常见方法和本发明方法的定时器更新时间对比<table>tableseeoriginaldocumentpage7</column></row><table><table>tableseeoriginaldocumentpage8</column></row><table>从表1可以看出,使用本发明中的方法,可以至少提高定时器更新时间43.7%。同时,本发明中的方法是稳定的,例如,在发生一次定时器失效时,总是花费67个时钟周期,而传统的方法,则可能发生变化,例如,在时刻2是914,在时刻4为1100。另外,可以根据发生的定时器失效数目,采用公式1计算出来=198x+{^"0+67。此外,结果测量,传统方法的空间开销为68个字节,本发明中提出的方法空间开销为71个字节。从上面的实施例中可以看出,本发明提出的定时器实现方法,具有更好的实时性,更好的稳定性和更好的时间可预测性。权利要求一种改进实时操作系统中周期性定时器时间性能的方法,其特征在于该方法包括如下步骤步骤(1)创建一个定时器调度表;定时器调度表是一个定时器调度项的矩阵,并且最大长度等于超周期;每一个定时器调度项包括三个部分定时器失效时刻、相关联的任务链表和任务链表内的任务数目;步骤(2)初始化定时器;具体步骤如下a.将N个定时器的参数输入到数组中;b.计算N个定时器的超周期H;c.根据超周期H中的每个时刻和每个表项所对应的任务数进行如下操作如果超周期H中的每个时刻等于定时器的超时值,则首先添加该任务到时刻所对应的定时器调度项中,并增加表项所对应的任务数;如果超周期H中的每个时刻与定时器的超时值不相等,则不操作;如果表项所对应的任务数大于零,则向配置文件中写入表项号、表项号中的任务号和表项的任务链表中总的任务数目;如果表项所对应的任务数小于等于零,则不操作;d.将超周期和总的调度表项数写入到配置文件中;步骤(3)更新定时器;具体步骤如下e、将定时器的计数值加1,并对超周期取模;f.如果定时器的值等于当前定时器调度表的失效时刻,进行以下的操作1)设置当前定时器调度表中所有任务的状态为就绪状态;2)取下一个定时器调度表项作为当前定时器调度表项;3)取当前的定时器调度表项的失效时刻作为下一次定时器的失效时刻;顺序完成步骤(1)、步骤(2)和步骤(3)即可实现周期性定时器时间性能的改进。全文摘要本发明涉及一种改进实时操作系统中周期性定时器时间性能的方法。目前的定时器管理方案在对发生失效的定时器进行更新操作时需要动态插入新的失效时间,在实现周期性任务模型方面缺乏效率。本发明方法首先创建一个定时器调度表,每一个定时器调度项包括三个部分定时器失效时刻、相关联的任务链表、任务链表内的任务数目;然后初始化定时器,将N个定时器的参数输入到数组中,计算N个定时器的超周期H;最后更新定时器。本发明把定时器管理分为定时器初始化和定时器更新两个阶段,从而减小了运行时定时器的开销。本发明实现定时器管理所需要的时间开销和空间开销很少,非常适合微内核嵌入式实时操作系统。文档编号G06F11/00GK101799774SQ20101010634公开日2010年8月11日申请日期2010年2月2日优先权日2010年2月2日发明者张佳芳,戴国骏,薛刚刚,陈峰,高志刚申请人:杭州电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1