嵌入式系统中微程的调度系统、方法、终端及存储介质与流程

文档序号:33190059发布日期:2023-02-04 08:03阅读:26来源:国知局
嵌入式系统中微程的调度系统、方法、终端及存储介质与流程

1.本技术涉及嵌入式系统技术领域,尤其是涉及一种嵌入式系统中微程的调度系统、方法、终端及存储介质。


背景技术:

2.分布式嵌入式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的嵌入式计算节点组成的系统,也因为分布式嵌入式系统的协调性,单一的计算节点实现的功能有限,所以为了节约资源,在部署计算节点时为其分配的硬件资源较少。
3.调度器作为计算节点管控的核心,如何高效地组织和管理计算节点有限的硬件资源,满足其所属的分布式嵌入式系统在功能和性能方面的特殊需求成为研究热点。


技术实现要素:

4.本技术提供一种嵌入式系统中微程的调度系统、方法、终端及存储介质,具有提高嵌入式计算节点的资源利用率的特点。
5.本技术目的一是提供一种嵌入式系统中微程的调度系统。
6.本技术的上述申请目的一是通过以下技术方案得以实现的:一种嵌入式系统中微程的调度系统,包括等待队列、就绪队列、运行时栈以及完成队列;所述等待队列用于获取微程集并释放微程至就绪队列中,所述微程集包括多个微程;所述就绪队列与所述等待队列连接,所述就绪队列用于在接收到所述微程时,按照截止时间由短至长的顺序排列微程;所述运行时栈与所述就绪队列连接,所述运行时栈用于调取就绪队列的队首微程,并判断所述队首微程是否满足:d1《di且d1《δi,其中,d1为队首微程的截止时间,di为就绪队列释放队首微程后重新排序而得的新的队首微程的截止时间,d1为队首微程的最小继承时间,δi为队首微程的继承截止时间;若满足,则运行时栈运行所述队首微程并传输至完成队列中;判断运行时栈是否遍历就绪队列中的微程;若是,则生成结果信息。
7.通过采用上述技术方案,等待队列获取微程集并释放微程至就绪队列中,就绪队列按照截止时间由短至长的顺序进行排序,从而便于运行时栈依次调取就绪队列中的队首微程,直至遍历就绪队列中的微程。由此可知,微程集中的微程能够依次执行,不会出现调度中优先级的反转问题,也不会出现微程抢占访问硬件资源而产生死锁的问题,使得每一个微程都能够有效利用嵌入式计算节点中有限的硬件资源,即实现了提高嵌入式计算节点的资源利用率的目的。
8.本技术目的二是提供一种嵌入式系统中微程的调度方法。
9.本技术的上述申请目的二是通过以下技术方案得以实现的:一种嵌入式系统中微程的调度方法,由等待队列、就绪队列、运行时栈以及完成队列共同执行,包括:等待队列获取微程集并释放至就绪队列中;就绪队列按照截止时间由短至长的顺序排列微程;运行时栈调取队首微程,并判断队首微程是否满足:d1《di且d1《δi,其中,d1为队首微程的截止时间,di为就绪队列释放队首微程后重新排序而得的新的队首微程的截止时间, d1为队首微程的最小继承时间,δi为队首微程的继承截止时间;若满足,则运行时栈运行队首微程并传输至完成队列中;判断运行时栈是否遍历就绪队列中的微程;若是,则生成结果信息。
10.本技术在一较佳示例中可以进一步配置为:在所述等待队列获取微程集之前,还包括:提取微程集中每一个微程的截止时间di、执行周期ti以及微程量ci;构建h(t)函数和w(t)函数:其中,h(t)表示从0到t时间段内,cpu需要从微程集中获取的微程量;其中,w(t)表示从0到t时间段内,所有提交给cpu的微程的总和;建立系数为1的线性函数,将h(t)函数和w(t)函数放入系数为1的线性函数中;判断w(t)曲线是否先于h(t)曲线越过对角线;若是,则输出微程集至等待队列中。
11.本技术在一较佳示例中可以进一步配置为:在所述就绪队列按照截止时间由短至长的顺序排列微程时,包括:提取就绪队列中的每一个微程的截止时间和最小继承时间;依据就绪队列中的每一个微程的截止时间和最小继承时间建立继承截止时间表;所述就绪队列的队首微程在被运行时栈调度执行时,根据所述继承截止时间表访问硬件资源。
12.本技术在一较佳示例中可以进一步配置为:所述运行时栈调取队首微程后,包括:所述就绪队列将剩余的微程的排序均向前移动一个排序。
13.本技术在一较佳示例中可以进一步配置为:所述微程包括一个或者多个程序段,所述生成结果信息包括:计算微程的每一个程序段的截止时间:程序段n的截止时间=程序段n-1的截止时间+(程序段n-1的advance值-程序段 n的advance值),其中advance=σ其后各程序段的执行时间+σ各程序段之间最大阻塞时间,n为2以上的任意程序段;
将微程集中包含的微程的程序段的截止时间相加得到实际的总截止时间;将所述实际的总截止时间标记为结果信息并输出。
14.本技术目的三是提供一种智能终端。
15.本技术的上述申请目的三是通过以下技术方案得以实现的:一种终端,包括存储器和处理器,所述存储器上存储有能够被处理器加载并执行的上述嵌入式系统中微程的调度方法的计算机程序指令。
16.本技术目的四是提供一种计算机介质,能够存储相应的程序。
17.本技术的上述申请目的四是通过以下技术方案得以实现的:一种计算机可读存储介质,存储有能够被处理器加载并执行上述任一种嵌入式系统中微程的调度方法的计算机程序。
18.综上所述,本技术包括以下至少一种有益技术效果:1.等待队列获取微程集并释放微程至就绪队列中,就绪队列按照截止时间由短至长的顺序进行排序,从而便于运行时栈依次调取就绪队列中的队首微程,直至遍历就绪队列中的微程。由此可知,微程集中的微程能够依次执行,不会出现调度中优先级的反转问题,也不会出现微程抢占访问硬件资源而产生死锁的问题,使得每一个微程都能够有效利用嵌入式计算节点中有限的硬件资源,即实现了提高嵌入式计算节点的资源利用率的目的。
附图说明
19.图1是本技术实施例的嵌入式系统中微程的调度系统图。
20.图2是本技术实施例的嵌入式系统中微程的调度方法流程图。
21.图3是本技术实施例的嵌入式系统中判断微程集中的微程是否满足调度规则的示例图。
22.附图标记说明:1、等待队列;2、就绪队列;3、运行时栈;4、完成队列。
具体实施方式
23.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的全部其他实施例,都属于本技术保护的范围。
24.本技术基于嵌入式计算节点硬件资源有限,而嵌入式计算节点又需要配合所属的嵌入式系统完成高实时任务的情况下,提出了微程的edfi调度策略。
25.首先,微程是一个或者一系列开放的程序的执行过程,具有实时性,类似于操作系统(senhopen)中的实时任务,但与一般的实时任务又有所不同。一个微程可以由一个或者多个程序段组成,微程在程序段内必须连续执行,不能进入阻塞状态;只有在某个程序段执行结束后,微程才能进入阻塞状态。也就是说,微程是一段短小快速执行的程序,每个微程都有一个运行的截止时间,微程必须在这个截止时间之前执行完成。
26.现有技术中,操作系统的微程调度采用的是最早截止时间优先(earliest deadlinefirst edf)的调度策略。edf调度策略是一个硬实时的调度算法,保证了事务完
成的实时性。所以,对完成嵌入式计算节点频繁发生的、高并发度的、执行过程比较短的事务,微程具有无可比拟的优势。然而,使用edf调度策略会使高优先级的任务抢占低优先级的任务,任务的抢占会造成两个问题,一个就是调度中优先级的反转,另一个就是访问共享的硬件资源而产生死锁。
27.由于edf调度策略具有抢占性,会带来优先级反转和死锁问题,为此,本技术提出了扩展优化的最早截止时间(earliest deadline first with deadline inheritance,edfi)的调度策略。edfi调度策略是一种在edf调度策略的基础上结合了共享资源截止时间继承的实时调度协议。技术人员只需要指定一个微程的时间限制和资源需求,edfi便可以自动处理微程的加载、调度、分发和资源同步等事务,使得在运行微程的过程中避免了不必要的微程切换,解决了由于抢占优先级和竞争共享的硬件资源而带来的问题。另外,edfi调度策略的代码量和运行时负荷非常小,使其能够完全适配于嵌入式计算节点轻量级的内核。
28.上述的嵌入式计算节点也称为无线传感器,多个无线传感器组成嵌入式系统,位于同一个嵌入式系统中的无线传感器用于通信、协调完成共同的任务。
29.为了便于说明edfi调度策略,以下提出了一种嵌入式系统中微程的调度系统,具体如图1所示。
30.一种嵌入式系统中微程的调度系统包括等待队列1、就绪队列2、运行时栈3以及完成队列4。等待队列1、就绪队列2、运行时栈3以及完成队列4依次连接,也可以认为在等待队列1和就绪队列2、就绪队列2和运行时栈3、运行时栈3和完成队列4之间均搭建有用于传输微程的桥,微程在edfi调度策略下经过等待队列1、就绪队列2、运行时栈3 以及完成队列4,或者停留在等待队列1、就绪队列2、运行时栈3以及完成队列中的任意一个队列中。
31.微程位于不同的队列中具有不同的状态。例如,当微程位于就绪队列2时,微程处于就绪态;当微程位于运行时栈3且正在被运行时,微程处于执行态;当微程位于完成队列 4时,微程处于完成态。另外,微程位于运行时栈3中还具有被抢占和阻塞两种状态,但在本实施例中,由于采用了edfi调度策略,而edif调度策略正是用于解决微程之间抢占优先级和竞争共享的硬件资源的问题,因此,本技术的运行时栈3中的微程不会再存在被抢占和被阻塞两种状态。
32.具体地,等待队列1存放等待释放的微程,当一个微程放弃嵌入式计算节点中的 cpu使用或者到达截止时间时,会被放入等待队列1中。而当cpu需要使用任意一个微程时,又将会驱动等待队列1释放该微程,等待队列1释放的微程将会进入就绪队列2。
33.就绪队列2获取等待队列1释放的微程,并对获取到的微程按照截止时间由短至长的顺序进行排序。
34.运行时栈3调取就绪队列2中的队首微程,并在队首微程运行结束后输入至完成队列4中,然后运行时栈3又将从就绪队列2中调取新的队首微程,直至遍历完就绪队列2中的微程。当就绪队列2中的微程的下一次执行周期到来时,运行时栈3依然按照调取队首微程的方式遍历就绪队列2中的微程。
35.为了便于说明微程在edfi调度策略下经过等待队列1、就绪队列2、运行时栈3以及完成队列4的过程,本技术还提供了一种嵌入式系统中微程的调度方法,参照图2,该方法的主要流程描述如下。
36.步骤s1:获取微程集,微程集包括多个微程,采用预设的排列规则排列微程集中的微程。
37.获取微程集之前,需要判断微程集中的微程是否满足调度规则,只有满足调度规则的微程集才会进入调取系统中,不满足调度规则的微程集则被丢弃。具体地,获取到微程集后,首先提取微程集中每一个微程的截止时间、执行周期以及微程量,分别用d、t、c表示,然后再根据微程的截止时间、执行周期以及微程量建立表格,例如表1所示:微程集diticiτ1341τ2581τ36102τ49154表1上述的di是微程的截止时间,ti是微程的周期,ci是微程的微程量。针对于τ1来说,微程τ1每隔4个时间单位被运行一次,消耗cpu的最长时间为1个时间单位,而且必须在3 个时间单位之前完成,即ci≤di≤ti。
38.最后,得到微程集的利用率u=σci/ti,而若要使微程集可调度,则微程集的利用率必须满足u≤1。为了使微程集可调度,本实施例提出了cpu需求函数h(t)和工作量函数w(t):其中,h(t)表示从0到t时间段内,cpu需要从微程集中获取的微程量,其中,w(t)表示从0到t时间段内,所有提交给cpu的微程的总和。
39.另外,基于“对任意一个长为l的时间段,如在[0,l]时间段内所有被加载的微程量在时间l之前可以被完成,那么这些微程量就可以在任何一个[t,t+l]的时间段内被完成”的理论,假设微程集内的所有微程都在t=0的时间点被同时加载,这样对微程的响应时间便会最长;从t=0的时间点开始,如果每个微程都在到达它的截止时间之前完成,那么这些微程便可以在任何一个时间点被释放,例如表1中的微程的释放为图3所示。
[0040]
参照图3,为了表示w(t)函数和h(t)函数的关系,建立一个系数为1的线性函数,并将w(t)函数和h(t)函数放入系数为1的线性函数中。其中,w(t)函数与对角线之间的直线距离表示所有被提交微程的剩余工作量总和。可以看到在图3的l点处,所有的微程都被完成,即微程集中的微程已经全部被调度,此时,cpu处于空闲状态。h(t)表示在时间点t处必须要完成的工作量。如果h(t)的曲线越过了对角线,表示微程集提供的微程量比cpu当前所能处理的微程量要大,此时表示微程集的调度不可行。
[0041]
因此,判断微程集是否满足调度规则就是跟踪w(t)和h(t)曲线,如果w(t)曲线先于h(t)曲线越过对角线,那么表示微程集是可调度的,图2中所示的微程集便是可调度的。也就是说,在建立微程集时可以遵循w(t)曲线先于h(t)曲线越过对角线的原则,在微程集不满足w(t)曲线先于h(t)曲线越过对角线时,便可以丢弃一个微程集。
[0042]
现有技术中,在建立微程集时,除了需要考虑w(t)函数和h(t)函数外,还需要考虑的一个因素是阻塞时间带来的h(t)函数的变化。这是因为当微程集中的一个微程阻塞时,会导致位于该阻塞的微程后的微程共享硬件资源的时间延后,甚至导致h(t)曲线先于w(t) 曲线越过对角线,从而造成微程集无法调度,但在本实施例中,首先根据微程集中每一个微程的截止时间和访问硬件资源的时间建立继承截止时间表,当调用某一个微程时,控制硬件资源开放与该微程的访问硬件资源的时间相同的继承截止时间,使得该微程访问硬件资源时,不会存在另一个微程也访问硬件资源的情况。也就是说,建立继承截止时间表后,微程集中的微程按照继承截止时间表依次访问硬件资源,而不存在因为多个微程共享硬件资源而出现阻塞的情况。
[0043]
由上述可知,当前判断微程集中的微程是否满足调度规则时,只需考虑微程集是否遵循w(t)曲线先于h(t)曲线越过对角线即可,而不用再考虑阻塞问题,由于缺少了阻塞条件的限制,使得本技术能够处理的微程集的数量增多,实用性更高。
[0044]
在一种可能实现的方式中,上述判断微程集中的微程是否满足调度规则的过程可以在等待队列1中进行,即等待队列1在判断出微程集满足调度规则时保留,否则在微程集不满足调度规则时丢弃。在另一种可能实现的方式中,上述判断微程集中的微程是否满足调度规则的过程可以在其他预设的模块中进行,该模块在判断出微程集满足调度规则时输入等待队列1中,而在微程集不满足调度规则时丢弃,防止不满足调度规则的微程集占用等待队列 1的空间。该预设的模块是除了等待队列1、就绪队列2、运行时栈3以及完成队列4之外的其他模块。
[0045]
等待队列1用于存放满足调度规则的微程集,还用于在cpu需要调用该微程集时,将微程集中的微程释放至就绪队列2中。而就绪队列2获取到等待队列1释放的微程后,按照截止时间由短至长的顺序排列微程。
[0046]
步骤s2:调取队首微程,并判断队首微程是否满足:d1《di且d1《δi,其中,d1为队首微程的截止时间,di为就绪队列2释放队首微程后重新排序而得的新的队首微程的截止时间,d1为队首微程的最小继承时间,δi为队首微程的继承截止时间。
[0047]
驱动运行时栈3调度就绪队列2中的微程有两种情况,一种是cpu探测到就绪队列 2中的微程已经就绪,可以认为是就绪队列2已经将微程集中的微程按照截止时间由短至长的顺序完成排列,另一种是cpu将除微程集外的微程加入到就绪队列2的头部。
[0048]
运行时栈3在驱动下,调取就绪队列2中的队首微程,并判断微程是否满足:d1《di 且d1《δi。具体地,该判断条件指:运行时栈3所调取的队首微程是否为就绪队列2中截止时间最短的微程,且该队首微程在访问硬件资源时没有其他微程也同时访问硬件资源,从而不会出现调度中优先级的反转问题,也不会出现微程抢占访问硬件资源而产生死锁问题。
[0049]
因此,判断队首微程是否满足d1《di且d1《δi就是为了判断该微程集是否满足edfi 调度策略。当判断结果为该微程集不满足edfi调度策略时,为了便于提醒技术人员或者用户,cpu生成预警信息,如在嵌入式计算节点处采用语音提示“微程集不满足调取要求,请注意调整”或者指示灯亮红灯等。而当判断结果为该微程集满足edfi调度策略时,进入下一步骤。
[0050]
步骤s3:若满足,则运行时栈3运行队首微程并传输至完成队列4中。
[0051]
在微程集满足edfi调度策略的情况下,运行时栈3所调取的队首微程截止时间最
短且访问硬件资源的时间与其他微程访问硬件资源的时间不冲突,因此,运行时栈3能够完整的运行所调取的队首微程,并在完成队首微程后放入完成队列4中。运行时栈3输出完成运行的队首微程的同时,又将从就绪队列2中调取新的队首微程,并重复上述判断队首微程是否满足d1《di且d1《δi的操作。
[0052]
需要说明的是,在运行时栈3调取就绪队列2的队首微程后,就绪队列2将重新调整微程的排序。本实施例中,就绪队列2重新调整微程的排序存在三种情况:第一种情况:就绪队列2失去队首微程,则将剩余的微程的排序均向前移动一个排序,如将排序第二的微程向前移动一个排序后变为新的队首微程。
[0053]
第二种情况:就绪队列2中加入新的微程,则判断新加入的微程的截止时间,根据截止时间的大小插入对应的位置中,该对应的位置是指新加入的微程的截止时间小于前一排序的微程的截止时间,而大于后一排序的微程的截止时间。
[0054]
第三种情况:就绪队列2失去队首微程和就绪队列2中加入新的微程同时发生,则为了防止避免出现队首微程的截止时间大于新加入的微程的截止时间,而造成运行时栈3调取到队首微程后又将调取新加入的微程,导致微程之间优先级反转的情况出现。因此,在此种情况下,将新加入的微程放置在就绪队列2的队尾,在运行时栈3完成运行队首微程的任务后,就绪队列2才会根据新加入的微程的截止时间的大小插入对应的位置中,即,将第三种情况转换为第二种情况,以此才能满足edfi调度策略。
[0055]
步骤s4:判断运行时栈3是否遍历就绪队列2中的微程。
[0056]
由步骤s3可知,运行时栈3输出完成运行的队首微程的同时,又将从就绪队列2中调取新的队首微程,并重复上述判断队首微程是否满足d1《di且d1《δi的操作,直至遍历就绪队列2中的微程,从而完成调度微程集一个周期的目的,所以在微程集下一次调度周期到来时,运行时栈3也将会按照前一次的调度规则调取微程集中的微程。
[0057]
步骤s5:若是,则生成结果信息。
[0058]
由于微程是由一个或者多个程序段组成的,每个程序段都连续执行,不能阻塞,程序段之间可以阻塞。在微程的edfi调度策略中,实际调度的单位是微程的程序段,每个程序段都有一个截止时间:程序段n的截止时间=程序段n-1的截止时间+(程序段n-1的advance值-程序段 n的advance值),其中advance=σ其后各程序段的执行时间+σ各程序段之间最大阻塞时间,n为2以上的任意程序段。
[0059]
依次通过上式计算微程中每个程序段的截止时间后,得到微程集中所有的微程全部执行完毕后实际的总截止时间,即得到结果信息,以便于修正微程集的总截止时间或者每个微程的截止时间。
[0060]
本技术一种嵌入式系统中微程的调度方法的实施原理为:首先,依据edfi调度策略建立微程集,然后输入等待队列1中,等待队列1在cpu有执行需求时释放微程至就绪队列2中,就绪队列2按照截止时间由短至长的顺序进行排序,从而便于运行时栈3按照 edfi调度策略依次调取就绪队列2中的队首微程,直至遍历就绪队列2中的微程。由此可知,微程集中的微程在edfi调度策略下,能够依次执行,不会出现调度中优先级的反转问题,也不会出现微程抢占访问硬件资源而产生死锁的问题,使得每一个微程都能够有效利用嵌入式计算节点中有限的硬件资源,即实现了提高嵌入式计算节点的资源利用率的目的。
[0061]
为了更好地执行上述方法的程序,本技术还提供一种终端,终端包括存储器和处理器。
[0062]
其中,存储器可用于存储指令、程序、代码、代码集或指令集。存储器可以包括存储程序区和存储数据区,其中存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令以及用于实现上述嵌入式系统中微程的调度方法的指令等;存储数据区可存储上述嵌入式系统中微程的调度方法中涉及到的数据等。
[0063]
处理器可以包括一个或者多个处理核心。处理器通过运行或执行存储在存储器内的指令、程序、代码集或指令集,调用存储在存储器内的数据,执行本技术的各种功能和处理数据。处理器可以为特定用途集成电路、数字信号处理器、数字信号处理装置、可编程逻辑装置、现场可编程门阵列、中央处理器、控制器、微控制器和微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本技术实施例不作具体限定。
[0064]
本技术还提供一种计算机可读存储介质,例如包括:u盘、移动硬盘、只读存储器 (read only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。该计算机可读存储介质存储有能够被处理器加载并执行上述嵌入式系统中微程的调度方法的计算机程序。
[0065]
以上描述仅为本技术的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本技术中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离前述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其他技术方案。例如上述特征与本技术中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1