预计阅读本页时间:-
7.5.2 一般实时调度
不幸的是,这一模型在实践中几乎没有什么用处。随着观众的来来去去,用户的数目不断发生变化,由于视频压缩的本性(I帧比P帧或B帧大得多),帧的大小剧烈变化,并且不同的电影可能有不同的分辨率。因此,不同的进程可能必须以不同的频率运行,具有不同的工作量,并且具有不同的最终时限(在此之前所有工作必须完成)。
这些考虑导致一个不同的模型:多个进程竞争CPU,每个进程有自己的工作量和最终时限。在下面的模型中,我们将假设系统知道每个进程必须以什么样的频率运行、有多少工作要做以及下一个最终时限是什么。(磁盘调度也是一个问题,但我们将在后面考虑。)多个相互竞争的进程,其中若干进程或全部进程具有必须满足的最终时限的调度称为实时调度(real-time scheduling)。
作为实时多媒体调度程序工作环境的一个例子,我们考虑三个进程A、B和C,如图7-13所示。进程A每30ms运行一次(近似NTSC制式速度),每一帧需要10ms的CPU时间。在不存在竞争的情况下,进程A将在突发A1、A2、A3等中运行,每一突发在前一突发的30ms之后开始。每个CPU突发处理一帧并且具有一个最终时限:它必须在下一个突发开始之前完成。
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

图7-13中还有另外两个进程:B和C。进程B每秒运行25次(例如PAL制式),进程C每秒运行20次(例如一个慢下来的NTSC或PAL流,意在使一个低带宽的用户连接到视频服务器)。每一帧的计算时间如图7-13中所示,进程B为15ms,进程C为5ms,没有使它们都具有相同的时间只是为了使调度问题更加一般化。
现在调度问题是如何调度A、B和C以确保它们满足各自的最终时限。在寻找调度算法之前,我们必须看一看这一组进程究竟是不是可调度的。回想2.4.4节,如果进程i具有Pi ms的周期并且需要Ci ms的CPU时间,那么系统是可调度的当且仅当

其中m是进程数,在本例中,m=3。注意,Ci /Pi 只是CPU被进程i使用的部分。就图7-13所示的例子而言,进程A用掉CPU的10/30,进程B用掉CPU的15/40,进程C用掉CPU的5/50。将这些分数加在一起为CPU的0.808,所以该系统是可调度的。
到目前为止我们假设每个影片流有一个进程,实际上,每个影片流可能有两个(或更多个)进程,例如,一个用于音频,一个用于视频。它们可能以不同的速率运行并且每一脉冲可能消耗不同数量的CPU时间。然而,将音频进程加入到系统中并没有改变一般模型,因为我们的全部假设是存在m个进程,每个进程以一个固定的频率运行,对每一CPU突发有固定的工作量要求。
在某些实时系统中,进程是可抢占的,在其他的系统中,进程是不可抢占的。在多媒体系统中,进程通常是可抢占的,这意味着允许有危险错过其最终时限的进程在正在运行的进程完成工作以前将其中断,然后当它完成工作之后,被中断的前一个进程再继续运行。这一行为只不过是多道程序设计,正如我们在前面已经看过的。我们要研究的是可抢占的实时调度算法,因为在多媒体系统中没有拒绝它们的理由并且它们比不可抢占的调度算法具有更好的性能。惟一要关心的是如果传输缓冲区在很少的几个突发中被填充,那么在最终时限到来之前该缓冲区应该是完全满的,这样它就可以在一次操作中传递给用户,否则就会引起颤动。
实时算法可以是静态的也可以是动态的。静态算法预先分配给每个进程一个固定的优先级,然后使用这些优先级做基于优先级的抢占调度。动态算法没有固定的优先级。下面我们将研究每种类型的一个例子。