一种优化嵌入式系统中优先级反转方法与流程

文档序号:23260546发布日期:2020-12-11 18:49阅读:88来源:国知局
一种优化嵌入式系统中优先级反转方法与流程

本发明涉及计算机信息处理技术领域,特别涉及一种优化嵌入式系统中优先级反转方法。



背景技术:

在多任务并发的环境里,从概念上看,是有多个任务在同时执行,但是,事实上,任何时刻只能有一个任务处于执行状态,因此,操作系统需要识别哪些任务需要优先执行、哪些任务暂时等待,这也是本领域中经常出现的有关任务调度的问题。

在嵌入式系统中,为防止程序重复访问,关键变量资源等都带有锁定功能,也就是说,当有任务访问该变量时,该变量不允许其他任务访问。低优先级任务可能会占据变量资源,使得高优先级任务进入持续等待现象,这种现象叫做优先级反转,也因此造成许多高优先级任务被许多较低有相机任务阻塞,实时性难以得到保障;

例如:如图1所示,存在任务a,b,c,其中a任务优先级最高,b任务次高,c任务最低。由于c任务在执行时,锁定了资源,使得其他任务不得调度此任务。a任务虽然打断c任务,但是由于资源被锁定,只能退出任务。使得b任务优于a任务被执行,直到c任务调度后,才执行a任务。虽然a任务的优先级比较高,但是在本例中,其优先级程度反而不如b任务和c任务。

申请号为201710501881.9的《任务的优先级处理方法和处理装置》公开了一种任务的优先级处理方法和处理装置,其公开日为2019年1月3日,该任务的优先级处理方法中,所述任务包括第一任务、第二任务和第三任务,所述的第一任务的优先级高于所述第二任务和所述第三任务;所述方法包括:当所述第一任务由于访问第一临界区失败而被阻塞时,提升与所述第一任务共享第一临界区且正在访问所述第一临界区的第二任务的优先级;判断是否存在与第二任务共享第二临界区且正在访问所述第二临界区的第三任务;当存在所述第三任务时,提升所述第三任务的优先级。本申请实施例提供的方案避免了优先级低的第三任务拖延第二任务的执行,从而避免优先级高的第一任务延迟执行造成的优先级反转;

但是,事实上,在多核系统中,由于运算内核不止一个,各内核的优先级机制不同,某一运算内核中较低优先级任务的优先级并不能确定是所有内核中允许的最高优先级,由此导致的优先级反转问题,并未得到很好的解决。



技术实现要素:

为解决上述背景技术中提及的多任务处理中存在优先级反转的问题,本发明提供一种优化嵌入式系统中优先级反转方法,将被访问时带有锁定功能的对外寄存器更改为可重复访问的对外寄存器,以使所述对外寄存器可以同时被多个任务访问;

且所述对外寄存器仅在更新的特定时段会被锁定。

在上述方案的基础上,进一步地,所述对外寄存器上设有影子寄存器,所述影子寄存器的内容为当前所述对外寄存器的值或者更新后所述对外寄存器的值。

在上述方案的基础上,进一步地,所述更新任务对所述对外寄存器更新的特定时段,依据对外寄存器的访问情况设定。

在上述方案的基础上,进一步地,当所述对外寄存器未被其他更高优先级的任务占用时,所述对外寄存器锁定,并直接对对外寄存器的数据进行更新。

在上述方案的基础上,进一步地,当所述对外寄存器被其他优先级高于所述更新任务的任务占用时,所述更新任务则锁定所述影子寄存器,并对所述影子寄存器内的值进行更新,以便后续直接将所述影子寄存器内更新后的值直接更新至所述对外寄存器内。

在上述方案的基础上,进一步地,当更新任务访问所述对外寄存器时,存在其他更高优先级的任务需要访问所述对外寄存器时,所述更新任务被中断,并改为访问所述对外寄存器的影子寄存器,以使更高优先级的任务不会因更新任务锁定对外寄存器而无法访问,同时对所述影子寄存器内的值进行更新,以便后续直接将所述影子寄存器内更新后的值直接更新至所述对外寄存器内。

在上述方案的基础上,进一步地,当访问的任务需要改写寄存器时,以绝对变量形式存储于其他单元;所述绝对变量在更新任务对影子寄存器或者对外寄存器进行更新时会对更新的值进行修订。

在上述方案的基础上,进一步地,有且只有1个用于更新所述对外寄存器内资源的第一函数。

在上述方案的基础上,进一步地,存在1个或多个用于针对所述第一函数的值进行修订的第二函数,所述第二函数无法对第一函数进行修改。

在上述方案的基础上,进一步地,所述特定时段的时间周期少于5-6个指令周期。

在上述方案的基础上,进一步地,所述系统为单核或者多核系统。

本发明提供的优化嵌入式系统中优先级反转方法与现有的技术相比,具有以下的效果:

可以有效避免多核系统中,由于运算内核不止一个,各内核的优先级机制不同,某一内核中的较低优先级任务的优先级无法确定是允许的最高优先级,同时也能适用于单核系统,避免出现优先级反转的问题。

附图说明

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

图1为本发明提供的一种优先级翻转示例的示意图。

具体实施方式

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

本发明提供一种优化嵌入式系统中优先级反转方法,将被访问时带有锁定功能的对外寄存器更改为可重复访问的对外寄存器,以使所述对外寄存器可以同时被多个任务访问;

且所述对外寄存器仅在资源更新的特定时段会被锁定。

具体实施时,在嵌入式系统中,为防止程序重复访问,关键变量资源等都带有锁定功能,也就是说,当有任务访问该变量时,该变量不允许其他任务访问,由此导致低优先级任务可能会占据变量资源,使得高优先级任务进入持续等待现象,这种现象叫做优先级反转。

然而,本发明中被访问时带有锁定功能的对外寄存器更改为可重复访问的对外寄存器,从而提升访问效率,尤其在多核系统中,可允许其他内核访问该变量资源,缩短访问时间;

与此同时,为了避免由此导致的无法对所述对外寄存器进行数据更新,由此设定某一特定时段可以对所述对外寄存器进行数据或资源的更新;

需要说明的是,所述特定时段需根据所述对外寄存器的被访问或修改频率,在某个被访问或修改几率较低的时段进行更新;亦或者,根据更新任务的进度来判断。

优选地,所述对外寄存器上设有影子寄存器,所述影子寄存器的内容为当前所述对外寄存器的值或者更新后所述对外寄存器的值。

具体实施时,在系统中,将在对外寄存器上增设一个影子寄存器,同时将对外寄存器内的变量或值放在可访问地址中,影子寄存器内容为当前或更新的所述对外寄存器的值;在特殊时段,对所述对外寄存器的值进行更新,而这个时间点一般不会超过一定的指令周期,所述指令周期优选为5-6个。这样,在非更新的时间点,任何内核和程序均可以访问所述对外寄存器,并且都是安全的,而且所述对外寄存器也无需锁定,从而提升系统的运行效率。

优选地,包括更新任务,所述更新任务对所述对外寄存器更新的特定时段,依据对外寄存器的访问情况设定。

具体实施时,设定一个或若干个更新任务,所述更新任务则对所述对外寄存器进行更新,当然,具体更新的情况需跟进对外寄存器的访问情况而定;其中一种所述依据对外寄存器的访问情况设定的方式的实施方案,具体如下:

s1、在该资源需要更新时,启用更新任务,更新任务在执行过程中,可被所有高于它的优先级进行打断。

其中,需要说明的是,当其他任务在访问资源1时,访问的都是可对外寄存器值,而更新任务不进行对外寄存器的锁定功能,它只会锁定该对外访问寄存器的影子寄存器。因此,其他任务无法访问所述对外寄存器的影子寄存器;

s2、当存在优先级高于更新任务的其他任务需要访问所述对外寄存器时,所述对外寄存器的访问变量加1,第一任务执行完毕后,访问变量减1;

s3、在更新任务对对外寄存器进行更新前,需判断访问变量是否为0;

若访问变量为0,则关闭内核总中断,进行所述对外寄存器的数据更新;

s4、更新完成后,恢复是内核总中断。

优选地,当所述对外寄存器未被其他更高优先级的任务占用时,所述对外寄存器锁定,并直接对对外寄存器的数据进行更新。

具体实施时,当所述对外寄存器未被其他更高优先级的任务占用/调用时,关闭内核总中断,进行所述对外寄存器的数据更新,更新完成后,恢复是内核总中断。

优选地,当所述对外寄存器被其他优先级高于所述更新任务的任务占用时,所述更新任务则锁定所述影子寄存器,并对所述影子寄存器内的值进行更新,以便后续直接将所述影子寄存器内更新后的值直接更新至所述对外寄存器内。

具体实施时,当所述对外寄存器被其他优先级高于所述更新任务的任务占用时,所述更新任务则锁定所述影子寄存器,并对所述影子寄存器内的值进行更新;待所述对外寄存器未被其他更高优先级的任务占用/调用时,关闭内核总中断,进行所述对外寄存器的数据更新,即将影子寄存器内的值更新至对外寄存器中,更新完成后,恢复是内核总中断。

优选地,当更新任务访问所述对外寄存器时,存在其他更高优先级的任务需要访问所述对外寄存器时,所述更新任务被中断,并改为访问所述对外寄存器的影子寄存器,以使更高优先级的任务不会因更新任务锁定对外寄存器而无法访问,同时对所述影子寄存器内的值进行更新,以便后续直接将所述影子寄存器内更新后的值直接更新至所述对外寄存器内。

具体实施时,当更新任务访问所述对外寄存器时,存在其他更高优先级的任务需要访问所述对外寄存器时,所述更新任务被中断,并改为访问所述对外寄存器的影子寄存器,以使更高优先级的任务不会因更新任务锁定对外寄存器而无法访问,同时对所述影子寄存器内的值进行更新,待所述对外寄存器未被其他更高优先级的任务占用/调用时,关闭内核总中断,进行所述对外寄存器的数据更新,即将影子寄存器内的值更新至对外寄存器中,更新完成后,恢复是内核总中断。

优选地,当访问的任务需要改写寄存器时,以绝对变量形式存储于其他单元;所述绝对变量在更新任务对影子寄存器或者对外寄存器进行更新时会对更新的值进行修订。

具体实施时,所述其他单元可以为增量寄存器等。

所述结构体变量如下:(以c语言为例);

所述变量更新执行方案:

步骤1关所有中断(包括其他内核);

步骤2打开变量busy标志位,设置为禁止读取该寄存器状态;

步骤3将影子寄存器中的数值加上增量值送入寄存器中;

步骤4解锁busy标志位;

步骤5使能所有中断。

优选地,有且只有1个用于更新所述对外寄存器内资源的第一函数。

具体实施时,所述第一函数可以为:update_variblenum()。

所述第二函数可以为:

优选地,存在1个或多个用于针对所述第一函数的值进行修订的第二函数,所述第二函数无法对第一函数进行修改(只影响增量)。

优选地,所述特定时段的时间周期少于5-6个指令周期。

优选地,所述系统为单核或者多核系统。

具体实施时,方式不单可以工作在多核系统中,同时也可以工作在单核系统中。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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