關于內核的可剝奪性
盡管是可剝奪型內核,不同的可剝奪型內核還有一個在剝奪一個進程處理器使用杈時的 強硬程度的區別。
本文引用地址:http://www.104case.com/article/148450.htm前面講過,實時操作系統的內核必須是可剝奪型。為此,系統中的每個進程都必須有一個 表示其緊急程度的優先級別,以使調度器可根據等待進程的優先級別來決定是否要剝奪當前 進程的處理器使用權。其實,這個優先級別只表示了進程有可能獲得處理器使用權的大小,至 于調度器在剝奪時的強硬程度是與操作系統啟動調度器的時機相關的。
可以想到,隨時的、全然不顧的剝奪一定是最強硬的剝奪。那么在哪個時機可以這樣做呢?系統時鐘中斷!在系統中所有進程都具有各自唯一優先級別的基礎上,在系統實時時鐘中斷服務中啟動調度器型調度,可使調度器一旦發現待運行進程中有高于當前進程優先級別的進程存在,就會馬上剝奪當前進程的處理器使用權。當然,考慮到諸多問題,這樣做是不妥當的。
另一個方法是,在系統中的每個進程各自具有一個唯一優先級別的前提下,把調度的時機 選在進程調用系統服務及用戶中斷服務的末尾,即放在系統服務程序模塊和用戶中斷服務程 序的尾部。這樣就可在不破壞系統服務的原子性前提下,實現了較為強硬的可剝奪型內核。
使內核的剝奪行為更為柔和的一種方法是,按進程任務的緊急程度把系統中的進程分為 若干個組,每個組中的進程都具有同一優先級別,并且把組中的進程按先進先出的方式組成一個隊列,再給每一個進程都分配一個占用處理器的時間片。系統在進程把分配給自己的時間 片用完之前啟動調度器,調度器按照優先級別選擇進程隊列,在確定了進程隊列之后,在隊列中按先來先服務的原則再來確定獲得處理器使用權進程。顯然,這種調度方法雖然也是剝奪型的調度,但是它允許進程把自己的時間片運行完,所以相對來說,這種剝奪行為顯得柔和得多。
上面的敘述只是為了說明一個概念,同是剝奪型內核,但是在調度方法不同時,它們的實時性也是不一樣的。因此,在設計和選用實時操作系統時,要根據實際應用的情況綜合考慮。
例如,對于硬實時應用來說,操作系統內核的剝奪就要強硬一些;反之,就要柔和一些。
必須說明的是,在以進程的優先級別為基礎的進程調度中,在具備條件的情況下會產生一種低優先級別的進程先于高優先級別的進程占用處理器的現象,即優先級反轉。這種現象是實時系統不能容忍的。
評論