对此有点困惑。如果我加快处理器的速度,那么完成一项任务会不会花费更少的时间,从而更快地完成截止日期?
感谢
答案 0 :(得分:6)
答案是由于速度更快,可能会出现新的资源冲突。这被称为Graham的异常:如果在多处理器上调度任务集以使调度长度最小化,则增加处理器,减少执行时间或削弱优先级约束可以增加调度长度。注意目标(最小化计划长度)。但是,如果任务有最后期限并且目标是满足所有任务期限,那么异常就可以很容易地显示出来。有关操作系统的书籍中的示例插图都有详细记录。
另见:
答案 1 :(得分:5)
这种事情发生了,道格拉斯已经解释了格拉汉姆的异常。我将尝试用一个小例子来解释它。我希望这样可以更容易理解发生了什么:
如果您正在处理多个并发任务和固定速度的共享资源(例如通信通道),则会出现异常现象。
在实时系统环境中的一个很好的例子是数据采集。如果必须从模数转换器读取x毫秒的数据,则无论CPU速度如何,它都将花费x毫秒。在我的例子中,我称之为'IO-time'或'io-task'。
现在考虑以下情况:
您有一个任务(A),其中包括:
第二个任务(B)将由硬件事件启动,包括:
第二项任务以毫秒3开始。
IO和CPU是共享资源。它们可以并行运行,但IO或CPU一次只能处理一个作业。
一个可能的计划如下:
timestamp: cpu/io job:
---------------------------------------------
t=0 event <--- hardware event triggers task-a
t=0 cpu start of task-a (4 ms)
t=3 event <--- hardware event triggers task-b
t=3 io start of task-b (4 ms)
t=4 cpu task-a done
t=7 io task-b done
t=7 io start of task-a (4 ms)
t=7 cpu start of task-b (2 ms)
t=9 cpu task-b done
t=10 io task-a done
现在我们将CPU功率加倍,这样cpu的运行速度就会快两倍:
timestamp: cpu/io job:
---------------------------------------------
t=0 event <--- hardware event triggers task-a
t=0 cpu start of task-a (2 ms)
t=2 cpu task a done
t=2 io start of task a (4 ms)
t=3 event <--- hardware event triggers task-b, but can't start
because io-bus is busy. Must wait.
t=6 io task a done
t=6 io start of task b (4 ms)
t=10 io task b done
t=10 cpu start of task b (1 ms)
t=11 cpu task b done
正如您所看到的,与较慢的cpu场景相比,CPU速度的提高导致两个任务稍后完成一毫秒。这是因为固定速度共享资源在硬件事件发生时很忙。
这只是一毫秒,但这些事情可能会加起来并可能导致错过最后期限。
答案 2 :(得分:2)
取决于......加速处理器不会影响系统的其他部分(内存访问时间,传播延迟等)。提高处理器速度会使这些事情占用任务处理时间的更大部分。
如果处理器速度增加,传播可能会超过一个时钟周期,可能会因重试而导致延迟,具体取决于系统的设置方式。
如果根据处理器将截止时间与计数器或计时器相关联,则它也将按比例增加,因为计数器没有主存储器访问。
根据您的特定设置,其中任何一个都可能是因素之一。
答案 3 :(得分:1)
可能 - 但是许多用于加速处理器(例如缓存)的技术也使它们难以预测。大多数这些技术以最坏的情况为代价改善了平均情况(通常相当多) - 例如,使用缓存,在最坏的情况下,从内存中获取的速度可能比没有缓存时慢。缓存因为除了从内存中获取的时间之外,还有一些时间来搜索缓存以查看数据是否存在。
不幸的是,对于实时调度,您关心的主要是最差情况,而不是普通情况,因此即使这样的优化使得大多数代码的大多数代码更快,它仍然可以导致错过了实时系统的截止日期。