预计阅读本页时间:-
7.5.3 速率单调调度
适用于可抢占的周期性进程的经典静态实时调度算法是速率单调调度(Rate Monotonic Scheduling,RMS)(Liu和Layland,1973)。它可以用于满足下列条件的进程:
1)每个周期性进程必须在其周期内完成。
2)没有进程依赖于任何其他进程。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
3)每一进程在一次突发中需要相同的CPU时间量。
4)任何非周期性进程都没有最终时限。
5)进程抢占即刻发生而没有系统开销。
前四个条件是合理的。当然,最后一个不是,但是该条件使系统建模更加容易。RMS分配给每个进程一个固定的优先级,优先级等于进程触发事件发生的频率。例如,必须每30ms运行一次(每秒33次)的进程获得的优先级为33,必须每40ms运行一次(每秒25次)的进程获得的优先级为25,必须每50ms运行一次(每秒20次)的进程获得的优先级为20。所以,优先级与进程的速率(每秒运行进程的次数)成线性关系,这正是为什么将其称为速率单调的原因。在运行时,调度程序总是运行优先级最高的就绪进程,如果需要则抢占正在运行的进程。Liu和Layland证明了在静态调度算法种类中RMS是最优的。
图7-14演示了在图7-13所示的例子中速率单调调度是如何工作的。进程A、B和C分别具有静态优先级33、25和20,这意味着只要A需要运行,它就可以运行,抢占任何当前正在使用CPU的其他进程。进程B可以抢占C,但不能抢占A。进程C必须等待直到CPU空闲才能运行。

在图7-14中,最初所有三个进程都就绪要运行,优先级最高的进程A被选中,并准许它运行直到它在10ms时完成,如图7-14中的RMS一行所示。在进程A完成之后,进程B和C以先后次序运行。合起来,这些进程花费了30ms的时间运行,所以当C完成的时候,正是该A再次运行的时候。这一轮换持续进行直到t=70时系统变为空闲。
在t=80时,进程B就绪并开始运行。然而,在t=90时,优先级更高的进程A变为就绪,所以它抢占B并运行,直到在t=100时完成。在这一时刻,系统可以在结束进程B或者开始进程C之间进行选择,所以它选择优先级最高的进程B。