实时任务周期



我有点困惑"任务周期"到底是什么意思

例如,假设有一个任务,

Task(){
while(1) 
{ 
//do something
//sleep 6 time units
}
}

假设它在时间0发布,它的总执行时间是4个时间单位("做某事"部分),执行的最后期限是时间7

假设这个任务在其执行周期中没有被抢占,因此对于这个时间,它的周期将是4+6=10,所以下次它将在时间10被释放,所以T=10

现在假设这个任务在时间3被另一个任务抢占,然后在时间5返回,所以它有足够的时间(直到时间7)来执行剩余部分(1个时间单位)

因此,它在时间6结束,因此,对于这一次,它的周期将是6+6=12,所以下一次它将在时间12释放,所以T=12

那么什么是任务期呢?在RM调度中,任务优先级是根据任务周期分配的,那么会考虑任务周期的哪些值??

在进度表中,周期性任务总是显示为有一些固定的周期,例如,周期是5,如果任务应该在0、5、10、15、20等发布,那么如果在0发布,它应该在5之前完成,以此类推
如果在2完成,我如何保证下一个发布在5
或者假设它在15发布,并在16到18之间执行,我如何保证下一个发布在20
在这个例子中,很明显,截止日期是由这个所谓的"任务周期"定义的,即5的倍数,因为任务不能在下一个预定发布之前完成,任务周期是由所需的发布时间定义的,但我不明白这些发布时间是如何保持为5 的倍数的

正如我们在开头的例子中看到的,同一任务的下一个版本可能会有所不同,这取决于情况(10和12),但只要执行完成,直到时间7 ,这都无关紧要

RM是一种静态优先级调度算法,为每个任务分配优先级与周期成反比,即周期越小,优先级越高的最小和最大利用率界限多处理机速率单调调度。【Jose M.L´opez等人,2003年】

与rm调度相关的问题必须阅读

另一个资源:。。。实时调度算法。。。[Ed Overton等人,1997年]

所以你上面的想法是关于创建一个所谓的soft deadline aperiodic task。为了实现这一点,需要添加一些修改:

Task(){
while(1) 
{ 
capture_time(start_time)
//do something
capture_time(end_time)
//sleep 6 time units
// rather than sleeping a fixed time: Sleep the remaining 
// time until the tasks deadline
Sleep(desired_period + start_time - end_time) 
}
}

最新更新