以下各節概述 Real-Time 作業系統的基本概念與相關詞彙。 看完本文內容後,建議您接著瀏覽 Building a Real-Time System with NI Hardware and Software (使用 NI 軟硬體打造 Real-Time 系統) (英文),以深入了解 NI 如何協助您在最短的時間內打造出優異的 Real-Time 即時系統。在了解即時作業系統之前,我們先來看看普通的作業系統是什麼。
一般來說,作業系統 (OS) 管理電腦的硬體資源,以及電腦上執行的各項託管應用程式,負責程序、記憶體、檔案以及輸入/ 輸出設備等等的管理,是電腦系統中的核心。Windows、Mac OS 與Linux便是最受歡迎的幾種個人電腦作業系統。
特別設計的 Real-Time 作業系統 (RTOS) 不但能執行一般作業系統的功能,還能在極為精確的時間點以高度可靠的方式執行應用程式。 對量測與自動化系統來說,由於停機事件的成本高昂或程式延遲可能引發安全風險,這項能力格外重要。
為了達成「即時」(real-time) 目標,作業系統必須為所執行的每一項關鍵作業分配已知的最大時間 (或者至少要能在大多數時候保證提供最大時間)。 其中的部分作業,包括作業系統呼叫與中斷處理。 能夠針對這些作業項目絕對保證提供最大時間的作業系統,一般稱為「嚴格的 real-time」(hard real-time);而只能保證在大多數時候提供最大時間的作業系統,則稱為「彈性的 real-time」(soft real-time)。 在實務上,這類嚴格的分類並無法充分發揮效用 - 每一個 RTOS解決方案都有自己專屬的效能特性,使用者必須仔細研究並分辨其特性差異。
為了幫助您充分理解這些概念,我們舉以下例子說明。 想像您正為一款新車設計安全氣囊系統。 在此案例中,只要觸發時間點有任何差池 (造成安全氣囊過早或過晚充氣),就可能導致嚴重事故並造成人員傷亡。 這時就需要嚴格的 Real-time 作業系統;系統設計師必須保證每一次安全氣囊觸發操作都不會超過特定的時間限制。 另一方面,假設您是要設計一款能夠接收串流視訊的行動電話,那麼偶爾遺失少量資料也無關緊要,不過如果能夠跟上視訊串流的速度更好。 在這種應用情況中,彈性的 Real-Time 作業系統就足夠應付所需。
重點在於,只要程式設計得當,RTOS 就能保證在一致的時間點執行程式。 要達成這項目標,Real-Time 即時作業系統必須賦予程式設計師高度控制權限,使其能完全掌控工作優先順序;而且,為確保重要的交付期程不受耽誤,一般也會允許程式設計師進行檢查。
一般用途的作業系統,如最受歡迎的個人電腦作業系統 (像是 Windows) 不同於 Real-Time 作業系統 (RTOS)。 以下小節將深入探討 Real-Time 即時作業系統與一般用途的作業系統之間的技術差異,需要注意的是,這兩種作業系統各有優缺點。 Windows 等作業系統主要透過運行各種程式與服務來即時回應使用者需求 (以確保「公平性」),而 Real-Time 即時系統則是需要在精準的時間控制下,可靠地執行關鍵應用程式 (依照程式設計師制訂的優先順序來執行)。
作業決定性:在嚴格的 Real-Time 作業系統上執行的應用程式 (或關鍵的應用程式片段),如果能夠保證出錯數量在執行時間內不超出限定範圍的話,表示具備決定性特質。
彈性的/嚴格的 Real-Time:能夠針對所有作業保障絕對最大時間的作業系統,可稱為嚴格的 Real-Time 作業系統。 反之,通常在特定時間內完成作業的作業系統,可稱為彈性的 Real-time。
抖動:某項工作在後續執行程式或迴圈的反覆運算過程期間的出錯數量,稱為「抖動」。 最佳化的 Real-Time 作業系統只要程式設計得當,就可達到低度的抖動目標;這樣每項工作每次執行時所需的時間就會非常接近。
圖 1. 抖動是第一次執行工作與後續反覆運算的時間差量測值。 最佳化的 Real-Time 作業系統可有效減少抖動情況。
Real-Time 作業系統主要用於兩大類應用:事件回應與閉迴圈控制。 事件響應應用 (像是對組裝線上零件進行自動化視覺檢查) 需要在特定時間範圍內對激源進行響應。 舉例來說,在此視覺檢查系統中,經過組裝線的每一項零件都必須拍照並進行分析,才能進入下個階段。
藉由對嚴格的 Real-Time 作業系統 (RTOS) 上所執行的應用程式審慎地進行程式設計,負責事件響應應用的設計人員就能保證提供決定性的響應 (在特定最大時間範圍內)。 在零件檢查範例上,使用一般用途的作業系統可能會讓零件無法及時接受檢查 - 進而拖延組裝線作業時間,導致必須丟棄零件,或是送出可能有瑕疵的零件。
相反地,閉迴圈控制系統 (例如汽車自動巡航控制系統) 會持續處理反饋資料以調整一或多項輸出。因為每一項輸出值皆取決於固定時間範圍內的輸入資料,因此必須符合迴路截止日期要求才能確保產出正確的輸出值。 當自動巡航控制系統無法決定特定時間點的調節設定時,會有何後果? 再說一遍,嚴格的 Real-Time 作業系統可以保證在一致的時間範圍內 (與最糟情況下固定的最大時間範圍) 處理控制系統輸入資料。
另外值得注意的是,許多執行時間必須拉長的應用程式,會因為可靠的即時作業系統而受益良多。 因為系統通常只執行最少的軟體集合 (而非同時執行許多應用程式與程序),這類系統便非常適合應用在需要 24 小時全年無休運作的系統,或是不允許發生停機或是停機成本高昂的系統。
如果您考慮在未來的專案上使用 Real-Time 作業系統,請參閱以下文件:Do I Need a Real-Time System?
(我需要一套 Real-Time 系統嗎?) (英文)
常見作業系統如 Microsoft Windows 與 Mac OS 之類是極佳的作業平台,可用以開發並執行非關鍵的量測與控制應用。 然而,因為這些作業系統是針對 Real-Time 作業系統以外的其他用途所設計,因此並不適於執行需要精確時間控制或要求更多連續運作時間的應用程式。 本節將同時指出存在這兩種作業系統之間的一些運作原理相關之重大差異,並說明設計 Real-time 應用程式之際可能發生的各種情況。
在設計應用程式時,大多數作業系統 (任何類型) 都允許程式設計師為整體應用程式 (甚至是為應用程式或執行緒內的其他工作) 指定優先項目。 這些優先順序是給作業系統參考的訊號,代表設計人員認為是最重要的作業項目。 其用意在於假設同時有兩項以上的工作準備執行,作業系統將從優先順序較高的工作開始執行。
在實務上,一般用途的作業系統不會每次都嚴格遵守這些程式設計優先順序。 因為一般用途的作業系統經過最佳化後,可同時執行多種應用程式與程序,它們通常會確保每一項工作至少會分配到一些處理時間。 因此,低優先順序的工作有時候會將自身優先順序提高,以便比其他較高優先順序的工作更早執行。 此舉可確保每一項工作都能獲得一些執行時間,但缺點是無法讓設計人員百分之百滿意。
相較之下,Real-Time 即時系統則較為嚴格遵守程式設計師所制訂的優先順序。 在大多數 Real-Time 作業系統中,當高優先順序工作用掉了 100% 的處理器資源時,必須等到該工作完成作業,才能輪到其他低優先順序的工作進行。 因此,Real-time 系統設計人員在設計應用程式時,必須仔細斟酌各個程式的優先順序。 在典型的 Real-time 應用程式中,設計人員會將具有時效性的程式碼 (例如,事件響應或控制碼) 置入具有極高優先順序的區段中。 其他重要性較低的程式碼 (例如記錄至磁碟或網路通訊),則會與優先順序較低的工作混合在同一個區段。
中斷潛時指的是,裝置產生中斷到獲得服務之間所經過的時間量測值。 一般用途的作業系統回應特定中斷所需的時間可能每次都不同,但是 Real-Time 作業系統則必須保證所有中斷必須在一定的最大時間範圍內獲得服務。 換句話說,Real-Time 作業系統的中斷潛時必須受到約束。
一般人常有的錯誤觀念是,Real-Time 作業系統 (RTOS) 的效能必定優於其他一般用途的作業系統。 雖然在某些情況中,Real-Time 作業系統因為應用程式與服務之間的多重作業情況較少,因此可以提供更優異的效能,但並非每次皆如此。 實際的應用程式效能取決於 CPU 速度、記憶體架構、程式特性等因素。
儘管 Real-Time 即時作業系統不一定保證提升執行速度,但是卻可提供比一般用途作業系統更加精確且可預測的時效特性。
請繼續閱讀後續文件,以了解如何運用 NI 軟硬體,在最短的時間內打造出一套優異的 Real-time 系統:
>> 使用 NI 軟硬體打造 Real-Time 系統
>> 我是否需要 Real-Time 系統?