CN103257892A - 一种基于宏组合的多任务调度方法及系统 - Google Patents
一种基于宏组合的多任务调度方法及系统 Download PDFInfo
- Publication number
- CN103257892A CN103257892A CN201310199659XA CN201310199659A CN103257892A CN 103257892 A CN103257892 A CN 103257892A CN 201310199659X A CN201310199659X A CN 201310199659XA CN 201310199659 A CN201310199659 A CN 201310199659A CN 103257892 A CN103257892 A CN 103257892A
- Authority
- CN
- China
- Prior art keywords
- task
- grand
- follow
- work
- task scheduling
- 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.)
- Granted
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及一种基于宏组合的多任务调度方法及系统,所述方法包括任务执行至预定步调点时,任务调度系统保存所述任务的后续步调点并加载休眠时间,任务调度系统读取并判断后续任务的激活状态和休眠时间,都满足则执行该后续任务,任一不满足则继续判断后续任务,直到任务执行到结束点,不再被任务调度系统调度。本设计使用宏组合来实现系统功能,不使用任务栈,所有任务与系统共享栈,避免系统中存在大量并发任务时的巨大内存需求,有效避免了RTOS实际使用中潜在的任务栈溢出而导致系统崩溃的风险;本方法非常适合于工业控制系统,尤其适用于工业流程类控制,较好的解决系统意外掉电时控制过程的保存和恢复问题。
Description
技术领域
本发明涉及控制领域,尤其涉及一种基于宏组合的多任务调度方法及系统。
背景技术
控制领域一般多使用实时操作系统(Real Time Operating System, 后文简称RTOS)。这类系统实现的基本思想是建立人工堆栈用于保存任务数据并切换寄存器内容来实现任务的并发执行。本质上,单颗CPU核只能顺序执行程序,多任务系统仅是使用各种机制来从宏观上实现并发,微观上任然是顺序执行。
一般来说,RTOS使用系统栈和任务栈来切换任务并保存相关任务产生的现场数据。在控制领域,特别是流程控制方面,RTOS并不一定是最优选择:基于RTOS的系统需要通过入栈出栈来实现任务调度,这种开销很多时候超过了任务本身执行所需时间的数倍,同时需要为每个任务分配任务栈,这导致了不小的资源占用;另一方面,对RTOS中每个任务的栈容量分配是一个经验和反复测试的过程,由于测试的不可完备覆盖性,实际使用中存在任务栈溢出而导致系统奔溃的风险。
现实世界中,工业控制类应用在很多场合都要求意外断电后,系统恢复上电时能够继续流程执行而不是从头开始。使用RTOS,要实现该要求,一般需要将系统栈和所有任务的用户栈全部保存至内部或外部非易失性存储器,以便恢复使用。然而,对于工业控制系统来说,最应该关心地是流程执行的步调和一些过程参数值,而详细的流程断点信息并不重要。因此,从这个角度来说,尤其对于低密度控制器,使用RTOS造成了更多的资源开销。同时,保存所有任务栈信息需要很大的数据量,导致备份电源需要更大的功率。
另一个值得关注的问题是,控制系统中会存在许多对输出和标记位等进行一致性操作的输出函数,这要求RTOS不能在函数执行中切换任务。这种情况下,程序开发人员就必须用加锁语句来保证函数的连续执行。这是传统RTOS的一个不便之处。例如,某系统外部输出全部由CPLD发出,主MCU与CPLD使用系统总线通信。假设某次操作中,同步函数刚修改完某标记位但尚未修改CPLD数据时,任务被切换,由于CPLD通信在后台实时进行,这会使得系统内部数据出现不一致,导致意外发生。此类情况下,程序开发人员必须使用原子操作锁以保证数据一致性。
综上所述,为了更好地满足实际控制系统需要,大幅度降低栈的总需求量和栈使用次数,剔除系统的栈溢出风险。改善传统RTOS的不足,本发明提供了一种基于宏组合的多任务调度方法及系统。
发明内容
本发明要解决的问题是提供一种基于宏组合的多任务调度方法及系统,以弥补现有技术的不足。
为了实现上述目的,本发明采用了以下技术方案:一种基于宏组合的多任务调度方法,包括如下步骤:
a、任务执行至预定步调点时,任务调度系统保存所述任务的后续步调点并加载休眠时间;
b、所述任务调度系统读取并判断所述任务的后续任务的激活状态,如果所述后续任务为激活状态,就执行步骤c,如果所述后续任务不为激活状态,就接着判断所述后续任务的后续任务;
c、所述任务调度系统读取并判断所述任务的后续任务休眠时间,如果所述后续任务的休眠时间满足预定要求,就执行步骤d,如果所述后续任务的休眠时间未满足预定要求,所述任务调度系统就接着判断所述任务序列中的后续任务;
d、载入所述后续任务的后续步调点,并启动所述后续任务;
e、所述后续任务从载入的后续步调点处继续执行,直到所述后续任务结束或到达下一个后续步调点,如果所述后续任务结束,则执行步骤f,如果所述后续任务执行到下一个后续步调点,则执行步骤 a;
f、执行至任务结束点时,所述任务将自身标记为终止,所述任务调度系统不再调度所述任务。
在步骤a之前包括如下步骤:定义用于保存所述任务基本信息的结构类型,包括后续步调、任务状态信息;设计基础任务宏和组合宏;将基础任务宏和组合宏保存在头文件中形成调度内核。
在步骤f中,所述自身标记为终止的任务如果被再次激活,所述任务调度系统会再次调度所述被激活的任务。
所述基础任务宏包括,任务初始化宏、任务启动宏、任务切分宏、任务放弃宏、任务等待宏、任务休眠宏、任务调度宏、子任务等待宏、任务结束宏,所述组合任务宏为上述基础宏的预定组合。
实现这种基于宏组合的多任务调度系统,包括:
任务管理器,用于保存各个任务的任务状态、步调和休眠时间等信息;
任务调度器,用于对任务管理表中的任务轮转判断其激活状态和休眠时间,如果两者都满足就调度任务并同时从所述任务管理表中读取所述任务的步调信息给所述任务,若任一未满足,就轮转后续任务,并在所述任务结束本次运行时将所述任务返回的步调和时间信息写入所述任务管理表中;
时间管理器,用于记录和管理所述任务的延时请求,节拍由几种不同时间值的定时器管理。
所述延时请求包括延时时间单位、延时长度等。
与现有技术相比,本发明的有益效果在于:
本发明所涉及调度器由宏实现,编译时由预处理器展开,可以实现内核函数全内联,而不是传统RTOS中API的函数调用方式,这样可以减少栈的使用,提升系统的抗干扰性和鲁棒性,大大方便了内核的后续维护、升级、以及快速功能扩展等工作。
基于本发明所涉及调度器的任务在架构上相当于状态机,具有明确的输入与输出,有效地避免程序中的潜在逻辑结构错误到导致系统死锁或者崩溃;
不使用任务栈,所有任务与系统共享栈,避免系统中存在大量并发任务时的巨大内存需求,有效避免了RTOS实际使用中潜在的任务栈溢出而导致系统崩溃的风险;本方法非常适合于工业控制系统,尤其适用于工业流程类控制,较好的解决意外系统外掉电的保存和恢复问题。
附图说明
图1为本发明实施例中一种基于宏组合的多任务调度方法的流程图;
图2为本发明的系统结构图。
具体实施方式
本发明实施例提供了一种基于宏组合的多任务调度方法,如图1所示:
步骤一、任务执行至预定步调点时,任务调度系统保存所述任务的后续步调点并加载休眠时间;
步骤二、所述任务调度系统读取并判断所述任务的后续任务的激活状态,如果所述后续任务为激活状态,就执行步骤三,如果所述后续任务不为激活状态,就接着判断所述后续任务的后续任务;
步骤三、所述任务调度系统读取并判断所述任务的后续任务休眠时间,如果所述后续任务的休眠时间满足预定要求,就执行步骤四,如果所述后续任务的休眠时间未满足预定要求,所述任务调度系统就接着判断所述任务序列中的后续任务;
步骤四、载入所述后续任务的后续步调点,并启动所述后续任务;
步骤五、所述后续任务从载入的后续步调点处继续执行,直到所述后续任务结束或到达下一个后续步调点,如果所述后续任务结束,则执行步骤六,如果所述后续任务执行到下一个后续步调点,则执行步骤一;
步骤六、执行至任务结束点时,所述任务将自身标记为终止,所述任务调度系统不再调度所述任务。
在步骤一之前,定义用于保存所述任务基本信息的结构类型,包括后续步调、任务状态信息;设计基础任务宏和组合宏;将所述基础任务宏和组合宏保存在头文件中形成调度内核。
步骤六中所述自身标记为终止的任务如果被再次激活,所述任务调度系统会再次调度所述被激活的任务。
基础任务宏包括:
任务初始化宏,用于初始化任务的结构变量,即将任务结构变量中的步调和状态成员初始化为默认状态;
任务启动宏,用于启动任务实体,即完成步调判断和跳转至预定起始状态;
任务切分宏,用于自动切分任务实体,其核心内容是将源码行号作为任务的下一步调,并更新任务的状态信息以完成任务的自动分割;
任务放弃宏,用于主动放弃本次执行。本宏可以使用任务切分宏并向其传递任务阻塞状态来实现;
任务等待宏,用于将任务挂起直到条件满足。本宏使用任务切分宏并向其传递任务阻塞状态来挂起任务,后对条件参数进行判断来决定何时将任务恢复执行;
任务休眠宏,用于将任务挂起一段时间。本宏通过暗含的任务节拍管理来判断休眠时间满足与否;通过使用任务等待宏来完成任务等待;
任务调度宏,用于向任务分配处理器时间并获得任务状态。该宏展开后应包含完整的任务调用语句并返回任务状态信息;
子任务等待宏,用于启动子任务并等待其执行完成。该宏可以使用任务结构初始化宏、任务调度宏和任务放弃宏并配合任务的返回状态判断来实现;
任务结束宏,用于结束任务执行。本宏可以使用任务切分宏并向其传递任务结束状态来实现;
为了使用调度内核需按照下列步骤操作:
1) 使用前述的系统内核API(应用程序接口)编写任务实现并保存在文件中;
2) 将内核头文件包含在适当的C文件或者C++文件中(主要指步骤1)所指文件,但不限于此);
3) 定义一个静态型无符号长整形变量并赋初始值;
4) 在系统嘀哒定时器的中断服务函数中对步骤3)中的变量递增;
5) 声明任务的结构变量;
6) 在主函数中对任务结构初始化;
7) 在主循环中使用任务调度宏;
8) 多任务开始执行。
本发明实施例提供的实现这种基于宏组合的多任务调度系统,如图2所示,包括:
任务管理器,用于保存各个任务的任务状态、步调和休眠时间等信息;
任务调度器,用于对任务管理表中的任务轮转判断其激活状态和休眠时间,如果两者都满足就调度任务并同时从所述任务管理表中读取所述任务的步调信息给所述任务,若任一未满足,就轮转后续任务,并在所述任务结束本次运行时将所述任务返回的步调和时间信息写入所述任务管理表中;
时间管理器,用于记录和管理所述任务的延时请求,节拍由几种不同时间值的定时器管理。
延时请求包括延时时间单位、延时长度等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (6)
1.一种基于宏组合的多任务调度方法,其特征在于包括如下步骤:
a、任务执行至预定步调点时,任务调度系统保存所述任务的后续步调点并加载休眠时间;
b、所述任务调度系统读取并判断所述任务的后续任务的激活状态,如果所述后续任务为激活状态,就执行步骤c,如果所述后续任务不为激活状态,就接着判断所述后续任务的后续任务;
c、所述任务调度系统读取并判断所述任务的后续任务休眠时间,如果所述后续任务的休眠时间满足预定要求,就执行步骤d,如果所述后续任务的休眠时间未满足预定要求,所述任务调度系统就接着判断所述任务序列中的后续任务;
d、载入所述后续任务的后续步调点,并启动所述后续任务;
e、所述后续任务从载入的后续步调点处继续执行,直到所述后续任务结束或到达下一个后续步调点,如果所述后续任务结束,则执行步骤f,如果所述后续任务执行到下一个后续步调点,则执行步骤a;
f、执行至任务结束点时,所述任务将自身标记为终止,所述任务调度系统不再调度所述任务。
2.根据权利要求1所述的一种基于宏组合的多任务调度方法,其特征在于,步骤a之前包括如下步骤:定义用于保存所述任务基本信息的结构类型,包括后续步调、任务状态信息;设计基础任务宏和组合宏;将所述基础任务宏和组合宏保存于头文件中形成调度内核。
3.根据权利要求2所述的一种基于宏组合的多任务调度方法,其特征在于,所述基础任务宏包括,任务初始化宏、任务启动宏、任务切分宏、任务放弃宏、任务等待宏、任务休眠宏、任务调度宏、子任务等待宏、任务结束宏,所述组合任务宏为所述基础宏的预定组合。
4.根据权利要求1所述的一种基于宏组合的多任务调度方法,其特征在于步骤f中,所述自身标记为终止的任务如果被再次激活,所述任务调度系统会再次调度所述被激活的任务。
5.实现权利要求1的系统,其特征在于包括:
任务管理器,用于保存各个任务的任务状态、步调和休眠时间等信息;
任务调度器,用于对任务管理表中的任务轮转判断其激活状态和休眠时间,如果两者都满足就调度任务并同时从所述任务管理表中读取所述任务的步调信息给所述任务,若任一未满足,就轮转后续任务,并在所述任务结束本次运行时将所述任务返回的步调和时间信息写入所述任务管理表中;
时间管理器,用于记录和管理所述任务的延时请求,节拍由几种不同时间值的定时器管理。
6.如权利要求5所述的系统,其特征在于,所述延时请求包括延时时间单位、延时长度等。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310199659.XA CN103257892B (zh) | 2013-05-27 | 2013-05-27 | 一种基于宏组合的多任务调度方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310199659.XA CN103257892B (zh) | 2013-05-27 | 2013-05-27 | 一种基于宏组合的多任务调度方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103257892A true CN103257892A (zh) | 2013-08-21 |
CN103257892B CN103257892B (zh) | 2016-03-23 |
Family
ID=48961827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310199659.XA Active CN103257892B (zh) | 2013-05-27 | 2013-05-27 | 一种基于宏组合的多任务调度方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103257892B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677814A (zh) * | 2013-11-29 | 2014-03-26 | 广州视源电子科技股份有限公司 | 一种程序获取方法、装置及系统 |
CN104102491A (zh) * | 2014-07-28 | 2014-10-15 | 航天科工深圳(集团)有限公司 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
WO2016177138A1 (zh) * | 2015-08-27 | 2016-11-10 | 中兴通讯股份有限公司 | 一种调度任务的方法、装置及系统 |
CN106557492A (zh) * | 2015-09-25 | 2017-04-05 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1519735A (zh) * | 2003-01-24 | 2004-08-11 | 深圳市中兴通讯股份有限公司 | 嵌入式实时操作系统的进程调度方法 |
US20050172088A1 (en) * | 2004-01-29 | 2005-08-04 | Klingman Edwin E. | Intelligent memory device with wakeup feature |
CN101504619A (zh) * | 2005-04-12 | 2009-08-12 | 学校法人早稻田大学 | 多粒度并行化编译方法 |
CN102387208A (zh) * | 2011-10-21 | 2012-03-21 | 百度在线网络技术(北京)有限公司 | 分布式任务调度方法及任务调度系统 |
-
2013
- 2013-05-27 CN CN201310199659.XA patent/CN103257892B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1519735A (zh) * | 2003-01-24 | 2004-08-11 | 深圳市中兴通讯股份有限公司 | 嵌入式实时操作系统的进程调度方法 |
US20050172088A1 (en) * | 2004-01-29 | 2005-08-04 | Klingman Edwin E. | Intelligent memory device with wakeup feature |
CN101504619A (zh) * | 2005-04-12 | 2009-08-12 | 学校法人早稻田大学 | 多粒度并行化编译方法 |
CN102387208A (zh) * | 2011-10-21 | 2012-03-21 | 百度在线网络技术(北京)有限公司 | 分布式任务调度方法及任务调度系统 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103677814A (zh) * | 2013-11-29 | 2014-03-26 | 广州视源电子科技股份有限公司 | 一种程序获取方法、装置及系统 |
CN104102491A (zh) * | 2014-07-28 | 2014-10-15 | 航天科工深圳(集团)有限公司 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
CN104102491B (zh) * | 2014-07-28 | 2017-07-14 | 深圳航天工业技术研究院有限公司 | 单片机实时任务与耗时任务并行执行的实现方法和系统 |
WO2016177138A1 (zh) * | 2015-08-27 | 2016-11-10 | 中兴通讯股份有限公司 | 一种调度任务的方法、装置及系统 |
CN106557492A (zh) * | 2015-09-25 | 2017-04-05 | 阿里巴巴集团控股有限公司 | 一种数据同步方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103257892B (zh) | 2016-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101266553B (zh) | 基于嵌入式系统的多任务管理方法 | |
WO2017070900A1 (zh) | 多核数字信号处理系统中处理任务的方法和装置 | |
EP2602964A1 (en) | Method, device and equipment for service management | |
CN103473129B (zh) | 线程数目可伸缩的多任务队列调度系统及其实现方法 | |
CN104598426A (zh) | 用于异构多核处理器系统的任务调度方法 | |
US20110307903A1 (en) | Soft partitions and load balancing | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
WO2014110702A1 (zh) | 协同并发式消息总线、主动构件组装模型及构件拆分方法 | |
CN103257892A (zh) | 一种基于宏组合的多任务调度方法及系统 | |
CN103412755A (zh) | 一种硬件实时操作系统 | |
EP1693743A2 (en) | System, method and medium for using and/or providing operating system information to acquire a hybrid user/operating system lock | |
CN109656868B (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
Sakamoto et al. | Grand central dispatch | |
CN112948136A (zh) | 一种嵌入式操作系统异步日志记录的实现方法 | |
CN204302959U (zh) | 一种硬件实时操作系统 | |
Brandenburg | The case for an opinionated, theory-oriented real-time operating system | |
CN110851239B (zh) | 一种type-i型硬实时高可靠性全虚拟化方法 | |
CN112148546A (zh) | 电力系统静态安全分析并行计算系统及方法 | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
Ramisetti et al. | Design of hierarchical thread pool executor for dsm | |
Sagar et al. | Embedded operating systems for real-time applications | |
WO2014110701A1 (zh) | 独立主动构件和可运行主动构件组装模型及构件拆分方法 | |
Kero et al. | Timber as an RTOS for small embedded devices | |
Davis | Introduction to Embedded Systems | |
Vijay | A study of real-time embedded software systems and real-time operating systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |