專利名稱:動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法
技術領域:
本發(fā)明是關于一種調(diào)度方法,特別是關于一種動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方 法。
背景技術:
許多現(xiàn)今計算機的操作系統(tǒng)利用多任務調(diào)度器來提供多的計算機的任務(task, 例如程序或進程)同時運行。其概念是將很短的時間片(time slice)連續(xù)分配給各個程序 /進程(process)的線程(thread)執(zhí)行。由于每個時間片的長度很小(一般在20至120 毫秒),因此以人類對時間的感知而言,這些任務看起來是同時運行。而分配時間片給任務 的調(diào)度方法中,以根據(jù)任務的優(yōu)先值決定執(zhí)行順序的方法為大部分。例如在Linux操作系統(tǒng)中,可以由進程所具有的一任務結構(task struct)來 得知進程的種類以及優(yōu)先值。任務結構中可包括四個參數(shù)策略(policy)、動態(tài)優(yōu)先級 (counter)、靜態(tài)優(yōu)先級(priority),以及實時優(yōu)先級(rt_priority)。其中策略參數(shù)紀錄 此進禾呈為一實時進禾呈(real time process)或是一普通進禾呈(conventional process)。若 進程為實時進程,則其優(yōu)先權為實時優(yōu)先級;而若進程為普通進程,則其優(yōu)先權為動態(tài)優(yōu)先 級以及靜態(tài)優(yōu)先級。靜態(tài)優(yōu)先值即為一般所稱的(普通進程的)優(yōu)先級,代表進程所能獲得而被中央 處理器(Central Processing Unit,CPU)執(zhí)行的時間片的數(shù)量。而動態(tài)優(yōu)先級表示進程剩 下的可被執(zhí)行的時間片的數(shù)量,其初始值為靜態(tài)優(yōu)先級。普通進程每獲得一次時間片,動態(tài) 優(yōu)先級都會減1。當所有的普通進程的動態(tài)優(yōu)先級都歸零后,操作系統(tǒng)便會依據(jù)靜態(tài)優(yōu)先級 恢復動態(tài)優(yōu)先級的值。任務的反應時間對使用者而言是非常重要的。然而若是在待執(zhí)行的進程當中有優(yōu) 先權特別高的進程,這種進程會持續(xù)地占用CPU資源,使得其它的進程無法被執(zhí)行,而一直 無法響應給使用者。又或是在待執(zhí)行的進程當中有優(yōu)先權特別低的進程時,優(yōu)先權低的進 程可能幾乎等不到被執(zhí)行的機會,而一直處于饑餓的狀態(tài)。在此提供一十分有名的案例。在 美國加州柏克萊大學(Universityof California, Berkeley)的某一實驗室執(zhí)行久違的大 清查時,發(fā)現(xiàn)某臺服務器中竟有一個進程于三十年間都沒有被執(zhí)行到,而持續(xù)著饑餓的狀 態(tài)。基于上述,傳統(tǒng)的依據(jù)優(yōu)先值的調(diào)度方法具優(yōu)先權高的進程容易過度占用CPU資 源,使得其它的進程難以被執(zhí)行,而造成進程的平均反應時間被拉長的問題。
發(fā)明內(nèi)容
為了達成上述的目的,本發(fā)明提供一種動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,適用 于中央處理器與隊列。其中隊列中包括至少一進程,且每一進程均具有優(yōu)先值。本發(fā)明以 監(jiān)控總占有率與觀察占有率判斷是否有高優(yōu)先值的進程過度占用CPU資源,并階段式地調(diào) 降/恢復觀察進程的優(yōu)先級。因此上述的實施范例可以有效增加低優(yōu)先值的進程被執(zhí)行的機率以及時間長度,進而縮短平均反應時間。根據(jù)本發(fā)明的一實施范例,調(diào)度方法首先執(zhí)行監(jiān)控進程。監(jiān)控進程偵測CPU的總 占用率,并判斷總占用率是否為100%。當總占用率為100%時,執(zhí)行下列步驟監(jiān)控進程 偵測觀察進程的觀察占用率,其中觀察進程為隊列中的至少一個進程。且每一觀察進程具 有一調(diào)整次數(shù)值,該調(diào)整次數(shù)值的初始值為0,監(jiān)控進程并判斷觀察占用率是否大于第一閾 值。當觀察占用率大于第一閾值時,監(jiān)控進程將調(diào)整標志值設為1并進行休眠。而監(jiān)控進 程于經(jīng)過一段休眠時間后再度被執(zhí)行。根據(jù)本發(fā)明的一實施范例,當總占用率不為100%時,調(diào)度方法另可執(zhí)行下列步 驟。監(jiān)控進程判斷總占用率是否小于第一閾值;而當總占用率小于第一閾值時,監(jiān)控進程將 調(diào)整標志值設為0并進入休眠。而監(jiān)控進程亦于經(jīng)過一休眠時間后再度被執(zhí)行。監(jiān)控進程進入休眠后,CPU繼續(xù)執(zhí)行其它進程。而同時調(diào)度方法判斷執(zhí)行中的進 程是否為觀察進程。當執(zhí)行中的進程為觀察進程時,再判斷調(diào)整標志值是否等于1。而當執(zhí) 行中的進程為觀察進程,且調(diào)整標志值等于1時,調(diào)度方法執(zhí)行調(diào)整進程以調(diào)降觀察進程 的優(yōu)先值。此外,當執(zhí)行中的進程為觀察進程且調(diào)整標志值等于0時,調(diào)度方法另可執(zhí)行恢 復進程以恢復被調(diào)降過的觀察進程的優(yōu)先權。較佳的是,每一進程具有調(diào)整次數(shù)值,且調(diào)整次數(shù)值的初始值為0。根據(jù)本發(fā)明的 一實施范例,執(zhí)行調(diào)整進程以調(diào)降觀察進程的優(yōu)先值的步驟可包括判斷調(diào)整次數(shù)值是否 等于0 ;當調(diào)整次數(shù)值等于0時,將觀察進程的優(yōu)先值紀錄為初始優(yōu)先值;判斷調(diào)整旗次數(shù) 是否小于第二閾值;當調(diào)整旗次數(shù)小于第二閾值時,執(zhí)行第一調(diào)降方法;以及當調(diào)整次數(shù) 值不小于第二閾值時,調(diào)整進程執(zhí)行第二調(diào)降方法。上述第一調(diào)降方法可先判斷觀察進程是否為普通進程(conventionalprocess)。 當觀察進程為普通進程時,觀察進程的優(yōu)先值為動態(tài)優(yōu)先級(counter)以及靜態(tài)優(yōu)先級 (priority),調(diào)整進程并將觀察進程的動態(tài)優(yōu)先級設為0,以及增加調(diào)整次數(shù)值。第一調(diào)降方法另可包括當觀察進程不為普通進程時,判斷觀察進程為一實時進程 (real-time process)。當觀察進程為實時進程時,觀察進程的優(yōu)先值是為實時優(yōu)先級(rt_ priority),調(diào)整進程并降低實時優(yōu)先級,以及增加調(diào)整次數(shù)值。根據(jù)本發(fā)明的一實施范例,上述第二調(diào)降方法則可判斷觀察進程是否為普通進 程;而當觀察進程為普通進程時,觀察進程的優(yōu)先值為動態(tài)優(yōu)先級以及靜態(tài)優(yōu)先級。調(diào)整進 程并將動態(tài)優(yōu)先級設為0,以及將靜態(tài)優(yōu)先級設為隊列中具有最低的靜態(tài)優(yōu)先級的普通進 程的靜態(tài)優(yōu)先級,以及增加調(diào)整次數(shù)值。第二調(diào)降方法另可包括當觀察進程不為普通進程時,判斷觀察進程為實時進程; 而當觀察進程為實時進程時,調(diào)整進程可執(zhí)行下列步驟。調(diào)整進程將觀察進程改設為普通 進程,并將觀察進程的優(yōu)先值改設為動態(tài)優(yōu)先級以及靜態(tài)優(yōu)先級。調(diào)整進程接著將動態(tài)優(yōu) 先級設為0,以及將靜態(tài)優(yōu)先級設為隊列中具有最高的靜態(tài)優(yōu)先級的普通進程的靜態(tài)優(yōu)先 級,以及增加調(diào)整次數(shù)值。根據(jù)本發(fā)明的一實施范例,執(zhí)行恢復進程以恢復被調(diào)降過的觀察進程的優(yōu)先權的 步驟可包括判斷觀察進程是否為實時進程;當觀察進程為實時進程時,依據(jù)初始優(yōu)先值 恢復優(yōu)先值,并將調(diào)整次數(shù)值設為0 ;當觀察進程不為實時進程時,判斷觀察進程第一次被 執(zhí)行調(diào)整進程時是否為普通進程;以及當觀察進程第一次被執(zhí)行調(diào)整進程時為普通進程時,依據(jù)初始優(yōu)先值恢復優(yōu)先值,并將調(diào)整次數(shù)值設為0。此外,當觀察進程第一次被執(zhí)行調(diào)整進程時為普通進程時,依據(jù)初始優(yōu)先值恢復 優(yōu)先值之后,恢復進程另可判斷總占用率是否為小于第一閾值。且當總占用率小于第一閾 值時,恢復進程判斷是否觀察進程為普通進程,且觀察進程第一次被執(zhí)行調(diào)整進程時為實 時進程。若是,恢復持續(xù)將觀察進程恢復為實時進程,并依據(jù)初始優(yōu)先值恢復優(yōu)先值,并將 調(diào)整次數(shù)值設為0。根據(jù)本發(fā)明的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,具有高優(yōu)先權且較可能過度占 用CPU的進程被設定為觀察進程。監(jiān)控進程監(jiān)控總占有率與觀察占有率以觀察進程是否過 度占用CPU資源,并階段式地調(diào)降/恢復觀察進程的優(yōu)先級。故此調(diào)度方法可有效增加低優(yōu) 先值的進程被執(zhí)行的機率以及時間長度,進而縮短平均反應時間。此外,借由階段式的調(diào)降 進程,可以避免明顯影響觀察進程的執(zhí)行是效率;而借由階段式的恢復進程,可以避免CPU 負載突然升高,或是避免觀察進程再度獨占CPU資源。以下結合附圖和具體實施例對本發(fā)明進行詳細描述,但不作為對本發(fā)明的限定。
圖1為根據(jù)本發(fā)明一實施范例的進程示意圖;圖2為根據(jù)本發(fā)明一實施范例的主流程示意圖;圖3為根據(jù)本發(fā)明一實施范例的監(jiān)控進程的流程示意圖;圖4為根據(jù)本發(fā)明一實施范例的調(diào)整進程的流程示意圖;圖5為根據(jù)本發(fā)明一實施范例的第一調(diào)降方法的流程示意圖;圖6為根據(jù)本發(fā)明一實施范例的第二調(diào)降方法的流程示意圖;圖7為根據(jù)本發(fā)明一實施范例的恢復進程的流程示意圖。其中,附圖標記20 中央處理器(CPU)22 隊列24 進程26 觀察進程28 線程
具體實施例方式以下在實施方式中詳細敘述本發(fā)明的詳細特征以及優(yōu)點,其內(nèi)容足以使任何熟悉 相關技藝者了解本發(fā)明的技術內(nèi)容并據(jù)以實施,且根據(jù)本說明書所揭露的內(nèi)容、申請專利 范圍及圖式,任何熟悉相關技藝者可輕易地理解本發(fā)明相關的目的及優(yōu)點。根據(jù)本發(fā)明提供一種動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,適用于中央處理器 (CPU)與隊列(queue)。請參照圖1,其為根據(jù)本發(fā)明一實施范例的進程示意圖。由圖1可 以見悉,隊列22中具有至少一進程(process) 24等待CPU 20執(zhí)行,其中每一個進程24都 具有至少一個線程(thread)28。且在隊列22之中,至少有一個進程24被選為一觀察進程 26。其中CPU 20可以是運行于一個人計算機或是服務器等不同的計算器是統(tǒng)。就一般的操作系統(tǒng)來說,進程24可具有多個線程28,這些線程28會共享進程24所擁有的硬件資源,例如內(nèi)存空間或是對輸入輸出裝置的存取。進程24具有一優(yōu)先值,而 優(yōu)先值乃依據(jù)進程24的種類等被操作系統(tǒng)決定。進程24內(nèi)所有的線程28的優(yōu)先值都與 進程24相同,操作系統(tǒng)依據(jù)此優(yōu)先值決定執(zhí)行線程28的順序。Linux操作系統(tǒng)中,進程24所具有的任務結構(task struct)可包括四個參數(shù) 策略(policy)、動態(tài)優(yōu)先級(counter)、靜態(tài)優(yōu)先級(priority),以及實時優(yōu)先級(rt_ priority)。由策略參數(shù)可得知進程24為一實時進程(realtime process)或是一普通進 程(conventional process) 0而由實時優(yōu)先級、靜態(tài)優(yōu)先級以及動態(tài)優(yōu)先級可以得知進程 24優(yōu)先值。隊列22是指集合了處于可執(zhí)行狀態(tài)(ready state)的進程24的可執(zhí)行隊列 (ready queue)。當進程24被生成或由等待狀態(tài)(wait state,又稱休眠狀態(tài))被喚醒后, 就會處于等待被CPU 20執(zhí)行的可執(zhí)行狀態(tài),并進入隊列22。操作系統(tǒng)根據(jù)優(yōu)先值決定下一 個要讓CPU 20執(zhí)行的進程24為何。但此處的操作系統(tǒng)依據(jù)優(yōu)先級讓CPU 20執(zhí)行進程24 為一概念性的說法。實際上CPU 20是執(zhí)行各個進程24所具有的線程28。也就是說,操作 系統(tǒng)根據(jù)隊列22中每一個線程28所屬的進程24的優(yōu)先值,決定接下來要讓CPU 20執(zhí)行 的線程28。在隊列22的進程24之中,至少有一個進程24被選為觀察進程26。觀察進程26 為具有高優(yōu)先值,且可能占用大量CPU資源的進程24。為了避免高優(yōu)先值的進程24不斷重 復被執(zhí)行而排擠其它進程24被執(zhí)行的權益,根據(jù)本發(fā)明所提供的調(diào)度方法監(jiān)測所有的觀 察進程26 (與其所包括的所有線程28),并在觀察進程26占用太多CPU資源時調(diào)整觀察進 程26的優(yōu)先值,增加其它進程24被執(zhí)行的機會。每一觀察進程26并具有一調(diào)整次數(shù)值。 調(diào)整次數(shù)值表示此觀察進程26被調(diào)降優(yōu)先值的次數(shù),而調(diào)整次數(shù)值的初始值為0。根據(jù)本發(fā)明的一實施范例,操作系統(tǒng)可將目前使用中的程序與相對應的進程24 列表并提供給使用者,并由使用者指定觀察進程26。根據(jù)本發(fā)明的另一實施范例,操作系統(tǒng) 可根據(jù)進程24的性質、內(nèi)容、被執(zhí)行時平均的優(yōu)先值、通常被執(zhí)行時的狀況,或是過往被使 用者指定為觀察進程26的紀錄自動將隊列22中的至少一個進程24選定為觀察進程26。接下來將詳述根據(jù)本發(fā)明所提供的調(diào)度方法。請參照圖2,其為根據(jù)本發(fā)明一實 施范例的主流程示意圖。由圖可知,于本實施例之中,動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法可 包含步驟S30 執(zhí)行一監(jiān)控進程;步驟S31 判斷執(zhí)行中的進程24是否為觀察進程26 ;步驟 S32 判斷一調(diào)整標志值是否等于1 ;步驟S33 執(zhí)行一調(diào)整進程以調(diào)降觀察進程26的優(yōu)先 值;步驟S34 判斷調(diào)整標志值是否等于0 ;步驟S35 執(zhí)行一恢復進程以恢復被調(diào)降過的觀 察進程26的優(yōu)先權;以及步驟S36 執(zhí)行下一個進程24。首先于步驟S30,操作系統(tǒng)令CPU 20執(zhí)行監(jiān)控進程。監(jiān)控進程監(jiān)控CPU 20被使用 情況,并判斷使否有調(diào)整觀察進程26的優(yōu)先值的必要。更佳的是,監(jiān)控進程為一守護進程 (daemon)。監(jiān)控進程以調(diào)整標志值表示目前CPU 20的狀況,而監(jiān)控進程的執(zhí)行步驟請容后 詳述。每當一個線程28被CPU 20執(zhí)行時,步驟S31判斷執(zhí)行中的線程28所屬的進程24 是否為觀察進程26。若否,則當執(zhí)行中的進程24結束后,于步驟S36中CPU 20執(zhí)行下一個 進程24 (意指CPU 20執(zhí)行下一個線程28),并在以步驟S31判斷新的執(zhí)行中的進程24是否 為觀察進程26。
若執(zhí)行中的進程24為觀察進程26,于步驟S32中操作系統(tǒng)判斷調(diào)整標志值是否等 于1。當調(diào)整標志值為1時,于步驟S33執(zhí)行調(diào)整進程,以將觀察進程26的優(yōu)先值調(diào)降;而 若調(diào)整標志值不等于1,于步驟S34判斷調(diào)整標志值是否等于0。當調(diào)整標志值等于0時, 于步驟S35執(zhí)行恢復進程,以恢復觀察進程26的優(yōu)先值。其中調(diào)整進程以及恢復進程的執(zhí) 行時機可以是在作為對象的觀察進程26被執(zhí)行之前或是被執(zhí)行之后,本發(fā)明并無限制。而 在執(zhí)行完調(diào)整進程或是恢復進程之后,CPU 20于步驟S36中繼續(xù)執(zhí)行下一個進程24,并在 以步驟S31判斷新的執(zhí)行中的進程24是否為觀察進程26。接著說明監(jiān)控進程的詳細步驟,而調(diào)整進程以及恢復進程的執(zhí)行步驟請容后詳 述。請參照圖3,其為根據(jù)本發(fā)明一實施范例的監(jiān)控進程的流程示意圖。由圖可以見悉,監(jiān) 控進程可包括步驟S40 偵測中央處理器20的一總占用率;步驟S41 判斷總占用率是否為 100%;步驟S42 偵測觀察進程26的一觀察占用率;步驟S43 判斷觀察占用率是否大于一 第一閾值;步驟S44 將調(diào)整標志值設為1 ;步驟S45 監(jiān)控進程進入休眠;步驟S46 判斷總 占用率是否小于第一閾值;步驟S47 將調(diào)整標志值設為0 ;以及步驟S48 將調(diào)整標志值設 為2。首先,監(jiān)控進程于步驟S40偵測總占有率,也就是CPU 20被使用的狀況。總占有率 是指CPU 20執(zhí)行包含操作系統(tǒng)等所有進程的被使用率,若總占有率過高,CPU 20便難有余 去處理優(yōu)先值低下的進程24。監(jiān)控進程并于步驟S41判斷總占有率是否為100%。若總占 有率高達100%,則表示有很高的機率是有某個或是某些高優(yōu)先值的進程24過度搶奪CPU 資源。如此一來,優(yōu)先值較低的進程24可能永遠不會被執(zhí)行到,而一直維持在饑餓的狀態(tài)。然而即使總占用率高達100%,亦有可能是同時有太多的進程24在隊列22中等待 著要被執(zhí)行。因此監(jiān)控進程于步驟S42中,判斷觀察占有率是否大于第一閾值。觀察占有 率是指CPU 20被所有的觀察進程26占用的情況;也就是說,觀察占用率是CPU 20執(zhí)行所 有的觀察進程26的被使用率。第一閾值例如可以是但不限定是80%,亦可以是由使用者指 定。當監(jiān)控進程判斷觀察進程26過度搶奪CPU 20的資源時,監(jiān)控進程于步驟S44將 調(diào)整標志值設為1,代表觀察進程26需要被調(diào)降其優(yōu)先值。設置完調(diào)整旗標后,監(jiān)控進程于 步驟S45進入休眠狀態(tài)。操作系統(tǒng)可令監(jiān)控進程進入一等待隊列(wait queue)中休眠,且 經(jīng)過一休眠時間后,操作系統(tǒng)會再度執(zhí)行監(jiān)控進程這個守護進程以監(jiān)控最新的CPU 20的 總占用率。相對的,當總占用率不等于100%時,監(jiān)控進程于步驟S46判斷總占有率是否小于 第一閾值。當總占有率小于第一閾值時,表示現(xiàn)在CPU 20尚有足夠的余力可以多執(zhí)行一些 進程24。則調(diào)整標志值在步驟S47被設為0,表示如果的前有觀察進程26因被調(diào)低優(yōu)先值 而無法獲得觀察進程26所期望的執(zhí)行時間,現(xiàn)在的狀況已允許這種觀察進程26恢復其優(yōu) 先值并取得更多的時間片(time slice)來執(zhí)行。此外,若總占有率為100%但觀察占有率小于第一閾值,表示然CPU 20處于極為 忙碌的狀態(tài),但這種狀況并非由觀察進程26所造成的。在其它的進程24被執(zhí)行結束后應 該就可緩解CPU 20過于忙碌的狀況,故調(diào)度方法可不對以狀況作處理。然根據(jù)本發(fā)明的另 一實施范例,調(diào)度方法令可以其它的調(diào)度算法進行處理。而若總占有率并非100%但大于第 一閾值,換句話說,總占有率介于第一閾值與100%之間,表示CPU 20可能還不夠有余提供更多的資源給觀察進程26。因此在這兩種狀況之中,監(jiān)控進程于步驟S47將調(diào)整旗標設為 2,代表調(diào)度方法不用執(zhí)行調(diào)整進程亦不用執(zhí)行恢復進程。總地說來,監(jiān)控進程偵測總占用率以及觀察占用率以判斷目前CPU 20執(zhí)行的狀 況,并設定調(diào)整標志值。監(jiān)控進程以調(diào)整標志值表示目前CPU 20的狀況,調(diào)度方法便可依 調(diào)整標志值判斷是否需要調(diào)降或是恢復觀察進程26的優(yōu)先值。以下詳述調(diào)整進程所執(zhí)行的步驟,請參閱圖4,其為根據(jù)本發(fā)明一實施范例的調(diào)整 進程的流程示意圖。由圖4」可知,調(diào)整進程包括步驟S50 判斷調(diào)整次數(shù)值是否等于0 ;步 驟S51 將觀察進程26的優(yōu)先值紀錄為一初始優(yōu)先值;步驟S52 判斷調(diào)整次數(shù)是否小于一 第二閾值;步驟S53 執(zhí)行一第一調(diào)降方法;以及步驟S54 執(zhí)行一第二調(diào)降方法。調(diào)整進程首先于步驟S50判斷調(diào)整次數(shù)值是否等于0。觀察進程26的調(diào)整次數(shù)值 紀錄觀察進程26被調(diào)降優(yōu)先值的次數(shù),而每當觀察進程26被執(zhí)行恢復進程后調(diào)整次數(shù)值 會被重置為0。若觀察進程26的調(diào)整次數(shù)值為0,表示目前觀察進程26所具有的優(yōu)先值是 操作系統(tǒng)所賦予的優(yōu)先值,也就是此觀察進程26應具有的優(yōu)先值。為了在CPU 20的總使 用率下降時恢復觀察進程26的優(yōu)先值,調(diào)整進程于步驟S51將觀察進程26目前的優(yōu)先值 保存為初始優(yōu)先值,以供后續(xù)的恢復進程使用。于步驟S52,調(diào)整進程判斷調(diào)整次數(shù)值是否小于第二閾值。調(diào)整進程分兩階段調(diào)降 觀察進程26的優(yōu)先值,第一階段僅(逐次)稍許降低優(yōu)先值,而第二階段大幅降低優(yōu)先值。 若以第一階段的調(diào)整即可解決觀察占有率過高,也就是其余的進程24反應過慢的問題,就 可避免觀察進程26的優(yōu)先值一口氣被降低,而劇烈影響到觀察進程26的執(zhí)行效能。因此 當調(diào)整次數(shù)值尚低時,表示此觀察進程26并不常過度占用CPU資源,僅需于步驟S53中執(zhí) 行第一調(diào)降方法,以進行第一階段的調(diào)整。相反的,若觀察進程26被調(diào)低過多次優(yōu)先值卻 仍一直占用CPU資源,此觀察進程26便須于步驟S54被執(zhí)行第二調(diào)降方法,大幅拉低其優(yōu) 先值,以將此觀察進程26過度占用的CPU資源讓出給其它進程24。請參照圖5,其為根據(jù)本發(fā)明一實施范例的第一調(diào)降方法的流程示意圖。由圖可以 見悉,第一調(diào)降方法包括步驟S60 判斷觀察進程26是否為普通進程;步驟S61 將動態(tài)優(yōu) 先級設為0 ;步驟S62 增加調(diào)整次數(shù)值;以及步驟S63 降低實時優(yōu)先級。第一調(diào)降方法于步驟S60判斷觀察進程26是普通進程或是實時進程。若觀察進 程26為普通進程,則其優(yōu)先值為動態(tài)優(yōu)先級以及靜態(tài)優(yōu)先級。觀察進程26的動態(tài)優(yōu)先級 于步驟S61被設為0。如此一來,直到隊列22中所有的普通進程的動態(tài)優(yōu)先級均被消耗至 0之前,此觀察進程26都不會被CPU 20執(zhí)行。但在所有動態(tài)優(yōu)先級都歸零后,操作系統(tǒng)自 動將此觀察進程26的動態(tài)優(yōu)先級與其它的普通進程一起依據(jù)個別的靜態(tài)優(yōu)先級恢復(重 設)個別的動態(tài)優(yōu)先級。且在調(diào)降過觀察進程26的動態(tài)優(yōu)先級之后,于步驟S62中此觀察 進程26的調(diào)整次數(shù)值被加1。類似地,若觀察進程26為實時進程,第一調(diào)降方法于步驟S63調(diào)低實時優(yōu)先級,例 如可將實時優(yōu)先級減1。且調(diào)降實時優(yōu)先級后,亦于步驟S62中將此觀察進程26的調(diào)整次 數(shù)值加1。當?shù)谝徽{(diào)降方法已經(jīng)觀察進程26的優(yōu)先值調(diào)降了數(shù)次,此觀察進程仍然頻繁占 用CPU 20,這表示隊列22中其它的進程24的優(yōu)先值遠小于此觀察進程26。此時調(diào)降進程 以第二調(diào)降方法處理此觀察進程26的優(yōu)先值。
請參照圖6,其為根據(jù)本發(fā)明一實施范例的第二調(diào)降方法的流程示意圖。由圖可以 知悉,第二調(diào)降方法包括步驟S70 判斷觀察進程26是否為普通進程;步驟S71 將動態(tài)優(yōu) 先級設為0 ;步驟S72 將靜態(tài)優(yōu)先級設為隊列22中具有最低的靜態(tài)優(yōu)先級的普通進程的 靜態(tài)優(yōu)先級;步驟S73 增加調(diào)整次數(shù)值;步驟S74 將觀察進程26改設為一普通進程;步驟 S75 將觀察進程26的優(yōu)先值改設為動態(tài)優(yōu)先級以及靜態(tài)優(yōu)先級;步驟S76 將動態(tài)優(yōu)先級 設為0 ;以及步驟S77 將靜態(tài)優(yōu)先級設為隊列22中具有最高的靜態(tài)優(yōu)先級的普通進程的 靜態(tài)優(yōu)先級。第二調(diào)降方法于步驟S70判斷觀察進程26是普通進程或是實時進程。當觀察進 程26為普通進程時,第二調(diào)降方法先于步驟S71將觀察進程26的動態(tài)優(yōu)先級設為0,并在 步驟S72調(diào)降觀察進程26的靜態(tài)優(yōu)先級。第二調(diào)降方法于隊列22中找尋具有最低的靜態(tài) 優(yōu)先級的普通進程,并將此最低的靜態(tài)優(yōu)先級作為觀察進程26的靜態(tài)優(yōu)先級。如此一來, 即使操作系統(tǒng)依據(jù)靜態(tài)優(yōu)先級恢復所有普通進程的動態(tài)優(yōu)先級,觀察進程26仍只能獲得 較低的動態(tài)優(yōu)先級。接著于步驟S73,觀察進程26的調(diào)整次數(shù)值被加1。當觀察進程26為實時進程,且觀察進程26即使逐次地被減低實時優(yōu)先級仍然頻 繁占用CPU 20時,這表示隊列22中可能只有此觀察進程26是實時進程,或是其它的實時 進程的實時優(yōu)先級都遠低于此觀察進程26。因此第二調(diào)降方法直接將觀察進程26設為普 通進程,但仍給予此觀察進程26較高的靜態(tài)優(yōu)先值。第二調(diào)降方法于步驟S74將觀察進程26由實時進程改為普通進程,且于步驟S75 將觀察進程26的優(yōu)先值由實時優(yōu)先級改設為靜態(tài)優(yōu)先級以及動態(tài)優(yōu)先級。第二調(diào)降方法 于步驟S76將動態(tài)優(yōu)先級設為0,并于步驟S77于隊列22中找尋具有最高的靜態(tài)優(yōu)先級的 普通進程,將此最高的靜態(tài)優(yōu)先級作為觀察進程26的靜態(tài)優(yōu)先級。接著第二調(diào)降方法亦于 步驟S73將觀察進程26的調(diào)整次數(shù)值被加1。調(diào)整進程以第一調(diào)降方法緩和地減低觀察進程26的優(yōu)先值,但若觀察進程26已 被調(diào)整多次后仍舊過度占用CPU資源,調(diào)降進程以第二調(diào)降方法大幅調(diào)降其優(yōu)先值,以提 高隊列22中其它不是觀察進程的進程24被執(zhí)行的時間。接下來詳述恢復進程的執(zhí)行步驟。對應上述階段式的調(diào)整方法,恢復進程亦階段 式地恢復優(yōu)先值。請參閱圖7」,其是為根據(jù)本發(fā)明一實施范例的恢復進程的流程示意圖。 由「圖7可以見悉,恢復進程包括步驟S80 判斷觀察進程26是否為實時進程;步驟S81 依據(jù)初始優(yōu)先值恢復優(yōu)先值,并將調(diào)整次數(shù)值設為0 ;步驟S82 判斷觀察進程26第一次被 執(zhí)行調(diào)整進程時是否為普通進程;步驟S83 判斷總占用率是否為小于第一閾值;步驟S84 判斷是否觀察進程26為普通進程,且觀察進程第一次被執(zhí)行調(diào)整進程時為實時進程;步驟 S85 將觀察進程26恢復為實時進程;步驟S86 依據(jù)初始優(yōu)先值恢復實時進程的優(yōu)先值, 并將調(diào)整次數(shù)值設為0 ;以及步驟S87 結束恢復進程?;謴瓦M程被啟動后首先于步驟S80判斷觀察進程26是否為實質進程,若不是,便 于步驟S82判斷觀察進程26是否原先就是普通進程,而非被調(diào)整進程由實時進程改設為普 通進程。也就是說,步驟S80與步驟S82判斷觀察進程26是否僅被第一調(diào)降方法處理過。 若是,則于步驟S81依據(jù)初始優(yōu)先值將實時優(yōu)先級或動態(tài)優(yōu)先級恢復為被調(diào)降之前的值, 此為第一階段的恢復方法。經(jīng)過第一階段的恢復后,總占有率以及觀察占有率都可能上升。因此于步驟S83,恢復進程判斷經(jīng)過第一階段的恢復后的總占有率是否仍小于第一閾值,以確認能否執(zhí)行第 二階段的恢復。當總占有率超過第一閾值時,恢復進程不進行第二階段的恢復,而于步驟 S87結束。相對的,當經(jīng)過第一階段的恢復后總占有率仍低于低一閾值時,恢復進程于步驟 S85將曾被調(diào)整進程改設為普通進程的觀察進程26恢復為實時進程,并于步驟S86依據(jù)初 始優(yōu)先值恢復實時優(yōu)先值。總地來說,成功提高其它進程24的CPU 20的占有率且CPU 20亦有余力時,恢復 進程亦階段式地恢復觀察進程的優(yōu)先權,以確保被恢復優(yōu)先值的觀察進程26不會再度過 分地占用CPU資源。而根據(jù)本發(fā)明的一實施范例,當所有的觀察進程26均已離開待執(zhí)行隊 列時(例如已執(zhí)行完畢或是進入等待隊列中),作為守護進程執(zhí)行的監(jiān)控進程持續(xù)監(jiān)控總 使用率。若監(jiān)控進程得知總使用率為100%,且又有觀察進程26位于隊列22時,即依照上 述方法設定調(diào)整標志值以進行調(diào)整/恢復優(yōu)先值的步驟。雖上述調(diào)度方法僅以單CPU系統(tǒng) 為例,然動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法亦是于多CPU系統(tǒng)。根據(jù)本發(fā)明的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,具有高優(yōu)先權且較可能過度占 用CPU的進程被設定為觀察進程。監(jiān)控進程監(jiān)控總占有率與觀察占有率以觀察進程是否過 度占用CPU資源,并階段式地調(diào)降/恢復觀察進程的優(yōu)先級。故此調(diào)度方法可有效增加低優(yōu) 先值的進程被執(zhí)行的機率以及時間長度,進而縮短平均反應時間。此外,借由階段式的調(diào)降 進程,可以避免明顯影響觀察進程的執(zhí)行是效率;而借由階段式的恢復進程,可以避免CPU 負載突然升高,或是避免觀察進程再度獨占CPU資源。當然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質的情況下,熟 悉本領域的技術人員當可根據(jù)本發(fā)明作出各種相應的改變和變形,但這些相應的改變和變 形都應屬于本發(fā)明所附的權利要求的保護范圍。
權利要求
1.一種動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,適用于一中央處理器與一隊 列,該隊列包括至少一進程,每一該進程具有一優(yōu)先值,該調(diào)度方法包括執(zhí)行一監(jiān)控進程,該監(jiān)控進程包括 偵測該中央處理器的一總占用率; 判斷該總占用率是否為100% ;以及 當該總占用率為100%時,執(zhí)行下列步驟偵測一觀察進程的一觀察占用率,其中該觀察進程為該隊列中的至少一個該進程,且 每一該觀察進程具有一調(diào)整次數(shù)值,該調(diào)整次數(shù)值的初始值為0 ; 判斷該觀察占用率是否大于一第一閾值; 當該觀察占用率大于該第一閾值時,將一調(diào)整標志值設為1 ;以及 令該監(jiān)控進程休眠,該監(jiān)控進程于經(jīng)過一休眠時間后再度被執(zhí)行; 判斷執(zhí)行中的該進程是否為該觀察進程;當執(zhí)行中的該進程為該觀察進程時,判斷該調(diào)整標志值是否等于1 ;以及 當該調(diào)整標志值等于1時,執(zhí)行一調(diào)整進程以調(diào)降該觀察進程的該優(yōu)先值。
2.根據(jù)權利要求1所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該監(jiān)控進 程另包括當該總占用率不為100%時,執(zhí)行下列步驟判斷該總占用率是否小于該第一閾值;當該總占用率小于該第一閾值時,將該調(diào)整標志值設為0 ;以及令該監(jiān)控進程休眠,該監(jiān)控進程于經(jīng)過一休眠時間后再度被執(zhí)行。
3.根據(jù)權利要求1所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,另包括 當該調(diào)整標志值等于0時,執(zhí)行一恢復進程以恢復被調(diào)降過的該觀察進程的該優(yōu)先值。
4.根據(jù)權利要求1所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該執(zhí)行一 調(diào)整進程以調(diào)降該觀察進程的該優(yōu)先值的步驟包括判斷該調(diào)整次數(shù)值是否等于0 ;當該調(diào)整次數(shù)值等于0時,將該觀察進程的該優(yōu)先值紀錄為一初始優(yōu)先值; 判斷該調(diào)整旗次數(shù)是否小于一第二閾值; 當該調(diào)整旗次數(shù)小于該第二閾值時,執(zhí)行一第一調(diào)降方法;以及 當該調(diào)整次數(shù)值不小于該第二閾值時,執(zhí)行一第二調(diào)降方法。
5.根據(jù)權利要求4所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該執(zhí)行一 第一調(diào)降方法的步驟包括判斷該觀察進程是否為一普通進程;當該觀察進程為該普通進程時,該觀察進程的該優(yōu)先值為一動態(tài)優(yōu)先級以及一靜態(tài)優(yōu) 先級,并將該動態(tài)優(yōu)先級設為0 ;以及 增加該調(diào)整次數(shù)值。
6.根據(jù)權利要求5所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,而該執(zhí)行 一第一調(diào)降方法的步驟另包括當該觀察進程不為該普通進程時,該觀察進程為一實時進程,該觀察進程的該優(yōu)先值為一實時優(yōu)先級,并降低該實時優(yōu)先級;以及 增加該調(diào)整次數(shù)值。
7.根據(jù)權利要求4所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該執(zhí)行一 第二調(diào)降方法的步驟包括判斷該觀察進程是否為一普通進程;以及當該觀察進程為該普通進程時,該觀察進程的該優(yōu)先值為一動態(tài)優(yōu)先級以及一靜態(tài)優(yōu) 先級,并執(zhí)行下列步驟 將該動態(tài)優(yōu)先級設為0 ;將該靜態(tài)優(yōu)先級設為該隊列中具有最低的該靜態(tài)優(yōu)先級的該普通進程的該靜態(tài)優(yōu)先 級;以及增加該調(diào)整次數(shù)值。
8.根據(jù)權利要求7所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該執(zhí)行一 第二調(diào)降方法的步驟另包括當該觀察進程不為該普通進程時,該觀察進程為一實時進程,并執(zhí)行下列步驟 將該觀察進程改設為該普通進程;將該觀察進程的該優(yōu)先值改設為該動態(tài)優(yōu)先級以及該靜態(tài)優(yōu)先級; 將該動態(tài)優(yōu)先級設為0 ;將該靜態(tài)優(yōu)先級設為該隊列中具有最高的該靜態(tài)優(yōu)先級的該普通進程的該靜態(tài)優(yōu)先 級;以及增加該調(diào)整次數(shù)值。
9.根據(jù)權利要求3所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,該執(zhí)行一 恢復進程以恢復被調(diào)降過的該觀察進程的該優(yōu)先值的步驟包括判斷該觀察進程是否為一實時進程;當該觀察進程為一實時進程時,依據(jù)該初始優(yōu)先值恢復該優(yōu)先值,并將該調(diào)整次數(shù)值 設為0;當該觀察進程不為該實時進程時,判斷該觀察進程第一次被執(zhí)行該調(diào)整進程時是否為 一普通進程;以及當該觀察進程第一次被執(zhí)行該調(diào)整進程時為該普通進程時,依據(jù)該初始優(yōu)先值恢復該 優(yōu)先值,并將該調(diào)整次數(shù)值設為0。
10.根據(jù)權利要求9所述的動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,其特征在于,當該觀察 進程第一次被執(zhí)行該調(diào)整進程時為該普通進程時,依據(jù)該初始優(yōu)先值恢復該優(yōu)先值之后的 步驟另包括判斷該總占用率是否為小于該第一閾值;以及 當該總占用率小于該第一閾值時,執(zhí)行以下步驟判斷是否該觀察進程為該普通進程,且該觀察進程第一次被執(zhí)行該調(diào)整進程時為該實 時進程;以及若是,將該觀察進程恢復為該實時進程;并依據(jù)該初始優(yōu)先值恢復該優(yōu)先值,并將該調(diào) 整次數(shù)值設為0。
全文摘要
本發(fā)明公開了一種動態(tài)調(diào)整進程的優(yōu)先值的調(diào)度方法,適用于中央處理器與隊列。隊列中包括至少一進程,且每一進程均具有優(yōu)先值。調(diào)度方法首先執(zhí)行監(jiān)控進程以偵測中央處理器的總占用率,當總占用率為100%時,偵測觀察進程的觀察占用率。當觀察占用率大于第一閾值時,監(jiān)控進程將調(diào)整標志值設為1并進入休眠。調(diào)度方法接著判斷執(zhí)行中的進程是否為觀察進程。當執(zhí)行中的進程為觀察進程,且調(diào)整標志值等于1時,調(diào)度方法執(zhí)行調(diào)整進程以調(diào)降觀察進程的優(yōu)先值。
文檔編號G06F9/50GK102033782SQ20091017417
公開日2011年4月27日 申請日期2009年9月30日 優(yōu)先權日2009年9月30日
發(fā)明者焦旭東, 陳玄同 申請人:英業(yè)達股份有限公司, 英業(yè)達集團(天津)電子技術有限公司