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