CN101833478A - 一种基于Alarm的调度表实现方法 - Google Patents

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

Info

Publication number
CN101833478A
CN101833478A CN 201010186875 CN201010186875A CN101833478A CN 101833478 A CN101833478 A CN 101833478A CN 201010186875 CN201010186875 CN 201010186875 CN 201010186875 A CN201010186875 A CN 201010186875A CN 101833478 A CN101833478 A CN 101833478A
Authority
CN
China
Prior art keywords
alarm
dispatch list
list
point
ordered
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 201010186875
Other languages
English (en)
Inventor
李红
吴朝晖
王铸
张成硕
周丽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN 201010186875 priority Critical patent/CN101833478A/zh
Publication of CN101833478A publication Critical patent/CN101833478A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及操作系统的任务调度机制,属于操作系统任务调度方法技术领域,特指一种基于Alarm的调度表实现方法,其特点是在现有通用Alarm的基础上设计一种特殊Alarm,并基于此设计实现调度表的方法,基于通用Alarm和特殊Alarm设计在操作系统中的EP点插入方法;与现有技术相比,其能够一次激活多个任务,运行时间间隔更加灵活,应用前景十分广阔。

Description

一种基于Alarm的调度表实现方法
技术领域
本发明涉及操作系统任务调度方法技术领域,特别涉及操作系统的任务调度机制,是一种基于Alarm的调度表实现方法。
背景技术
Alarm(警报,或是闹钟)是处理操作系统中重复事件的一种现有机制。比如计时器重复产生中断,或者译码器在转轴转动了一个角度产生一个中断,这些事件被特殊的计时器记录,Alarm的实现就是基于计时器的。一个Alarm与一个计时器关联,但是一个计时器可以关联多个Alarm。每个Alarm中有一个到期时间,当一个Alarm到达用户配置好的时间点,就会处理用户配置的事件,比如激活任务、为任务设置事件、调用回调函数或者增加计时器的当前计数值。而且一个Alarm到期只能做这四种事件当中的一件。
调度表是操作系统中一种基于时间触发的任务调度方式,系统运行时根据调度表的配置来调度任务。用户根据时间约束指定每个任务、事件的激活时刻并以调度表的形式进行配置。在一个调度表上会有一个或多个EP(Expiry Point,到期点,终止点),每个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(special)而实现的,一次可以激活多个任务,同时为多个任务设置事件。这里的Alarm(special)的作用区别于Alarm(norm),是用来处理调度表中的EP点。当Alarm(special)到期,就会激活一个EP点,然后进入到EP点的执行中,而EP点中可能会激活多个任务和设置多个事件。这样,Alarm(special)比Alarm(norm)能处理的事情更多。并且,Alarm(norm)是一次运行的或者是周期性运行的。也就是说,Alarm(norm)运行时间间隔是固定的。而调度表的Alarm是根据调度表上的下一个EP点来确定下次运行时间,它的运行时间间隔并不是固定的,较之Alarm(norm)更加灵活。Alarm(norm)可以做的事情比较多,当它到期时,操作系统需要判断它的作用;而Alarm(special)的作用只有处理调度表。将Alarm(special)从Alarm(norm)中独立出来,能降低程序的耦合度。所以,调度表使用的是Alarm(special),而不是Alarm(norm)。Alarm(special)的数据结构说明如下表:
  变量名称   描述
  counter   Alarm指向计时器的指针
  delta   下一个触发点的tick值
  ScheduleTableId   关联的调度表id
表1Alarm(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为10ticks,FinalDelay为10ticks,非重复执行,无后续的调度表。调度表1的第一个EP点激活任务Task1,不设置事件,Offset值为5ticks;第二个EP点激活任务Task2,不设置事件,Offset值为15ticks。调度表2的第一个EP点的Offset值为10ticks,激活任务Task3,不设置事件;第二个EP点的Offset值为25ticks,激活任务Task4,不设置事件。为了检验调度表中的EP点是否按时执行以及两个调度表运行的时间间隔是否正确,用户可以在Task1,Task2,Task3和Task4中打印出任务运行时驱动计时器的时间,时间序列为(假设驱动计时器从零开始运行调度表1):
1(Oticks,调度表1开始运行)
25ticks//调度表1的EP1执行,激活Task1
315ticks//调度表1的EP2执行,激活Task2
4(20ticks,调度表1运行结束,调度表2开始运行)
530ticks//调度表2的EP1执行,激活Task3
645ticks//调度表2的EP2执行,激活Task4
7(55ticks,调度表2运行结束)
上面以举例方式对本发明进行了说明,但本发明不限于上述具体实施例,凡基于本发明所做的任何改动或变型均属于本发明要求保护的范围。

Claims (8)

1.一种基于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相互独立。
CN 201010186875 2010-05-28 2010-05-28 一种基于Alarm的调度表实现方法 Pending CN101833478A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010186875 CN101833478A (zh) 2010-05-28 2010-05-28 一种基于Alarm的调度表实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010186875 CN101833478A (zh) 2010-05-28 2010-05-28 一种基于Alarm的调度表实现方法

Publications (1)

Publication Number Publication Date
CN101833478A true CN101833478A (zh) 2010-09-15

Family

ID=42717555

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010186875 Pending CN101833478A (zh) 2010-05-28 2010-05-28 一种基于Alarm的调度表实现方法

Country Status (1)

Country Link
CN (1) CN101833478A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105138401A (zh) * 2015-08-07 2015-12-09 黑龙江大学 基于线性链表的实时任务可调度性测试直接模拟方法
CN105224400A (zh) * 2015-08-07 2016-01-06 黑龙江大学 采用线性链表记录实时任务调度过程的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216786A (zh) * 2007-01-05 2008-07-09 三星电子株式会社 在实时操作系统中调度任务的方法、介质和设备
CN101320337A (zh) * 2008-07-16 2008-12-10 北京中星微电子有限公司 一种定时器及其实现方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216786A (zh) * 2007-01-05 2008-07-09 三星电子株式会社 在实时操作系统中调度任务的方法、介质和设备
CN101320337A (zh) * 2008-07-16 2008-12-10 北京中星微电子有限公司 一种定时器及其实现方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105138401A (zh) * 2015-08-07 2015-12-09 黑龙江大学 基于线性链表的实时任务可调度性测试直接模拟方法
CN105224400A (zh) * 2015-08-07 2016-01-06 黑龙江大学 采用线性链表记录实时任务调度过程的方法
CN105224400B (zh) * 2015-08-07 2019-03-22 黑龙江大学 采用线性链表记录实时任务调度过程的方法
CN105138401B (zh) * 2015-08-07 2019-08-30 黑龙江大学 基于线性链表的实时任务可调度性测试直接模拟方法

Similar Documents

Publication Publication Date Title
CN106293919B (zh) 一种时间触发的嵌入式任务调度装置与方法
CN102455940A (zh) 一种定时器和异步事件的处理方法及系统
CN101272564B (zh) 一种软实时定时器调度的方法及软实时定时器模块
CN101320337A (zh) 一种定时器及其实现方法
CN103092682A (zh) 异步网络应用程序处理方法
CN110119323A (zh) 一种基于时间轮执行延迟队列的方法及系统
CN102004663B (zh) 一种多任务并发调度的系统及方法
CN101882089A (zh) 一种采用多线程处理业务会话应用的方法及装置
CN1595368A (zh) 多任务系统的异常监控装置及其方法
CN103491174A (zh) 基于延迟服务器的周期/非周期混合实时任务调度方法
CN101833478A (zh) 一种基于Alarm的调度表实现方法
CN104536835A (zh) 一种热备份实时控制系统中自适应任务调度方法
CN104391696A (zh) 一种自动任务处理方法及装置
CN101217418B (zh) 用于网络性能测试的多任务调度方法
CN101458640B (zh) 可监控多线程状态的系统及其监控方法
CN102750149B (zh) 调度表的实现方法及系统
CN1710543A (zh) 一种用于嵌入式实时操作系统定时器的两级定时方法
CN102573073A (zh) 一种终端物理层资源分配方法及系统
CN1556654A (zh) 软件定时器的定时及控制方法
CN101349975B (zh) 一种在嵌入式操作系统上实现中断底半部机制的方法及装置
CN104050030A (zh) 一种操作系统进程调度方法
CN102279731A (zh) 一种实现单步执行的方法
CN100474265C (zh) 微处理器占用率的统计方法
CN103999004B (zh) 用于在加工机的不同的工件加工运行模式之间转换的方法
CN104391783A (zh) 一种软件调试方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20100915