一种Linux系统的任务调度方法、系统及相关装置与流程

文档序号:16879875发布日期:2019-02-15 22:01阅读:149来源:国知局
一种Linux系统的任务调度方法、系统及相关装置与流程

本申请涉及软件系统领域,特别涉及一种linux系统的任务调度方法、系统、一种计算机可读存储介质和一种终端。



背景技术:

最近几年,在日常生活、工业控制、军事、航空航天等方面,嵌入式系统都有着非常广泛的应用。嵌入式系统目前主要有:windowsce、vxworks、qnx等,它们都具有较好的实时性、系统可靠性、任务处理随机性等优点,但是它们的价格普遍偏高。而嵌入式linux以其非常低廉的价格,可以大大的降低成本,逐渐成为嵌入式操作系统的首选。但是,作为通用操作系统的linux,由于其在实时应用领域的技术障碍,要应用在嵌入式领域,还必须对linux内核作必要的改进。最重要的是,现在的linux系统缺乏有效的任务调度以满足嵌入式需求。因此如何在嵌入式linux系统实现任务调度室本领域技术人员亟需解决的技术问题。



技术实现要素:

本申请的目的是提供一种linux系统的任务调度方法、系统、一种计算机可读存储介质和一种终端,解决现有的linux系统中的任务调度难以满足嵌入式需求的问题。

为解决上述技术问题,本申请提供一种linux系统的任务调度方法,具体技术方案如下:

当检测到任务进入所述linux系统后,确定所述任务的执行需求类别;所述执行需求类别包括硬实时任务、软实时任务和非实时任务;

若所述任务为所述硬实时任务,则为所述任务设定松弛时间,并根据所述松弛时间利用优先调度算法对所述任务进行任务调度。

若所述任务为所述软实时任务或所述非实时任务,采用轮转调度算法对所述任务进行任务调度。

其中,确定所述任务的执行需求类别包括:

根据所述linux系统中的task_struct属性中policy的取值确定所述任务的执行需求类别。

其中,还包括:

若所述linux系统存在软中断,判断是否存在所述硬实时任务需要执行;

若是,在所述软中断的前半部分执行结束后,先执行所述硬实时任务,再执行所述软中断的后半部分。

其中,在所述任务进入所述linux系统前,还包括:

提高所述linux系统的内核定时参数频率或提高系统时钟的分辨率。

本申请还提供一种linux系统的任务调度系统,包括:

确定模块,用于当检测到任务进入所述linux系统后,确定所述任务的执行需求类别;所述执行需求类别包括硬实时任务、软实时任务和非实时任务;

第一调度模块,用于若所述任务为所述硬实时任务,则为所述任务设定松弛时间,并根据所述松弛时间利用优先调度算法对所述任务进行任务调度。

第二调度模块,用于若所述任务为所述软实时任务或所述非实时任务,采用轮转调度算法对所述任务进行任务调度。

其中,所述确定模块包括:

确定单元,用于根据所述linux系统中的task_struct属性中policy的取值确定所述任务的执行需求类别。

其中,还包括:

判断模块,用于若所述linux系统存在软中断,判断是否存在所述硬实时任务需要执行;

顺序执行模块,用于所述判断模块判断为是时,在所述软中断的前半部分执行结束后,先执行所述硬实时任务,再执行所述软中断的后半部分。

其中,还包括:

计时优化模块,用于提高所述linux系统的内核定时参数频率或提高系统时钟的分辨率。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的任务调度方法的步骤。

本申请还提供一种终端,包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上所述的任务调度方法的步骤。

本申请所提供的一种linux系统的任务调度方法,包括:当检测到任务进入所述linux系统后,确定所述任务的执行需求类别;所述执行需求类别包括硬实时任务、软实时任务和非实时任务;若所述任务为所述硬实时任务,则为所述任务设定松弛时间,并根据所述松弛时间利用优先调度算法对所述任务进行任务调度。若所述任务为所述软实时任务或所述非实时任务,采用轮转调度算法对所述任务进行任务调度。

本申请根据任务的实时性将任务划分为三类,即硬实时任务、软实时任务和非实时任务,实现三类任务对应两条任务队列。可以保证紧急需要执行的任务也即硬实时任务可以在规定的松弛时间内完成,提高对于硬实时任务的调度效率,提高linux系统的任务调度性能,从而满足linux系统的嵌入式需求。本申请还提供一种linux系统的任务调度系统、计算机可读存储介质和一种终端,具有上述有益效果,此处不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种linux系统的任务调度方法的流程图;

图2为本申请实施例所提供的一种linux系统的任务调度系统结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种linux系统的任务调度方法的流程图,该任务调度方法包括:

s101:当检测到任务进入所述linux系统后,确定所述任务的执行需求类别;

在此对于如何检测到任务进入linux系统不作限定,通常由新的任务时,该新任务会自动进入任务队列,等待被处理。

本步骤旨在对任务进行划分,按照执行需求类别进行划分成硬实时任务、软实时任务和非实时任务。硬实时任务要求系统确保任务执行最坏情况下的执行时间,即必须满足实时事件的响应时间的截止期限,否则,将引发致命的错误。软实时任务是指统计意义上的实时,一般整体吞吐量大或整体响应速度快,但不能保证特定任务在指定时期内完成。非实时任务对系统响应时间的要求则更低。

在此对于如何确定任务的执行需求类别不作限定。优选的,可以根据所述linux系统中的task_struct属性中policy的取值确定所述任务的执行需求类别。当然,还可以有其他确定方法,例如读取预设设置的实时性列表等等。

划分任务类别的目的是针对不同的实时性任务,分别采用不同的调度方法进行处理。

s102:若所述任务为所述硬实时任务,则为所述任务设定松弛时间,并根据所述松弛时间利用优先调度算法对所述任务进行任务调度。

若任务为硬实时任务,即必须满足实时事件的响应时间的截止期限,此时在系统中为每一个任务设定松弛时间,在此对于松弛时间的设定方法不作限定。优选的,任务的松弛时间等于任务的截止期减去任务执行时间、当前时间,即:laxity=deadline-current_time-cpu_time_needed,系统优先执行具有最小松弛时间的任务。换句话说,系统按照松弛时间由短到长的顺序执行硬实时任务。

为了严格保证硬实时任务的时限要求,本实施例中的linux内核实时调度器采用了优先级调度算法,即对硬实时任务采用最小松弛时间优先调度算法mlf(minimum-laxity-firstschedulingalgorithm)。优先调度算法就是根据就绪队列的各任务的松弛时间来分配优先级,松弛时间最小的任务具有最高的优先级。

s103:若所述任务为所述软实时任务或所述非实时任务,采用轮转调度算法对所述任务进行任务调度。

若任务不是硬实时任务,则执行优先级相对于硬实时任务而言没有那么高。此时可以采用轮转调度算法对软实时任务或非实时任务进行调度。轮转调度算法首先将所有就绪的队列按fcfs(firstcomefirstserved先来先服务)策略排成一个就绪队列,然后系统设置一定的时间片,每次给队首作业分配时间片。如果此作业运行结束,即使时间片没用完,也立刻从队列中除去此作业,并给下一个作业分配新的时间片;如果作业时间片用完没有运行结束,则将此作业重新加入就绪队列尾部等待调度。

需要说明的是,可以采用轮转调度算法统一对硬实时任务以外的所有任务进行调度,当然也可以在软实时任务和非实时任务之间设置一定的优先级顺序。即对于软实时任务设置的时间片普遍要长于非实时任务,或者令软实时任务先进入系统,这样按照fcfs策略编排任务调度队列(也即上文的“就绪队列”)时,可以先执行软实时任务。

特别需要说明的是,s102和s103之间并无固定的顺序关系,可以如图1所示的执行顺序关系,这是因为优先处理硬实时任务的调度。实际上s102和s103之间可以同时执行,甚至s103可以先于s102执行。

基于本实施例,为了提高linux的实时性,可以设计mlf调度器,并把它作为可加载模块加入linux内核中,在实现中需对内核进行相应的修改。将处于运行状态的三类任务放入两个队列,硬实时任务放入hard_real_queue队列,采用mlf调度算法,软实时和非实时任务放入non_real_queue队列(空闲任务也在其中),使用轮转调度算法。

基于上述实施例,作为优选的实施例,还包括:

若所述linux系统存在软中断,判断是否存在所述硬实时任务需要执行;

若是,在所述软中断的前半部分执行结束后,先执行所述硬实时任务,再执行所述软中断的后半部分。

需要说明的是,内核把软中断处理分为两部分:前半部分(tophalf)和后半部分(bottomhalf),这为本领域所公知的内容,在此不作赘述。

在判断是否有软中断需要处理之前需判断硬实时任务所在的队列是否为空,如果不为空,即使存在软中断的后半部分需要处理,也要先调度硬实时任务投入运行,在硬实时任务所在的队列为空的条件下才去处理中断的后半部分(因为软中断的后半部分没有硬实时任务紧急)。最后,如果没有硬实时任务存在,则说明系统中只有软实时或非实时任务存在。这样可以明显提高硬实时任务的调度效率,而在没有硬实时任务时,系统性能没有变化。

基于上述实施例,作为优选的实施例,在所述任务进入所述linux系统前,还包括:

提高所述linux系统的内核定时参数频率或提高系统时钟的分辨率。

精确的计时是实时调度器正确操作所必须的,调度器通常要求在一个特定的时刻进行任务切换,计时的错误将导致背离计划的调度,引起任务释放抖动。标准linux系统时钟精度太过粗糙,时钟中断周期为10ms,不能满足特定嵌入式应用领域中对于响应时间精度的要求。

因此,基于上述实施例,还可以通过细化调度器的时钟粒度以提高任务调度效率,满足嵌入式需求。在此提供两种方式可以解决时钟粒度问题的方法:

一是通过直接修改内核定时参数hz的初值来细化时钟粒度,如将标准linux中内核定时参数hz改为10000,则时钟粒度可以达到100us,这种方式虽然会增加一些系统开销,但在强周期性环境下,对定时器的设置只需初始化一次,在一定程度上保证了处理效率。

二是通过对可编程中断定时器8254或先进的可编程中断控制器进行编程来改进linux时钟机制,以提高其时钟的分辨率,使毫秒级的粗粒度定时器变成微秒级的细粒度定时器。

当然,还可以有其他提高linux系统的内核定时参数频率或提高系统时钟的分辨率的方法,在此不一一举例限定。

基于上述实施例,作为优选的实施例,还可以通过实现任务的抢占提高任务调度的效率。

标准linux内核是不可抢占的,导致较大的延迟,增强内核的可抢占性能,可提高系统内核对实时任务的响应能力。目前,有两种方法修改linux内核以提高实时任务抢占非实时任务的能力:一是在内核中增加抢占点的方法;二是直接将linux内核改造成可抢占式内核。

插入抢占点方法是在linux内核中插入一些抢占点,当一个系统调用执行到抢占点时,如果有更高优先级的实时进程正在等待运行,那么正在执行系统调用的内核进程将会把cpu的控制权转交给等待运行的实时进程;如果没有更高优先级的实时进程等待,则当前进程将继续执行,此时系统增加的开销仅仅是检测一下调度标志。

将linux内核改造成可抢占式内核方法的基本思想是产生运行调度器的机会,缩短任务发生到调度函数运行的时间间隔。此方法需要修改linux源代码中的自旋锁宏以避免竞争,并在其中引入一个称作抢占锁计数器(plc)的新的计数信号允许内核代码抢占,当它为0时,允许抢占;当其为大于0的任何值时,禁止抢占。

本申请实施例从增强内核抢占性的角度,提高linux系统的任务调度能力。

下面对本申请实施例提供的一种linux系统的任务调度系统进行介绍,下文描述的任务调度系统与上文描述的一种linux系统的任务调度方法可相互对应参照。

参见图2,图2为本申请实施例所提供的一种linux系统的任务调度系统结构示意图,该任务调度系统包括:

确定模块100,用于当检测到任务进入所述linux系统后,确定所述任务的执行需求类别;所述执行需求类别包括硬实时任务、软实时任务和非实时任务;

第一调度模块200,用于若所述任务为所述硬实时任务,则为所述任务设定松弛时间,并根据所述松弛时间利用优先调度算法对所述任务进行任务调度。

第二调度模块300,用于若所述任务为所述软实时任务或所述非实时任务,采用轮转调度算法对所述任务进行任务调度。

基于上述实施例,作为优选的实施例,所述确定模块100可以包括:

确定单元,用于根据所述linux系统中的task_struct属性中policy的取值确定所述任务的执行需求类别。

基于上述实施例,作为优选的实施例,该任务调度系统还可以包括:

判断模块,用于若所述linux系统存在软中断,判断是否存在所述硬实时任务需要执行;

顺序执行模块,用于所述判断模块判断为是时,在所述软中断的前半部分执行结束后,先执行所述硬实时任务,再执行所述软中断的后半部分。

基于上述实施例,作为优选的实施例,该任务调度系统还可以包括:

计时优化模块,用于提高所述linux系统的内核定时参数频率或提高系统时钟的分辨率。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的一种linux系统的任务调度方法的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供了一种终端,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的一种linux系统的任务调度方法的步骤。当然所述终端还可以包括各种网络接口,电源等组件。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的系统而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1