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