一种任务调度方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种任务调度方法及装置
背景技术
在Linux操作***中,任务(task)存在两种不同的运行状态:用户态和内核态。其中,当任务在计算机中执行用户自己的代码时,该任务处于用户态。当任务在计算机中执行内核的代码时,该任务处于内核态。任务调度是内核的核心功能之一,Linux操作***进行任务调度时,必须运行相应的内核代码,而内核代码不受处于用户态的任务的影响,因此处于用户态的任务不能拒绝Linux操作***的任务调度。这种情况下,Linux操作***可能会停止运行处于用户态的任务,转而运行其他任务。这样就会影响处于用户态的任务的正常运行。
发明内容
本申请实施例一种任务调度方法及装置,能够保证处于用户态的任务的正常运行。
为达到上述目的,本申请实施例采用如下技术方案:
第一方面,本申请实施例提供一种任务调度方法,所述方法包括:
对处于用户态的目标任务设置调度标识,所述调度标识为禁止调度标识或允许调度标识;
当需要对所述目标任务进行任务调度时,获取所述目标任务的调度标识;
若所述目标任务的调度标识为禁止调度标识,继续运行所述目标任务;
若所述目标任务的调度标识为允许调度标识,停止运行所述目标任务。
第二方面,本申请实施例提供一种任务调度装置,所述装置包括:
设置单元,用于对处于用户态的目标任务设置调度标识,所述调度标识为禁止调度标识或允许调度标识;
获取单元,用于当需要对所述目标任务进行任务调度时,获取所述目标任务;
调度单元,用于当所述获取单元获取到的目标任务的调度标识为禁止调度标识时,继续运行所述目标任务;当所述目标任务的调度标识为允许调度标识,停止运行所述目标任务。
本申请实施例提供一种任务调度方法及装置,通过给处于用户态的目标任务设置禁止调度标识,从而在对目标任务进行任务调度时,操作***根据目标任务的禁止调度标识,继续运行目标任务,保证处于用户态的目标任务的正常运行。另外,也可以给处于用户态的目标任务设置允许调度标识,从而在对目标任务进行任务调度时,操作***根据目标任务的允许调度标识,对目标任务进行任务切换,即操作***暂时停止运行目标任务,转而运行其他任务。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种任务调度方法的流程图;
图2为本申请实施例提供的一种共享存储区域的示例性示意图;
图3为本申请实施例提供的一种以位图的方式存储任务的调度标识的示例性示意图;
图4为本申请实施例提供的将处于用户态的目标任务的调度标识设置为禁止调度标识的方法流程图;
图5为本申请实施例提供的将任务的调度标识从允许调度标识设置为禁止调度标识的示例性示意图;
图6为本申请实施例提供的将处于用户态的目标任务的调度标识设置为允许调度标识的方法流程图;
图7为本申请实施例提供的将任务的调度标识从禁止调度标识设置为允许调度标识的示例性示意图;
图8为本申请实施例提供的一种任务调度装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
为了便于下文的理解,本申请实施例先对一些名词进行解释。
任务是指由软件完成的一个活动,包括用户对计算机操作的各个动作及所对应的响应事件,例如关闭一个文件等。在Linux操作***中,每个运行的程序被称为一个任务。
进程(process)是一个程序在其自身的虚拟地址空间的中的一次执行活动。需要说明的是,进程是操作***执行任务的基本单位,即可由多个进程相互合作完成一个任务。
内核是操作***最基本的部分,是基于硬件的第一层软件扩充,提供操作***的最基本的功能,负责管理操作***的进程、内存、设备驱动程序、文件和网络***等,决定着操作***的性能和稳定性。内核为众多程序提供对计算机硬件的安全访问,并决定一个程序在什么时候对某部分硬件操作多长时间。
为了保证处于用户态的任务的正常运行,本申请实施例提供一种任务调度方法。如图1所示,该方法包括:
101、对处于用户态的目标任务设置调度标识。
其中,调度标识为:禁止调度标识或允许调度标识。禁止调度标识用于禁止操作***对正在运行的目标任务进行任务切换。允许调度标识用于允许操作***对正在运行的目标任务进行任务切换。所述任务切换是指停止运行当前正在运行的任务,转而运行其他任务。
需要说明的是,调度标识存储于共享存储区域,该共享存储区域为处于用户态的任务和处于内核态的任务均能访问的存储区域。具体的,该共享存储区域可以为Linux设备中的某一内存块。另外,若所述Linux设备中安装有多个中央处理器(Central ProcessingUnit,CPU)时,无论任务运行在哪一个CPU上,在共享存储区域中用于存储该任务的调度标识的内存块是相同的。以图2为例,任务n无论运行于CPU1、CPU2或CPU3,存储任务n的调度标识的内存块并没有改变,从而任务n的调度标识不会因为任务n在不同CPU之间的迁移而改变。
处于用户态的任务可以通过proc文件***或***调用等方式获取到共享存储区域的物理地址,然后将共享存储区域的物理地址映射为虚拟地址,从而处于用户态的任务对应的进程可用通过访问该虚拟地址,对共享存储区域中存储的调度标识进行操作。
需要说明的是,在创建目标任务时,可以将目标任务的调度标识设置为允许调度标识。即操作***中所有任务初始的调度标识可以为允许调度标识。
另外,为了节省存储空间,可以以位图的方式将所有任务的调度标识存储在共享存储区域。如图3所示,每个任务均在共享存储区域中存在一个对应的比特位,该比特位的取值用于表示对应任务的调度标识。示例性的,当比特位的取值为0时,表示对应的任务的调度标识为允许调度标识;当比特位的取值为1时,表示对应的任务的调度标识为禁止调度标识。
需要说明的是,在Linux操作***中每个任务均存在一个全局唯一的任务标识,因此可以建立任务标识与共享存储区域中比特位的位置信息之间的映射关系,从而能够根据每个任务的任务标识,在共享存储区域中确定每个任务对应的比特位,进而确定每个任务的调度标识。
具体实现过程中,操作***获取处于用户态的目标任务的任务标识,根据目标任务的任务标识,在共享存储区域中确定目标任务对应的比特位,从而通过设置目标任务对应的比特位的取值,来设置目标任务的调度标识。
102、当需要对目标任务进行任务调度时,获取目标任务的调度标识。
具体实现过程中,操作***获取目标任务的任务标识,从而根据目标任务的任务标识,在共享存储区域中确定目标任务对应的比特位;然后,获取目标任务对应的比特位的取值,确定目标任务的调度标识。
示例性的,若操作***获取到的目标任务对应的比特位的取值为0,则确定目标任务的调度标识为允许调度标识;若操作***获取到的目标任务对应的比特位的取值为1,则确定目标任务的调度标识为禁止调度标识。
103、根据目标任务的调度标识,确定目标任务的调度方案。
具体实现过程中,若目标任务的调度标识为禁止调度标识,操作***继续运行目标任务。若目标任务的调度标识为允许调度标识时,操作***对目标任务进行任务切换,即操作***停止运行目标任务,转而运行下一个任务。
本申请实施例提供一种任务调度方法,通过给处于用户态的目标任务设置禁止调度标识,从而在对目标任务进行任务调度时,操作***根据目标任务的禁止调度标识,继续运行目标任务,保证处于用户态的目标任务的正常运行。另外,也可以给处于用户态的目标任务设置允许调度标识,从而在对目标任务进行任务调度时,操作***根据目标任务的允许调度标识,对目标任务进行任务切换,即操作***暂时停止运行目标任务,转而运行其他任务。
另外,在本申请实施例中,由于是对目标任务设置调度标识,而调度标识不因为目标任务在不同CPU之间的迁移而改变,因此本申请实施例提供的任务调度方法应用于对称多处理(Symmetrical Multi-Processing,SMP)***时,不需要禁止目标任务在不同CPU之间的迁移,也能够保证处于用户态的目标任务能够正常运行。
如图4所示,若步骤101的具体实现过程是将处于用户态的目标任务的调度标识设置为禁止调度标识,则步骤101具体包括:
1011、获取目标任务的任务标识。
1012、根据目标任务的任务标识,获取目标任务在共享存储区域中的调度标识。
1013、判断获取到的调度标识是否是禁止调度标识。
1014、若获取到的调度标识是禁止调度标识,则结束调度标识的设置流程。
1015、若获取到的调度标识不是禁止调度标识,则将目标任务在共享存储区域中的调度标识设置为禁止调度标识。
示例性的,假设比特位的取值为0时,表示对应的任务的调度标识为允许调度标识;比特位的取值为1时,表示对应的任务的调度标识为禁止调度标识。如图5所示,获取到任务n在共享存储区域对应的比特位的取值为0,即任务n的调度标识为允许调度标识,由于获取到的调度标识不是禁止调度标识,因此需要将任务n的调度标识设置为禁止调度标识,即将任务n在共享存储区域对应的比特位的取值修改为1。
通过上述方法,能够将处于用户态的目标任务的调度标识设置为禁止调度标识。
如图6所示,若步骤101的具体实现过程是将处于用户态的目标任务的调度标识设置为允许调度标识,则步骤101具体包括:
101a、获取目标任务的任务标识。
101b、根据目标任务的任务标识,获取目标任务在共享存储区域中的调度标识。
101c、判断获取到的调度标识是否是允许调度标识。
101d、若获取到的调度标识是允许调度标识,则结束调度标识的设置流程。
101e、若获取到的调度标识不是允许调度标识,则将目标任务在共享存储区域中的调度标识设置为允许调度标识。
示例性的,假设比特位的取值为0时,表示对应的任务的调度标识为允许调度标识;比特位的取值为1时,表示对应的任务的调度标识为禁止调度标识。如图7所示,获取到任务n在共享存储区域对应的比特位的取值为1,即任务n的调度标识为禁止调度标识,由于获取到的调度标识不是允许调度标识,因此需要将任务n的调度标识设置为允许调度标识,即将任务n在共享存储区域对应的比特位的取值修改为0。
通过上述方法,能够将处于用户态的目标任务的调度标识设置为允许调度标识。
可以理解的是,目标任务初始的调度标识为允许调度标识,执行图4所示的方法流程之后,目标任务的调度标识被设置为禁止调度标识,这种情况下,若要将目标任务的调度标识重新设置为允许调度标识,可以执行图6所示的方法流程。
如图8所示,本申请实施例提供一种任务调度装置,用于执行前述任务调度方法。所述装置包括:
设置单元11,用于对处于用户态的目标任务设置调度标识,所述调度标识为禁止调度标识或允许调度标识。
获取单元12,用于当需要对所述目标任务进行任务调度时,获取所述目标任务。
调度单元13,用于当所述获取单元12获取到的目标任务的调度标识为禁止调度标识时,继续运行所述目标任务;当所述目标任务的调度标识为允许调度标识,停止运行所述目标任务。
需要说明的是,所述调度标识存储于共享存储区域,所述共享存储区域为处于用户态的任务和处于内核态的任务均可以访问的存储区域。
一种具体实现方式中,所述设置单元11,还用于在创建所述目标任务时,将所述目标任务的调度标识设置为允许调度标识。
一种具体实现方式中,所述设置单元11,具体用于获取处于用户态的目标任务的任务标识;根据所述目标任务的任务标识,在共享存储区域中确定目标任务对应的比特位;设置所述目标任务对应的比特位的取值,所述比特位的取值用于表示对应的任务的调度标识。
一种具体实现方式中,所述获取单元12,具体用于获取所述目标任务的任务标识;根据所述目标任务的任务标识,在共享存储区域中确定所述目标任务对应的比特位;根据所述目标任务对应的比特位的取值,确定所述目标任务的调度标识。
本申请实施例提供一种任务调度装置,设置单元将处于用户态的目标任务设置禁止调度标识,从而在对目标任务进行任务调度时,调度单元根据目标任务的禁止调度标识,继续运行目标任务,保证处于用户态的目标任务的正常运行。另外,设置单元也可以将处于用户态的目标任务设置允许调度标识,从而在对目标任务进行任务调度时,调度单元根据目标任务的允许调度标识,对目标任务进行任务切换,即调度单元暂时停止运行目标任务,转而运行其他任务。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。