一种任务调度的方法和系统的制作方法

文档序号:10612667阅读:392来源:国知局
一种任务调度的方法和系统的制作方法
【专利摘要】本发明公开了一种任务调度的方法和系统,该方法包括:S1:执行完具有第一优先级的任务后,执行具有第二优先级的任务;S2:当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在具有所述第一优先级的任务,若存在,执行完所有具有所述第一优先级的任务;S3:重复步骤S1、S2,直到执行完所有具有所述第一优先级和所述第二优先级的任务。该方法通过使具有较高优先级的任务得到充分执行,较低优先级的任务暂缓执行,同时超时次数的设置避免了较低优先级任务无法执行的情况,达到了在任何情况下,保证任务根据优先级充分、高效地进行调度。该任务调度方法和系统解决一些场景中现有的任务调度方法难以高效的实现调度的问题。
【专利说明】
_种任务调度的方法和系统
技术领域
[0001]本发明属于计算机技术领域,具体涉及一种任务调度的方法和系统。
【背景技术】
[0002]在同一个进程内,有多个任务共享所有的CPU资源,通常会为不同的任务安排不同的优先级,使得高优先级的任务充分得到执行后,再执行低优先级的任务。
[0003]然而,对于一些特殊的场景,系统提供的这种按照优先级依次执行任务的调度方法并不能完全适用,这时候就需要用户按照场景的要求编写新的调度方法,以便更加符合自己的需求。这种调度方式不具有普适性,难以适用大多数场景。

【发明内容】

[0004]本发明所要解决的技术问题是如何解决一些场景中现有的任务调度方法难以高效的实现调度的问题。
[0005]针对以上技术问题,本发明提供了一种任务调度的方法,包括:
[0006]S1:执行完具有第一优先级的任务后,执行具有所述第二优先级的任务;
[0007]S2:当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在具有所述第一优先级的任务,若存在,执行完所有具有所述第一优先级的任务;
[0008]S3:重复步骤S1、S2,直到执行完所有具有所述第一优先级和所述第二优先级的任务。
[0009]优选地,所述步骤S3之后还包括:
[0010]S4:执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,执行所述步骤S3,并将预设的超时次数减去预设数值;
[0011 ] S5:若判断具有所述第三优先级的任务的数量为零或者所述超时次数为零,则执行具有第四优先级的任务;
[0012]S6:执行完第三预设数目的具有所述第四优先级的任务后,执行所述步骤S3;
[0013]S7:重复所述步骤S6,直到执行完所有具有所述第四优先级的任务。
[0014]优选地,所述步骤S7之后还包括:
[0015]S8:重新设置所述超时次数,执行所述步骤SI至S7。
[0016]优选地,所述步骤SI之前还包括:
[0017]清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中;
[0018]根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级;
[0019]将具有同一优先级的任务存储在同一个任务队列中。
[0020]优选地,所述根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级的过程中,若所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间,则发出提示信息。
[0021]另一方面,本发明还提供了一种任务调度的系统,包括:
[0022]第一执行模块,用于执行完具有第一优先级的任务后,执行具有所述第二优先级的任务;
[0023]第二执行模块,用于当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在未执行的具有所述第一优先级的任务,若存在,执行完所有未执行的具有所述第一优先级的任务;
[0024]第三执行模块,用于使所述第一执行模块和所述第二执行模块依次循环执行任务,直到不存在未执行的具有所述第一优先级和所述第二优先级的任务。
[0025]优选地,在所述第三执行模块执行任务完毕后,还包括:
[0026]第四执行模块,用于执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,使所述第三执行模块执行任务,并将预设的超时次数减去预设数值;
[0027]第五执行模块,用于在判断未执行的具有所述第三优先级的任务的数量为零或者所述超时次数为零时,执行具有第四优先级的任务;
[0028]第六执行模块,用于执行完第三预设数目的具有所述第四优先级的任务后,使所述第三执行模块执行任务;
[0029]第七执行模块,用于使所述第六执行模块重复执行任务,直到不存在未执行的具有所述第四优先级的任务。
[0030]优选地,在所述第七执行模块执行任务完毕后,还包括:
[0031 ]第八执行模块,用于重新设置所述超时次数,使所述第一至第七执行模块依次执行任务。
[0032]优选地,还包括:
[0033]清空模块,用于清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中;
[0034]创建任务模块,用于根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级;
[0035]分队模块,用于将具有同一优先级的任务存储在同一个任务队列中。
[0036]优选地,所述创建任务模块还用于在所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间时发出提示信息。
[0037]本发明提供的任务调度的方法和系统,通过使具有较高优先级的任务得到充分执行,较低优先级的任务暂缓执行,同时超时次数的设置避免了较低优先级任务无法执行的情况,达到了在任何情况下,保证任务根据优先级充分、高效地进行调度。该任务调度方法和系统解决一些场景中现有的任务调度方法难以高效的实现调度的问题。
【附图说明】
[0038]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039]图1是本发明实施例提供的一种任务调度的方法流程图;
[0040]图2是本发明实施例提供的一种具体的任务调度的方法流程图;
[0041]图3是本发明实施例提供的一种任务调度的系统的结构示意图。
【具体实施方式】
[0042]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043]图1是本实施例提供的一种任务调度的方法流程图,参见图1,该方法包括:
[0044]S1:执行完具有第一优先级的任务后,执行具有所述第二优先级的任务;
[0045]S2:当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在具有所述第一优先级的任务,若存在,执行完所有具有所述第一优先级的任务;
[0046]S3:重复步骤S1、S2,直到执行完所有具有所述第一优先级和所述第二优先级的任务。
[0047]第一预设数目可根据具有第二优先级的任务的总数量而定,当具有第二优先级的任务的总数量较多时,可以设置为2个或者更多,一般情况下,第一预设数目为I个就可以了。
[0048]任务经过执行后,以前的优先级便不再起作用。例如,一个被执行过的紧急优先级任务其优先级不再起作用。
[0049]本实施例提供的任务调度的方法,通过使具有较高优先级的任务得到充分执行,较低优先级的任务暂缓执行,保证任务根据优先级充分、高效地进行调度。解决了一些场景中现有的任务调度方法难以高效的实现调度的问题。
[0050]作为一种优选的实施例,所述步骤S3之后还包括:
[0051]S4:执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,执行所述步骤S3,并将预设的超时次数减去预设数值;
[0052]S5:若判断具有所述第三优先级的任务的数量为零或者所述超时次数为零,则执行具有第四优先级的任务;
[0053]S6:执行完第三预设数目的具有所述第四优先级的任务后,执行所述步骤S3;
[0054]S7:重复所述步骤S6,直到执行完所有具有所述第四优先级的任务。
[0055]超时次数人为设定,例如设定为15次,预设数值一般设定为I。
[0056]每执行一次具有第三优先级的任务后,将预设的超时次数减去预设数值,当超时次数为零或者具有第三优先级的任务的数量为零时,执行第四优先级的任务。本实施例提供的任务调度的方法中,超时次数的设置避免了较低优先级任务无法执行的情况,达到了在任何情况下,保证任务根据优先级充分、高效地进行调度。该任务调度方法和系统解决一些场景中现有的任务调度方法难以高效的实现调度的问题。
[0057]进一步地,所述步骤S7之后还包括:
[0058]S8:重新设置所述超时次数,执行所述步骤SI至S7。
[0059]任务的调度是重复执行的,以保证所有的任务都能被执行。
[0000]进一步地,所述步骤SI之前还包括:
[0061]清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中;
[0062]根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级;
[0063]将具有同一优先级的任务存储在同一个任务队列中。
[0064]按照队列将没有建立任务的空间和具有不同优先级的任务分队列存储,加快了任务调度的效率。
[0065]进一步地,所述根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级的过程中,若所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间,则发出提示信息。
[0066]在剩余的存储空间无法满足用户建立新的任务的情况下,发出提示信息,以使用户等待执行任务后可用的存储空间,以建立欲创建任务,或者通过对不重要任务的删除为欲创建任务预留存储空间。
[0067]作为一种具体的实施例,由于任务调度一直循环,故用于进行任务调度的调度器本身不能退出。
[0068]图2是本实施例提供的一种具体的任务调度的方法流程图,参见图2,在执行任务时,先执行所有处于紧急优先级队列中的紧急优先级(第一优先级)的任务,当所有紧急优先级任务都执行完毕后,在尚优先级的队列中判断是否存在尚优先级(第二优先级)任务,若不存在,则对普通优先级队列中的普通优先级(第三优先级)任务进行判断。
[0069]若存在,执行I个高优先级的任务后,再判断是否存在紧急优先级的任务,若存在,将所有紧急优先级的任务执行完后再执行下I个高优先级任务,再判断是否存在紧急优先级的任务,如此反复,直到执行完所有的紧急优先级任务和高优先级任务。在所有的紧急优先级任务和高优先级任务执行完毕后,可以向调度器返回O,
[0070]当紧急优先级队列和高优先级队列中的任务都执行完毕后,判断普通优先级的队列中是否存在普通优先级任务,若不存在,则对低优先级(第四优先级)队列中的任务进行判断。
[0071]若存在,则执行I个普通优先级任务后并将超时次数减I后,若判断普通优先级队列中普通优先级任务的数量不为零且超时次数也不为零,则重新返回执行紧急优先级任务。当普通优先级队列中普通优先级任务的数量和超时次数有一个为零时,开始执行低优先级任务,并重新设置超时次数。执行完一个低优先级任务后,返回紧急优先级任务重新执行一遍。
[0072]或者,可按照下述过程进行任务的调度,设置低优先级任务的超时次数(1wcheck)为15次。设置普通优先级任务是否得到执行的标志为ran_norm为O或I,O表示还没有得到执行,I表示至少有一个普通优先级的任务得到了执行。
[0073]A、执行紧急优先级队列,当紧急优先级队列有任务时,就将其中的所有任务都执行一遍;
[0074]B、当紧急优先级队列都执行完毕后,进入到C;
[0075]C、执行高优先级的任务,每执行一个高优先级的任务后,则执行A,当A执行完成后,再次执行下一个高优先级的任务,然后在执行A,直到执行完所有的高优先级的任务,如果在本过程中,执行过一个高优先级的任务,那么就返回I,否则就返回0(比如没有高优先级的任务);
[0076]D、当高优先级队列返回I时,则继续进入到A,否则进入到E;
[0077]E、执行普通优先级队列中的任务。每次执行完一个普通优先级队列的任务后,就执行A,当紧急优先级队列的任务都处理完以后,则执行C,当C也执行完以后,继续执行普通优先级队列中的下一个任务。
[0078]F、当执行过一个普通优先级队列的任务时,设置ran_norm=l;
[0079]G、将1wcheck减I,判断ran_norm是否为O或者1wcheck是否为0,如果其中有一个为0,那么就重新设置1wcheck为15,且开始执行低优先级队列。只要没有执行过普通优先级的任务,那么就可以执行低优先级的任务,如果每次循环中总是执行了普通优先级的任务,为了保证低优先级任务也得到执行,设置了lowcheck,当1wcheck = O时,无论是否执行过普通优先级的任务,那么也会执行低优先级的任务;
[0080]H、执行低优先级队列中的任务,每次执行完一个低优先级队列的任务,就执行A,当A执行完后则执行C,当C也执行完之后,再次执行低优先级队列中的任务;
[0081]1、当低优先级队列的任务执行完以后,返回A继续执行。
[0082]在执行任务之前,存在初始化的过程,具体如下:
[0083]由于系统资源有限,不能无限制的创建任务,因此必须要加以限制,通常来说,系统支持80个任务已经足够多了,因此可以在初始化阶段,创建80个大小为Thread的内存,并将这80个内存统一放到链表free threads中。其中Thread是任务对应的数据结构,包括了任务名称,优先级,栈大小,对应执行的函数,函数参数,以及寄存器等任务的属性信息。
[0084]当系统运行时,可能会动态的创建任务,此时会从freethreads中取出一块内存,用来保存当前任务的属性信息。如果无法从free threads中取出一块内存,那么说明当前无法创建新任务了,直接返回即可。
[0085]当系统运行时,可能会销毁任务,此时会将系统属性的内存重新放入到fr e ethreads队列中。
[0086]当创建任务时,必须要指明任务的优先级,任务的名称,对应的执行函数,函数参数,栈大小。根据栈的大小来分配任务执行的栈空间(任务执行时的内存),任务名称用来标识各个任务,函数以及参数对应任务的应该做什么事情。任务优先级说明任务是否是重要的。根据任务的优先级,将任务放入不同的优先级队列。任务的优先级分为低优先级、普通优先级,高优先级,紧急优先级,因此会存在4个任务队列。
[0087]本实施例提供的任务调度的方法中高优先级的任务有限执行,低优先级的任务暂缓执行,低优先级的任务也得到了执行,避免低优先级的任务无法执行的情况。
[0088]另一方面,图3是本实施例提供的一种任务调度的系统的结构示意图,参见图3,该任务调度的系统30,包括:
[0089]第一执行模块31,用于执行完具有第一优先级的任务后,执行具有所述第二优先级的任务;
[0090]第二执行模块32,用于当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在未执行的具有所述第一优先级的任务,若存在,执行完所有未执行的具有所述第一优先级的任务;
[0091]第三执行模块33,用于使所述第一执行模块31和所述第二执行模块32依次循环执行任务,直到不存在未执行的具有所述第一优先级和所述第二优先级的任务。
[0092]本发明提供的任务调度的系统,通过使具有较高优先级的任务得到充分执行,较低优先级的任务暂缓执行,同时超时次数的设置避免了较低优先级任务无法执行的情况,达到了在任何情况下,保证任务根据优先级充分、高效地进行调度。该任务调度系统解决一些场景中现有的任务调度方法难以高效的实现调度的问题。
[0093]进一步地,在所述第三执行模块执行任务完毕后,还包括:
[0094]第四执行模块,用于执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,使所述第三执行模块执行任务,并将预设的超时次数减去预设数值;
[0095]第五执行模块,用于在判断未执行的具有所述第三优先级的任务的数量为零或者所述超时次数为零时,执行具有第四优先级的任务;
[0096]第六执行模块,用于执行完第三预设数目的具有所述第四优先级的任务后,使所述第三执行模块执行任务;
[0097]第七执行模块,用于使所述第六执行模块重复执行任务,直到不存在未执行的具有所述第四优先级的任务。
[0098]进一步地,在所述第七执行模块执行任务完毕后,还包括:
[0099]第八执行模块,用于重新设置所述超时次数,使所述第一至第七执行模块依次执行任务。
[0100]进一步地,还包括:
[0101]清空模块,用于清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中;
[0102]创建任务模块,用于根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级;
[0103]分队模块,用于将具有同一优先级的任务存储在同一个任务队列中。
[0104]进一步地,所述创建任务模块还用于在所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间时发出提示信息。
[0105]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种任务调度的方法,其特征在于,包括: S1:执行完具有第一优先级的任务后,执行具有所述第二优先级的任务; S2:当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在具有所述第一优先级的任务,若存在,执行完所有具有所述第一优先级的任务; S3:重复步骤S1、S2,直到执行完所有具有所述第一优先级和所述第二优先级的任务。2.根据权利要求1所述的任务调度的方法,其特征在于,所述步骤S3之后还包括: S4:执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,执行所述步骤S3,并将预设的超时次数减去预设数值; S5:若判断具有所述第三优先级的任务的数量为零或者所述超时次数为零,则执行具有第四优先级的任务; S6:执行完第三预设数目的具有所述第四优先级的任务后,执行所述步骤S3; S7:重复所述步骤S6,直到执行完所有具有所述第四优先级的任务。3.根据权利要求2所述的任务调度的方法,其特征在于,所述步骤S7之后还包括: S8:重新设置所述超时次数,执行所述步骤SI至S7。4.根据权利要求1所述的任务调度的方法,其特征在于,所述步骤SI之前还包括: 清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中; 根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级; 将具有同一优先级的任务存储在同一个任务队列中。5.根据权利要求4所述的任务调度的方法,其特征在于,所述根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级的过程中,若所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间,则发出提示信息。6.一种任务调度的系统,其特征在于,包括: 第一执行模块,用于执行完具有第一优先级的任务后,执行具有所述第二优先级的任务; 第二执行模块,用于当执行完第一预设数目的具有所述第二优先级的任务后,检查是否还存在未执行的具有所述第一优先级的任务,若存在,执行完所有未执行的具有所述第一优先级的任务; 第三执行模块,用于使所述第一执行模块和所述第二执行模块依次循环执行任务,直到不存在未执行的具有所述第一优先级和所述第二优先级的任务。7.根据权利要求6所述的任务调度的系统,其特征在于,在所述第三执行模块执行任务完毕后,还包括: 第四执行模块,用于执行具有第三优先级的任务,在执行完第二预设数目的具有所述第三优先级的任务后,使所述第三执行模块执行任务,并将预设的超时次数减去预设数值;第五执行模块,用于在判断未执行的具有所述第三优先级的任务的数量为零或者所述超时次数为零时,执行具有第四优先级的任务; 第六执行模块,用于执行完第三预设数目的具有所述第四优先级的任务后,使所述第三执行模块执行任务; 第七执行模块,用于使所述第六执行模块重复执行任务,直到不存在未执行的具有所述第四优先级的任务。8.根据权利要求7所述的任务调度的系统,其特征在于,在所述第七执行模块执行任务完毕后,还包括: 第八执行模块,用于重新设置所述超时次数,使所述第一至第七执行模块依次执行任务。9.根据权利要求6所述的任务调度的系统,其特征在于,还包括: 清空模块,用于清空已经执行过的任务占用的存储空间,并将所述存储空间放入可创建队列中; 创建任务模块,用于根据欲创建任务执行时的存储空间,从所述可创建队列中为所述欲创建任务分配相应的存储空间,创建所述欲创建任务,并标明所述欲创建任务的优先级;分队模块,用于将具有同一优先级的任务存储在同一个任务队列中。10.根据权利要求9所述的任务调度的系统,其特征在于,所述创建任务模块还用于在所述可创建队列中剩余的存储空间小于所述欲创建任务执行时的存储空间时发出提示信息。
【文档编号】G06F9/48GK105975338SQ201610292925
【公开日】2016年9月28日
【申请日】2016年5月5日
【发明人】李鹏
【申请人】汉柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1