mug*_*tsu 5 embedded real-time timing
对此有点困惑.如果我加快处理器的速度,那么执行任务会不会花费更少的时间,从而导致更快地完成截止日期?
谢谢
答案是由于速度更快,可能会出现新的资源冲突.这被称为Graham的异常:如果在多处理器上调度任务集以使调度长度最小化,则增加处理器,减少执行时间或削弱优先级约束可以增加调度长度.注意目标(最小化计划长度).但是,如果任务有最后期限并且目标是满足所有任务期限,那么异常就可以很容易地显示出来.有关操作系统的书籍中的示例插图都有详细记录.
也可以看看:
这种事情发生了,道格拉斯已经解释了格雷厄姆的异常.我将尝试用一个小例子来解释它.我希望这可以更容易理解发生了什么:
如果您正在处理多个并发任务和固定速度的共享资源(例如通信通道),则会出现异常现象.
在实时系统的背景下,这是一个很好的例子是数据采集.如果必须从模数转换器读取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
Run Code Online (Sandbox Code Playgroud)
现在我们将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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,与较慢的cpu场景相比,CPU速度的提高导致两个任务稍后完成一毫秒.这是因为硬件事件发生时,固定速度共享资源正忙.
这只是一毫秒,但这些事情可能会加起来并可能导致错过最后期限.