專利名稱:采用進(jìn)程線程的自適應(yīng)分區(qū)的進(jìn)程調(diào)度程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的目的是提供一種操作系統(tǒng)調(diào)度線程等的運行的方式。更具體而言,本發(fā)明的目的是具有用于進(jìn)程線程的自適應(yīng)分區(qū)調(diào)度的操作系統(tǒng)。
背景技術(shù):
操作系統(tǒng)的內(nèi)核(kernel)應(yīng)該能夠劃分CPU資源,使得系統(tǒng)中活動的每個線程能獲得足量的CPU時間以適當(dāng)?shù)貓?zhí)行相應(yīng)進(jìn)程。為達(dá)到這個目的,內(nèi)核應(yīng)該執(zhí)行確定如何在多個線程之間分配可用的CPU時間的調(diào)度系統(tǒng)。
至少存在三種類型的進(jìn)程調(diào)度系統(tǒng)FIFO調(diào)度系統(tǒng);輪轉(zhuǎn)方式(round-robin)調(diào)度系統(tǒng);和間發(fā)(sporadic)調(diào)度系統(tǒng)。在每種系統(tǒng)中,為CPU執(zhí)行的進(jìn)程的每個線程分配優(yōu)先級值。高優(yōu)先級值被分配給可能對整個系統(tǒng)操作較為重要的線程,而對系統(tǒng)操作不那么重要的線程具有較低的優(yōu)先級值。調(diào)度系統(tǒng)是否允許線程訪問CPU也取決于線程的狀態(tài)。例如,線程可以是就緒(ready)的或是阻塞(blocked)的(盡管其他狀態(tài)也可以被使用)。當(dāng)因為線程允許所需的所有條件都滿足而使線程能夠被執(zhí)行時,線程是就緒的。相反,當(dāng)線程嘗試啟動不能被立即完成的操作并且必須等待某些事件完成之后該線程的執(zhí)行才可以繼續(xù)時,該線程是阻塞的。
在FIFO調(diào)度系統(tǒng)中,當(dāng)前執(zhí)行的線程持續(xù)使用所有的CPU時間,直至其由于阻塞而放棄CPU、其完成執(zhí)行或其被更高優(yōu)先級的線程所搶占(preempt)為止。一旦這些標(biāo)準(zhǔn)的其中之一被滿足,則FIFO調(diào)度系統(tǒng)就將CPU分配給處于就緒狀態(tài)的最高優(yōu)先級的進(jìn)程/線程。通常,關(guān)于每個優(yōu)先級水平都有一個就緒的隊列。
輪轉(zhuǎn)方式的調(diào)度系統(tǒng)使用附加參數(shù),時間片,來將CPU時間分配給線程。時間片是允許線程訪問CPU期間的時間量。在輪轉(zhuǎn)方式的調(diào)度系統(tǒng)中,當(dāng)前執(zhí)行的線程持續(xù)使用所有的CPU時間直至發(fā)生以下事件中的一個1)當(dāng)前執(zhí)行的進(jìn)程阻塞;2)當(dāng)前執(zhí)行的進(jìn)程結(jié)束;3)當(dāng)前執(zhí)行的進(jìn)程被優(yōu)先級更高的線程搶占;或4)當(dāng)前執(zhí)行的進(jìn)程使用完其時間片。一旦當(dāng)前執(zhí)行的進(jìn)程阻塞或使用完其時間片,將其放到其優(yōu)先級的就緒隊列的后端。
間發(fā)調(diào)度有些類似輪轉(zhuǎn)方式的調(diào)度。在間發(fā)調(diào)度系統(tǒng)中,當(dāng)前執(zhí)行的進(jìn)程持續(xù)使用全部CPU時間,直到發(fā)生以下事件中的一個1)當(dāng)前執(zhí)行的進(jìn)程阻塞;2)當(dāng)前執(zhí)行的進(jìn)程結(jié)束;3)當(dāng)前執(zhí)行的進(jìn)程被優(yōu)先級更高的線程搶占;或4)當(dāng)前執(zhí)行的進(jìn)程使用完在給定時段內(nèi)分配給線程的執(zhí)行時間的加蓋(capped)限制。這種加蓋限制被稱為預(yù)算(budget),而可以使用這種預(yù)算的給定時段被稱為補充周期(replenishment period)。在操作中,當(dāng)補充周期到期時線程的預(yù)算被補充。一旦當(dāng)前執(zhí)行的進(jìn)程阻塞,則將其放其優(yōu)先級水平的就緒隊列的后部。但,如果當(dāng)前執(zhí)行的進(jìn)程使用完補充周期內(nèi)的它的預(yù)算,則其優(yōu)先級水平被減小到預(yù)定值,并將它放到這個較低優(yōu)先級水平的就緒隊列的后部。根據(jù)一些不同條件,進(jìn)程/線程的優(yōu)先級水平可以恢復(fù)到它的原始值。
在某些操作系統(tǒng)中,如Ontario的Kanata的QNX軟件系統(tǒng)所開發(fā)的系統(tǒng),系統(tǒng)中的每個線程可以使用前述調(diào)度系統(tǒng)中的任意系統(tǒng)來運行。因此,對于節(jié)點上的所有線程和進(jìn)程,調(diào)度系統(tǒng)在每個線程的基礎(chǔ)上是有效的。通過線程/進(jìn)程自身的操作,每個線程被分配到特定的調(diào)度系統(tǒng)類型。這就為軟件設(shè)計者提供了相當(dāng)大程度的設(shè)計靈活性,但也產(chǎn)生了要在為相同系統(tǒng)執(zhí)行代碼的軟件設(shè)計者之間進(jìn)行協(xié)調(diào)的需求。這種協(xié)調(diào)包括將優(yōu)先級分配給不同線程以及給每個線程分配調(diào)度系統(tǒng)類型。
一些可用操作系統(tǒng)在全局基礎(chǔ)上應(yīng)用調(diào)度。一種這樣的調(diào)度被稱為公平共享(fair-share)調(diào)度。在公平共享調(diào)度系統(tǒng)中,可以在各系統(tǒng)使用者、各群組(group)、或各進(jìn)程中平均分配CPU使用(usage)。例如,如果四個用戶(A、B、C、D)每個都在同時使用一個進(jìn)程,則公平共享調(diào)度程序?qū)⒃谶壿嬌线@樣分配可用CPU周期,使得每個用戶獲得整個周期的25%(100%/4=25%)。如果用戶B啟動第二個進(jìn)程,每個用戶將仍接收全部周期的25%,但用戶B的兩個進(jìn)程每個將接收全部可用CPU時間的12.5%。另一方面,如果新用戶在系統(tǒng)上啟動進(jìn)程,則調(diào)度程序?qū)⒅匦路峙淇捎玫腃PU周期,以使得每個用戶獲得整個周期的20%(100%/5=20%)。
另一層抽象概念允許把分組劃分成群組,并且將公平共享系統(tǒng)也應(yīng)用到這些群組。在這種情況下,可用的CPU周期首先在各群組當(dāng)中分配,然后在群組內(nèi)的各用戶當(dāng)中分配,然后在用戶的各進(jìn)程當(dāng)中分配。例如,如果有三個群組(1,2,3),各群組分別包含三個、兩個和四個用戶,可用的CPU周期可以按如下這樣進(jìn)行分配100%/3群組=每群組33.3%,群組1(33.3%/3個用戶)=每用戶11.1%,群組2(33.3%/2個用戶)=每用戶16.7%,群組3(33.3%/4個用戶)=每用戶8.3%。也可以在各群組中采用其他百分比分配。
執(zhí)行公平共享調(diào)度策略的一種邏輯方式是在每個抽象水平(進(jìn)程、用戶、群組、等等)遞歸地應(yīng)用輪轉(zhuǎn)方式的調(diào)度策略。在輪轉(zhuǎn)方式的調(diào)度中,同等重要性或同等優(yōu)先權(quán)的各線程依次運行。它們每一個運行多個間隔或多個時間片的時間,這些間隔或時間片是每個線程或每個線程群組的特性。
雖然前述的調(diào)度系統(tǒng)在不同應(yīng)用方面具有優(yōu)勢,但當(dāng)它們被用于某些系統(tǒng)應(yīng)用中時可能會具有缺陷。例如,當(dāng)每線程調(diào)度系統(tǒng)(per-thread scheduling system)被用在這樣的實時系統(tǒng)中時,在該實時系統(tǒng)中進(jìn)程/線程的等待時間完全通過優(yōu)先級水平的分配而被計劃好,可能會發(fā)生低優(yōu)先級的線程的等待時間非常長的情況。惡意軟件進(jìn)程可以把自身配置成能以高優(yōu)先級執(zhí)行,從而就能搶占較低優(yōu)先級線程的正當(dāng)調(diào)度。另外,例如在高優(yōu)先級線程出現(xiàn)故障并進(jìn)入無限循環(huán)時的系統(tǒng)進(jìn)展過程期間,也可能會發(fā)生這種問題。全局公平共享調(diào)度系統(tǒng)可以避免這樣的問題,但缺乏在實時系統(tǒng)中使用所需的響應(yīng)性(responsiveness)。因此,存在對以下這樣的系統(tǒng)的需求,該系統(tǒng)可允許高優(yōu)先級線程有效地實時操作,同時為所有線程提供某種程度的公平共享的CPU訪問。
發(fā)明內(nèi)容
提供了一種系統(tǒng),包括諸如單個處理器或?qū)ΨQ多處理機的處理器,和一個或多個存儲器存儲單元。該系統(tǒng)還包括存儲在存儲器存儲單元中的軟件代碼。該軟件代碼可由處理器執(zhí)行,并包括用于生成多個自適應(yīng)分區(qū)的代碼,其中這些自適應(yīng)分區(qū)的每個都和一個或多個軟件線程相關(guān)。這些自適應(yīng)分區(qū)中的每一個具有相應(yīng)的處理器預(yù)算。該代碼還可以被執(zhí)行來生成至少一個發(fā)送線程和至少一個接收線程。該接收線程能響應(yīng)來自發(fā)送線程的通信,以執(zhí)行一個或多個對應(yīng)這些通信的任務(wù)。調(diào)度系統(tǒng)還形成至少一部分能由處理器執(zhí)行的代碼。在操作中,調(diào)度系統(tǒng)至少部分地基于與各線程有關(guān)的自適應(yīng)分區(qū)的處理器預(yù)算,來選擇性地把處理器分配給每個發(fā)送和接收線程。在這種類型的發(fā)送/接收環(huán)境中,調(diào)度系統(tǒng)為由接收線程響應(yīng)發(fā)送線程發(fā)送的通信使用的處理器分配,對與發(fā)送線程有關(guān)的自適應(yīng)分區(qū)的處理器預(yù)算記帳。
在研究以下的附圖和詳細(xì)說明之后,本發(fā)明的其它系統(tǒng)、方法、特點、優(yōu)點對于本領(lǐng)域技術(shù)人員來說都是顯而易見的。所有這些其它的系統(tǒng)、方法、特點、優(yōu)點都包括在本說明中,包括在本發(fā)明的范圍中,并由所附的權(quán)利要求書保護(hù)。
通過參考以下附圖和描述能夠更好地理解本發(fā)明。圖中的組件不一定是按比例來繪制的,其重點實際是放在說明本發(fā)明的原理上。此外,在圖中,各個不同視圖中相似的附圖標(biāo)記代表相應(yīng)部分。
圖1是可依照本發(fā)明的公開內(nèi)容執(zhí)行進(jìn)程調(diào)度程序的系統(tǒng)的一個圖2是說明多個可用于建立采用自適應(yīng)分區(qū)的進(jìn)程調(diào)度程序的相關(guān)進(jìn)程的圖。
圖3是采用多個根據(jù)它們的相關(guān)線程和線程優(yōu)先級的自適應(yīng)分區(qū)的一個示例性進(jìn)程調(diào)度程序的圖。
圖4是采用多個根據(jù)它們的相關(guān)線程和線程優(yōu)先級的自適應(yīng)分區(qū)的另一個示例性進(jìn)程調(diào)度程序的圖,其中該進(jìn)程調(diào)度程序在與圖3顯示的條件不同的條件下操作。
圖5是是采用多個根據(jù)它們的相關(guān)線程和線程優(yōu)先級的自適應(yīng)分區(qū)的示例性進(jìn)程調(diào)度程序的圖,其中至少一個就緒線程被指定成臨界(critical)線程。
圖6是顯示多個相關(guān)進(jìn)程的流程圖,其可以被用于在存在發(fā)送線程和接收線程的軟件環(huán)境中實現(xiàn)進(jìn)程調(diào)度程序。
圖7是說明與圖6說明的進(jìn)程調(diào)度程序有關(guān)的操作的圖。
圖8是顯示多個相關(guān)進(jìn)程的流程圖,其可用于調(diào)度與各種自適應(yīng)分區(qū)有關(guān)的線程的運行。
圖9是顯示多個相關(guān)進(jìn)程的流程圖,其可用于確定進(jìn)程調(diào)度程序是否為與運行線程有關(guān)的保證預(yù)算或臨界預(yù)算記帳(bill)。
圖10是顯示多個可用于計算自適應(yīng)分區(qū)使用的相關(guān)預(yù)算的相關(guān)進(jìn)程的流程圖,其中使用的相關(guān)預(yù)算的值可以在圖8顯示的進(jìn)程中采用。
圖11是顯示多個可用于調(diào)度訪問相同互斥體(mutex)的線程的運行的相關(guān)進(jìn)程的流程圖。
具體實施例方式
圖1是系統(tǒng)100的示意性框圖,其中系統(tǒng)100可以執(zhí)行采用對進(jìn)程線程的自適應(yīng)分區(qū)的進(jìn)程調(diào)度程序。系統(tǒng)100包括可訪問存儲在存儲器110中的軟件代碼的中央處理單元105(“CPU”)。CPU 105還被安排來通過I/O接口115訪問各個設(shè)備/系統(tǒng)組件。這些設(shè)備/系統(tǒng)組件可包括,例如,傳感器、人類界面設(shè)備、網(wǎng)絡(luò)節(jié)點、打印機、存儲設(shè)備等。對稱多元處理系統(tǒng)中的處理器不論其數(shù)目多少都可以被認(rèn)為與單個處理器的方式相同,并且同樣包含在方框105表示的范圍內(nèi)。
存儲器110可用于存儲定義將由系統(tǒng)100執(zhí)行的功能的軟件代碼及其他代碼。盡管存儲器110被顯示為單個單元,但其可被實現(xiàn)為相同或不同存儲器類型的多個存儲器單元。例如,存儲器110可用多個閃存設(shè)備來實現(xiàn)??蛇x的,或者可以附加的,存儲器110可用一個或多個閃存設(shè)備和一個或多個硬盤存儲設(shè)備來實現(xiàn)。應(yīng)該認(rèn)識到的是,相當(dāng)多個可選存儲設(shè)備組合可被用于實現(xiàn)存儲器110。
圖1中標(biāo)識了可以存儲在存儲器110中且可由CPU105執(zhí)行的軟件代碼的一部分。這里顯示的被標(biāo)識軟件代碼包括操作系統(tǒng)120和一個和多個軟件應(yīng)用程序125。在這個實例中,包括了進(jìn)程調(diào)度程序130和設(shè)備驅(qū)動程序135作為操作系統(tǒng)120的組成部分。但,進(jìn)程調(diào)度程序130和設(shè)備驅(qū)動程序135還可被實現(xiàn)為與操作系統(tǒng)120相分離的軟件模塊。軟件應(yīng)用程序125可用于定義系統(tǒng)100將執(zhí)行的高級功能。設(shè)備驅(qū)動程序135可被用于提供硬件抽象層,軟件應(yīng)用程序125通過該硬件抽象層與系統(tǒng)100的硬件組件通信。硬件組件可包括通過IO接口115訪問的組件。
進(jìn)程調(diào)度程序130包括可執(zhí)行的軟件代碼,其用于把CPU105的處理時間(“CPU時間”)分配給系統(tǒng)100的每個線程。CPU時間可以被這樣分配,使得每個線程都能獲得足量的CPU時間,以正常執(zhí)行相應(yīng)的進(jìn)程。
圖2是顯示多個可被用于實現(xiàn)進(jìn)程調(diào)度程序130的相關(guān)操作的流程圖。圖2的流程圖說明了在進(jìn)程調(diào)度程序130中使用的許多值和操作特性。一些值和操作特性可在設(shè)計過程期間固定為用戶選擇的結(jié)果,而其他值和操作特性是通過用戶提供的配置數(shù)據(jù)提供的和/或通過系統(tǒng)100的軟件程序設(shè)計提供的。
如所示那樣,在方框205處,進(jìn)程調(diào)度程序130產(chǎn)生多個不同的自適應(yīng)分區(qū)。每個自適應(yīng)分區(qū)構(gòu)成用于與一系列進(jìn)程線程相關(guān)的調(diào)度屬性的虛擬容器,其中這一系列進(jìn)程線程被進(jìn)程調(diào)度程序130分成組。為公同或相關(guān)功能工作的線程可被分配到相同的自適應(yīng)分區(qū)。在面向?qū)ο蟮南到y(tǒng)中,自適應(yīng)分區(qū)可以作為包括相應(yīng)調(diào)度方法和屬性的自適應(yīng)分區(qū)種類的實例而被生成。在方框205處生成的自適應(yīng)分區(qū)中的每一個都被唯一地標(biāo)識,從而讓進(jìn)程調(diào)度程序130進(jìn)一步訪問。
進(jìn)程調(diào)度程序130生成的分區(qū)數(shù)目可以通過利用配置參數(shù)來引入。配置數(shù)據(jù)可以由用戶的啟動命令提供,或者通過與進(jìn)程調(diào)度程序130接口的程序來提供。
在方框210處,計算出將由進(jìn)程調(diào)度程序130使用的平均窗口(averaging window)的尺寸。如在以下進(jìn)一步的詳細(xì)說明中將提到的那樣,平均窗口是在系統(tǒng)超載時進(jìn)程調(diào)度程序130嘗試將各個自適應(yīng)分區(qū)保持在其保證CPU百分比處所持續(xù)的時間。典型的時間是100毫秒,但也可采用其它平均窗口尺寸。平均窗口大小可以在引導(dǎo)(boot)時間被指定,也可在其后的任意時刻被重新指定。選擇平均窗口的大小時需考慮的事項可包括-較短持續(xù)時間的平均窗口尺寸會減小CPU時間平衡(time-balancing)的精確性。
-當(dāng)使用較短持續(xù)時間的平均窗口時,因為其它分區(qū)使用少于其保證百分比而耗盡其預(yù)算的一些分區(qū)可以不必償還時間。
-在一些情況下,較長持續(xù)時間的平均窗口尺寸會使得一些自適應(yīng)分區(qū)出現(xiàn)運行時間延遲。
平均窗口的尺寸(“窗口尺寸”)可以按毫秒分配,調(diào)度進(jìn)程130把毫秒轉(zhuǎn)換成時鐘周期(clock tick)。時鐘周期是時鐘中斷(系統(tǒng)計時器)之間的時間間隔。調(diào)度進(jìn)程130使用的全部時間預(yù)算可以以相同的窗口尺寸被均分。
在方框215處,調(diào)度進(jìn)程130把保證CPU時間預(yù)算分配給每個自適應(yīng)分區(qū)??梢园驯WC預(yù)算按照整個可用系統(tǒng)預(yù)算的百分比來分配。在這種情況下,所有自適應(yīng)分區(qū)的CPU百分比的和是100%。為了分配整個CPU時間預(yù)算的份額(share),對稱多元處理系統(tǒng)中的處理器,無論其數(shù)目多少,都可以被認(rèn)為與單個處理器的方式相同。
可以以多種不同的方式確定用于每個自適應(yīng)分區(qū)的保證預(yù)算。例如,可以測量在幾種不同負(fù)載條件下由每個分區(qū)使用的CPU時間,并且這些CPU時間可用來繪制負(fù)載與每個分區(qū)所用的CPU時間的關(guān)系曲線。測量也可以在超載的條件下進(jìn)行。利用這種信息,系統(tǒng)設(shè)計者可以權(quán)衡在各種條件下每個分區(qū)中包含的各個線程的需求,并分配適當(dāng)?shù)谋WCCPU時間預(yù)算。這些測量也可用于根據(jù)CPU負(fù)載條件動態(tài)地改變保證CPU時間預(yù)算。例如,進(jìn)程調(diào)度程序130可根據(jù)不同操作條件以不同操作模式進(jìn)行操作。當(dāng)以特定模式操作時,進(jìn)程調(diào)度程序130采用唯一的一組自適應(yīng)分區(qū)參數(shù)。與特定模式相關(guān)的有效性(availability)和參數(shù)可以在引導(dǎo)時間被指定。在運行時間,應(yīng)用程序設(shè)計接口(“API”)可以被用于按需要切換模式。例如,第一組保證CPU時間百分比可以在啟動期間采用,而第二組保證CPU時間百分比可以在系統(tǒng)啟動已完成之后的常規(guī)操作期間采用。
在方框220處,優(yōu)先級被分配給每個線程,并且每個線程被與各自的自適應(yīng)分區(qū)關(guān)聯(lián)起來。在功能上相關(guān)的軟件可以被分配到相同的自適應(yīng)分區(qū)。這就實現(xiàn)了一種混合進(jìn)程調(diào)度系統(tǒng),在該系統(tǒng)中,分配給線程的優(yōu)先級以及自適應(yīng)分區(qū)的保證CPU時間百分比被用在由進(jìn)程調(diào)度程序130執(zhí)行的調(diào)度決定中。
在把各線程分配到各自的自適應(yīng)分區(qū)時,自適應(yīng)分區(qū)調(diào)度可以被用作決定將在何時禁止系統(tǒng)的特定功能的結(jié)構(gòu)化方法。當(dāng)以這種方式使用時,基于在一系列特定環(huán)境下線程是否會缺少CPU時間,將分離的線程置于不同的自適應(yīng)分區(qū)中。例如,假定系統(tǒng)100被設(shè)計成作為分組路由器操作。可由分組路由器執(zhí)行的進(jìn)程的一部分包括1)對分組進(jìn)行路由選擇;2)收集和記錄(log)用于分組路由的統(tǒng)計數(shù)字;3)對同級路由器的路由拓?fù)鋮f(xié)議;和4)收集和記錄路由拓?fù)涠攘?metric)。在這些情況下,這些進(jìn)程的線程可以被劃分成兩個自適應(yīng)分區(qū)一種用于與路由選擇有關(guān)的線程,一種用于與網(wǎng)絡(luò)拓?fù)溆嘘P(guān)的線程。當(dāng)系統(tǒng)超載時,即,存在比機器可以完成的工作更多的未完成工作。因此,需要確定哪些應(yīng)用要被運行得慢一些。為此,如果CPU沒有足夠的資源來執(zhí)行路由選擇和度量兩者的線程,則比起收集路由選擇度量來說,路由分組將可能更優(yōu)選一些。即使當(dāng)CPU資源受限時,運行有關(guān)網(wǎng)絡(luò)拓?fù)鋮f(xié)議的線程也是合理的。在這些情況下,比起最初考慮的兩個自適應(yīng)分區(qū),采用三個自適應(yīng)分區(qū)可能會更可取一些。這三個自適應(yīng)分區(qū),連同示例性的保證預(yù)算,可以包括-用于對分組進(jìn)行路由選擇的自適應(yīng)分區(qū)(80%份額);-用于拓?fù)鋮f(xié)議的自適應(yīng)分區(qū)(15%的份額),但其具有比用于對分組進(jìn)行路由選擇的自適應(yīng)分區(qū)中的線程更高的最大線程優(yōu)先級;和-用于記錄路由選擇度量和拓?fù)鋮f(xié)議度量兩者的自適應(yīng)分區(qū)(5%的份額)。
在這種情形下,自適應(yīng)分區(qū)調(diào)度已經(jīng)被用于重新組織各個系統(tǒng)功能,使得某些功能在高CPU負(fù)載期間被給予優(yōu)先級,同時仍要確保所有的系統(tǒng)功能都被給予CPU執(zhí)行時間。與路由選擇有關(guān)的線程和與記錄路由選擇度量有關(guān)的線程已經(jīng)與分離的自適應(yīng)分區(qū)關(guān)聯(lián)起來,盡管它們在功能上涉及路由選擇操作。類似地,兩個在功能上無關(guān)的組件,路由選擇度量記錄和拓?fù)涠攘坑涗洠慌c相同的自適應(yīng)分區(qū)關(guān)聯(lián)起來。這種把不同線程分配到不同分區(qū)的方式,使得進(jìn)程調(diào)度程序130能夠減小在高CPU負(fù)載條件下由記錄線程使用的CPU時間,并能把優(yōu)先級給予路由選擇線程和拓?fù)鋮f(xié)議線程,同時仍然可以執(zhí)行度量記錄。
在方框225處,做出關(guān)于系統(tǒng)的哪個線程將被允許在臨界狀態(tài)下運行的確定。把線程指定為臨界使其能夠以近似實時系統(tǒng)的方式運行,即使可能會超出自適應(yīng)分區(qū)預(yù)算的保證預(yù)算。當(dāng)與特定自適應(yīng)相關(guān)的臨界線程盡管在缺少對于自適應(yīng)分區(qū)的保證預(yù)算的情況下運行時,該自適應(yīng)分區(qū)被認(rèn)為是已經(jīng)進(jìn)入短期負(fù)債(short-term debt)。臨界線程可以在例如啟動時與各種分區(qū)關(guān)聯(lián)起來。臨界線程將在以下被進(jìn)一步詳細(xì)說明。
在方框235處,每個與臨界線程關(guān)聯(lián)起來的自適應(yīng)分區(qū)被分配了臨界時間預(yù)算??梢杂脮r間單位指定臨界時間預(yù)算,例如毫秒。在示例性系統(tǒng)中,臨界時間預(yù)算是對于所有與給定自適應(yīng)分區(qū)有關(guān)的臨界線程可用的CPU時間數(shù)量,其超過平均窗口期間那個分區(qū)的保證時間預(yù)算。通過采用臨界指定和臨界時間預(yù)算,臨界線程通常即使在它的相關(guān)自適應(yīng)分區(qū)已經(jīng)耗盡其保證預(yù)算的情況下,仍有在CPU上運行的機會。只要分區(qū)仍具有可用的臨界時間預(yù)算,這種情況就會發(fā)生。臨界線程可以提供在這些分區(qū)內(nèi)的實時行為的能力。
在方框240處,進(jìn)程調(diào)度程序130必須遵循的各種策略可以選擇性地指派給系統(tǒng)100。例如,破產(chǎn)策略可以被應(yīng)用到一個或多個自適應(yīng)分區(qū),以確定系統(tǒng)100和/或進(jìn)程調(diào)度程序130如何處理自適應(yīng)分區(qū)的破產(chǎn)狀態(tài)。當(dāng)在平均窗口的持續(xù)時間內(nèi)自適應(yīng)分區(qū)已經(jīng)耗盡其保證CPU時間預(yù)算和臨界時間預(yù)算時,臨界自適應(yīng)分區(qū)破產(chǎn)。作為另一個實例,系統(tǒng)100可以執(zhí)行超載通知策略,該策略允許進(jìn)程向進(jìn)程調(diào)度程序130登記,使得當(dāng)發(fā)生系統(tǒng)超載時該進(jìn)程就被通知。舉例來說,當(dāng)在平均窗口的持續(xù)時間內(nèi)不能在CPU上執(zhí)行所有的就緒線程時,發(fā)生系統(tǒng)超載。進(jìn)程可以登記以被告知當(dāng)系統(tǒng)100進(jìn)入和/或離開超載狀態(tài)時的超載情況。應(yīng)用程序可以使用這種超載通知以適度地降級它們的服務(wù),例如,通過跳過不那么重要的功能,或者通過減小計算的精度來降級。當(dāng)其它一些自適應(yīng)分區(qū)正在休眠時,自適應(yīng)分區(qū)可能會超出預(yù)算,如將在以下提出的那樣。并不必要將這認(rèn)為是系統(tǒng)超載,因此不需要觸發(fā)超載通知策略。
在方框245處,進(jìn)程調(diào)度程序130被配備了對應(yīng)于前述的在方框205到240處提供的狀態(tài)、值和/或分配的數(shù)據(jù)。如上面提到的那樣,可以以許多個不同方式,諸如由系統(tǒng)設(shè)計者提供、系統(tǒng)使用者提供、通過其它軟件程序等等,來提供這些用于系統(tǒng)100中狀態(tài)、值和/或分配。
方框250代表了依照方框245的配置數(shù)據(jù)的線程的執(zhí)行。各個自適應(yīng)分區(qū)的屬性可以是動態(tài)的。為此,在一個或多個前述的方框中提出的參數(shù)可以根據(jù)系統(tǒng)請求、系統(tǒng)狀態(tài)、系統(tǒng)功能的改變、等等而被改變,如返回到方框205的流程線表示的那樣。
系統(tǒng)100的線程也可以隨時間而動態(tài)改變。例如,與自適應(yīng)分區(qū)有關(guān)的線程或線程群組可以在操作期間產(chǎn)生(spawn)、或生成其他線程。該始發(fā)線程(originating thread)可以被稱為父線程,而被生成的線程可以被稱為子線程。進(jìn)程調(diào)度程序130可以被配置成這樣,使得子線程自動繼承它們的父線程的自適應(yīng)分區(qū)??蛇x的,或者附加的,可以提供API,其允許在其它自適應(yīng)分區(qū)中生成線程。這樣的API僅僅可以對具有充分特權(quán)的代碼做出。例如,系統(tǒng)應(yīng)用程序啟動器(launcher)可以具有這樣的特權(quán)。
圖3說明了進(jìn)程調(diào)度程序130可以在常規(guī)的負(fù)載條件下操作的一種方式,在該常規(guī)負(fù)載條件下沒有分區(qū)超過其CPU預(yù)算。在此實例中,進(jìn)程調(diào)度程序130已經(jīng)生成了三個自適應(yīng)分區(qū)301、302和303。自適應(yīng)分區(qū)301可能與多媒體應(yīng)用程序的線程305、306、307和308關(guān)聯(lián)起來。自適應(yīng)分區(qū)302可能與Java應(yīng)用程序的線程315、316、317、318和319關(guān)聯(lián)起來。自適應(yīng)分區(qū)303可能與系統(tǒng)記錄應(yīng)用程序的線程320、325、330、335和340關(guān)聯(lián)起來。線程305-345具有各種調(diào)度優(yōu)先級,其表示在圖3的括號中,其可以獨立于關(guān)聯(lián)的自適應(yīng)分區(qū)的保證預(yù)算。
在操作中,每個自適應(yīng)分區(qū)301-303和線程305-345可以采取不同的操作狀態(tài)。例如,自適應(yīng)分區(qū)301-303可以在活動狀態(tài)和休眠狀態(tài)中操作。在活動狀態(tài)中,自適應(yīng)分區(qū)的調(diào)度屬性可以被用于調(diào)度相關(guān)線程的CPU時間。當(dāng)沒有與自適應(yīng)分區(qū)有關(guān)的就緒線程時,休眠狀態(tài)發(fā)生。在這樣的情況下,進(jìn)程調(diào)度程序130有效地將自適應(yīng)分區(qū)作為不存在處理。
線程可以采取,例如,運行狀態(tài)、就緒狀態(tài)或阻塞狀態(tài)。當(dāng)線程正在被CPU執(zhí)行時,其處于運行狀態(tài)。當(dāng)在進(jìn)程調(diào)度程序130確定的時刻,使得線程為CPU的執(zhí)行充分準(zhǔn)備好的一組條件已經(jīng)被滿足時,線程處于準(zhǔn)備狀態(tài)。當(dāng)線程等待一個或多個事件的發(fā)生時,線程處于阻塞狀態(tài)。當(dāng)處于阻塞狀態(tài)中時,線程并不準(zhǔn)備消耗任何CPU資源。一旦線程等待的事件發(fā)生,線程可以解除阻塞并進(jìn)入就緒或運行狀態(tài)。
自適應(yīng)分區(qū)301-303和相應(yīng)的線程305-345能夠被用于描述不同負(fù)載情形期間進(jìn)程調(diào)度程序130的操作。在此實例中,進(jìn)程調(diào)度程序130基于就緒線程的優(yōu)先級,使CPU可用于執(zhí)行分配給每個自適應(yīng)分區(qū)301、302和303的就緒線程308、315和345。在常規(guī)負(fù)載的情形下,當(dāng)系統(tǒng)100中的高優(yōu)先級的線程變成就緒時其將立即運行??梢砸栽S多種不同的方式向進(jìn)程調(diào)度程序130指示線程是否就緒,這些方式包括,例如,通過中斷事件或類似情況的發(fā)生。在說明的實例中,最高優(yōu)先級的就緒線程是線程345,其具有的優(yōu)先級為17。線程35將在運行狀態(tài)下持續(xù)操作,直到其被結(jié)束、阻塞,或者直到自適應(yīng)分區(qū)303的預(yù)算被耗盡。在繁重的負(fù)載下,如果自適應(yīng)分區(qū)超出其CPU預(yù)算,那么其最高優(yōu)先級線程不再運行,直到該分區(qū)再一次具有在其CPU預(yù)算中的可用時間為止。這是在分區(qū)301、302和303當(dāng)中分割不足的CPU時間的系統(tǒng)100的防護(hù)措施(safeguard)。在這種狀態(tài)下,處理器用其保證CPU時間預(yù)算內(nèi)保留的CPU時間來運行自適應(yīng)分區(qū)中的最高優(yōu)先級的線程。
當(dāng)自適應(yīng)分區(qū)進(jìn)入休眠狀態(tài)時,進(jìn)程調(diào)度程序130把休眠分區(qū)的CPU預(yù)算分配給其它活動的自適應(yīng)分區(qū)——即使其它活動的自適應(yīng)分區(qū)已經(jīng)超過它們的預(yù)算。例如,如果自適應(yīng)分區(qū)303進(jìn)入休眠狀態(tài),則進(jìn)程調(diào)度程序130把自適應(yīng)分區(qū)303的預(yù)算分配給自適應(yīng)分區(qū)302,因為自適應(yīng)分區(qū)302具有最高優(yōu)先級的就緒線程315。如果兩個或多個自適應(yīng)分區(qū)具有帶有相同最高優(yōu)先級的線程,則進(jìn)程調(diào)度程序130依照其它自適應(yīng)分區(qū)的百分比成比例地分割空閑時間。這種分配有助于防止在兩個自適應(yīng)分區(qū)具有相同優(yōu)先級的情況下就緒隊列延遲時間較長的情況。
在圖4的實例中,有三個自適應(yīng)分區(qū)401、402和403,分別具有70%、20%和10%的CPU預(yù)算保證。進(jìn)一步,每個自適應(yīng)分區(qū)401、402和403分別包括就緒線程408、415和445,這幾個就緒線程的優(yōu)先級為14。如果自適應(yīng)分區(qū)401由于線程408的阻塞而進(jìn)入休眠狀態(tài),則進(jìn)程調(diào)度程序130把所有可用的CPU時間以2∶1的比率分配給自適應(yīng)分區(qū)402和402,該比率對應(yīng)于它們初始的CPU預(yù)算分配。如果自適應(yīng)分區(qū)401在短時間內(nèi)處于休眠狀態(tài),那么進(jìn)程調(diào)度程序130通過重新分配CPU資源使得自適應(yīng)分區(qū)402和403償還它們每個使用的由分區(qū)401付出的CPU時間,可以確保分區(qū)401稍后能按照其保證CPU時間預(yù)算接收CPU時間。如果自適應(yīng)分區(qū)401在較長的時間內(nèi)一直處于休眠狀態(tài),那么自適應(yīng)分區(qū)402和403使用的全部時間的一部分時間可變成空閑的(free)。自適應(yīng)分區(qū)是在長時間內(nèi)還是在短時間內(nèi)處于休眠狀態(tài)能夠以不同的方式來確定。例如,當(dāng)自適應(yīng)分區(qū)在一個平均窗口內(nèi)小于(窗口尺寸)-(預(yù)算百分比*窗口尺寸)毫秒的持續(xù)時間內(nèi)處于休眠狀態(tài),則其可以被說成在短時間內(nèi)處于休眠狀態(tài)。
如果所有的自適應(yīng)分區(qū)處于它們的CPU預(yù)算極限處,那么進(jìn)程調(diào)度程序130可以指定系統(tǒng)100中具有最高優(yōu)先級的線程運行。如果兩個自適應(yīng)分區(qū)具有帶有相同的最高優(yōu)先級的線程,那么已使用了其預(yù)算的最小比例的自適應(yīng)分區(qū)可以被運行。這種操作方式可以被用于避免可能會發(fā)生的較長就緒隊列延遲。在圖4中所示的實例中,窗口尺寸可以是100ms,自適應(yīng)分區(qū)401被分得70%的CPU預(yù)算并已使用了40ms,自適應(yīng)分區(qū)402被分得20%的CPU預(yù)算并已使用了5ms,自適應(yīng)分區(qū)403被分得10%的CPU預(yù)算并已使用了7ms。所有分區(qū)具有優(yōu)先級為14的就緒線程。在這種情形下,自適應(yīng)分區(qū)402的線程415被運行,因為其相對空閑比例為5ms/20ms,或為0.25,而自適應(yīng)分區(qū)401的相對空閑比例為40ms/70ms,或為0.57,而自適應(yīng)分區(qū)403的為7ms/10ms,或為0.70。
如果自適應(yīng)分區(qū)已耗盡分配的CPU預(yù)算,并且其就緒線程中的一個或多個被指定為臨界,那么進(jìn)程調(diào)度程序130可允許該自適應(yīng)分區(qū)使用其臨界CPU預(yù)算以運行臨界線程。該臨界時間預(yù)算是進(jìn)程調(diào)度程序130分配給自適應(yīng)分區(qū)以運行所有與該自適應(yīng)分區(qū)有關(guān)的臨界線程的CPU時間數(shù)量。這種臨界時間預(yù)算構(gòu)成進(jìn)程調(diào)度程序130在平均窗口期間分配給自適應(yīng)分區(qū)的該分區(qū)的常規(guī)預(yù)算的CPU時間。因此,即使與臨界線程有關(guān)的自適應(yīng)分區(qū)已經(jīng)用完預(yù)算,只要該自適應(yīng)分區(qū)還沒有耗盡其臨界時間預(yù)算,則臨界線程就可以運行。
圖5說明了具有兩個自適應(yīng)分區(qū)501和502的系統(tǒng)。線程505、506、507和508與自適應(yīng)分區(qū)501相關(guān)聯(lián),而線程515、516、517、518和519與自適應(yīng)分區(qū)502相關(guān)聯(lián)。自適應(yīng)分區(qū)501例如可以包括與氣囊(airbag)通知進(jìn)程有關(guān)的線程。自適應(yīng)分區(qū)501的線程505和508已經(jīng)被指定為臨界線程,但只有線程508處于就緒狀態(tài)。
在此實例中,自適應(yīng)分區(qū)501已耗盡其保證CPU時間預(yù)算。雖然如此,臨界線程508可以被允許運行,這是由于通過臨界指定而賦予其的重要性。因此,倘若在自適應(yīng)分區(qū)501的臨界時間預(yù)算內(nèi)仍舊有CPU時間,則進(jìn)程調(diào)度程序130可以把CPU時間分配給臨界線程508。
當(dāng)進(jìn)程調(diào)度程序130調(diào)度諸如線程508的臨界線程的運行時,進(jìn)程調(diào)度程序相對于(against)該線程的相關(guān)自適應(yīng)分區(qū)的可用保證CPU時間預(yù)算來為線程的運行時間記帳(bill)。但,只有在如果進(jìn)程調(diào)度程序130將不運行臨界線程時,進(jìn)程調(diào)度程序130相對于該自適應(yīng)的臨界時間預(yù)算來計算臨界線程使用的CPU時間。為此,當(dāng)1)系統(tǒng)沒有超載,或2)系統(tǒng)超載,但一個或多個自適應(yīng)分區(qū)可能不會耗盡它們的保證CPU時間預(yù)算時,用于運行臨界線程的CPU時間將不被相對于相關(guān)的自適應(yīng)分區(qū)的臨界時間預(yù)算進(jìn)行計算。
臨界線程可以保持在臨界運行狀態(tài),直到其進(jìn)入阻塞狀態(tài)為止。也就是,其可以如其它任意線程一樣離開運行或就緒狀態(tài)。如以上提到的那樣,這可以在線程正在等待消息、中斷通知等等時發(fā)生。在觸發(fā)了優(yōu)先級遺傳的操作期間,線程的臨界性、或?qū)ζ渥赃m應(yīng)分區(qū)的臨界時間預(yù)算的記帳可以連同自適應(yīng)分區(qū)一起被繼承。
短期負(fù)債被為分區(qū)所規(guī)定的臨界時間預(yù)算所限制。隨著時間的流逝,該分區(qū)可能被要求償還該短期負(fù)債。超出自適應(yīng)分區(qū)的臨界時間預(yù)算的臨界線程可以被認(rèn)為使相關(guān)的自適應(yīng)分區(qū)趨向破產(chǎn)。破產(chǎn)可以作為應(yīng)用程序差錯來處理,并且設(shè)計者可以規(guī)定系統(tǒng)的響應(yīng)。響應(yīng)的示例性選擇包括1)迫使系統(tǒng)重啟;2)通知內(nèi)部或外部系統(tǒng)的監(jiān)視器(watchdog);和/或3)終止和/或通知其它指定的進(jìn)程。如果自適應(yīng)分區(qū)耗盡了其臨界時間預(yù)算,系統(tǒng)可以向日志等添加一個條目。當(dāng)自適應(yīng)分區(qū)的預(yù)算被動態(tài)改變(例如,通過模式改變,用于修改CPU百分比的API調(diào)用,等等)時,進(jìn)程調(diào)度程序130可以在為破產(chǎn)測試自適應(yīng)分區(qū)之前施加延遲。這就使得在自適應(yīng)分區(qū)可能被宣布破產(chǎn)之前使預(yù)算變得穩(wěn)定。
把線程指定為臨界可以已多種不同的方式發(fā)生。例如,系統(tǒng)可以自動地標(biāo)記被I/O中斷啟動的線程作為臨界。該系統(tǒng)還可以規(guī)定一組附加的應(yīng)用程序或操作系統(tǒng)通知事件,例如,可以把它們的相關(guān)處理器(handler)線程標(biāo)記為臨界的計時器。API還可以被用于把選定的線程標(biāo)記為臨界。另外,臨界父線程的子線程可以被自動指定為臨界。
進(jìn)程調(diào)度程序130還可適用于客戶/服務(wù)器系統(tǒng)中,在該系統(tǒng)中消息發(fā)自一個或多個發(fā)送/客戶線程,用于讓一個或多個接收/服務(wù)器線程接收和/或處理。圖6顯示了多個相關(guān)的進(jìn)程,這些進(jìn)程可以用于在這樣的客戶/服務(wù)器的環(huán)境中實現(xiàn)進(jìn)程調(diào)度程序130。在方框605處,第一自適應(yīng)分區(qū)中的客戶線程向第二自適應(yīng)分區(qū)中的服務(wù)器線程發(fā)送消息。當(dāng)客戶線程向服務(wù)器線程發(fā)送消息時,接收消息的服務(wù)器線程可以繼承該發(fā)送線程的優(yōu)先級。這就避免了優(yōu)先級倒置(inversion),因為該服務(wù)器線程正在代表發(fā)送客戶做工作。在方框610處顯示了由服務(wù)器線程繼承發(fā)送線程的優(yōu)先級水平。在方框610處,進(jìn)程調(diào)度程序還可以把客戶線程的相同臨界狀態(tài)分配給服務(wù)器線程。在方框615處,進(jìn)程調(diào)度程序130可以把服務(wù)器線程和與客戶線程相關(guān)聯(lián)的相同自適應(yīng)分區(qū)關(guān)聯(lián)起來。
圖7說明了可用于解釋圖6所示的操作的一些方面的系統(tǒng)。在此實例中,存在三個自適應(yīng)分區(qū)701、702和703。自適應(yīng)分區(qū)702可包括例如,由文件系統(tǒng)的進(jìn)程運行的類型的服務(wù)器線程720和725。指派給自適應(yīng)分區(qū)702的屬性可隨系統(tǒng)的設(shè)計變化。但在此實例中,生成的自適應(yīng)分區(qū)702的CPU時間預(yù)算為零,并且線程720和725已經(jīng)被指配以默認(rèn)優(yōu)先級為7。自適應(yīng)分區(qū)701可包括多個不同的線程705、710和715,其中線程715構(gòu)成向自適應(yīng)分區(qū)702的一個或多個服務(wù)器線程發(fā)送消息的客戶線程。類似的,自適應(yīng)分區(qū)703可包括多個不同的線程730、735、740和745,其中線程745構(gòu)成向自適應(yīng)分區(qū)702的一個或多個服務(wù)器線程發(fā)送消息的客戶線程。
如圖7的線條750所示,客戶線程715已經(jīng)傳遞了被自適應(yīng)分區(qū)702的線程720接收或處理過的消息。類似的,自適應(yīng)分區(qū)703的客戶線程745已經(jīng)傳遞了被自適應(yīng)分區(qū)702的線程725接收或處理過的消息,如線條755指示的那樣。當(dāng)消息傳送750和755發(fā)生時,進(jìn)程調(diào)度程序130把每個服務(wù)器/接收與發(fā)送消息的線程的自適應(yīng)分區(qū)關(guān)聯(lián)起來。在這種情況下,服務(wù)器線程720被臨時與自適應(yīng)分區(qū)701關(guān)聯(lián)起來,如線條760指示的那樣,并且被指派了與線程715相同的優(yōu)先級,14。同樣的,服務(wù)器線程725被臨時與自適應(yīng)分區(qū)703關(guān)聯(lián)起來,如線條765指示的那樣,并且被指派了與線程745相同的優(yōu)先級,12。線程720和725都可以被置于就緒狀態(tài),而線程715和745被置于阻塞狀態(tài),因為各自的消息在被進(jìn)程。一旦線程720已完成對從線程715接收到的消息的處理,則線程720可以返回其原始狀態(tài),在該原始狀態(tài)其被與具有為7的默認(rèn)優(yōu)先級的自適應(yīng)分區(qū)702關(guān)聯(lián)起來。同樣,一旦線程725已完成對從線程745接收到的消息的處理,則線程725可以返回其原始狀態(tài),在該原始狀態(tài)其被與具有為7的默認(rèn)優(yōu)先級的自適應(yīng)分區(qū)702關(guān)聯(lián)起來。
有時,客戶線程可以嘗試與正在忙于進(jìn)處理一個或多個以前從其它客戶線程接收到的消息的服務(wù)器線程通信。例如,如果自適應(yīng)分區(qū)703的線程740解除阻塞并且嘗試向服務(wù)器線程725發(fā)送消息,而服務(wù)器線程725正忙于處理一個或多個從線程745接收到的以前的消息,則服務(wù)器線程725通常將不能響應(yīng)線程740,直到其完成對來自客戶線程745的以前的消息的處理為止。在這樣的情況下,進(jìn)程調(diào)度程序130可以臨時地升高一個或多個例如在與客戶線程相同的連接路徑等待的服務(wù)器線程的優(yōu)先級。對應(yīng)這些操作的查詢和行為在圖6的方框620和625處說明。如應(yīng)用于圖7的系統(tǒng)中一樣,分配給自適應(yīng)分區(qū)703的線程和分配給自適應(yīng)分區(qū)702的線程之間的連接路徑,例如,可以被指派以相同的識別名稱/號碼。結(jié)果是,服務(wù)器線程725的優(yōu)先級可以被提高,以嘗試減小可能會在服務(wù)器線程725可用于處理來自客戶線程740的消息之前發(fā)生的等待時間。根據(jù)自適應(yīng)分區(qū)702中的線程的性質(zhì),多個服務(wù)器線程的優(yōu)先級水平可以被提高。
在圖6的方框630處,進(jìn)程調(diào)度程序130操作,從而以適當(dāng)?shù)姆绞綄γ總€線程720和725的執(zhí)行時間記帳。對執(zhí)行時間記帳的適當(dāng)方式可以改變。一種方式包括根據(jù)與發(fā)送線程有關(guān)的自適應(yīng)分區(qū)的CPU預(yù)算和/或臨界CPU預(yù)算來應(yīng)用(apply)接收線程的執(zhí)行時間。在圖7的實例中,響應(yīng)線程715發(fā)送的消息的線程720使用的執(zhí)行時間,是相對于自適應(yīng)分區(qū)701的CPU預(yù)算和/或臨界CPU預(yù)算計算的。類似的,響應(yīng)線程745發(fā)送的消息的線程725使用的執(zhí)行時間,是根據(jù)自適應(yīng)分區(qū)703的CPU預(yù)算和/或臨界CPU預(yù)算計算的。
諸如文件系統(tǒng)、設(shè)備驅(qū)動程序和類似物的系統(tǒng)組件的保證預(yù)算可以被分配為零。在這樣的情況下,與系統(tǒng)組件有關(guān)的線程使用的CPU時間將被對其客戶計帳。但有時進(jìn)程調(diào)度程序130會在太遲時才能發(fā)現(xiàn)特定的系統(tǒng)組件線程最終為那些線程工作。結(jié)果是,進(jìn)程調(diào)度程序130可能不能及時對系統(tǒng)組件的線程的運行記帳和/或不能把系統(tǒng)組件的線程的運行對適當(dāng)?shù)淖赃m應(yīng)分區(qū)計帳。另外,一些系統(tǒng)組件諸如設(shè)備驅(qū)動程序可具有后臺線程(例如,用于審計或者維護(hù)),這些后臺線程需要不能被賦予特定客戶的預(yù)算。在這些情況下,系統(tǒng)設(shè)計者可以測量后臺操作和與各個系統(tǒng)組件有關(guān)的不能賦予的負(fù)載。結(jié)果產(chǎn)生的測量結(jié)果可以被用于把非零的預(yù)算提供給與各系統(tǒng)組件的線程有關(guān)的自適應(yīng)分區(qū)。
在操作中,進(jìn)程調(diào)度程序130所做的不止是簡單地指導(dǎo)與自適應(yīng)分區(qū)有關(guān)的最高優(yōu)先級的就緒線程的運行,其中該自適應(yīng)分區(qū)在其預(yù)算內(nèi)還剩有保證CPU時間。例如,當(dāng)所有的自適應(yīng)分區(qū)大致在相同時間耗盡它們的保證CPU時間預(yù)算時,那么進(jìn)程調(diào)度程序130可以指導(dǎo)系統(tǒng)中最高優(yōu)先級的線程的運行,而不管相關(guān)自適應(yīng)分區(qū)的屬性如何。另外,當(dāng)自適應(yīng)分區(qū)具有最高優(yōu)先級相等的線程時,進(jìn)程調(diào)度程序130可以使用它們的保證CPU時間百分比的比率來分配CPU時間。最后,倘若自適應(yīng)分區(qū)仍具有一部分臨界時間預(yù)算,則臨界線程即使在其自適應(yīng)分區(qū)用完預(yù)算時仍可以被運行。
進(jìn)程調(diào)度程序130在其調(diào)度確定中可采用一個或多個與每個自適應(yīng)分區(qū)ap有關(guān)的排序函數(shù)f(ap)。排序函數(shù)可以多種不同方式來計算。排序函數(shù)的計算結(jié)果可以與另一個相比較,以確定進(jìn)程調(diào)度程序130將如何調(diào)度與該系統(tǒng)的各個自適應(yīng)分區(qū)有關(guān)的線程。
在計算排序函數(shù)f(ap)時,許多個不同變量可以被使用。在此根據(jù)一個實例說明對這些變量的考慮。在以下實例中,假設(shè)“is_critcal(ap)”是布爾變量?!癷s_critcal(ap)”的值取決于1)自適應(yīng)分區(qū)ap是否具有可用的臨界預(yù)算,和2)自適應(yīng)分區(qū)ap中的最高優(yōu)先級就緒線程是否已經(jīng)被指派臨界狀態(tài)。假設(shè)“has_budget(ap)”是指示在最后的平均窗口期間自適應(yīng)分區(qū)ap消耗的CPU時間是否小于它的保證CPU時間預(yù)算的布爾變量。假設(shè)“highest_prio(ap)”是指示自適應(yīng)分區(qū)ap中所有準(zhǔn)備好運行的線程的最高優(yōu)先級的整數(shù)變量。假設(shè)“relative_fraction_used(ap)”是實數(shù)變量,其對應(yīng)于在最后的平均窗口期間自適應(yīng)分區(qū)ap消耗的CPU時間的微秒數(shù)除以例如以微秒表示的自適應(yīng)分區(qū)ap的預(yù)算得到的比率。最后,假設(shè)b(ap)是對應(yīng)于自適應(yīng)分區(qū)ap中的各線程的CPU時間消耗的當(dāng)前比率的布爾變量。更具體而言,如果與分區(qū)ap有關(guān)的各線程的CPU時間消耗的當(dāng)前比率被給定,則b(ap)可以被指派邏輯真值,當(dāng)進(jìn)程調(diào)度程序130被再次調(diào)用以調(diào)度與該自適應(yīng)分區(qū)有關(guān)的線程時,has_budget(ap)的值也會是邏輯真值。否則,b(ap)可能被指派成邏輯假值。可以認(rèn)識到的是,其它變量,或者少于前述變量的全部的變量,可被用于計算和排序函數(shù)f(ap)。使用哪些變量可由系統(tǒng)設(shè)計者和/或終端用戶決定。
b(ap)的值可以以多種不同的方式來計算。例如,假定變量t指示高分辨率計數(shù)器中的當(dāng)前時刻,而滴答(tick)是常規(guī)事件之間的時間長度,在該常規(guī)事件期間進(jìn)程調(diào)度程序檢查所有分區(qū)。該滴答的周期應(yīng)該小于平均窗口的尺寸(“窗口尺寸”)。假設(shè)函數(shù)cpu_time_used(t1,t2)對應(yīng)于分區(qū)ap的各線程在絕對時間t1和t2之間使用的CPU時間的實際值。另外,假設(shè)budget(ap)對應(yīng)于分區(qū)ap的保證預(yù)算的時間值。那么b(ap)的值就可以通過使用以下等式來計算b(ap)=Boolean(cpu_time_used(now,now-windowsize)-cpu_time_used(now-windowsize+tick,now-windowsize)<budget(ap)).
圖8顯示了通過使用前述變量來計算排序函數(shù)f(ap)的方式。所說明的操作可以為在系統(tǒng)100中使用的每個自適應(yīng)分區(qū)ap執(zhí)行。如所示那樣,在方框800處,進(jìn)程調(diào)度程序130確定分區(qū)是否具有任何準(zhǔn)備好要運行的線程。如果沒有與該自適應(yīng)分區(qū)ap相關(guān)的就緒線程,則在方框802處該自適應(yīng)分區(qū)的排序函數(shù)f(ap)可以被賦以值f(0,0,0,0),并且可以在方框803處啟動對于下一個自適應(yīng)分區(qū)的排序函數(shù)的計算。在方框805處,進(jìn)程調(diào)度程序130確定自適應(yīng)分區(qū)ap是否具有可用的臨界CPU預(yù)算,如果有,則確定在自適應(yīng)分區(qū)ap中的最高優(yōu)先級的就緒線程是否已經(jīng)被指派成臨界狀態(tài)?;谶@種確定,進(jìn)程調(diào)度程序130在方框810處把適當(dāng)?shù)倪壿嫚顟B(tài)賦給“is_critical(ap)”變量。在方框813處,進(jìn)程調(diào)度程序130計算在最后的平均窗口期間自適應(yīng)分區(qū)使用的CPU預(yù)算。在方框815處,進(jìn)程調(diào)度程序130確定自適應(yīng)分區(qū)已使用的CPU時間是否少于其保證CPU時間預(yù)算。基于這種確定,進(jìn)程調(diào)度程序130在方框820處把適當(dāng)?shù)倪壿嫚顟B(tài)賦給“has_budget(ap)”變量。在方框830處,通過采用在方框813處獲得的值并用那個自適應(yīng)分區(qū)的保證CPU預(yù)算時間去除這個值,計算出在最后的平均窗口期間使用的CPU預(yù)算時間的相對比率。在方框835處,這個值被賦給“relative_fraction_used(ap)”變量。
在方框840處,進(jìn)程調(diào)度程序130計算一個或多個對應(yīng)于與自適應(yīng)分區(qū)有關(guān)的各線程消耗的CPU時間的當(dāng)前比率的值。在方框845處,這些值被用于把適當(dāng)?shù)倪壿嫚顟B(tài)賦給b(ap)變量。
在方框850處,通過使用前述變量的全部或其子集,對于給定自適應(yīng)分區(qū)ap計算排序函數(shù)f(ap)。在此實例中,使用被排序的值(x,a,y,z)來計算排序函數(shù)f(ap),其中x=is_cirtical(ap)OR has_budget(ap);a=(Notx)AND b(ap);y=highest_prio(ap);而z=l-relative_fraction_used(ap)。在計算排序函數(shù)f(ap)時,x的值被給予比a、y或z的值更多的有效值,a的值被給予比y或z的值更多的有效值,并且y的值被給予比z的值更多的有效值。
如在圖9方框905處所示的那樣,進(jìn)程調(diào)度程序130運行具有最大f(ap)的自適應(yīng)分區(qū)的最高優(yōu)先級的線程。但進(jìn)程調(diào)度程序130必須確定該線程的運行時間是要被計到自適應(yīng)分區(qū)的臨界預(yù)算的賬上還是單獨計到保證預(yù)算的賬上。為此,進(jìn)程調(diào)度程序130可以使用一個或多個前述變量來計算另一個函數(shù)fcritical(ap)。在此實例中,使用有序值(w,d,y,z)來計算fcritical(ap),其中w=has_budget(ap);d=(NOT w)ANDb(ap);y=highest_prio(ap);并且z=l-relative_fraction_used(ap)。在fcritical(ap)的計算中,w的值被給予比d、y或z的值更多的有效值,d的值被給予比y或z的值更多的有效值,并且y的值被給予比z的值更多的有效值。在方框910處顯示了這個計算。在方框915處執(zhí)行關(guān)于該自適應(yīng)分區(qū)的fcritical(ap)和f(ap)之間的比較。如果fcritical(ap)的值小于f(ap)的值,那么該線程的運行時間在方框920處被計到自適應(yīng)分區(qū)的臨界預(yù)算的帳上,并且在方框925處被計到保證預(yù)算的賬上。如果fcritical(ap)的值大于或等于f(ap)的值,那么在方框925處該線程的運行時間被單獨計到自適應(yīng)分區(qū)的保證預(yù)算的帳上。進(jìn)程調(diào)度程序130使用的任何計算應(yīng)該確保如果線程或分區(qū)不是臨界的,只有在與自適應(yīng)分區(qū)相關(guān)的最高優(yōu)先級臨界預(yù)算不被進(jìn)程調(diào)度程序130選擇來運行時,才使用該自適應(yīng)分區(qū)的臨界預(yù)算。
圖10顯示了多個不同的相關(guān)進(jìn)程,其可用于執(zhí)行計算在最后的平均窗口期間消耗的CPU預(yù)算時間的相對比率的方法,如圖8的方框830中說明的那樣。由自適應(yīng)分區(qū)消耗的CPU預(yù)算時間相對比例例如是,在最后的平均窗口期間與自適應(yīng)分區(qū)有關(guān)的線程運行的微秒數(shù)除以以微秒為單位的其在平均窗口中的份額而獲得的??蛇x的,這可以表達(dá)為(total_CPU_time_consumed)/(windowsize*percentage)。為了減小對浮點除法的可能的需求,進(jìn)程調(diào)度程序130可以為每個自適應(yīng)分區(qū)計算具有與(total_CPU_time_consumed)/(windowsize*percentage)大致相同的排序特性的數(shù)字。這樣,可以預(yù)先計算常數(shù)c(a),使得具有最大(total_CPU_time_consumed)*c(ap)的自適應(yīng)分區(qū)也是具有最大(total_CPU_time_consumed)/(windowsize*percentage)的自適應(yīng)分區(qū)。
可以在例如系統(tǒng)啟動期間和每當(dāng)在系統(tǒng)的各個自適應(yīng)分區(qū)之間重新分配保證CPU預(yù)算時預(yù)先計算函數(shù)c(ap)。在方框1010處,例如在啟動時,每個自適應(yīng)分區(qū)的CPU預(yù)算百分比被確定。在方框1015處,系統(tǒng)可以為每個自適應(yīng)分區(qū)計算系數(shù)q(ap)。q(ap)的值可以例如作為所有其它自適應(yīng)分區(qū)的百分比CPU預(yù)算的乘積來被計算。在方框1020處,計算縮放系數(shù)。在此實例中,如果最大平均誤差是max_error(例如對于1/2%為0.005),那么k=min(list of q(ap))*max_error。常數(shù)縮放系數(shù)c(ap)在步驟1025處被計算。在此實例中,c(ap)按照c(ap)=q(ap)/k這樣來計算。在max_error的差錯容忍度以內(nèi),值(total_CPU_time_consumed)*c(ap)具有與(total_CPU_time_consumed)/(windowsize*percentage)相同的排序特性。
為了實際比較不同自適應(yīng)分區(qū)使用的相對比例,進(jìn)程調(diào)度程序130可能需要用c(ap)來乘與自適應(yīng)分區(qū)相關(guān)的線程的運行時間。但,記帳的時間可能是很大的數(shù)目。如果在這些計算中進(jìn)程調(diào)度程序130要通過使用單個相乘指令(single-multiply instruction)而實現(xiàn),則在方框1030處,記帳的時間可以首先選擇CPU預(yù)算時間的最高有效位的數(shù)字來被縮放。縮放的程度可以由max_error的值來設(shè)定。然而,僅僅選擇被記帳運行時間的最高有效的16位就能夠滿足對max_error(例如,1/4至1/2%)任意合理的選擇。在這樣的情形中,系統(tǒng)可以計算(total_CPU_time_consumed)>>32*c(ap)。在方框1035處,按c(ap)*(adaptive partion execution time)來計算相對預(yù)算比率,其中(adaptive partion execution time)構(gòu)成(total_CPU_time_consumed)的最高有效位的選定數(shù)目。
對于實現(xiàn)來說,0.5%到0.25%的誤差容忍度被認(rèn)為是足夠的。但,應(yīng)用可以包括以下概念,即對于任意指定的誤差容忍度,選擇最小數(shù)目的比特用于代表c(ap),在最后的平均窗口尺寸時間期間內(nèi)由自適應(yīng)分區(qū)ap執(zhí)行的CPU時間的縮放值,以及c(ap)和縮放后的CPU時間的乘積。最小數(shù)目的比特被選擇用于表示和執(zhí)行乘法函數(shù),使得所有的表示和數(shù)學(xué)誤差小于或等于選定的誤差容忍度。
把CPU時間記到系統(tǒng)中的每個自適應(yīng)分區(qū)的賬上可以以多種不同的方式進(jìn)行,且在進(jìn)程調(diào)度程序130的操作期間可以發(fā)生很多次。例如,每當(dāng)1)線程從阻塞狀態(tài)開始運行,2)線程停止運行(即,當(dāng)線程被高優(yōu)先級線程占先時,當(dāng)線程被阻塞時,或者類似情況),和/或3)在其它進(jìn)程調(diào)度程序130需要對CPU時間進(jìn)行精確計算時的時刻。
典型地,進(jìn)程調(diào)度程序使用標(biāo)準(zhǔn)的計時器中斷或滴答(tick)來確定線程已經(jīng)使用了CPU多長時間。滴答周期經(jīng)常為一到幾微秒左右。
但,進(jìn)程調(diào)度程序130可以包括有效地對系統(tǒng)的各個線程的執(zhí)行時間進(jìn)行微量記帳(microbill)的代碼。為此,可以采用其周期遠(yuǎn)小于滴答周期的高分辨率的硬件和/或軟件計數(shù)器。每次線程開始或停止運行,進(jìn)程調(diào)度程序130把時間戳分配給對應(yīng)高分辨率計數(shù)器的值的相關(guān)分區(qū)。該時間戳的值可以被縮放到有用的共同的時間單位。線程的相鄰的開始和停止時間的時間戳之間的差異被用于對適當(dāng)?shù)淖赃m應(yīng)分區(qū)進(jìn)行微量記帳。
高分辨率的計數(shù)器可以以許多不同方式來實現(xiàn)。例如,一些CPU具有內(nèi)置的計數(shù)器,其可以大致以CPU運行的時鐘頻率進(jìn)行遞增。在這樣的情形下,該內(nèi)置計數(shù)器可用于微量記帳進(jìn)程。在另一個例子中,可以通過詢問可編程遞減計數(shù)的計時器來使用軟件模擬高分辨率的計數(shù)器,其中該可編程遞減計數(shù)的計時器例如可以通常用于觸發(fā)時鐘中斷。這可以是同一個用于提供指示已經(jīng)發(fā)生滴答間隔的計數(shù)器。在這樣的情形下,時間戳應(yīng)該考慮計數(shù)器值和從給定時間參考點開始已經(jīng)發(fā)生的滴答的數(shù)目,使得時間戳能精確地反應(yīng)各個線程的開始時間和停止時間。
前述的進(jìn)程調(diào)度程序130也被用在采用互斥體的系統(tǒng)中。互斥體被用于防止由于競爭條件產(chǎn)生的數(shù)據(jù)不相容。當(dāng)兩個和更多線程需要在相同的存儲區(qū)域上執(zhí)行操作,但計算結(jié)果取決于這些操作被執(zhí)行的次序時,經(jīng)常發(fā)生競爭狀態(tài)?;コ怏w可被用于串行地共享資源。每當(dāng)全局資源被多于一個的線程訪問時,該資源可以具有與其相關(guān)的互斥體??捎没コ怏w來保護(hù)存儲器分段(“臨界區(qū)域”)不受其它線程的訪問。應(yīng)用程序以線程請求的順序把互斥體給予線程。但,進(jìn)程調(diào)度程序130可適合解決以下問題,即當(dāng)可能占用(hold)互斥體的低優(yōu)先級的線程不合理地延遲正在等待相同互斥體的較高優(yōu)先級的線程的訪問時發(fā)生的問題。
圖11顯示了這樣一種方法,該方法用于當(dāng)一個線程占用互斥體而其它幾個線程可能正在等待同一個互斥體時,在自適應(yīng)分區(qū)系統(tǒng)中區(qū)分對互斥體的訪問的優(yōu)先級。當(dāng)與占用互斥體的線程有關(guān)的分區(qū)用完了保證CPU時間預(yù)算時,進(jìn)程調(diào)度程序130開始把占用互斥體的線程的運行時間,計到所有等待互斥體的線程中等待互斥體且最有可能接下來運行的線程的分區(qū)的帳上。進(jìn)程調(diào)度程序130還可以開始把任何被認(rèn)為是代表占用互斥體的線程工作的線程的運行時間計到與占用互斥體的線程有關(guān)的自適應(yīng)分區(qū)的帳上。在方框1110處做出確定,以識別接下來最有可能運行的線程(即,將在占用互斥體的線程被阻塞、完成或類似情況之后運行的線程)。正在等待與當(dāng)前占用互斥體的線程相同的互斥體的等待線程可以被確定為“接下來最有可能運行”。在方框1115處,進(jìn)程調(diào)度程序130可以把占用互斥體的線程的優(yōu)先級水平提高到在所有等待的線程中接下來最有可能運行的等待線程的優(yōu)先級。在方框1120處,進(jìn)程調(diào)度程序130可對與當(dāng)前占用互斥體的線程有關(guān)的自適應(yīng)分區(qū)為其運行時間記帳,同時占用互斥體直到該自適應(yīng)分區(qū)的CPU預(yù)算被耗盡(達(dá)到零)。在方框1125處,占用線程使用的剩余CPU時間被計到與接下來最有可能運行的等待線程有關(guān)的自適應(yīng)分區(qū)的賬上。
線程“接下來最有可能運行的”可以通過對等待線程列表中的線程對重復(fù)地應(yīng)用成對 (“比較兩個線程”)處理來計算?!氨容^兩個線程”處理可以按照如下這樣來執(zhí)行,其中A和B是要比較的兩個線程建立函數(shù)f(ap),其包括有序值(x,a,y,z)。這與以上建立的排序函數(shù)f(ap)相同。然后,假設(shè)partion_of(X)表示包含線程X的分區(qū)。然后,如果f(partion_of(A))>f(partion_of(B)),則線程A比線程B更有可能運行。為每個要被比較的線程構(gòu)造函數(shù)f(X),直到具有最高f(X)的線程被確定。具有最高f(X)的線程可以被確定為“接下來最有可能運行的線程”,并且一旦與占用互斥體的線程有關(guān)的自適應(yīng)分區(qū)耗盡具保證CPU預(yù)算,則對該具有最高的f(X)的線程的相關(guān)的自適應(yīng)分區(qū)為占用互斥體的線程的運行時間記帳。
以上說明的系統(tǒng)和方法可以被配置成能在事務(wù)進(jìn)程系統(tǒng)中運行,在這樣的系統(tǒng)中,重要的是如果系統(tǒng)的處理容量超載,應(yīng)能夠繼續(xù)處理一部分所承受的負(fù)載,而不是徹底失敗。這樣的應(yīng)用實例包括因特網(wǎng)路由器和電話交換機。本系統(tǒng)和方法也可以配置成能在其它的實時操作系統(tǒng)環(huán)境諸如汽車和航空環(huán)境中運行,在這些環(huán)境中要指定嚴(yán)格的處理,以在嚴(yán)格的事件中執(zhí)行。一個實例是在汽車環(huán)境中,其中氣囊打開事件是可能性較低的事件,但如果該事件啟動必須為其分配處理器預(yù)算。
本系統(tǒng)和方法還可以被配置成能在可能使用不可靠的應(yīng)用程序的環(huán)境中操作。在這樣的情形下,諸如java小應(yīng)用程序的應(yīng)用程序可以被下載以在操作環(huán)境中執(zhí)行,但該應(yīng)用程序的性質(zhì)允許不可靠的應(yīng)用能接管系統(tǒng)并產(chǎn)生無限循環(huán)。操作系統(tǒng)設(shè)計者不希望出現(xiàn)這樣的情形,因此可以創(chuàng)建適當(dāng)?shù)淖赃m應(yīng)分區(qū),使得不可靠的應(yīng)用程序孤立地被運行,同時限制對其它進(jìn)程所需要的CPU時間的訪問。
盡管已經(jīng)描述了本發(fā)明的各種實施例,但對本領(lǐng)域的普通技術(shù)人員來說,很明顯的是在本發(fā)明的范圍內(nèi)還可以存在更多的實施例和實現(xiàn)。因此,除所附權(quán)利要求及其等同物之外,本發(fā)明不受其它限制。
權(quán)利要求
1.一種系統(tǒng),包括處理器;一個或多個存儲器存儲單元;存儲在所述一個和多個存儲器存儲單元中的軟件代碼,其中所述軟件代碼可由所述處理器來執(zhí)行,并且所述軟件代碼包括至少一個發(fā)送線程,至少一個接收線程,其能響應(yīng)來自所述至少一個發(fā)送線程的通信,以執(zhí)行一個和多個對應(yīng)于所述通信的任務(wù),和可由所述處理器執(zhí)行的調(diào)度系統(tǒng),其至少部分地基于與所述至少一個發(fā)送線程有關(guān)的處理器預(yù)算,來選擇性地把所述處理器分配到所述至少一個發(fā)送線程和所述至少一個接收線程,其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的處理器預(yù)算記帳。
2.如權(quán)利要求1所述的系統(tǒng),其中所述調(diào)度系統(tǒng)是操作系統(tǒng)的一部分。
3.如權(quán)利要求1所述的系統(tǒng),其中所述處理器是對稱多處理機。
4.如權(quán)利要求1所述的系統(tǒng),其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的處理器預(yù)算進(jìn)行微量記帳(microbill)。
5.如權(quán)利要求1所述的系統(tǒng),其中所述調(diào)度系統(tǒng)使所述至少一個發(fā)送線程與一自適應(yīng)分區(qū)相關(guān)聯(lián),并且其中與所述至少一個發(fā)送線程有關(guān)的所述處理器預(yù)算對應(yīng)于被分配給與所述至少一個發(fā)送線程有關(guān)的所述自適應(yīng)分區(qū)的處理器預(yù)算。
6.如權(quán)利要求5所述的系統(tǒng),其中,所述調(diào)度系統(tǒng)為所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的所述自適應(yīng)分區(qū)的處理器預(yù)算進(jìn)行微量記帳(microbill)。
7.一種系統(tǒng),包括處理器;一個或多個存儲器存儲單元;存儲在所述一個或多個存儲器存儲單元中的軟件代碼,其中所述軟件代碼可由所述處理器作為多個線程來執(zhí)行,所述多個線程包括至少一個發(fā)送線程和至少一個接收線程;和包括在所述軟件代碼中的調(diào)度系統(tǒng),其可由所述處理器來執(zhí)行,用于至少部分地基于與每個線程有關(guān)的處理器預(yù)算,來選擇性地分配所述處理器,以執(zhí)行所述至少一個發(fā)送線程和所述至少一個接收線程,并且其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的處理器預(yù)算記帳。
8.如權(quán)利要求7所述的系統(tǒng),其中所述調(diào)度系統(tǒng)是操作系統(tǒng)的一部分。
9.如權(quán)利要求7所述的系統(tǒng),其中所述處理器是對稱多處理機。
10.如權(quán)利要求7所述的系統(tǒng),其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的處理器預(yù)算進(jìn)行微量記帳(microbill)。
11.如權(quán)利要求7所述的系統(tǒng),其中所述調(diào)度系統(tǒng)使所述至少一個發(fā)送線程與一自適應(yīng)分區(qū)相關(guān)聯(lián),并且其中與所述至少一個發(fā)送線程有關(guān)的所述處理器預(yù)算對應(yīng)于被分配給所述自適應(yīng)分區(qū)的處理器預(yù)算。
12.如權(quán)利要求11所述的系統(tǒng),其中,所述調(diào)度系統(tǒng)為所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的所述自適應(yīng)分區(qū)的處理器預(yù)算進(jìn)行微量記帳(microbill)。
13.一種系統(tǒng),包括處理器;一個或多個存儲器存儲單元;存儲在所述一個或多個存儲器存儲單元中的軟件代碼,其中所述軟件代碼可由所述處理器來執(zhí)行,并且所述軟件代碼包括多個自適應(yīng)分區(qū),其每個與一個或多個進(jìn)程線程相關(guān)聯(lián),其中所述多個自適應(yīng)分區(qū)中的每一個具有相應(yīng)的處理器預(yù)算,至少一個發(fā)送線程,其與所述多個自適應(yīng)分區(qū)中的第一自適應(yīng)分區(qū)相關(guān)聯(lián),至少一個接收線程,其與所述多個自適應(yīng)分區(qū)中的第二自適應(yīng)分區(qū)相關(guān)聯(lián),其中所述至少一個接收線程通過執(zhí)行一個或多個與來自所述至少一個發(fā)送線程的通信對應(yīng)的任務(wù),來響應(yīng)所述通信,和可由所述處理器執(zhí)行的調(diào)度系統(tǒng),其用于至少部分地基于所述第一和第二自適應(yīng)分區(qū)的處理器預(yù)算,來選擇性地把所述處理器分配給所述至少一個發(fā)送線程和所述至少一個接收線程,其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的處理器預(yù)算記帳。
14.如權(quán)利要求13所述的系統(tǒng),其中所述調(diào)度系統(tǒng)是操作系統(tǒng)的一部分。
15.如權(quán)利要求13所述的系統(tǒng),其中所述處理器是對稱多處理機。
16.如權(quán)利要求13所述的系統(tǒng),其中所述調(diào)度系統(tǒng)為由所述至少一個接收線程響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信而使用的處理器分配,對與所述至少一個發(fā)送線程有關(guān)的自適應(yīng)分區(qū)的處理器預(yù)算進(jìn)行微量記帳(microbill)。
17.一種操作具有多個軟件線程的處理系統(tǒng)中的進(jìn)程調(diào)度程序的方法,其中所述多個軟件線程包括至少一個發(fā)送線程和至少一個能響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信的接收線程,并且其中所述至少一個發(fā)送線程與具有預(yù)定處理器預(yù)算的第一自適應(yīng)分區(qū)相關(guān)聯(lián),而所述至少一個接收線程與具有另外的預(yù)定處理器預(yù)算的第二自適應(yīng)分區(qū)相關(guān)聯(lián),所述方法包括調(diào)度對所述發(fā)送線程的執(zhí)行,其中所述發(fā)送線程向所述接收線程發(fā)送通信;調(diào)度所述接收線程的執(zhí)行;和為由所述接收線程響應(yīng)所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的處理器預(yù)算記帳。
18.如權(quán)利要求17所述的方法,其中所述記帳操作包括為所述接收線程響應(yīng)所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的處理器預(yù)算進(jìn)行微量記帳。
19.一種包括軟件代碼的存儲介質(zhì),該軟件代碼用于執(zhí)行操作處理系統(tǒng)中的進(jìn)程調(diào)度程序的方法,該處理系統(tǒng)具有多個軟件線程,其中所述多個軟件線程包括至少一個發(fā)送線程和至少一個能響應(yīng)由所述至少一個發(fā)送線程發(fā)送的通信的接收線程,并且其中所述至少一個發(fā)送線程與具有預(yù)定處理器預(yù)算的第一自適應(yīng)分區(qū)相關(guān)聯(lián),而所述至少一個接收線程與具有另外的預(yù)定處理器預(yù)算的第二自適應(yīng)分區(qū)相關(guān)聯(lián),其中所述方法包括調(diào)度對所述發(fā)送線程的執(zhí)行,其中所述發(fā)送線程向所述接收線程發(fā)送通信;調(diào)度所述接收線程的執(zhí)行;和為由所述接收線程響應(yīng)所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的處理器預(yù)算記帳。
20.如權(quán)利要求19所述的存儲介質(zhì),其中所述記帳操作包括為所述接收線程響應(yīng)所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的處理器預(yù)算進(jìn)行微量記帳。
21.一種進(jìn)程調(diào)度系統(tǒng),其包括第一自適應(yīng)分區(qū),其與發(fā)送線程相關(guān)并具有第一預(yù)定處理器預(yù)算;第二自適應(yīng)分區(qū),其與接收線程相關(guān)并具有第二預(yù)定處理器預(yù)算,其中所述接收線程通過執(zhí)行一個或多個與所述發(fā)送線程發(fā)送的通信對應(yīng)的任務(wù),來響應(yīng)所述通信;進(jìn)程調(diào)度程序,其適用于至少部分地基于所述第一和第二自適應(yīng)分區(qū)的第一和第二預(yù)定處理器預(yù)算,來選擇性地把處理器分配給所述發(fā)送線程和所述接收線程,其中所述進(jìn)程調(diào)度程序為由所述接收線程響應(yīng)由所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的第一預(yù)定處理器預(yù)算記帳。
22.如權(quán)利要求21所述的進(jìn)程調(diào)度系統(tǒng),其中所述處理器是對稱多處理機。
23.如權(quán)利要求21所述的進(jìn)程調(diào)度系統(tǒng),所述進(jìn)程調(diào)度程序為由所述接收線程響應(yīng)所述發(fā)送線程發(fā)送的通信而使用的處理器分配,對所述第一自適應(yīng)分區(qū)的第一預(yù)定處理器預(yù)算進(jìn)行微量記帳。
全文摘要
一種系統(tǒng),包括如單獨處理器或?qū)ΨQ多處理機的處理器、一個或多個存儲器存儲單元及存儲在其中的軟件代碼。該代碼可由處理器執(zhí)行并包括生成多個分別與一個或多個軟件線程關(guān)聯(lián)的自適應(yīng)分區(qū)的代碼。每個分區(qū)具有相應(yīng)處理器預(yù)算??蓤?zhí)行該代碼生成至少一個發(fā)送線程和接收線程。接收線程響應(yīng)發(fā)送線程的通信以執(zhí)行一個或多個對應(yīng)該通信的任務(wù)。調(diào)度系統(tǒng)還形成能由處理器執(zhí)行的代碼的至少一部分。在操作中調(diào)度系統(tǒng)至少部分基于與各線程有關(guān)的自適應(yīng)分區(qū)的處理器預(yù)算,選擇性地把處理器分配給每個發(fā)送和接收線程。在此類發(fā)送/接收環(huán)境中,調(diào)度系統(tǒng)為由接收線程響應(yīng)發(fā)送線程發(fā)送的通信使用的處理器分配對與發(fā)送線程有關(guān)的自適應(yīng)分區(qū)的處理器預(yù)算記帳。
文檔編號G06F9/46GK1952898SQ200610064818
公開日2007年4月25日 申請日期2006年3月14日 優(yōu)先權(quán)日2005年3月14日
發(fā)明者D·道奇, A·丹科, S·馬里諾-麥斯, P·范德費恩, C·伯吉斯, T·弗萊徹, B·斯特克 申請人:Qnx軟件操作系統(tǒng)公司