如何计算线程的松弛时间?

how to compute the slack time of a thread?

我想了解最小松弛时间 (LST) 算法的工作原理。使用 posix 线程实现此功能的可能方法是什么。我提到了 http://man7.org/linux/man-pages/man7/sched.7.html。我看不到支持松弛的调度宏。我用谷歌搜索了一下,找不到这样做的调度程序。我知道 slack 是一个线程执行时间 window 的时间,它在线程完成执行后空置,并且可以被需要时间的同一进程的线程捕获 .我知道它在航空电子显示器等行业中使用。如果可以给出一种已经存在于 posix 线程的方法,那将会有所帮助。

实际上,LST 不是进程本地的,而是选择预期完成时间最接近其截止日期的线程。 LST 的问题是你需要(非常好)猜测线程的执行时间,这是一个复杂的问题。因此,通常采用具有相同性能但不需要除截止日期之外的其他参数的 EDF 策略。

编辑

回答你的附加问题:由于比较复杂,我只能给出一个草图。第一:您一般无法预测 运行 时间。理论计算机科学有一个著名的结果,它表明人们甚至无法预测程序是否会终止。(参见 halting problem)但是,通过限制递归深度和边界循环,可以确定关键路径(使用图论的结果)通过代码。现在你需要这条路径的任何指令的执行时间。然而,这远非确定性的。流水线、缓存和乱序执行使计算更加困难。当然,这些影响中的一些可以通过例如避免。关闭缓存。但是你得到的 运行 时间比需要的要长得多。 总结一下:通过一些措施,您可以提供 运行 时间的上限。如果你想减少高估,你必须考虑很多细节。

关于该主题(google 用于 WCET 预测)存在大量文献,甚至还有一些很好的工具。然而,无需付出实质性努力,运行 时间顺序的高估本身并不算太糟糕。