一种基于Alarm的调度表实现方法

文档序号:6603261阅读:229来源:国知局

专利名称::一种基于Alarm的调度表实现方法
技术领域
:本发明涉及操作系统任务调度方法
技术领域
,特别涉及操作系统的任务调度机制,是一种基于Alarm的调度表实现方法。
背景技术
:Alarm(警报,或是闹钟)是处理操作系统中重复事件的一种现有机制。比如计时器重复产生中断,或者译码器在转轴转动了一个角度产生一个中断,这些事件被特殊的计时器记录,Alarm的实现就是基于计时器的。一个Alarm与一个计时器关联,但是一个计时器可以关联多个Alarm。每个Alarm中有一个到期时间,当一个Alarm到达用户配置好的时间点,就会处理用户配置的事件,比如激活任务、为任务设置事件、调用回调函数或者增加计时器的当前计数值。而且一个Alarm到期只能做这四种事件当中的一件。调度表是操作系统中一种基于时间触发的任务调度方式,系统运行时根据调度表的配置来调度任务。用户根据时间约束指定每个任务、事件的激活时刻并以调度表的形式进行配置。在一个调度表上会有一个或多个EP(ExpiryPoint,到期点,终止点),每个EP点完成的事情是激活任务或者设置事件,而且,在一个EP点可以同时激活多个任务和设置多个事件。调度表的结构如图1所示。调度表的运行时间称为持续时间(Duration),调度表上有一些EP点,每个EP点在调度表上有一个Offset,也就是EP点在调度表上的偏移量,其是由用户定义的,当然,这个Offset的值不能超过它所在调度表的Duration。第一个EP点距离调度表起始端的距离称为InitialOffset,最后一个EP点距离调度表末端的距离称为FinalDelay。每个调度表至少包含一个EP点。EP点的内容可以是激活任务或者设置事件。综上,一个Alarm只能激活一个任务或者设置一个事件,且其运行时间间隔是固定的;而在操作系统(OS)中实现调度表是势在必行的,调度表上的一个EP点就需要同时激活多个任务和设置多个事件,并且一个调度表可能会有多个EP点,其运行时间间隔需要灵活调整。所以,如何很好地解决Alarm与调度表的融合这一技术问题,成为本领域技术人员函待解决的技术难题。
发明内容本发明的目标是设计一种方法,其能够基于Alarm实现调度表,该方法包括如下步骤1)调度表开始运行,特殊Alarm将到期时间设置成第一个EP点的执行时间;2)特殊Alarm到期,激活EP点,EP点开始执行;特殊Alarm将到期时间设置成下一个EP点的执行时间,按照EP点的偏移量顺序往后执行;3)当执行完最后一个EP点,操作系统会判断调度表是否是重复执行的;如果是重复执行的,特殊Alarm将到期时间设置成第一个EP点的执行时间,调度表从头开始运行;4)如果不是重复执行的,操作系统会判断是否存在下一个调度表,如果存在,则将特殊Alarm的到期时间设置成下一个调度表的第一个EP点的执行时间,当前调度表执行完之后,下一个调度表开始执行;5)如果不存在下一个调度表,则该调度表运行结束。优选地,所述的特殊Alarm的数据结构中包括Alarm指向计时器的指针。优选地,所述的特殊Alarm的数据结构中包括下一个触发点的tick值(跳动点)。优选地,所述的特殊Alarm的数据结构中包括关联的调度表id(标识)。本发明还公开了一种将EP点插入到计时器、以便在操作系统中实施基于Alarm实现调度表的方法,其特征在于,具体包括以下步骤1计时器向前运行;2与计时器对应的Alarm链表的链表头的Alarm到期;3操作系统判断到期的Alarm类型;4如果是通用Alarm,则处理Alarm中的事情;5如果是特殊Alarm,就会激活Alarm对应的EP点,进入到EP点的执行过程;6然后判断执行的EP点在其对应的调度表上是否存在下一个EP点;7如果存在,则将Alarm的到期时间变成下一个EP点的执行时间,然后按照到期时间插入到计时器的链表中;8如果是调度表上的最后一个EP点,这时会判断调度表是否重复执行;9如果是重复执行的,则将Alarm的到期时间变成第一个EP点的执行时间,并且按照到期时间插入到对应的链表中;10如果不是重复执行的,操作系统会判断是否存在下一个调度表;11如果存在下一个调度表,则将Alarm的到期时间变成下一个调度表的第一个EP点的执行时间,并且按照到期时间插入到链表中;12如果不存在下一个调度表,那么从链表中删除这个Alarm。优选地,步骤4中所述的处理Alarm中的事情是指,调用回调函数、激活任务或者设置事件。优选地,步骤4中所述的处理Alarm中的事情是指,每次只能处理Alarm中的一件事情。优选地,所述特殊Alarm与通用Alarm相互独立。本发明与现有的方法相比,具备以下优点1.一次可以激活多个任务,处理的事情更多;2.运行时间间隔更加灵活。图1传统的调度表的结构图;图2本发明中的调度表运行流程图;图3本发明在操作系统中的EP点插入流程图;图4本发明中的调度表配置图。具体实施例方式下面结合附图1-4,对本发明的基于Alarm的调度表实现方法作详细阐述。一个调度表对应一个Alarm和一个驱动计时器。调度表和它的对应的Alarm都在这个驱动计时器上运行,也就是说,调度表运行的绝对时间就是它对应的驱动计时器上指示的时间。还有,调度表对应的Alarm是特殊的Alarm,而不是普通的Alarm。为了方便说明,这里将普通的Alarm表示为Alarm(norm),命名为通用Alarm;特殊的Alarm表示为Alarm(special),命名为特殊Alarm。Alarm(norm)可以做的事情是调用回调函数,激活任务或者设置事件。但是每次只能激活一个任务或者设置一个事件。我们实现的调度表是基于Alarm(SpeciaI)而实现的,一次可以激活多个任务,同时为多个任务设置事件。这里的Alarm(Special)的作用区别于Alarm(norm),是用来处理调度表中的EP点。当Alarm(Special)到期,就会激活一个EP点,然后进入到EP点的执行中,而EP点中可能会激活多个任务和设置多个事件。这样,Alarm(special)比Alarm(norm)能处理的事情更多。并且,Alarm(norm)是一次运行的或者是周期性运行的。也就是说,Alarmfcorm)运行时间间隔是固定的。而调度表的Alarm是根据调度表上的下一个EP点来确定下次运行时间,它的运行时间间隔并不是固定的,较之Alarm(norm)更加灵活。Alarmfcorm)可以做的事情比较多,当它到期时,操作系统需要判断它的作用;而Alarm(Special)的作用只有处理调度表。将Alarm(Special)从Alarm(norm)中独立出来,能降低程序的耦合度。所以,调度表使用的是Alarm(Special),而不是Alarm(norm)。Alarm(special)的数据结构说明如下表<table>tableseeoriginaldocumentpage5</column></row><table>表lAlarm(special)的数据结构调度表可以设置成一次执行或者重复执行,还可以设置后续的调度表,也就是当前的调度表运行完之后需要运行的调度表。具体的调度表的运行过程见图2,其包括如下步骤1)调度表开始运行的时候,Alarm(special)将到期时间设置成第一个EP点的执行时间;2)Alarm(Special)到期,激活EP点,EP点开始执行。然后Alarm(Special)会将到期时间设置成下一个EP点的执行时间,就这样按照EP点的Offset顺序往后执行;3)当执行完最后一个EP点,操作系统会判断调度表是否是重复执行的;如果是重复执行的,Alarm(special)将到期时间设置成第一个EP点的执行时间。调度表从头开始运行;4)如果不是重复执行的,操作系统会判断是否存在下一个调度表,如果存在,则将Alarm(special)的到期时间设置成下一个调度表的第一个EP点的执行时间。那么当前调度表执行完之后,下一个调度表就会开始执行;5)如果不存在下一个调度表,那么该调度表运行结束。而在实际操作系统(OS)中,每个调度表对应于一个驱动计时器,也就是在一个驱动计时器上运行。每个驱动计时器有一个Alarm链表。由于操作系统对于Alarm(Special)和Alarm(norm)是统一处理的,所以,在将该方法应用到操作系统时,驱动计时器的Alarm链表上会既有Alarm(special),又有Alarm(norm),计时器上的Alarm是按照到期时间排序的。具体的EP点插入到计时器的Alarm链表的过程见图3。1计时器向前运行;2与计时器对应的Alarm链表的链表头的Alarm到期;3操作系统判断到期的Alarm类型;4如果是Alarm(norm),则处理Alarm中的事情;5如果是调度表类型的Alarm,就会激活Alarm对应的EP点,进入到EP点的执行过程;6然后判断执行的EP点在其对应的调度表上是否存在下一个EP点;7如果存在,则将Alarm的到期时间变成下一个EP点的执行时间,然后按照到期时间插入到计时器的链表中;8如果是调度表上的最后一个EP点,这时会判断调度表是否重复执行;9如果是重复执行的,则将Alarm的到期时间变成第一个EP点的执行时间,并且按照到期时间插入到对应的链表中;10如果不是重复执行的,操作系统会判断是否存在下一个调度表;11如果存在下一个调度表,则将Alarm的到期时间变成下一个调度表的第一个EP点的执行时间,并且按照到期时间插入到链表中;12如果不存在下一个调度表,那么从链表中删除这个Alarm。如图4,用户可以自行配置两个调度表。将调度表1和调度表2的驱动计时器和Alarm(special)都设置为同一个。调度表1包含两个EP点,持续时间为20ticks,它的InitialOffset为5ticks,FinalDelay为5ticks,非重复执行;后续的调度表为调度表2,调度表2也包含两个EP点,InitialOffset为IOticks,FinalDelay为lOticks,非重复执行,无后续的调度表。调度表1的第一个EP点激活任务Taskl,不设置事件,Offset值为5ticks;第二个EP点激活任务Task2,不设置事件,Offset值为15ticks。调度表2的第一个EP点的Offset值为lOticks,激活任务Task3,不设置事件;第二个EP点的Offset值为25ticks,激活任务Task4,不设置事件。为了检验调度表中的EP点是否按时执行以及两个调度表运行的时间间隔是否正确,用户可以在Taskl,Task2,Task3和Task4中打印出任务运行时驱动计时器的时间,时间序列为(假设驱动计时器从零开始运行调度表1)1(0ticks,调度表1开始运行)25ticks//调度表1的EPl执行,激活Taskl315ticks//调度表1的EP2执行,激活Task24(20ticks,调度表1运行结束,调度表2开始运行)530ticks//调度表2的EPl执行,激活Task3645ticks//调度表2的EP2执行,激活Task47(55ticks,调度表2运行结束)上面以举例方式对本发明进行了说明,但本发明不限于上述具体实施例,凡基于本发明所做的任何改动或变型均属于本发明要求保护的范围。权利要求一种基于Alarm的调度表实现方法,其特征在于,具体包括以下步骤1)调度表开始运行,特殊Alarm将到期时间设置成第一个EP点的执行时间;2)特殊Alarm到期,激活EP点,EP点开始执行;特殊Alarm将到期时间设置成下一个EP点的执行时间,按照EP点的偏移量顺序往后执行;3)当执行完最后一个EP点,操作系统会判断调度表是否是重复执行的;如果是重复执行的,特殊Alarm将到期时间设置成第一个EP点的执行时间,调度表从头开始运行;4)如果不是重复执行的,操作系统会判断是否存在下一个调度表,如果存在,则将特殊Alarm的到期时间设置成下一个调度表的第一个EP点的执行时间,当前调度表执行完之后,下一个调度表开始执行;5)如果不存在下一个调度表,则该调度表运行结束。2.根据权利要求1所述的调度表实现方法,其特征在于,所述的特殊Alarm的数据结构中包括Alarm指向计时器的指针。3.根据权利要求1所述的调度表实现方法,其特征在于,所述的特殊Alarm的数据结构中包括下一个触发点的tick值。4.根据权利要求1所述的调度表实现方法,其特征在于,所述的特殊Alarm的数据结构中包括关联的调度表id。5.一种将EP点插入到计时器、以便在操作系统中实施如权利要求1至4中任一方法之一的方法,其特征在于,具体包括以下步骤1计时器向前运行;2与计时器对应的Alarm链表的链表头的Alarm到期;3操作系统判断到期的Alarm类型;4如果是通用Alarm,则处理Alarm中的事情;5如果是特殊Alarm,就会激活Alarm对应的EP点,进入到EP点的执行过程;6然后判断执行的EP点在其对应的调度表上是否存在下一个EP点;7如果存在,则将Alarm的到期时间变成下一个EP点的执行时间,然后按照到期时间插入到计时器的链表中;8如果是调度表上的最后一个EP点,这时会判断调度表是否重复执行;9如果是重复执行的,则将Alarm的到期时间变成第一个EP点的执行时间,并且按照到期时间插入到对应的链表中;10如果不是重复执行的,操作系统会判断是否存在下一个调度表;11如果存在下一个调度表,则将Alarm的到期时间变成下一个调度表的第一个EP点的执行时间,并且按照到期时间插入到链表中;12如果不存在下一个调度表,那么从链表中删除这个Alarm。6.根据权利要求5所述的方法,其特征在于,步骤4中所述的处理Alarm中的事情是指,调用回调函数、激活任务或者设置事件。7.根据权利要求5所述的方法,其特征在于,步骤4中所述的处理Alarm中的事情是指,每次只能处理Alarm中的一件事情。8.根据权利要求5所述的方法,其特征在于,所述特殊Alarm与通用Alarm相互独立。全文摘要本发明涉及操作系统的任务调度机制,属于操作系统任务调度方法
技术领域
,特指一种基于Alarm的调度表实现方法,其特点是在现有通用Alarm的基础上设计一种特殊Alarm,并基于此设计实现调度表的方法,基于通用Alarm和特殊Alarm设计在操作系统中的EP点插入方法;与现有技术相比,其能够一次激活多个任务,运行时间间隔更加灵活,应用前景十分广阔。文档编号G06F9/48GK101833478SQ20101018687公开日2010年9月15日申请日期2010年5月28日优先权日2010年5月28日发明者吴朝晖,周丽,张成硕,李红,王铸申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1