用于STM32系统的多级反馈队列调度方法技术方案

技术编号:16644400 阅读:45 留言:0更新日期:2017-11-26 16:44
本发明专利技术提供了一种用于STM32系统的多级反馈队列调度方法,包括以下步骤:S1、定义数据结构:S11、建立工作频率序列;S12、建立任务执行时间矩阵;S13、建立剩余资源矩阵。S2、调度方法:S21、当多个任务需要处理时,首先处理优先级高的优先级内任务;当某一优先级内有多个任务时首先处理含指令较多的任务;每当RTC中断到来时、任务完成时或者任务产生时对当前需处理的任务进行调度处理,对当前需处理的任务调度处理具体如下:S211、对各个处理器内核对应的数据结构进行预处理;S212、判断有无空闲处理器内核。该用于STM32系统的多级反馈队列调度方法解决现有技术中无空闲处理器内核的情况下无法合理调配运行中处理器内核而导致一些处理器内核极易损坏的问题。

Multi level feedback queue scheduling method for STM32 system

The invention provides a multi-level feedback queue scheduling method for STM32 system, which includes the following steps: S1, defining data structure: S11, establishing working frequency sequence; S12, establishing task execution time matrix; S13, establishing residual resource matrix. Methods: S21, S2, scheduling when multiple tasks to be done, with higher priority tasks first; when a priority in multiple tasks when the first instruction containing more tasks; whenever RTC interrupt arrives, when the task is completed or when the tasks have to be treated before when task scheduling processing of task scheduling processing of the current processing as follows: S211 data structure of each processor core corresponding pretreatment; S212, determine whether the idle processor core. The multilevel feedback queue scheduling method for STM32 system solves the problem that some processor cores are easily damaged due to the fact that the processor core can not be reasonably deployed in the existing technology without idle processor kernel.

【技术实现步骤摘要】
用于STM32系统的多级反馈队列调度方法
本专利技术涉及STM32系统,具体涉及一种用于STM32系统的多级反馈队列调度方法。
技术介绍
多级(假设为N级)反馈队列调度算法可以如下原理:1、设有N个队列(Q1,Q2....QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1)>Priority(Q2)>...>Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。2、对于某个特定的队列来说,里面是遵循时间片轮转法。也就是说,位于队列Q2中有N个作业,它们的运行时间是通过Q2这个队列所设定的时间片来确定的(为了便于理解,我们也可以认为特定队列中的作业的优先级是按照FCFS来调度的)。3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最低的队列)的时间片一般很大(不需要考虑这个问题)。多级反馈队列调度算法描述:1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。现在有3个作业J1、J2、J3分别在时间0、1、3时刻到达。而它们所需要的CPU时间分别是3、2、1个时间片。上述算法运作步骤如下:1、时刻0:J1到达。于是进入到队列1,运行1个时间片,时间片还未到,此时J2到达;2、时刻1:J2到达,由于时间片仍然由J1掌控,于是等待;J1在运行了1个时间片后,已经完成了在Q1中的;2个时间片的限制,于是J1置于Q2等待被调度;现在处理机分配给J2;3、时刻2:J1进入Q2等待调度,J2获得CPU开始运行;4、时刻3:J3到达,由于J2的时间片未到,故J3在Q1等待调度,J1也在Q2等待调度;5、时刻4:J2处理完成,由于J3,J1都在等待调度,但是J3所在的队列比J1所在的队列的优先级要高,于是J3被调度,J1继续在Q2等待;6、时刻5:J3经过1个时间片,完成;7、时刻6:由于Q1已经空闲,于是开始调度Q2中的作业,则J1得到处理器开始运行;J1再经过一个时间片,完成了任务;于是整个调度过程结束。虽然上述方法实现了各个任务的调度,实现了根据优先级别对各个任务进行处理。但是仍然存在的缺点为:1)对于空闲处理器内核没有将刚处理完任务的空闲处理器内核和长时间未处理任务的空闲处理器内核进行区别对待,使得有些空闲处理器内核长时间空闲,而有些空前处理器内核不间断地运行,导致不间断地运行的空前处理器内核容易因超负荷运行而损坏;2)对于无空闲处理器内核的情况,任务的是随机分配给各个运行中处理器内核的,对于已经超负荷运行的处理器内核来说负担相当重,当RTC中断到来时、任务完成时或者任务产生时其需要根据任务的优先级别依次地对各个任务一次处理,而使得有些负荷并不是很大的运行处理器内核处理当前正在处理的任务后闲置,极有可能出现闲置时间较长的情况,因此不能合理调配各个运行的处理器内核,会出现某一运行的处理器内核损坏的情况。
技术实现思路
本专利技术提供了一种用于STM32系统的多级反馈队列调度方法,解决现有技术中无空闲处理器内核的情况下无法合理调配运行中处理器内核而导致一些处理器内核极易损坏的问题。为实现上述目的,本专利技术采用了如下的技术方案:一种用于STM32系统的多级反馈队列调度方法,包括以下步骤:S1、定义数据结构:S11、建立工作频率序列(j,fj),j为频率序号,fj表示频率序号j的工作频率值,1≤j≤m且j为整数,频率序号j越大对应的工作频率值fj越大;S12、建立任务执行时间矩阵Amount[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;命令Amount[i,j]=kij,其表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量为kij;S13、建立剩余资源矩阵Resource[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;初始命令Resource[i1,j1]=maxcmdnum-Amount[i1,j1]=Δkij,式中,Amount[i,j]表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量;maxcmdnumi处理器内核i在最大工作频率值fm下设定时间内能够执行的平均指令数量;S2、调度方法:S21、当多个任务需要处理时,首先处理优先级高的优先级内任务,多级反馈队列设有r个优先级,所有优先级按优先级高低排序后依次为Task[1]、…、Task[x]、Task[x+1]、…以及Task[r],处理时就是先处理属于Task[1]优先级的任务;当某一优先级内有多个任务时首先处理含指令较多的任务,设某一优先级中有t个任务,所述优先级中t个任务按照指令多少排序后为TP[1]、…、TP[y]、TP[y+1]、…以及TP[t],那么处理所述优先级内任务时就是首先处理TP[1]任务;每当RTC中断到来时、任务完成时或者任务产生时对当前需处理的任务进行调度处理,设当前需处理的任务为TP[y],对当前需处理的任务TP[y]的调度处理具体如下:S211、对各个处理器内核对应的数据结构进行预处理,具体包括以下步骤:S211a、判断每一处理器内核是否正在运行,若否,则进行步骤S211b,且同时计算Resource[i1,j1]=maxcmdnumi1,式中,i1为当前判断为运行处理器内核的器序号,j1为i1处理器内核的上一次工作频率,maxcmdnumi1为i1处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;若是,则进行步骤S211c,且同时计算Resource[i2,j2]=maxcmdnumi2-Amount[i2,j2],式中,i2为当前判断为运行处理器内核的器序号,j2为i2处理器内核的当前工作频率,maxcmdnumi2为i2处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;S212、判断有无空闲处理器内核,若有,则将前需处理的任务为TP[y]分配给一空闲处理器内核处理;若无,则进行步骤S213;S213、无空闲处理器内核处理步骤具体如下:S213a、寻找所有非空闲状态处理器内核中Resour本文档来自技高网
...

【技术保护点】
一种用于STM32系统的多级反馈队列调度方法,其特征在于,包括以下步骤:S1、定义数据结构:S11、建立工作频率序列(j,fj),j为频率序号,fj表示频率序号j的工作频率值,1≤j≤m且j为整数,频率序号j越大对应的工作频率值fj越大;S12、建立任务执行时间矩阵Amount[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;命令Amount[i,j]=kij,其表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量为kij;S13、建立剩余资源矩阵Resource[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;初始命令Resource[i1,j1]=maxcmdnum‑Amount[i1,j1]=Δkij,式中,Amount[i,j]表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量;maxcmdnumi处理器内核i在最大工作频率值fm下设定时间内能够执行的平均指令数量;S2、调度方法:S21、当多个任务需要处理时,首先处理优先级高的优先级内任务,多级反馈队列设有r个优先级,所有优先级按优先级高低排序后依次为Task[1]、…、Task[x]、Task[x+1]、…以及Task[r],处理时就是先处理属于Task[1]优先级的任务;当某一优先级内有多个任务时首先处理含指令较多的任务,设某一优先级中有t个任务,所述优先级中t个任务按照指令多少排序后为TP[1]、…、TP[y]、TP[y+1]、…以及TP[t],那么处理所述优先级内任务时就是首先处理TP[1]任务;每当RTC中断到来时、任务完成时或者任务产生时对当前需处理的任务进行调度处理,设当前需处理的任务为TP[y],对当前需处理的任务TP[y]的调度处理具体如下:S211、对各个处理器内核对应的数据结构进行预处理,具体包括以下步骤:S211a、判断每一处理器内核是否正在运行,若否,则进行步骤S211b,且同时计算Resource[i1,j1]=maxcmdnumi1,式中,i1为当前判断为运行处理器内核的器序号,j1为i1处理器内核的上一次工作频率,maxcmdnumi1为i1处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;若是,则进行步骤S211c,且同时计算Resource[i2,j2]=maxcmdnumi2‑Amount[i2,j2],式中,i2为当前判断为运行处理器内核的器序号,j2为i2处理器内核的当前工作频率,maxcmdnumi2为i2处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;S212、判断有无空闲处理器内核,若有,则将前需处理的任务为TP[y]分配给一空闲处理器内核处理;若无,则进行步骤S213;S213、无空闲处理器内核处理步骤具体如下:S213a、寻找所有非空闲状态处理器内核中Resource[i2,j2]最大的处理器内核,式中,i2为当前判断为运行处理器内核,j2为i2处理器内核的当前工作在的频率序号,Resource[i2,j2]为i2处理器内核在当前频率序号下工作的最大能完成的平均指令数量,设Resource[i2,j2]最大值为Max2;S213b、所有非空闲状态处理器内核中,从器编号i由小到大,Resource[i,j]第一个等于Max2处理器内核为第二指定处理器内核iz2,将当前需处理的任务TP[y]分配给第二指定处理器内核iz2处理;S213c、通过公式Resource[iz2,jz2]=Amount[iz2,m]‑Resource[iz2,jz2]‑NTP[y]计算得到第二指定频率序号jz2,式中NTP[y]为当前需处理任务TP[y]的指令数量,第二指定频率序号jz2为第二指定处理器内核iz2处理当前需处理的任务TP[y]时的工作频率。...

【技术特征摘要】
1.一种用于STM32系统的多级反馈队列调度方法,其特征在于,包括以下步骤:S1、定义数据结构:S11、建立工作频率序列(j,fj),j为频率序号,fj表示频率序号j的工作频率值,1≤j≤m且j为整数,频率序号j越大对应的工作频率值fj越大;S12、建立任务执行时间矩阵Amount[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;命令Amount[i,j]=kij,其表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量为kij;S13、建立剩余资源矩阵Resource[i,j],其中,i表示器序号为i的处理器内核,1≤i≤n且i为整数;初始命令Resource[i1,j1]=maxcmdnum-Amount[i1,j1]=Δkij,式中,Amount[i,j]表示i处理器内核在频率序号j下设定时间内能够执行的平均指令数量;maxcmdnumi处理器内核i在最大工作频率值fm下设定时间内能够执行的平均指令数量;S2、调度方法:S21、当多个任务需要处理时,首先处理优先级高的优先级内任务,多级反馈队列设有r个优先级,所有优先级按优先级高低排序后依次为Task[1]、…、Task[x]、Task[x+1]、…以及Task[r],处理时就是先处理属于Task[1]优先级的任务;当某一优先级内有多个任务时首先处理含指令较多的任务,设某一优先级中有t个任务,所述优先级中t个任务按照指令多少排序后为TP[1]、…、TP[y]、TP[y+1]、…以及TP[t],那么处理所述优先级内任务时就是首先处理TP[1]任务;每当RTC中断到来时、任务完成时或者任务产生时对当前需处理的任务进行调度处理,设当前需处理的任务为TP[y],对当前需处理的任务TP[y]的调度处理具体如下:S211、对各个处理器内核对应的数据结构进行预处理,具体包括以下步骤:S211a、判断每一处理器内核是否正在运行,若否,则进行步骤S211b,且同时计算Resource[i1,j1]=maxcmdnumi1,式中,i1为当前判断为运行处理器内核的器序号,j1为i1处理器内核的上一次工作频率,maxcmdnumi1为i1处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;若是,则进行步骤S211c,且同时计算Resource[i2,j2]=maxcmdnumi2-Amount[i2,j2],式中,i2为当前判断为运行处理器内核的器序号,j2为i2处理器内核的当前工作频率,maxcmdnumi2为i2处理器内核在设定时间内在最大频率值fm下能够执行的平均指令数量;S212、判断有无空闲处理器内核,若有,则将前需处理的任务为TP[y]分配给一空闲处理器内核处理;若无,则进行步骤S213;S213、无空闲处理器内核处理步骤具体如下:S213a、寻找所有非空闲状态处理器内核中Resource[i2,j2]...

【专利技术属性】
技术研发人员:王运兴余海龙王皓
申请(专利权)人:四川华泰电气股份有限公司
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1