一种实时多任务操作系统的定时器调度方法

文档序号:6536054阅读:169来源:国知局
专利名称:一种实时多任务操作系统的定时器调度方法
技术领域
本发明涉及计算机中的操作系统领域,具体地说,涉及一种实时多任务操作系统的定时器调度方法。
背景技术
在计算机应用中,操作系统是用户与计算机硬件之间的桥梁,它方便了用户对计算机资源的管理。在操作系统中,有些用户要求计算机在特定的时间和空间内完成特定的任务,这对操作系统提出了实时性要求。实时操作系统是指用户要求在限定时间内必须有相应反应的系统,如果逻辑和时序出现偏差则会引起严重后果。实时操作系统广泛应用于生产过程控制、汽车工业、计算机外设、通信设备、机器人、航空航天、民用消费等领域。
对于一般的操作系统,如果只要求有一定的结果,则操作系统只需对系统资源进行管理并响应用户的操作动作即可。对于实时操作系统,则必须及时响应用户操作。随着任务量的增大和资源的增加,实时操作系统既要进行多任务处理和共享资源的管理,又要及时响应用户的操作,从而对实时操作系统的性能提出了更高的要求。
操作系统一般由进程调度管理、资源管理、进程同步和通信、时间控制等几部分组成。实时操作系统对时序的偏差要求很强,因此定时器调度作为实时操作系统时间管理的核心就十分重要。
在网络通信中,一次通信过程需要多个定时器来完成不同的计时任务。当同时通信的用户数增加时,所需定时器的数目急剧增加。如果定时器的调度方法效率低,则会因定时器数目太大而造成定时处理耗用系统资源过大,延长对用户的反应时间,影响定时精度,进而影响整个系统的性能。因此,定时器调度方法的效率高低是反映实时操作系操性能的重要指标之一。
定时器的时钟来源于硬件时钟中断。时钟中断会每隔一定周期产生,该周期为最小计时时长,即定时器的计时精度,对硬件时钟的中断处理称为计时周期。
目前定时器的调度方法很多,主要有以下三种类型第一种类型参见附图2,所有的定时器按照到期时间的先后排成一个顺序链表。在每个计时周期,链表指针后移一个节点,然后考察当前的链表节点如果没有定时器到期,则等下一个计时周期;如果有定时器到期,就执行该节点上所有定时器的任务并删除对应的定时器。这种计时方法称为简单计时法。
第二种类型参见附图3,定时器按到期的时间长度线性分段,比如按0~99、100~199、200~299、……进行分段,每个定时器在自己所属的时段中进行排序,这样可以减少排序的数量。对定时器的处理与类型一相同。
第三种类型参见附图4,定时器按到期的时间长度非线性分段,比如按0~3、4~7、8~15、16~31、…分段,区间长度呈指数上升,与类型二相比这种类型可以进一步减少分段数目。对定时器的处理与类型一相同。
上述三种类型中,对定时器的调度过程也就是确定新定时器加入到链表的哪一个节点上的过程。其中第一种类型不额外占用系统资源,对定时器的操作和判断几乎不费时间,但是增加新定时器时需要花费较长时间对所有定时器重新进行排序;第二种类型虽然排序操作次数有了一定的减小,但是与第一种类型相比本质不变,当需要加入到期时间为100000的定时器时,至少需要1000个分段,即1000个节点,其效率仍然很低。第三种的算法在第二种的基础上进行了一些改进,减少了分段的个数,计时效率有一定的提高,但是每当新增定时器时,必须对当前所有定时器重新进行分段,增加了不必要的操作,降低了效率。

发明内容
本发明所要解决的技术问题是提供一种分段排序的实时多任务操作系统的定时器调度方法,它克服了现有实时操作系统定时器调度方法中存在大量冗余操作和重复排序操作的缺点,提高了定时效率,而且具有伸缩性,适用于不同规模的实时操作系统。
本发明解决上述技术问题所采用的技术方案包括以下环节1)设置M个循环链表,M为不小于2的整数;2)循环链表的初始化根据设置的循环链表的个数M,建立M个循环链表,这些循环链表构成类似于时钟的结构计时间隔最短的循环链表为第一循环链表(T1),它等分成N1个节点,依次编号0~N1-1,相邻节点的时间间隔等于操作系统定时器的计时周期τ;第二循环链表(T2)等分成N2个节点,依次编号0~N2-1,相邻节点间的时间间隔等于第一循环链表T1的循环周期N1τ;第三循环链表(T3)等分成N3个节点,依次编号0~N3-1,相邻节点间的时间间隔等于第二循环链表T2的循环周期N2N1τ;以此类推,其余循环链表的结构及关系与此类似,可分别称之为第四循环链表(T4)、第五循环链表(T5)、第六循环链表(T6)等等,各循环链表内的节点数目相等或不等;3)新定时器的加入上层应用程序产生新定时器任务时,首先计算新定时器的设定时间与当前时刻的间隔D;如果新定时器的设定时间在第M循环链表TM的第NM-1号节点的计时范围外,即D>N1N2…(NM-1)τ,就将新定时器加到第M循环链表TM的第NM-1号节点上;否则根据D的大小按如下步骤将新定时器加入到某个循环链表的恰当节点上;①置i=M,记从T1到TM各循环链表的当前节点编号依次为A1、A2、…、AM;②计算 即Q为商的整数部分;③如果Q=0,且i>1,则i=i-1,返回步骤②;④将新定时器加入到循环链表Ti的第n号节点上,n=[(Q+Ai)mod Ni],即n为(Q+Ai)除以Ni的余数;结束新定时器的加入操作。
4)定时器位置的调度更新在每个计时周期,第一循环链表T1的指针向后移动一个节点,然后考察当前指向的节点如果当前节点上没有定时器,就等下一个计时周期;如果当前节点上有定时器,就执行这个节点上所有定时器的任务并删除对应的定时器;当第一循环链表T1的指针移动N1次完成一个循环后,T1的指针重新指向0号节点,同时将第二循环链表T2的指针移动一个节点,并将新指向节点上的所有定时器按如下步骤分别转移到第一循环链表T1的相应节点上①计算定时器设定时间与当前时刻的差D;②计算R=D mod N1,即R为D除以N1的余数;③将定时器加入到T1的R号节点上。
其它循环链表的更新依此类推;当循环链表TM的指针指向第NM-1号节点时,对该节点上设定到期时刻与当前时刻的差D<N1N2…(NM-1)τ的那部分定时器按新定时器的加入方法转移到其它链表的节点上,对不符合上述条件的其它定时器不作改变,然后将表TM的指针移动到0号节点。
采用本发明所述的多循环队列定时器调度方法,经过模拟测试,与现有技术相比,定时器在各种负载下的平均性能提高10倍以上,达到了高性能、高效率、高均衡性的统一,并且实现简单,节省了实时操作系统的定时器管理、调度所需的计算资源。


图1为本发明实施例中的定时器循环链表结构示意图。
图2为第一种现有技术的定时器调度方法示意图。
图3为第二种现有技术的定时器调度方法示意图。
图4为第三种现有技术的定时器调度方法示意图。
具体实施例方式
以下结合附图实施例对发明作进一步详细描述。
由于定时器的排序查找与一般的情形不同,处理器最关心当前到期的定时器,对以后到期的定时器以后再关心。因此,没有必要对很长时间以后的定时器进行排序,只需要把最近有限时间内的定时器安排好就行了。
因此,根据定时器的定时长度进行分组,如图1所示,为本发明调度定时器的循环链表的一个实施例假定循环链表个数M为4,M个循环链表按定时间隔由短到长排序,依次记为T1,T2,…,T4(即TM),各循环链表中节点数分别取为N1=8,N2=8,N3=4,N4=4,它们的结构与时钟相似。每个链表的指针是Index[i],循环链表上每个圆点代表一个节点Vor[i],每个节点Vor[i]上都可以挂一串定时器。当指针走到某个Vor[i]时,就对该节点上所有定时器进行有关的处理。T1是最基本的循环链表,在每个时钟周期,T1的指针移动一个节点,执行节点上挂的定时器对应的任务。T1的指针完成一次循环后,T2的指针移动一个节点从而指向T2.Vor[4],该节点上的四个定时器依设定的时间按定时器位置调度更新方法中所述的步骤挂接到T1的相应节点上去,这样当T1的指针移动时会依次执行定时器的任务。其它循环链表的更新依此类推。
如果把第一循环链表T1称为‘秒表’,第二循环链表T2称为‘分表’的话,上述关于定时器的调度方法可描述为首先依次执行当前‘秒表’上所有‘秒’的定时器任务;过了一‘分’后,将下一个‘分’节点(T2.Vor[4])的所有定时器以‘秒’为单位转移到‘秒表’T1的相应节点上;同理,当‘分表’T2完成一次循环指向0号节点时,将‘时表’T3下一个‘时’节点(T3.Vor[3])上的所有定时器以‘分’为单位转移到‘分表’T2的相应节点上,并继续把‘分表’T2当前节点(即T2.Vor
)上的所有定时器以‘秒’为单位转移到‘秒表’T1的相应节点上;依此类推。当某一定时器到期时,操作系统执行完定时器相应的任务后会自动删除该定时器。
插入新定时器时,需要考察插入定时器的设定时间。记新定时器的设定时间与当前时刻的时间间隔为D。如果D在一‘分’内(即D<N1τ),则直接将新定时器加入到T1的某个节点上,新节点编号=(T1的当前节点编号+时间差值D)/N1的余数;如果D长于一‘分’但短于一‘时’(N1τ<D<N1N2τ),则将新定时器加入到T2的某个节点上,新节点编号=(T2当前节点编号+时间差值D/N1的整数部分)/N2的余数;其余依此类推;如果D>N1N2…(NM-1)τ,则将新定时器加入到第M个循环链表TM的第NM-1号节点上。
综上所述,本发明采用多循环队列的时钟结构进行定时器的调度,实现简单,在空间和时间上效率都很高,节省了系统的资源。
权利要求
1.一种实时多任务操作系统的定时器调度方法,其特征在于包括以下环节1)设置M个循环链表,M为不小于2的整数;2)循环链表的初始化根据设置的循环链表的个数M,建立M个循环链表,这些循环链表构成类似于时钟的结构计时间隔最短的循环链表为第一循环链表(T1),它等分成N1个节点,依次编号0~N1-1,相邻节点的时间间隔等于操作系统的定时器的计时周期τ;第二循环链表(T2)等分成N2个节点,依次编号0~N2-1,相邻节点间的时间间隔等于第一循环链表T1的循环周期N1τ;第三循环链表(T3)等分成N3个节点,依次编号0~N3-1,相邻节点间的时间间隔等于第二循环链表T2的循环周期N2N1τ;以此类推,余下循环链表的结构及关系与此类似,可分别称之为第四循环链表(T4)、第五循环链表(T5)、第六循环链表(T6)等等,各循环链表内的节点数目相等或不等;3)新定时器的加入上层应用程序产生新定时器任务时,首先计算新定时器的设定时间与当前时刻的间隔D;如果新定时器的设定时间在第M循环链表TM的第NM-1号节点的计时范围外,即D>N1N2…(NM-1)τ,就将新定时器加到第M循环链表TM的第MM-1号节点上;否则根据D的大小按如下步骤将新定时器加入到某个循环链表的恰当节点上;①置i=M,记从T1到TM各循环链表的当前节点编号依次为A1、A2、...、AM;②计算 即Q为商的整数部分;③如果Q=0,且i>1,则i=i-1,返回步骤②;④将新定时器加入到循环链表Ti的第n号节点上,n=[(Q+Ai)mod Ni],即n为(Q+Ai)除以Ni的余数;结束新定时器的加入操作。4)定时器位置的调度更新在每个计时周期,第一循环链表T1的指针向后移动一个节点,然后考察当前指向的节点如果当前节点上没有定时器,就等下一个计时周期;如果当前节点上有定时器,就执行这个节点上所有定时器的任务并删除对应的定时器;当第一循环链表T1的指针移动N1次完成一个循环后,T1的指针重新指向0号节点,同时将第二循环链表T2的指针移动一个节点,并将新指向节点上的所有定时器按如下步骤分别转移到第一循环链表T1的相应节点上①计算定时器设定时间与当前时刻的差D;②计算R=D mod N1,即R为D除以N1的余数;③将定时器加入到T1的R号节点上。其它循环链表的更新依此类推。
2.如权利要求1所述的定时器调度方法,其特征在于还包括以下环节当循环链表TM的指针指向第NM-1号节点时,对该节点上设定到期时刻与当前时刻的差D<N1N2…(NM-1)τ的那部分定时器按新定时器的加入方法转移到其它链表的节点上,对不符合上述条件的其它定时器不作改变,然后将表TM的指针移动到0号节点。
全文摘要
本发明提供一种实时操作系统中基于时钟结构的定时器调度方法,包括建立M个循环链表,按定时间隔由短到长依次标记为T
文档编号G06F9/46GK1645334SQ20051004894
公开日2005年7月27日 申请日期2005年1月12日 优先权日2005年1月12日
发明者何加铭, 聂秋华, 徐铁峰, 曾兴斌, 邓青玲, 朱风波 申请人:宁波大学, 宁波新然电子信息科技发展有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1