sporadic偶发实时任务多核分区动态优先级EDF(或者DM)调度(以及可调度性分析)经典算法详解

sporadic任务的概念:实时任务分类与术语_标biao的博客-CSDN博客,也就是任务的截止期可以小于周期。

with no loss of generality,任务集为封闭任务集,不会运行时动态加入任务,因此所有任务信息已知。那么整个算法步骤如下:

  1. 确定任务分配的顺序:比如是按照利用率降序排序,还是截止期大小排序,等等,可以有多种排序方式
  2. 如何分配核,也就是挑选核的顺序:比如按照FF,NF,WF,BF等多核实时调度—任务分配启发式算法解读FF,NF,BF,WF_标biao的博客-CSDN博客
  3. 确定了目标核后,就是每个核上采用什么调度策略:比如RM,DM,还是动态优先级EDF
  4. 确定了任务,确定了核,现在如何知道该任务在此核可不可行了,即采用的可调度性测试算法

分区EDF调度

我们从上面链接文章中可以知道,其实 FFD的可调度性是最好的,那么一下子我们就确定好了第一和第二步了(第一步是按照截止期从小到大顺序分配任务的)。由于EDF是单处理器当的最优调度算法,无论是periodic任务还是sporadic任务(有文献可查),因此,当然选EDF调度啦(理想情况,不考虑运行时开销。但是实际情况中用固定任务优先级调度RM和DM的多,但我觉得EDF未尝不可)。

然后就剩下一步,sporadic任务在一个核上是否可调度的可调度性分析问题了。我们知道periodic任务(截止期等于周期的任务)在EDF调度下的可调度性测试就是总利用率小于1即可。但是sporadic任务可不一样了,它的可调度性测试时间复杂度很高,所以用了充分性测试算法2(附录2)。该算法的名字叫做 PARTION(),伪代码如下:来自论文(The Partitioned Multiprocessor Scheduling of Sporadic Task Systems)

该分配算法的时间复杂度:

\huge DBF^{(1)}(\tau_j,t)的计算时间复杂度为\huge O(i+m),这里指当前任务的序号为 i ,因此分配完所有任务的时间复杂度为\huge \sum_{i=1}^{n}O(i+m),它的时间复杂度是\huge {\color{Red} O(n^2)},其中\huge m \le n,m表示处理器核数,n表示任务集任务数。

分区DM调度

如果每个核采用DM调度,(截止期也需要从小到大顺序分配任务的),那么只需要将上面伪代码的第3行的可调度性判定条件改一下即可,书上用的是RBF*(P111页,很好理解,这里就不啰嗦了),来自论文(The Partitioned Scheduling of Sporadic Tasks According to Static-Priorities,2006年),算法名字叫做 FBB-FFD。我觉得这个其实还可以用更精确的,这篇论文中提出了多种,大家可以看看(Partitioned Multiprocessor Fixed-Priority Scheduling of Sporadic Real-Time Tasks, 2016年),我还能提出另一种更精确的,后续写篇论文,说说这个算法。

时间复杂度同上面一样:\huge {\color{Red} O(n^2)}

附录(单核中的EDF调度可调度性测试 发展):

下面这个图来自(Fixed-Priority Schedulability of Sporadic Tasks on Uniprocessors is NP-hard)

任务模型(ci, di, pi)

精确的EDF可调度性测试算法:需要在任务集所有周期最小公倍数内Q < lcm{p1,p2,... ,pn}(因为最小公倍数表示调度再次重来了),每个时刻是否都能满足所有任务(这里说作业,更为准确)的执行量需求(下面为什么是求和形式呢,因为EDF不像固定优先级调度,EDF是根据截止期的动态优先级,所以当前作业是可能被所有其它作业干扰的),如下:(EDF-schedulability of synchronous periodic task systems is coNP-hard)

上面这个很明显是NP-hard复杂度(准确来说是 (weakly) co-NPhard,据说是NP-hard问题的补集问题,

论文【EDF在单核中,约束截止期和任意截止期sporadic任务的精确可调度性分析时coNP-hard“Edf-schedulability of synchronous periodic task systems is conp-hard】

,虽然具体区别没有深入了解,但是可以肯定的是不是多项式时间复杂度)。这里举个sporadic任务EDF调度,可调度性测试的例子:

 上述没有多项式复杂度求解,是因为需要遍历所有的Q值,这个可能太多了。

这里,我们拆开来看,单独定义为如下函数 需求上界函数DBF,如下:任务模型符号改一下(Ci, Di, Ti)

\huge \forall Q \geq 0, \sum_{i=1}^{n}DBF(\tau_i,Q) \le Q

这个本质是什么呢,就是任务i,的作业们到达时刻截止时刻都得包含在区间 t 内的作业的执行量请求。因为现在是EDF调度呀(截止期),所以截止期不在分析区间中,就代表它优先级还不够高(和固定优先级调度的本质区别),可能没有执行。而对于固定优先级调度而言,就不同了,只要高优先级作业的到达时间包含在区间里就可以了(和该作业的Di在不在没有关系),就会产生干扰量,用的就是最坏干扰时间方法(但是该方法仅仅是充分性的可调度性测试,因此有carry in job),简单转换就能知道\huge DBF(\tau_j,t) \le I(\tau_j,t)。(这两个计算都是没有更高优先级抢占时的最大执行量,其实有没有更高优先级都没有关系(我们可以用忙用期间策略证明的),我们不需要担心)如下公式:\huge I(\tau_j,t)=\left \lfloor {\frac{t}{T_j}} \right \rfloor *C_j+min{\{C_j, t \mod T_j\}}

DBF()函数也很好理解,就是扣除一个Di(因为Di总能认为是一个必要的,产生1个Ci执行量),看看剩下的还有几个完整的Ci嘛。

EDF的可调度性测试那个公式,其实跟固定优先级调度的分析方法RTA是类似(回想RTA的迭代过程),这个遍历上面的所有Q点,实际上就是类似于计算这些点的响应时间。这也难怪固定优先级调度的精确可调度性分析是NP-hard时间复杂度的证明过程,就是通过将固定优先级调度的精确分析先后RTA(里面用的是RBF请求上界函数,待会会讲)等价起来,然后,多项式时间规约到这个EDF的测试算法(已知道为NP-hard)中来呢(Fixed-Priority Schedulability of Sporadic Tasks on Uniprocessors is NP-Hard,Static-priority Real-time Scheduling: Response Time Computation is NP-hard)

由于精确EDF测试需要测试的时刻点太多了,运行时间开销太大。因此有人(Efficient Feasibility Analysis for Real-Time Systems with EDF scheduling)提出,一方面,其实DBF的值不是每个时刻点都会发生变化(从上面的例子也可以看出来),那么我们只需要测试这些会发生变化的时刻点即可(很明显就是那些截止期除以周期整数倍的时刻这样子的点),但是这个好像每人提出过这个想法,如果想做,应该可以发个论文。另一方面可以没必要测试到最小公倍数那儿去,Igerge即为需要测试的最大时刻点,如下:(Efficient Feasibility Analysis for Real-Time Systems with EDF scheduling)其实跟响应时间分析RTA的不断提高测试效率是一样的发展过程。

 EDF调度精确的可调度性测试方法无论怎么改进,还是到不了真正的多项式时间复杂度(那肯定,因为EDF-schedulability of synchronous periodic task systems is coNP-hard证明过了EDF调度的可精确调度性测试是NP-hard的),所以大家就去研究近似测试算法(也就是充分性的,不是充要的),这样就能达到多项式时间复杂度了。

知识1:EDF调度中,任务集中任务提前按照截止期从小到达排序了,那么可调度性测试时候就是逐个任务往后测试即可(如果不排序,那就只能用上面说的精确可调度性测试了)。这个特性,很神奇(因为按道理说EDF是动态优先级,大截止期的任务也可能会干扰小截止期任务的呀,这个在下面的文章中应该能找到证明过程,我没有深究了,默认了),这一点跟固定优先级任务调度时候很像。下面的充分性(近似)测试算法就是利用了这个特性。

知识2:EDF调度中,最坏情况,也是所有任务同时释放的时刻,这个特性和固定优先级调度也一样了,也很神奇,我没有深究了,默认了。

第一个EDF充分性可调度性测试算法:An Improved Schedulability Test for Uniprocessor Periodic Task Systems。可以看出这个算法的时间复杂度为O(n^2),n为任务集的任务数。

 第二个EDF充分性可调度性测试算法:大家觉得DBF()不太可能在多项式时间计算出来(这个不就是直接可以算出来吗?因此我也不太认同,但是也没有深究了),所以对它进行了近似,结果如下:

 原理就是用直线去近似DBF()这个阶梯函数了(这样计算起来确实会快),其中k表示想要保留的阶梯数(相当于通过k来指定想要的近似精度),其它的阶梯都被近似了,效果如下:

所以可调度性测试算法的最终结果如下:(这个也是需要任务集按照截止期从小到达排序了的,然后逐个任务往后测试,测试任务i,需要同时满足的两个不等式如下(其中,\huge \tau(k)表示已测试过的任务的集合,每测试完一个任务就会往这个集合添加进去),因此整个任务集可调度性测试时间复杂度也为O(n^2),n为任务集的任务数)

 

上面11.4式是用来 测试 截止期大于周期时候的任务的。?11.3式为什么这样就能充分性判定EDF可调度性了,我也没想清楚,这样岂不是和固定优先级调度时候一样的测试行为了,后面再来深究一下这个,原论文其实也有证明,大家可以看看(The Partitioned Multiprocessor Scheduling of Sporadic Task Systems)

数据挖掘算法 算法目录 18大DM算法 包名 目录名 算法名 AssociationAnalysis DataMining_Apriori Apriori-关联规则挖掘算法 AssociationAnalysis DataMining_FPTree FPTree-频繁模式树算法 BaggingAndBoosting DataMining_AdaBoost AdaBoost-装袋提升算法 Classification DataMining_CART CART-分类回归树算法 Classification DataMining_ID3 ID3-决策树分类算法 Classification DataMining_KNN KNN-k最近邻算法工具类 Classification DataMining_NaiveBayes NaiveBayes-朴素贝叶斯算法 Clustering DataMining_BIRCH BIRCH-层次聚类算法 Clustering DataMining_KMeans KMeans-K均值算法 GraphMining DataMining_GSpan GSpan-频繁子图挖掘算法 IntegratedMining DataMining_CBA CBA-基于关联规则的分类算法 LinkMining DataMining_HITS HITS-链接分析算法 LinkMining DataMining_PageRank PageRank-网页重要性/排名算法 RoughSets DataMining_RoughSets RoughSets-粗糙集属性约简算法 SequentialPatterns DataMining_GSP GSP-序列模式分析算法 SequentialPatterns DataMining_PrefixSpan PrefixSpan-序列模式分析算法 StatisticalLearning DataMining_EM EM-期望最大化算法 StatisticalLearning DataMining_SVM SVM-支持向量机算法 其他经典DM算法 包名 目录名 算法名 Others DataMining_ACO ACO-蚁群算法 Others DataMining_BayesNetwork BayesNetwork-贝叶斯网络算法 Others DataMining_CABDDCC CABDDCC-基于连通图的分裂聚类算法 Others DataMining_Chameleon Chameleon-两阶段合并聚类算法 Others DataMining_DBSCAN DBSCAN-基于密度的聚类算法 Others DataMining_GA GA-遗传算法 Others DataMining_GA_Maze GA_Maze-遗传算法在走迷宫游戏中的应用算法 Others DataMining_KDTree KDTree-k维空间关键数据检索算法工具类 Others DataMining_MSApriori MSApriori-基于多支持度的Apriori算法 Others DataMining_RandomForest RandomForest-随机森林算法 Others DataMining_TAN TAN-树型朴素贝叶斯算法 Others DataMining_Viterbi Viterbi-维特比算法 18大经典DM算法 18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的博文链接,希望能够帮助大家学。 目前追加了其他的一些经典的DM算法,在others的包中涉及聚类,分类,图算法,搜索算等等,没有具体分类。 C4.5 C4.5算法与ID3算法一样,都是数学分类算法,C4.5算法是ID3算法的一个改进。ID3算法采用信息增益进行决策判断,而C4.5采用的是增益率。详细介绍链接 CART CART算法的全称是分类回归树算法,他是一个二元分类,采用的是类似于熵的基尼指数作为分类决策,形成决策树后之后还要进行剪枝,我自己在实现整个算法的时候采用的是代价复杂度算法,详细介绍链接 KNN K最近邻算法。给定一些已经训练好的数据,输入一个新的测试数据点,计算包含于此测试数据点的最近的点的分类情况,哪个分类的类型占多数,则此测试点的分类与此相同,所以在这里,有的时候可以复制不同的分类点不同的权重。近的点的权重大点,远的点自然就小点。详细介绍链接 Naive Bayes 朴素贝叶斯算法。朴素贝叶斯算法是贝叶斯算法里面一种比较简单的分类算法,用到了一个比较重要的贝叶斯定理,用一句简单的话概括就是条件概率的相互转换推导。详细介绍链接 SVM 支持向量机算法。支持向量机算法是一种对线性和非线性数据进行分类的方法,非线性数据进行分类的时候可以通过核函数转为线性的情况再处理。其中的一个关键的步骤是搜索最大边缘超平面。详细介绍链接 EM 期望最大化算法。期望最大化算法,可以拆分为2个算法,1个E-Step期望化步骤,和1个M-Step最大化步骤。他是一种算法框架,在每次计算结果之后,逼近统计模型参数的最大似然或最大后验估计。详细介绍链接 Apriori Apriori算法是关联规则挖掘算法,通过连接和剪枝运算挖掘出频繁项集,然后根据频繁项集得到关联规则,关联规则的导出需要满足最小置信度的要求。详细介绍链接 FP-Tree 频繁模式树算法。这个算法也有被称为FP-growth算法,这个算法克服了Apriori算法的产生过多侯选集的缺点,通过递归的产生频度模式树,然后对树进行挖掘,后面的过程与Apriori算法一致。详细介绍链接 PageRank 网页重要性/排名算法。PageRank算法最早产生于Google,核心思想是通过网页的入链数作为一个网页好快的判定标准,如果1个网页内部包含了多个指向外部的链接,则PR值将会被均分,PageRank算法也会遭到LinkSpan攻击。详细介绍链接 HITS HITS算法是另外一个链接算法,部分原理与PageRank算法是比较相似的,HITS算法引入了权威值和中心值的概念,HITS算法是受用户查询条件影响的,他一般用于小规模的数据链接分析,也更容易遭受到攻击。详细介绍链接 K-Means K-Means算法是聚类算法,k在在这里指的是分类的类型数,所以在开始设定的时候非常关键,算法的原理是首先假定k个分类点,然后根据欧式距离计算分类,然后去同分类的均值作为新的聚簇中心,循环操作直到收敛。详细介绍链接 BIRCH BIRCH算法利用构建CF聚类特征树作为算法的核心,通过树的形式,BIRCH算法扫描数据库,在内存中建立一棵初始的CF-树,可以看做数据的多层压缩。详细介绍链接 AdaBoost AdaBoost算法是一种提升算法,通过对数据的多次训练得到多个互补的分类器,然后组合多个分类器,构成一个更加准确的分类器。详细介绍链接 GSP GSP算法是序列模式挖掘算法。GSP算法也是Apriori类算法,在算法的过程中也会进行连接和剪枝操作,不过在剪枝判断的时候还加上了一些时间上的约束等条件。详细介绍链接 PreFixSpan PreFixSpan算法是另一个序列模式挖掘算法,在算法的过程中不会产生候选集,给定初始前缀模式,不断的通过后缀模式中的元素转到前缀模式中,而不断的递归挖掘下去。详细介绍链接 CBA 基于关联规则分类算法。CBA算法是一种集成挖掘算法,因为他是建立在关联规则挖掘算法之上的,在已有的关联规则理论前提下,做分类判断,只是在算法的开始时对数据做处理,变成类似于事务的形式。详细介绍链接 RoughSets 粗糙集算法。粗糙集理论是一个比较新颖的数据挖掘思想。这里使用的是用粗糙集进行属性约简的算法,通过上下近似集的判断删除无效的属性,进行规制的输出。详细介绍链接 GSpan gSpan算法属于图挖掘算法领域。,主要用于频繁子图的挖掘,相较于其他的图算法,子图挖掘算法是他们的一个前提或基础算法。gSpan算法用到了DFS编码,和Edge五元组,最右路径子图扩展等概念,算法比较的抽象和复杂。详细介绍链接 Others目录下的算法: GA 遗传算法。遗传算法运用了生物进化理论的知识来寻找问题最优解的算法算法的遗传进化过程分选择,交叉和变异操作,其中选择操是非常关键的步骤,把更适应的基于组遗传给下一代。详细介绍链接 DbScan 基于空间密度聚类算法。dbScan作为一种特殊聚类算法,弥补了其他算法的一些不足,基于空间密,实现聚类效果,可以发现任意形状的聚簇。详细介绍链接 GA_Maze 遗传算法在走迷宫游戏中的应用。将走迷宫中的搜索出口路径的问题转化为遗传算法中的问题通过构造针对此特定问题的适值函数,基因移动方向的定位,巧的进行问题的求解。详细介绍链接 CABDDCC 基于连通图的分裂聚类算法。也是属于层次聚类算法主要分为2个阶段,第一阶段构造连通图。第二个阶段是分裂连通图,最终形成聚类结果。详细介绍链接 Chameleon 两阶段聚类算法。与CABDDCC算法相反,最后是通过对小簇集合的合并,形成最终的结果,在第一阶段主要是通过K近邻的思想形成小规模的连通图,第二阶段通过RI(相对互连性)和RC(相对近似性)来选一个最佳的簇进行合并。详细介绍链接 RandomForest 随机森林算法算法思想是决策树+boosting.决策树采用的是CART分类回归数,通过组合各个决策树的弱分类器,构成一个最终的强分类器,在构造决策树的时候采取随机数量的样本数和随机的部分属性进行子决策树的构建,避免了过分拟合的现象发生。详细介绍链接 KDTree K-Dimension Tree。多维空间划分树,数据在多维空间进行划分与查找。主要用于关键信息的搜索,类似于在空间中的二分搜索,大大提高了搜索效率,在寻找目标元素时,使用了DFS深度优先的方式和回溯进行最近点的寻找。详细介绍链接 MS-Apriori 基于多支持度的Apriori算法。是Apriori算法的升级算法,弥补了原先Apriori算法的不足,还增加了支持度差别限制以及支持度计数统计方面的优化,无须再次重新扫描整个数据集,产生关联规则的时候可以根据子集的关系避免一些置信度的计算。详细介绍链接 ACO 蚁群算法。蚁群算法又称为蚂蚁算法。同GA遗传算法类似,也是运用了大自然规律的算法,用于在图中寻找最优路径的概率型算法。灵感来源于蚂蚁在寻找食物时会散播信息素的发现路径行为。详细介绍链接 BayesNetwork 贝叶斯网络算法。弥补了朴素贝叶斯算法中必须要事件独立性的缺点,利用了贝叶斯网络的DAG有向无环图,允许各个事件保留一定的依赖关系,网络结构中的每个节点代表一种属性,边代表相应的条件概率值,通过计算从而能得到精准的分类效果。详细介绍链接 TAN 树型朴素贝叶斯算法。此算法又被称为加强版朴素贝叶斯算法。在满足原有朴素贝叶斯条件的基础上,他允许部条件属性直接的关联性。形成树型的结构。详细介绍链接 Viterbi 维特比算法。给定一个隐马尔科夫模型以及一个观察序列,求出潜在的状态序列信息,每个潜在状态信息又会受到前一个状态信息的影响。 算法使用方法 在每个算法中给出了3大类型,主算法程序,调用程序,输入数据,调用方法如下: 将需要数据的测试数据转化成与给定的输入格式相同 然后以Client类的测试程序调用方式进行使用。 也可以自行修改算法程序,来适用于自己的使用场景
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值