我有点困惑"任务周期"到底是什么意思
例如,假设有一个任务,
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调度相关的问题必须阅读。
另一个资源:。。。实时调度算法。。。[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)
}
}