CN102521045A - 非实时多任务调度内核实现方法 - Google Patents
非实时多任务调度内核实现方法 Download PDFInfo
- Publication number
- CN102521045A CN102521045A CN2011104575748A CN201110457574A CN102521045A CN 102521045 A CN102521045 A CN 102521045A CN 2011104575748 A CN2011104575748 A CN 2011104575748A CN 201110457574 A CN201110457574 A CN 201110457574A CN 102521045 A CN102521045 A CN 102521045A
- Authority
- CN
- China
- Prior art keywords
- task
- time
- kernel
- ready
- 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.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种非实时多任务调度内核实现方法,它通过三个内核数据结构WaitTask、WaitTaskTimer、ActivtTask分别来存储等待任务、等待任务对应的等待时间以及就绪任务,并通过伪时钟节拍来驱动任务实现等待、就绪、运行状态之间的切换,最终实现多任务的调度。伪时钟节拍为内核调度的基本单位,其没有具体的时间涵义,其真实周期与软件的复杂度和计算机速度相关,但远小于其所代表的逻辑时间周期。相比实时内核,本发明的非实时内核实现方法能够充分利用CPU资源,适合在追求运行效率,不要求实时性,而又希望采用多任务方式来进行软件设计的场合使用。
Description
技术领域
本发明涉及一种多任务调度内核实现方法,具体涉及一种非实时的多任务调度内核实现方法,属于计算机技术领域。
背景技术
采用多任务的设计方法,能够简化软件的设计流程,增加软件的模块化程度,提高可维护性。目前,公知的多任务调度内核大多基于实时操作系统,如Vxworks、ucos等,但是在某些应用场合,使用实时内核不利于提高软件的运行效率。例如,在飞行控制系统的仿真验证中,一个仿真用例所对应的物理时间一般为几十分钟甚至几个小时,而进行Monte-Carlo验证时,需要进行上百次仿真。如果采用实时内核,仿真软件的运行时间与其所对应物理相同,开发人员将在仿真上耗费大量的时间,影响开发进度。而事实上,计算机本身具有提高效率的能力,只是大部分时间CPU都处于空闲状态。
发明内容
为了克服实时内核在运行效率上的局限性,本发明提供了一种非实时的多任务调度内核实现方法。该方法能充分利用CPU资源,提高软件运行效率,适合在追求运行效率,不要求实时性,而又希望采用多任务方式来进行软件设计的场合使用。
本发明解决其技术问题所采用的技术方案是:
一种非实时多任务调度内核实现方法,其特征在于通过三个内核数据结构WaitTask、WaitTaskTimer、ActivtTask分别用来存储等待任务、等待任务对应的等待时间以及就绪任务,并通过伪时钟节拍来实现任务在等待、就绪和运行状态之间的切换,从而实现多任务的调度。
其中,实现多任务调度的具体方法是:系统每运行一个伪时钟节拍,WaitTaskTimer中每个任务的等待时间减1,若某个任务的等待时间为0,则将其从WaitTask等待队列中转入ActivtTask就绪队列中,准备运行。就绪队列ActivtTask中的任务运行结束后,再次回到等待队列WaitTask中,同时在WaitTaskTimer中存储该等待任务对应的延时时间,通过以上步骤实现任务在等待、就绪和运行状态之间的循环切换,从而实现多任务的调度。
需要指出的是,内核中的时间都是以伪时钟节拍为基本单位,伪时钟节拍代表一个调度周期,只具有逻辑时间涵义,而不具有物理时间涵义,其所对应的真实时间为将就绪队列中所有任务遍历一遍的时间,与软件的复杂度和计算机的运行速度有关,但是远小于其逻辑时间,这也是非实时内核得以提高软件运行效率的基础。
该方法取得的有益收效是:本发明的非实时多任务调度内核实现方法采用伪时钟节拍来实现任务的调度,充分利用了CPU的运行时间,提高了软件运行效率。适合在追求运行效率,不要求实时性,而又希望采用多任务方式来进行软件设计的场合使用。
附图说明
图1是多任务调度内核数据结构。
图2是多任务调度内核状态图。
图3是等待状态到就绪状态函数流程图
具体实施方式
所谓一个任务,就是一个线程,一个简单程序。对于一个任务具有睡眠、就绪、运行、等待等状态。数据结构WaitTask 、WaitTaskTimer、ActiveTask,用来存储、标志任务和任务状态。图1为三个内核数据结构的示意图。
WaitTask:是一个用来存储等待任务函数指针的数组。通过函数指针能够访问其所对应的任务函数。
WaitTaskTimer:是用来存储对应WaitTask中任务延迟时间的数组,如一个任务的函数指针为fun_ptr,延迟时间为delay_t,存储在WaitTask中的索引idx,则可对数组WaitTask和WaitTaskTimer进行如下操作:
WaitTask[idx]=fun_ptr;
WaitTaskTimer[idx]=delay_t
ActiveTask:是定义的一个栈,用来存储处于就绪状态任务的函数指针,定义head和tail是两个指向ActiveTask数组的指针,其中tail指向栈的底部,head指向栈的顶部。对于ActiveTask的操作如下:
就绪的任务入栈:ActiveTask[head]= fun_ptr
head=head+1;
就绪的任务出栈:fun_ptr= ActiveTask[tail]
tail=tail+1;
WaitTask和WaitTaskTimer结合使用,当WaitTaskTimer[idx]为零时,表示其对应的任务延迟时间已到,任务要由等待状态变成就绪状态,即把WaitTask[idx]的任务名写入到就绪栈ActiveTask中,准备运行。
多任务系统中,内核负责管理各个任务,为每个任务分配运行时间,并且负责任务间通信。一个基本的内核应包含内核初始化、任务创建、任务调度和时间管理等函数,使用这些函数可以实现任务的睡眠状态、就绪状态、等待状态和运行状态等各个状态间的转换,达到对任务调度和切换的目的。非实时多任务调度内核正是由这些基本的任务创建和管理函数构成,图2表示了内核函数对任务的操作过程。
1) 内核初始化
内核初始化函数tmx_init,具体进行如下的操作:
a)定义内核中最大管理的任务数,定义内核的一个时间节拍对应的仿真时间。
b)为WaitTask、WaitTaskTimer 、ActiveTask等数组分配存储空间,并以“空”或 “零”初始化这些数组。
c)定义内核伪时钟节拍与逻辑时间的对应关系,为内核运行的最小时间单位,以此将任务的逻辑延时时间转化为伪时钟节拍数。
内核只有在初始化后才能正常启动,在任务创建和任务调度之前应该首先调用内核初始化函数,完成内核初始化工作。
2) 睡眠到就绪
调用任务创建函数tmx_creat_task(fun_ptr),创建任务,使任务由睡眠态到就绪态。一个任务即对应一个函数。任务创建函数tmx_creat_task传递的是函数指针,即fun_ptr的数据类型为一函数指针。任务创建函数把任务对应的函数指针fun_ptr压入到ActiveTask栈中,同时指向ActiveTask的指针head后移,此时任务变成了就绪状态,准备执行。
3) 就绪到运行
在每个节拍内,检测是否有就绪的任务,如果有,则进行运行。如图2,调用tmx_get_activetask()函数,检测栈ActiveTask,取出栈头和栈尾之间存储的函数句柄,并进行执行,即完成了就绪态任务到运行态的转变。
4) 运行到等待
任务运行完毕后,需要归还CPU资源,任务由运行态转变为等待态,等待下个时间片的到来。如图3所示,时间管理函数tmx_sleep(fun_ptr,milliseconds)实现任务由运行态变为等待态。该函数首先把延迟时间milliseconds转换为伪时钟节拍数,然后把函数句柄fun_ptr和延迟节拍写入到数组WaitTask和WaitTaskTimer中,完成了运行态的任务到等待态的转变。
5) 等待到就绪
当任务完成等待时间,将由等待态转变为就绪态。如图2所示,调用tmx_get_readytask(),其函数流程如图3所示,idx为存储在数组WaitTask中函数句柄的索引,在每个节拍内,首先判断idx是否超出WaitTask数组边界,若超出,则tmx_get_readytask()函数完成一个周期,即已遍历完WaitTask中存储的所有任务句柄,若没有超出,则将WaitTaskTimer[idx]中的存储的延迟节拍减1。然后判断WaitTaskTimer[idx]是否为零:若为零,则说明任务WaitTask[idx]的等待时间结束,将该任务的函数句柄写入到ActiveTask中,完成了任务等待态到就绪态的转变,同时idx加1,判断WaitTask中存储的下一个任务句柄;若不为零,idx直接加1,判断下一个任务句柄。
Claims (3)
1.一种非实时多任务调度内核实现方法,其特征在于通过三个内核数据结构WaitTask、WaitTaskTimer、ActivtTask分别用来存储等待任务、等待任务对应的等待时间以及就绪任务,并通过伪时钟节拍来实现任务在等待、就绪和运行状态之间的切换,从而实现多任务的调度。
2.根据权利要求1所述的非实时多任务调度内核实现方法,其特征在于系统每运行一个伪时钟节拍,WaitTaskTimer中每个任务的等待时间减1,若某个任务的等待时间为0,则将其从WaitTask等待队列中转入ActivtTask就绪队列中,准备运行,
就绪队列ActivtTask中的任务运行结束后,再次回到等待队列WaitTask中,同时在WaitTaskTimer中存储该等待任务对应的延时时间,通过以上步骤实现任务在等待、就绪和运行状态之间的循环切换,从而实现多任务的调度。
3.根据权利要求1或2所述的非实时多任务调度内核实现方法,其特征在于内核运行的基本时间单位为伪时钟节拍,伪时钟节拍不具备真实的物理时间涵义,只具备逻辑时间涵义,一个伪时钟节拍的真实时间为系统将就绪表中所有任务遍历完的时间。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104575748A CN102521045A (zh) | 2011-12-31 | 2011-12-31 | 非实时多任务调度内核实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104575748A CN102521045A (zh) | 2011-12-31 | 2011-12-31 | 非实时多任务调度内核实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102521045A true CN102521045A (zh) | 2012-06-27 |
Family
ID=46291980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104575748A Pending CN102521045A (zh) | 2011-12-31 | 2011-12-31 | 非实时多任务调度内核实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521045A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345426A (zh) * | 2013-06-26 | 2013-10-09 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种非实时操作系统的并发过程处理方法 |
CN106547517A (zh) * | 2016-11-03 | 2017-03-29 | 浪潮(苏州)金融技术服务有限公司 | 一种控制等待时间的方法及装置 |
CN108153583A (zh) * | 2016-12-06 | 2018-06-12 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595931A (zh) * | 2004-06-30 | 2005-03-16 | 港湾网络有限公司 | 边界网关协议模块路由处理方法 |
CN1828541A (zh) * | 2006-04-07 | 2006-09-06 | 浙江大学 | Java操作系统中定时任务的实现方法 |
CN102222022A (zh) * | 2011-07-15 | 2011-10-19 | 范示德汽车技术(上海)有限公司 | 基于多核处理器的实时任务调度方法 |
-
2011
- 2011-12-31 CN CN2011104575748A patent/CN102521045A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1595931A (zh) * | 2004-06-30 | 2005-03-16 | 港湾网络有限公司 | 边界网关协议模块路由处理方法 |
CN1828541A (zh) * | 2006-04-07 | 2006-09-06 | 浙江大学 | Java操作系统中定时任务的实现方法 |
CN102222022A (zh) * | 2011-07-15 | 2011-10-19 | 范示德汽车技术(上海)有限公司 | 基于多核处理器的实时任务调度方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103345426A (zh) * | 2013-06-26 | 2013-10-09 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种非实时操作系统的并发过程处理方法 |
CN103345426B (zh) * | 2013-06-26 | 2016-05-11 | 中国航天科技集团公司第九研究院第七七一研究所 | 一种非实时操作系统的并发过程处理方法 |
CN106547517A (zh) * | 2016-11-03 | 2017-03-29 | 浪潮(苏州)金融技术服务有限公司 | 一种控制等待时间的方法及装置 |
CN106547517B (zh) * | 2016-11-03 | 2018-11-20 | 浪潮金融信息技术有限公司 | 一种控制等待时间的方法及装置 |
CN108153583A (zh) * | 2016-12-06 | 2018-06-12 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
CN108153583B (zh) * | 2016-12-06 | 2022-05-13 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN103999051B (zh) | 用于着色器核心中着色器资源分配的策略 | |
CN102597950B (zh) | 基于硬件排程gpu工作 | |
CN105045658B (zh) | 一种利用多核嵌入式dsp实现动态任务调度分发的方法 | |
US20060268967A1 (en) | Supplying instruction to operational stations | |
CN103823706B (zh) | 一种基于RTLinux的被控对象模型模拟仿真实时调度方法 | |
CN103473129B (zh) | 线程数目可伸缩的多任务队列调度系统及其实现方法 | |
CN101414271A (zh) | 多核平台下基于硬件计时器与任务队列的调度方法 | |
CN104536835B (zh) | 一种热备份实时控制系统中自适应任务调度方法 | |
CN111796921B (zh) | 嵌入式多核操作系统调度方法、调度装置、电子设备及存储介质 | |
CN101414270A (zh) | 硬件辅助的辅核任务动态优先级调度的实现方法 | |
CN109522108A (zh) | 一种基于Kernel合并的GPU任务调度系统及方法 | |
CN103019838A (zh) | 一种基于多dsp处理器平台的分布式实时多任务操作系统 | |
CN102004664A (zh) | 一种空间飞行器嵌入式实时操作系统调度方法 | |
CN105045666A (zh) | Windows操作系统环境下的分区调度方法 | |
CN104090826A (zh) | 基于相关性的任务优化部署方法 | |
CN102521045A (zh) | 非实时多任务调度内核实现方法 | |
CN109656868B (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
CN110503318A (zh) | 综合模块化航空电子处理系统资源配置与仿真评估平台 | |
Varela et al. | Real-time scheduling coprocessor for NIOS II processor | |
CN111858026A (zh) | 高效的大规模多粒度仿真模型并行调度方法 | |
Sun et al. | Real-time scheduling upon a host-centric acceleration architecture with data offloading | |
CN103257892A (zh) | 一种基于宏组合的多任务调度方法及系统 | |
Prashanth et al. | Real-time issues in embedded system design | |
CN105117281A (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: 20120627 |