2

我对“任务期”的确切含义有点困惑

例如,假设有一个任务,

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 都无关紧要

4

1 回答 1

0

RM是一种静态优先级调度算法,它为每个任务分配与其周期成反比的优先级,即周期越小,优先级越高。...多处理器速率单调调度的最小和最大利用率界限中。[何塞 M. L'opez 等。人。2003]

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

另一个资源:...实时调度算法... [Ed Overton et。人。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) 
  }

}
于 2012-09-19T07:16:02.383 回答