一种硬实时调度算法的可行性判定及实现(1)(2)
2015-01-17 01:04
导读:任务i的第一次释放时刻为 对于等式 δi(a, Li(a))Ci可知,因为Li(a)是未知的(它是正在计算的值),由于高限函数和低限函数,使方程难以求解。可构造一递
任务i的第一次释放时刻为

对于等式

δi(a, Li(a))Ci可知,因为Li(a)是未知的(它是正在计算的值),由于高限函数和低限函数,使方程难以求解。可构造一递推关系

δi(a, Lmi(a))Ci若令

那么等式(1)变成 Li(m 1)(a)=Wi(a, Li(m)(a) ) (2)(其中

)经过证明只要利用率

,那么递推式(2)就收敛,方程有解。这样当Li(m 1)(a)= Li(m)(a) ,方程的解Li(a)就找到,就是Li(m)(a)。求解过程我们可以用时间窗口的概念来总结一下求Li(a)思路:我们可以将Li(a)这段时间称为时间窗口(见图1),。那么在时间窗口内,只能有优先级高于或等于任务i(即绝对时限小于或等于任务I的时限d)的任务能执行,随着更多优先级的任务落入时间窗口,时间窗口的长度不断扩大,当没有更高优先级的任务需要执行时,则时间窗口到达最大,此时的时间窗口的长度即是忙碌期长度Li(a)。 知道了 Li(a)的表达式后,可以在忙碌期内让a取不同的值,通过不同的a值,计算出任务i不同的Li(a)值,响应时间为ri(a) = max{Ci,Li(a)-a},从其中找出最大的ri(a), 这就是所要求的最坏响应时间 ri=max{ri(a)}上述方法对于判定任务集的可行性,相当有效。但由于计算响应时间的步骤多而且复杂,因此考虑用程序实现。程序c代码如下: /*首先定义一个实时任务结构体rt_task_struct,其成员T为实时任务的周期,成员D为实时任务的绝对时限,成员C为实时任务的最坏执行时间。*/typedef struct{ int T; int D; int C;}rt_task_struct;main(void){/* 定义实时任务结构体数组rt_task[40],定义最大任务数为40*/rt_task_struct rt_task[20]; int tasknum,;/*本次待判定的任务数tasknum*/int r[40],ai[40];/* r[40]数组用来放置相应任务的最坏响应时间,ai[40]用来放置取得该响应时间时的时刻值*/ float L0=0,Ln1=0,Ln=0; float sia,I_sia; float Lm0=0,Lm=0,Lm1,ria; float w,delta,wm=0; float m1,m2,m3,m4; int i,j;共2页: 1 [2] 下一页 论文出处(作者):
(转载自http://zw.nseac.coM科教作文网) 在J2ME/MIDP中实现图像旋转
多媒体农业专家系统构建平台的实现与研究