法律状态公告日
法律状态信息
法律状态
2015-09-23
授权
授权
2014-05-07
实质审查的生效 IPC(主分类):G06F9/48 申请日:20131230
实质审查的生效
2014-04-09
公开
公开
技术领域
本发明涉及一种优先级抢占时间片轮转操作系统中任务定时调度方法,属 于嵌入式操作系统领域。
背景技术
在大多数卫星控制计算机中,软件主要以任务的形式被执行,并且这些任 务需要按照控制周期定时进行调度,即在每个控制周期中,这些任务必须分别 在控制周期内预先确定的时间点开始执行,且必须在规定的时间内执行完毕。 因此任务的定时调度是卫星控制计算机系统软件的重要功能。
目前新一代空间飞行器嵌入式操作系统的核心调度策略是优先级抢占并结 合时间片轮转进行任务调度。为了满足卫星控制计算机任务定时调度的需求, 需要在操作系统中实现实时定时调度。本专利作为空间飞行器嵌入式操作系统 的一个组成部分,在核心调度策略的基础上实现了定时调度的方法。如果不采 用本专利所提供的方法,则无法满足当前卫星控制计算机控制周期任务运行的 需求。而采用本专利所提供的方法,则操作系统既能够实现基于优先级的抢占 式任务调度,又能够实现控制周期任务的定时调度。这样就满足了当前不同空 间飞行器的不同需求。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种优先级抢占 时间片轮转操作系统中任务定时调度方法,使得操作系统既能够实现基于优先 级抢占和时间片轮转的调度,又能实现基于控制周期的定时任务调度。
本发明的技术方案是:一种优先级抢占时间片轮转操作系统中任务定时调 度方法,步骤如下:
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所示。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
机译: 实时操作系统的抢占管理方法,包括在计算出的时间间隔后中断当前任务的执行,以允许当前任务和高优先级任务在执行延迟结束前执行
机译: 在基于多任务抢占优先级的实时操作系统中进行有效任务调度的方法,设备和制造品
机译: 优先抢占式实时操作系统中的任务分派