【說在前面的話】
【正文】
在一個多任務系統中,有一部分(或者全部)任務擁有實時性要求;
對于這些有實時性要求的任務來說,任何一個任務在任何一種情形、哪怕是極小的概率下、存在無法滿足實時性的可能,整個系統就判定為無法滿足實時性要求;
由于上述判定條件過于苛刻,所以工程實踐中,我們一般退而求其次,轉而尋找一定無法滿足實時性的情況,即:
如果在極其理想的條件下,可以通過數學方法證明這些任務的實時性一定無法得到滿足,則需要調整硬件環境,或者對任務進行重新規劃、降低實時性要求;
如果在極其理想的條件下,證明系統的實時性可以得到保證,則我們只能假設:可能存在一種方式讓當前系統的實時性得到保證——此時我們可以進入下一階段的討論——也就是如何設計系統、將理論上證明可能做的事情變成既成事實。
如果數學上都已經能證明實時性得不到保證了,咱們就別折騰了;
如果數學上證明有希望,咱們再繼續討論實施方法——究竟最終能不能做到——事在人為,結果另說。

先說結論:
我們就是要計算每個實時性任務可能占用的最大CPU資源,并用百分比表示;
計算所有實時性任務所占用CPU資源的總和(將百分比累加起來);
如果超過100%,則整個實時性必然得不到保證;
如果沒有超過100%,則可以判定在理想狀況下,系統的實時性是有可能得到保證的;
實踐中,距離100%越遠,則可能性越大。如果卡著100%或者99%則相當危險,甚至可以穩妥的判定為不滿足。
怎么樣?道理是不是很簡單?那么具體怎么計算呢?
觀察此前介紹的實時性模型可以發現,無論是“實時性窗口”,還是“處理事件所需的時間” 都是表示時間長短的量;
其中,“實時性窗口” 是根據具體應用需要,由自于客觀物理世界的時間要求所決定的,翻譯成人話就是:“如果不在某一時間內完成任務,就會受到牛頓的毒打!”
實時性窗口還隱含了另外一個重要的假設,即,最差情況下,這個事件可能會以實時性窗口所代表的時間間(Interval, Period)隔周期性的發生——正可謂一波剛平一波又起(紳士們,我就不配圖了
)。
“事件處理所需時間”,故名思意,就是CPU執行事件處理程序所需的時間。這里其實涉及到另外一個非常關鍵的問題——確定性(Deterministic):說白了,就是“最起碼”要你能夠拍胸脯打包票——執行這個任務所花的時間存在一個最大值(上界),并且這個上界是穩定可靠的——這只是確定性的最低標準;有時候某些應用對確定性的要求高的乍舌,比如,系統會強硬的規定:執行時間只允許在某一個非常小的范圍內微弱的波動,做不到就直接判定為不滿足“確定性”要求(例如很多車載系統中所使用的ECU就是這樣),從而整個系統的實時性也成了空中樓閣。
值得強調的是,假設事件處理程序的代碼是一樣的,那么很容易理解:當CPU頻率升高的時候(CPU單位時間內可以執行的指令增加的時候),事件處理所需的時間就越短。
基于以上事實,我們可以設想一個嚴格的理想狀況:
某個事件已“實時性窗口”所表示的時間間隔(Tw)周期性的發生;
在這個周期內,要消耗時間(Th)來處理這個事件;
則當前實時性任務所消耗的CPU資源百分比為:
這里的
就是“事件n”的CPU資源占用。
【反復橫跳的代價】
不知道你還記不記得本文一開始我們試圖討論的那個問題:即,時間片輪轉是否對實時性的保證有意義?經過前面的理論準備,我們現在就有了明確而清晰回答這個問題所需的所有條件:
已知的事實如下:
CPU頻率不變的情況下,CPU的可用資源是固定的;
實現時間片輪轉的方法有多種多樣:比如,純粹的合作式輪轉(諸如裸機中的switch狀態機,或者是基于函數指針的合作式調度器);又或是操作系統下,擁有相同優先級任務間所使用的可搶占式時間片輪詢,即Round-roubin模式(詳情請參考《【解惑】到底是“時間片”還是“分時輪詢”?》)。
無論采用哪種時間片輪轉方式,任務的切換都是有代價的。比如,裸機中,進出函數所需的跳轉代價、局部變量在棧中重建的代價(詳情參考《漫談C變量——夏蟲不可語冰》);操作系統中任務調度的代價等等。
在存量是固定不變的前提下,任務切換越頻繁,則切換所消耗的CPU時間就越多,因此實際用于實時性任務處理的CPU資源就越少
結論:頻繁任務切換對系統實時性是有害的;由于頻繁時間片輪轉會導致大量不必要的任務切換,因此對實時性總體上來說是有害的。
推論:任務切換對實時性系統來說是必要的,但一定要越少越好——拒絕花拳繡腿的反復橫跳,只做真正有必要的任務切換。
【結語】
本文的結論實際上從本質上傳達了一個信息:無論是裸機還是操作系統環境,多任務都是可以實現的——這是并發技術的本質所決定的。時間片輪轉只是裸機和操作系統環境下常見的、“無腦”實現并發的一種方式——或者說,時間片輪轉的作用只是實現并發而已,它不僅與實時性的保證無關,甚至是有害的。
那么,假設,在通過數學方式證明了:“可能存在一種解來滿足系統的實時性要求”,那么具體有什么方法能夠實現它呢?欲知詳情,請聽下回分解。
往期推薦




