CN101833478A - 一种基于Alarm的调度表实现方法 - Google Patents
一种基于Alarm的调度表实现方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 26
- 238000012545 processing Methods 0.000 claims description 7
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 230000007246 mechanism Effects 0.000 abstract description 3
- 238000012966 insertion method Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 4
- 101150039208 KCNK3 gene Proteins 0.000 description 3
- 101150083764 KCNK9 gene Proteins 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 238000010009 beating Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
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到期只能做这四种事件当中的一件。
调度表是操作系统中一种基于时间触发的任务调度方式,系统运行时根据调度表的配置来调度任务。用户根据时间约束指定每个任务、事件的激活时刻并以调度表的形式进行配置。在一个调度表上会有一个或多个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相互独立。
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216786A (zh) * | 2007-01-05 | 2008-07-09 | 三星电子株式会社 | 在实时操作系统中调度任务的方法、介质和设备 |
CN101320337A (zh) * | 2008-07-16 | 2008-12-10 | 北京中星微电子有限公司 | 一种定时器及其实现方法 |
-
2010
- 2010-05-28 CN CN 201010186875 patent/CN101833478A/zh active Pending
Patent Citations (2)
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)
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 |
---|---|---|
CN102455940B (zh) | 一种定时器和异步事件的处理方法及系统 | |
CN101859260B (zh) | 用于操作系统中的定时器管理装置和管理方法 | |
CN106293919A (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN102455933B (zh) | 一种通过线程管理提高多任务处理效率的方法 | |
CN101272564B (zh) | 一种软实时定时器调度的方法及软实时定时器模块 | |
CN110119323A (zh) | 一种基于时间轮执行延迟队列的方法及系统 | |
CN101320337A (zh) | 一种定时器及其实现方法 | |
CN103092682A (zh) | 异步网络应用程序处理方法 | |
CN102004663B (zh) | 一种多任务并发调度的系统及方法 | |
CN101923487A (zh) | 一种综合嵌入式实时周期任务调度方法 | |
CN103019805A (zh) | 一种多线程环境下定时器的设置方法 | |
CN104536835A (zh) | 一种热备份实时控制系统中自适应任务调度方法 | |
CN101833478A (zh) | 一种基于Alarm的调度表实现方法 | |
CN101217418B (zh) | 用于网络性能测试的多任务调度方法 | |
CN101458640B (zh) | 可监控多线程状态的系统及其监控方法 | |
CN102750149B (zh) | 调度表的实现方法及系统 | |
CN102573073A (zh) | 一种终端物理层资源分配方法及系统 | |
CN1710543A (zh) | 一种用于嵌入式实时操作系统定时器的两级定时方法 | |
CN104050030A (zh) | 一种操作系统进程调度方法 | |
CN103631647A (zh) | 一种实现分布式事务的方法和装置 | |
CN201248336Y (zh) | 机场驱鸟器装置 | |
CN102279731A (zh) | 一种实现单步执行的方法 | |
CN109753314A (zh) | 一种可配置的流程自动执行方法及系统 | |
CN100474265C (zh) | 微处理器占用率的统计方法 | |
CN103999004B (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 |