CN103713948B - 一种优先级抢占时间片轮转操作系统中任务定时调度方法 - Google Patents
一种优先级抢占时间片轮转操作系统中任务定时调度方法 Download PDFInfo
- Publication number
- CN103713948B CN103713948B CN201310746023.2A CN201310746023A CN103713948B CN 103713948 B CN103713948 B CN 103713948B CN 201310746023 A CN201310746023 A CN 201310746023A CN 103713948 B CN103713948 B CN 103713948B
- Authority
- CN
- China
- Prior art keywords
- task
- operating system
- user
- time period
- bitmap
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明一种优先级抢占时间片轮转操作系统中任务定时调度方法,步骤如下:(1)利用操作系统接口函数创建用户任务TaskEncap_N(),在用户任务TaskEncap_N()中对实际的用户任务函数TaskFunc_N()进行封装,即先挂起函数TaskFunc_N(),再调用函数TaskFunc_N();(2)定义一个用户任务的起始调度时刻位图和用户任务的起始调度任务位图,利用位图快速索引用户任务的起始调度时刻以及用户任务控制块指针;(3)时间片中断时,利用时间片中断钩子函数实现定时调度,即在需要任务调度的时刻,如果上一个时间段的任务未完成则重启动该任务,再恢复本时间段的任务;否则直接恢复本时间段的任务。
Description
技术领域
本发明涉及一种优先级抢占时间片轮转操作系统中任务定时调度方法,属于嵌入式操作系统领域。
背景技术
在大多数卫星控制计算机中,软件主要以任务的形式被执行,并且这些任务需要按照控制周期定时进行调度,即在每个控制周期中,这些任务必须分别在控制周期内预先确定的时间点开始执行,且必须在规定的时间内执行完毕。因此任务的定时调度是卫星控制计算机系统软件的重要功能。
目前新一代空间飞行器嵌入式操作系统的核心调度策略是优先级抢占并结合时间片轮转进行任务调度。为了满足卫星控制计算机任务定时调度的需求,需要在操作系统中实现实时定时调度。本专利作为空间飞行器嵌入式操作系统的一个组成部分,在核心调度策略的基础上实现了定时调度的方法。如果不采用本专利所提供的方法,则无法满足当前卫星控制计算机控制周期任务运行的需求。而采用本专利所提供的方法,则操作系统既能够实现基于优先级的抢占式任务调度,又能够实现控制周期任务的定时调度。这样就满足了当前不同空间飞行器的不同需求。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种优先级抢占时间片轮转操作系统中任务定时调度方法,使得操作系统既能够实现基于优先级抢占和时间片轮转的调度,又能实现基于控制周期的定时任务调度。
本发明的技术方案是:一种优先级抢占时间片轮转操作系统中任务定时调度方法,步骤如下:
1)创建并封装用户任务;
11)创建任务前,将所有用户任务控制块指针定义为一个一维数组SYSTaskID[N],其中N为任务个数;
12)设操作系统任务创建接口函数为OSTaskSpawn(),用户任务Task_N的函数为TaskFunc_N(),对函数TaskFunc_N()进行封装,得到封装后的函数TaskEncap_N(),具体封装过程为:设操作系统任务挂起接口函数为OSTaskSuspend();则在TaskEncap_N()中,进入任务无限循环体时,采用操作系统任务挂起接口函数OSTaskSuspend()挂起当前任务,然后再调用用户任务函数TaskFunc_N();
13)创建用户任务SYSTaskID[N]=OSTaskSpawn(TaskEncap_N,param_1…param_n),其中param_1…param_n为操作系统任务创建接口函数OSTaskSpawn()中的其他参数;在调用接口函数OSTaskSpawn()创建Task_1到Task_N时,把任务Task_1到Task_N设置为相同的优先级;
2)利用位图快速索引用户任务的起始调度时刻以及用户任务控制块指针;
21)定义一个用户任务的起始调度时刻位图MapSchedeIndex[],位图大小为根据用户调度需求将位图MapSchedeIndex[]中需要进行任务调度的位置置1,其余位置置0;
22)定义一个用户任务的起始调度任务位图MapSchedeTask[],位图大小为将MapSchedeTask[]中与MapSchedeIndex[]中值为1的位置所对应的位置上,设置成需要调度的任务的索引值,所述的索引值为SYSTaskID[N]的索引值N;
3)时间片中断时,利用时间片中断钩子函数控制任务的定时调度;
31)在操作系统内核的时间片中断中,对时间片进行计数,然后根据位图MapSchedeIndex[]判断该时间片是否对新任务进行调度的时刻;
32)当MapSchedeIndex[]中的值为0时,不进行任何操作;当MapSchedeIndex[]中的值为1时,则该位置所对应的时刻为需要对新任务进行调度的时刻,并设操作系统任务恢复接口函数为OSTaskResume(),操作系统任务重启动接口函数为OSTaskRestart(),将当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相比较,如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针不相等则调用OSTaskResume()直接恢复本时间段任务;如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相等,则需要调用OSTaskRestart()重新启动上一个时间段的任务,然后再调用OSTaskResume()恢复本时间段任务;其中所述上一个时间段的任务和本时间段任务均通过位图MapSchedeTask[]进行快速索引。
本发明与现有技术相比具有如下优点:
(1)在优先级抢占和多任务时间片轮转基础上,同时支持任务的定时调度,增加了任务调度的模式;
(2)能够在确定起始时间开始任务,并能够使任务在确定的时间段执行,从内核级别上保证了任务执行的高度实时性;
(3)对应用程序开发提供了统一的接口,不需要应用程序开发过程中涉及操作系统内核,对应用程序用户提供了简单的接口。
附图说明
图1为周期任务调度。
图2为封装后任务函数TaskEncap_N()的具体算法。
图3为时间片中断钩子函数中的定时调度算法。
具体实施方式
一、方法原理
本发明利用操作系统内核提供的接口函数,采取对任务先挂起后恢复的策略,实现在优先级抢占时间片轮转操作系统中任务的定时调度。
创建任务时,使所有用户任务具有相同优先级,并在初始时刻让所有用户任务处于挂起状态。在操作系统内核的时间片中断中,根据控制周期中任务需要运行的起始时刻,对处于挂起态的任务进行恢复,使其恢复运行,从而实现任务的定时调度。
二、设计方案
假设卫星控制计算机中,应用软件需要以T=16s为控制周期进行任务的定时调度,Ts为每个控制周期开始的时间,在每个控制周期T期间要执行3个任务Task_1、Task_2和Task_3,其中每个任务允许执行时间为T1=6s、T2=6s、T3=4s,具体情况如图1所示。时间片tick值为100ms。
利用本专利的方法实现上述功能如下:
1)创建并封装用户任务;
11)创建任务前,将所有用户任务控制块指针定义为一个一维数组SYSTaskID[3];
12)设操作系统任务创建接口函数为OSTaskSpawn(),用户任务Task_N的函数为TaskFunc_N(),对函数TaskFunc_N()进行封装,得到封装后的函数TaskEncap_N(),N=1,2,3。具体封装过程为:设操作系统任务挂起接口函数为OSTaskSuspend();则在TaskEncap_N()中,进入任务无限循环体时,采用操作系统任务挂起接口函数OSTaskSuspend()挂起当前任务,然后再调用用户任务函数TaskFunc_N(),如图2所示;
13)创建用户任务SYSTaskID[N]=OSTaskSpawn(TaskEncap_N,param_1…param_n),其中param_1…param_n为操作系统任务创建接口函数OSTaskSpawn()中的其他参数,N=1,2,3;在调用接口函数OSTaskSpawn()创建Task_1到Task_N时,把任务Task_1到Task_N设置为相同的优先级;
2)利用位图快速索引用户任务的起始调度时刻以及用户任务控制块指针;
21)定义一个用户任务的起始调度时刻位图
22)定义一个用户任务的起始调度任务位图
3)时间片中断时,利用时间片中断钩子函数控制任务的定时调度;
31)在操作系统内核的时间片中断中,对时间片进行计数,然后根据位图MapSchedeIndex[160]判断该时间片是否对新任务进行调度的时刻;
32)当MapSchedeIndex[160]中的值为0时,不进行任何操作;当MapSchedeIndex[160]中的值为1时,则该位置所对应的时刻为需要对新任务进行调度的时刻,并设操作系统任务恢复接口函数为OSTaskResume(),操作系统任务重启动接口函数为OSTaskRestart(),将当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相比较,如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针不相等则调用OSTaskResume()直接恢复本时间段任务;如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相等,则需要调用OSTaskRestart()重新启动上一个时间段的任务,然后再调用OSTaskResume()恢复本时间段任务;其中所述上一个时间段的任务和本时间段任务均通过位图MapSchedeTask[160]进行快速索引,N=1,2,3,整个流程如图3所示。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (1)
1.一种优先级抢占时间片轮转操作系统中任务定时调度方法,其特征在于步骤如下:
1)创建并封装用户任务;
11)创建任务前,将所有用户任务控制块指针定义为一个一维数组SYSTaskID[N],其中N为任务个数;
12)设操作系统任务创建接口函数为OSTaskSpawn(),用户任务Task_N的函数为TaskFunc_N(),对函数TaskFunc_N()进行封装,得到封装后的函数TaskEncap_N(),具体封装过程为:设操作系统任务挂起接口函数为OSTaskSuspend();则在TaskEncap_N()中,进入任务无限循环体时,采用操作系统任务挂起接口函数OSTaskSuspend()挂起当前任务,然后再调用用户任务函数TaskFunc_N();
13)创建用户任务SYSTaskID[N]=OSTaskSpawn(TaskEncap_N,param_1…param_n),其中param_1…param_n为操作系统任务创建接口函数OSTaskSpawn()中的其他参数;在调用接口函数OSTaskSpawn()创建Task_1到Task_N时,把任务Task_1到Task_N设置为相同的优先级;
2)利用位图快速索引用户任务的起始调度时刻以及用户任务控制块指针;
21)定义一个用户任务的起始调度时刻位图MapSchedeIndex[],位图大小为根据用户调度需求将位图MapSchedeIndex[]中需要进行任务调度的位置置1,其余位置置0;
22)定义一个用户任务的起始调度任务位图MapSchedeTask[],位图大小为将MapSchedeTask[]中与MapSchedeIndex[]中值为1的位置所对应的位置上,设置成需要调度的任务的索引值,所述的索引值为SYSTaskID[N]的索引值N;
3)时间片中断时,利用时间片中断钩子函数控制任务的定时调度;
31)在操作系统内核的时间片中断中,对时间片进行计数,然后根据位图MapSchedeIndex[]判断该时间片是否为对新任务进行调度的时刻;
32)当MapSchedeIndex[]中的值为0时,不进行任何操作;当MapSchedeIndex[]中的值为1时,则该位置所对应的时刻为需要对新任务进行调度的时刻,并设操作系统任务恢复接口函数为OSTaskResume(),操作系统任务重启动接口函数为OSTaskRestart(),将当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相比较,如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针不相等则调用OSTaskResume()直接恢复本时间段任务;如果当前任务控制块指针与SYSTaskID[N]中上一个时间段的任务控制块指针相等,则需要调用OSTaskRestart()重新启动上一个时间段的任务,然后再调用OSTaskResume()恢复本时间段任务;其中所述上一个时间段的任务和本时间段任务均通过位图MapSchedeTask[]进行快速索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746023.2A CN103713948B (zh) | 2013-12-30 | 2013-12-30 | 一种优先级抢占时间片轮转操作系统中任务定时调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310746023.2A CN103713948B (zh) | 2013-12-30 | 2013-12-30 | 一种优先级抢占时间片轮转操作系统中任务定时调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103713948A CN103713948A (zh) | 2014-04-09 |
CN103713948B true CN103713948B (zh) | 2015-09-23 |
Family
ID=50406951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310746023.2A Active CN103713948B (zh) | 2013-12-30 | 2013-12-30 | 一种优先级抢占时间片轮转操作系统中任务定时调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103713948B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9280389B1 (en) * | 2014-12-30 | 2016-03-08 | Tyco Fire & Security Gmbh | Preemptive operating system without context switching |
CN106293902A (zh) * | 2015-05-28 | 2017-01-04 | 宇龙计算机通信科技(深圳)有限公司 | 一种处理器调度方法及系统 |
US10366013B2 (en) * | 2016-01-15 | 2019-07-30 | Futurewei Technologies, Inc. | Caching structure for nested preemption |
CN107832154B (zh) * | 2017-11-14 | 2020-07-17 | 浙江亿邦通信科技有限公司 | 一种多进程处理方法、处理装置及应用 |
CN109101313A (zh) * | 2018-03-15 | 2018-12-28 | 山东超越数控电子股份有限公司 | 一种实时内核的实现及测试方法 |
CN112596891B (zh) * | 2021-03-03 | 2021-06-11 | 南京信息工程大学 | 时间片轮转结合扩展中断的多任务管理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178664A (zh) * | 2007-12-12 | 2008-05-14 | 北京中星微电子有限公司 | 实时操作系统中的任务调度方法及系统 |
CN102004664A (zh) * | 2010-10-18 | 2011-04-06 | 北京控制工程研究所 | 一种空间飞行器嵌入式实时操作系统调度方法 |
-
2013
- 2013-12-30 CN CN201310746023.2A patent/CN103713948B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178664A (zh) * | 2007-12-12 | 2008-05-14 | 北京中星微电子有限公司 | 实时操作系统中的任务调度方法及系统 |
CN102004664A (zh) * | 2010-10-18 | 2011-04-06 | 北京控制工程研究所 | 一种空间飞行器嵌入式实时操作系统调度方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103713948A (zh) | 2014-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103713948B (zh) | 一种优先级抢占时间片轮转操作系统中任务定时调度方法 | |
CN106293919B (zh) | 一种时间触发的嵌入式任务调度装置与方法 | |
CN101751289B (zh) | 一种嵌入式实时操作系统的混合调度方法 | |
CN102043667A (zh) | 一种嵌入式操作系统的任务调度方法 | |
CN109684060B (zh) | 一种多类型时间关键任务的混合调度方法 | |
Bo et al. | Basic concepts on AUTOSAR development | |
CN104536835B (zh) | 一种热备份实时控制系统中自适应任务调度方法 | |
CN109062246B (zh) | 具有多任务自调度的模块化飞控系统及其设计方法 | |
CN102279766A (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN103853598B (zh) | 实现嵌入式虚拟机硬实时虚拟定时器响应的方法 | |
CN102591713A (zh) | 基于有限状态机的软件功能模块的调度系统 | |
CN104915254A (zh) | 一种嵌入式系统的多任务调度方法及系统 | |
CN108923706A (zh) | 一种基于嵌入式处理器的多路步进电机控制方法与系统 | |
CN103995742A (zh) | 一种基于mcu的嵌入式实时调度控制装置及方法 | |
CN105892629A (zh) | 基于多内核的屏幕唤醒方法、装置和移动终端 | |
CN106445659A (zh) | 一种空间飞行器周期性混成随机任务调度方法 | |
CN104008005A (zh) | 用于控制处理器的装置、方法和系统 | |
Akhmetshina et al. | PicOS: A Tiny Operating System for Extremely Small Embedded Platforms. | |
CN102662636B (zh) | 一种基于两层虚拟机的并行作业调度的方法 | |
CN103293967A (zh) | 一种用于智能抄表终端的多任务控制方法 | |
CN102053947A (zh) | 全球定位系统基带算法可重构实现的方法 | |
Varela et al. | Real-time scheduling coprocessor for NIOS II processor | |
EP2278454B1 (en) | Method for correct-by-construction development of real-time-systems | |
CN106896956B (zh) | 一种“道”系统下多点触控的实现方法 | |
CN104090747A (zh) | 利用实时调度优化器对Linux智能终端进行优化的方法 |
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 |