專利名稱:對或涉及用于計算裝置的操作系統(tǒng)的改進的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于計算裝置的操作系統(tǒng),更具體地,涉及一種為計算裝置的操作系統(tǒng)內(nèi)核提供互斥機制的方法,該方法在可靠性和性能方面具有顯著優(yōu)點。
本文中所使用的術(shù)語計算裝置應(yīng)廣義理解為覆蓋任何形式的電器,其包括數(shù)據(jù)記錄裝置(諸如各種形式的數(shù)碼相機和攝像機)、任何類型或形式的計算機(包括手持和個人計算機)、以及任何形式的通信裝置(包括移動電話、智能電話、集通信、圖像記錄和/或重放、以及計算功能于一體的通信裝置、以及其他形式的無線和有線信息裝置)。
大部分計算裝置都被編程,以在操作系統(tǒng)(Operating System,縮寫為OS)的控制下工作。操作系統(tǒng)通過向計算裝置的中央處理單元輸入一系列代碼形式的指令來控制計算裝置。這些指令可以看作是由操作系統(tǒng)調(diào)度的一系列準獨立基本執(zhí)行單元。這些基本執(zhí)行單元分別是所謂的線程以及將在計算裝置中執(zhí)行的、總是包括一個或多個線程的進程。一般的操作系統(tǒng)將調(diào)度很多不同的線程,以控制將要通過計算裝置執(zhí)行的各種任務(wù)。
操作系統(tǒng)可以看作是由多個部件構(gòu)成,并且這些部件中的一些部件與其他的部件相比,對硬件資源具有的優(yōu)先訪問權(quán)。具有更高優(yōu)先訪問權(quán)的部件被稱為優(yōu)先部件。一個或多個這些優(yōu)先部件構(gòu)成通常所稱的操作系統(tǒng)的內(nèi)核。
OS內(nèi)核通常提供核心服務(wù),操作系統(tǒng)本身的所有其他部分和運行在平臺上的所有應(yīng)用程序必須依靠這些核心服務(wù)工作。關(guān)于由什么構(gòu)成這些核心服務(wù)的觀點隨著時間而改變,且其對操作系統(tǒng)的總體設(shè)計的相應(yīng)影響構(gòu)成了本發(fā)明的背景。
然而,通常認為存在兩種基本的OS設(shè)計方法,通常將它們稱為‘單內(nèi)核’法和‘微內(nèi)核’法。
單內(nèi)核是大代碼塊,其包括整個操作系統(tǒng)中可以最高優(yōu)先級運行的較大部分。這通常包括與計算硬件的所有接口?,F(xiàn)有的單內(nèi)核將實體模塊化(substantial modularity)引入到了內(nèi)核設(shè)計中,并通過正式接口層和運行期可加載的內(nèi)核模塊解決了通常與這種設(shè)計相關(guān)的可移植性、可升級性、以及存儲使用率的問題。然而,非常大代碼塊的以高優(yōu)先級運行實體功能性(通常所說的內(nèi)核模式)這一關(guān)鍵特性被保留在所有基于單內(nèi)核的主要的商用操作系統(tǒng)(包括來自微軟的WindowsTM以及多數(shù)版本的Linux)中。
相反,微內(nèi)核法與單內(nèi)核法顯著不同。所提供的操作服務(wù)被最少化,通常減少到確保進程和地址空間、以及調(diào)度、同步、及進程間通信的完整性即可。所有其他的操作系統(tǒng)服務(wù)(通常包括存儲管理)都被設(shè)置為可加載的模塊。但是,與單內(nèi)核法的主要不同在于,這些其他的服務(wù)沒有加載到內(nèi)核存儲空間中然后以內(nèi)核模式運行,而是以服務(wù)例程來進行,其被加載到它們各自的存儲空間中并以較低優(yōu)先級運行,即所謂的用戶模式。
圖1示出了上述兩種結(jié)構(gòu)范例之間的主要不同。
盡管早期的基于微內(nèi)核的操作系統(tǒng)往往是用于學術(shù)的(例如,Carnegie-Mellon University開發(fā)的Mach內(nèi)核),但是自二十世紀九十年代中期以來,微內(nèi)核結(jié)構(gòu)的最小化以及相應(yīng)的可預(yù)測性已經(jīng)使其成為實時以及嵌入式操作系統(tǒng)的標準。Wind River、QNX、OSE以及Mentor Graphics在其實時操作系統(tǒng)(Real-Time OS,縮寫為RTOS)中都使用微內(nèi)核結(jié)構(gòu)的元件。最近,Mach內(nèi)核本身已經(jīng)被集成到基于蘋果公司的Mac OS X基礎(chǔ)上的開源(open-source)Darwin XNU內(nèi)核中,并且Mach還是Hurd內(nèi)核的基礎(chǔ),其中,Gnu項目已將Hurd內(nèi)核開發(fā)來代替標準單Unix/Linux內(nèi)核。
微內(nèi)核結(jié)構(gòu)不僅具有確定性特性,還在靈活性、擴展性、安全性、和可靠性方面優(yōu)于單內(nèi)核。
然而,也存在著缺點。由于微內(nèi)核必需調(diào)解(mediate)用戶模式進程之間的所有通信,因此具有非常頻繁的上下文切換,在單內(nèi)核中,這些用戶模式進程將共享同一地址空間且能夠相互直接訪問應(yīng)用程序接口(API)?;谥鳈C系統(tǒng)的硬件和存儲器結(jié)構(gòu),相較于單內(nèi)核,這會導(dǎo)致較差的性能。
可以將用于開發(fā)微內(nèi)核結(jié)構(gòu)的技術(shù)擴展至微內(nèi)核本身的最低層。實際上這樣的技術(shù)已經(jīng)實現(xiàn),并成為所謂超微內(nèi)核結(jié)構(gòu)的基礎(chǔ)。存在爭議的是,超微內(nèi)核不代表OS設(shè)計方法的新的起點,因為這不過是高度最小化的微內(nèi)核。實際上,很多關(guān)于最小化微內(nèi)核的學術(shù)文獻都非常適用于微內(nèi)核設(shè)計。例如,參見1995年12月的Proceedings of 15th ACM Symposium on Operating System Principle上的由Jochen Liedtke所著的文章“Onμ-Kernel Construction”的第2部分。
然而,微內(nèi)核變得越簡單,其作為操作系統(tǒng)的整體部分的作用就越小。因為這使得運行各種分立的操作系統(tǒng)個性(其都可以通過超微內(nèi)核實現(xiàn))變?yōu)榭赡?。在微?nèi)核發(fā)展的早期意識到了這種發(fā)展的可能性。例如,參見1992年4月的Proceedings of the USENIXWorkshop on Micro-Kernels and Other Kernel Archtectures,USENIXAssociation,由Bomberger等人所著的“The KeyKOS NanokernelArchitecture”,該文描述了一種超微內(nèi)核,其需要具有在單一硬件系統(tǒng)上運行多個操作系統(tǒng)實例的能力。
這種可能性不僅僅是理論上的;Jochen Liedtke的L4微內(nèi)核版本能夠運行Linux以及其他的任務(wù)。例如,微內(nèi)核(即所謂的Fiasco,并與L4微內(nèi)核兼容)已表明能運行L4Linux,L4Linux是Linux內(nèi)核對L4接口的端口,其完全以用戶模式執(zhí)行,該微內(nèi)核具有在x86和ARM平臺上運行的實時能力、具有在微內(nèi)核頂層上運行的DOpE實時開窗口環(huán)境、具有在窗口之一中運行L4Linux的實例。
然而,現(xiàn)有技術(shù)存在缺陷。微內(nèi)核支持整個操作系統(tǒng)的事實使得強健且有效的設(shè)計尤為重要。特別地,微內(nèi)核在調(diào)度進程和任務(wù)中的作用對于整個操作系統(tǒng)的功能非常重要;決不允許失效。特別是在涉及到實時操作系統(tǒng)(RTOS)的情況下,這種調(diào)度不是無關(guān)緊要的。RTOS必須能夠嚴格保證對特定事件的響應(yīng)時間。一種能夠使RTOS做出這樣保證的關(guān)鍵機制是優(yōu)先級機制,該優(yōu)先級機制按照實時重要性順序?qū)⒕唧w任務(wù)排序,并將最重要的任務(wù)安排在不太重要的任務(wù)之前。
關(guān)于多任務(wù)操作系統(tǒng)中的優(yōu)先級機制的一個公知問題是優(yōu)先反轉(zhuǎn)現(xiàn)象,其中,優(yōu)先反轉(zhuǎn)是指低優(yōu)先級任務(wù)占用了關(guān)于高優(yōu)先級任務(wù)所需資源(所謂的互斥對象或互斥體)的鎖。除非采取步驟以提前獲知這種情形,否則任務(wù)調(diào)度算法將一直試圖在低優(yōu)先級任務(wù)之前運行高優(yōu)先級任務(wù),結(jié)果造成資源鎖總不會被釋放,從而使較高優(yōu)先級的任務(wù)被阻塞。
解決優(yōu)先反轉(zhuǎn)問題的方法是優(yōu)先級繼承,這意味著始終將具有資源鎖的任務(wù)的優(yōu)先級提升至等于或高于等待上述資源的最高優(yōu)先級的優(yōu)先級。然而,實現(xiàn)傳統(tǒng)的優(yōu)先級繼承方法計算開支很大,因此促使操作系統(tǒng)的設(shè)計者在魯棒性和性能之間進行折衷。
在至少一種眾所周知的情況下,如在1997 Mars Pathfinder會議上,基于對性能的考慮,做出了不使用優(yōu)先級繼承的決定。TomDurkin在Robot Science & Technology Issue 1,1998的“What theMedia Couldn’t Tell You About MarsPathfinder”中寫道“為防止通信沖突,VxWorks以互斥軟件鎖同步訪問總線。然而,當在等待低優(yōu)先級氣象數(shù)據(jù)線程運行的同時,高優(yōu)先級線程被阻塞時,中斷偶爾被發(fā)送到總線,從而使得在瞬間時間間隔期間,中等優(yōu)先級的通信任務(wù)被調(diào)度...長時間運行,具有高于低優(yōu)先級氣象任務(wù)的優(yōu)先級的中等優(yōu)先級通信任務(wù),將阻止該氣象任務(wù)運行...該方案是優(yōu)先反轉(zhuǎn)的典型案例。在開始優(yōu)化VxWorks的性能之前,Wind River特意關(guān)閉了優(yōu)先級繼承選項(In order to preventcommunications conflicts,VxWorks synchronized access to the buswith mutual exclusion software locks.However,very infrequently,aninterrupt was sent to the bus that caused a medium-prioritycommunications task to be scheduled during the split-second intervalwhen a high-priority thread was blocked while waiting for alow-priority meteorological data thread to run...the long-running,medium-priority communications task-having a higher priority thanthe low-priority meteorological task-would prevent the meteorologicaltask from running...this scenario is a classic case of priority inversion.Wind River had deliberately turned off the priority inheritance optionbefore launch to optimize the performance of VxWorks)”。
很多現(xiàn)有的微內(nèi)核結(jié)構(gòu)的缺陷在于,它們以分立的和計算開支很大的優(yōu)先級繼承機制為特征。因此,人們一直期望將它們關(guān)閉以提高操作系統(tǒng)的性能。因為不必強制在魯棒性和性能之間進行折衷,所以對于現(xiàn)有的結(jié)構(gòu)來說,優(yōu)選沒有任何性能損失地提供自動優(yōu)先級繼承的結(jié)構(gòu)。這在使用超微內(nèi)核來承載一個或多個操作系統(tǒng)的情況下非常實際,這是由于超微內(nèi)核中的任何不可靠性都直接轉(zhuǎn)化為了整個操作系統(tǒng)中的不可靠性。
因此,本發(fā)明的目的在于提供一種能夠沒有任何性能損失地體現(xiàn)自動優(yōu)先級繼承的改進型計算裝置。
根據(jù)本發(fā)明的第一方面,提供了一種計算裝置,包括調(diào)度器,其結(jié)合了用于將具有不同優(yōu)先級的執(zhí)行的線程的運行排序的算法;以及線程表,這些線程根據(jù)優(yōu)先級順序被調(diào)度來在該裝置上運行;該裝置還包括至少一個鎖定機構(gòu),用于阻塞除去占用該鎖定機構(gòu)的線程之外的所有線程對裝置資源的訪問;以及其中,被阻塞運行的被調(diào)度線程使占用鎖定機構(gòu)的線程運行。
根據(jù)本發(fā)明的第二方面,提供了一種操作計算裝置的方法,該方法包括以下步驟提供調(diào)度器,該調(diào)度器包括用于將具有不同優(yōu)先級的執(zhí)行的線程的運行排序的算法,并包括線程表,這些線程根據(jù)優(yōu)先級順序被調(diào)度來在該裝置上運行;提供至少一個鎖定機構(gòu),用于阻塞除去占用鎖定機構(gòu)的線程之外的所有線程對裝置資源的訪問;以及設(shè)置被阻塞運行的被調(diào)度線程,以使占用鎖定機構(gòu)的線程運行。
根據(jù)本發(fā)明的第三個方面,提供了一種用于計算裝置的操作系統(tǒng),該操作系統(tǒng)包括調(diào)度器,其結(jié)合了用于將具有不同優(yōu)先級的執(zhí)行的線程的運行排序的算法,并且包括用于提供線程表的裝置,這些線程以優(yōu)先級排序被調(diào)度以在該裝置上運行;至少一個鎖定機構(gòu),用于阻塞除去占用鎖定機構(gòu)的線程之外的所有線程對裝置資源的訪問;以及用于設(shè)置被阻塞運行的被調(diào)度線程,以使占用鎖定機制的線程運行的裝置。
下面將僅參照示出單內(nèi)核和微內(nèi)核結(jié)構(gòu)的附圖,通過進一步的實例來描述本發(fā)明的實施例。
本發(fā)明將詳細參考可以從Symbian Limited of London,England得到的Symbian OSTM操作系統(tǒng)來進行說明。然而,應(yīng)該理解,本發(fā)明的原理用于其他類型操作系統(tǒng)中也有同等的優(yōu)點。
Symbian OS操作系統(tǒng)包括提供硬實時支持的預(yù)占多線程超微內(nèi)核型層(pre-emptive multi-threaded nanokernel style layer)??梢栽谠撐?nèi)核中找到單機制(single mechanism)的實現(xiàn),其被稱為快速互斥體(fast mutex)。其結(jié)合了對資源提供互斥鎖的內(nèi)核線程方法的優(yōu)點與對占用互斥體的任務(wù)的自動優(yōu)先權(quán)繼承方法的優(yōu)點。內(nèi)核的多線程的特點使其適用于單一處理器或?qū)ΨQ多處理系統(tǒng)(SMP)中,且快速互斥體可以用于上述兩種結(jié)構(gòu)的任意一種中。
為了提供對本發(fā)明的充分理解,無需詳細描述Symbian OS操作系統(tǒng)。因此,下面的描述限制在該操作系統(tǒng)與本發(fā)明相關(guān)的部分。Symbian OS內(nèi)核是一種介于圖1中示出的單內(nèi)核和微內(nèi)核之間的混合型內(nèi)核,因此結(jié)合了這兩種內(nèi)核的某些優(yōu)點。用于為用戶方服務(wù)器實現(xiàn)消息傳遞架構(gòu)的內(nèi)核的概念來源于微內(nèi)核結(jié)構(gòu);其網(wǎng)絡(luò)和通話堆棧(telephony stack)、以及文件系統(tǒng)都是用戶方服務(wù)器。另一方面,作為可加載的內(nèi)核模塊的裝置驅(qū)動器的實現(xiàn)來源于單內(nèi)核結(jié)構(gòu)。
超微內(nèi)核本身對管理存儲很不了解(largely agnostic)。與許多其他的微內(nèi)核和超微內(nèi)核結(jié)構(gòu)一樣,其將該任務(wù)委托給外部模塊。這稱之為存儲模式。內(nèi)核提供鉤子,以允許存儲模式基于重新調(diào)度而進行地址空間轉(zhuǎn)換。
在Symbian OS操作系統(tǒng)中已經(jīng)實現(xiàn)了多種存儲模式。其中的兩種特別值得注意●移動存儲模式,使用單頁面目錄,該目錄中的項目在每個內(nèi)部進程上下文轉(zhuǎn)換上來回移動。其可以是相對較長的操作,因此在啟用搶先的情況下,在該模塊中運行超微內(nèi)核的存儲鉤子函數(shù),從而防止進程轉(zhuǎn)換對線程等待時間產(chǎn)生不利影響。
●在多存儲模式中,每個進程都有自己的頁面目錄,且上下文轉(zhuǎn)換改變頁面目錄基址寄存器。在這種模式中,地址空間改變得很快,這是因為它們只涉及頁面目錄的改變。因此,在禁止搶先的情況下,運行超微內(nèi)核的存儲鉤子函數(shù),以提高效率和簡化代碼。
超微內(nèi)核是多線程的,且其主要功能之一是在多個線程之間共享可獲得的中央處理器單元(CPU)資源。
超微內(nèi)核線程類似于建立在多數(shù)其他RTOS上的線程,它們的本質(zhì)特征在于它們每一個都有自己的堆棧,且同時具有0和63之間(包括0和63)的整數(shù)優(yōu)先級。線程可以處于多種不同狀態(tài);所有處于READY狀態(tài)的線程都是可以執(zhí)行的,且被鏈接到所謂的就緒表(ready list)中。通?;趦?yōu)先級來調(diào)度線程,且操作系統(tǒng)中的調(diào)度器保證了就緒表中的最高優(yōu)先級線程將會運行。
就緒表總是在內(nèi)核被鎖定的情況下被訪問,因此為了保持低線程等待時間,需要限制(bound)就緒表中的所有操作并要求所有的操作要盡可能快。對于每個可能的線程優(yōu)先級,這可以通過使用64個分離隊列來實現(xiàn),用于解釋對64個線程優(yōu)先級的限制。將就緒表中的每個線程放置在對應(yīng)于其優(yōu)先級的隊列中。還保持64位掩碼,以指示哪個隊列為非空;當且僅當用于優(yōu)先級n的隊列是非空時,才設(shè)置掩碼中的位n。
要在就緒表中插入一項,需要將其添加到對應(yīng)于其優(yōu)先級的隊列的尾部(不必搜索),并設(shè)置位掩碼中的相應(yīng)位。要刪除一項,首先打開從其隊列發(fā)出的鏈接,然后,如果隊列是空(null),則復(fù)位位掩碼中的各個位。為了找出最高優(yōu)先級的項,在位掩碼中找出最高有效位的1(這可以在某些CPU上通過二進制查找或通過單指令實現(xiàn)),然后在相應(yīng)的隊列上找出第一項。
該實現(xiàn)因此產(chǎn)生用于項的插入和刪除以及用于找到最高優(yōu)先項的受限制的(且短的)執(zhí)行時間。為了節(jié)省存儲,將單指針用于每個隊列。如果隊列為空,該單指針為NULL,否則其指向隊列上的第一項。隊列上的項設(shè)置為雙鏈環(huán)。
超微內(nèi)核維護用于指示是否可以請求線程轉(zhuǎn)換的標志(iResheduleNeededFlag)。一旦將優(yōu)先級高于或等于表中的任何其他線程的最高優(yōu)先級的線程添加到就緒表,就設(shè)置該標志,或在相同的情況下,當處于相同優(yōu)先級的第一線程使用了其時間片(每個線程均有特定的時間片)時,就設(shè)置該標志。還可以在當前線程的時間片終止時,通過超微內(nèi)核定時器嘀噠信號中斷來設(shè)置該標志。當接下來解鎖內(nèi)核時,檢查該標志,以確定是否需要重新調(diào)度。當實際發(fā)生重新調(diào)度時,清除該標志。
每個線程都有特定的時間片(iTimeslice)和時間計數(shù)(iTime)。每當線程阻塞或輪換到相同優(yōu)先級的線程隊列的尾部時,iTime域就設(shè)置為等于iTimeslice。如果iTimeslice為正,則低等級的嘀噠信號中斷減少當前線程的iTime,且如果其變?yōu)榱悖瑒t觸發(fā)重新調(diào)度。因此,如果iTimeslice為正,則線程將在讓步于處于相同優(yōu)先級的下一個線程之前,對iTimeslice運行低等級定時器計數(shù)。如果iTimeslice為負,并且如果線程阻塞,則該線程僅讓步于處于同等優(yōu)先級的其他線程。
每一個線程都具有臨界段計數(shù)(iCsCount),且每當線程插入一個內(nèi)核代碼的臨界段時iCsCount就會遞增,而此時,該臨界段計數(shù)可以不掛起或退出。一個試圖掛起或退出另一個線程的線程必須首先檢查目標線程的臨界段計數(shù)。如果計數(shù)為零,則該線程可以立即掛起或退出。如果計數(shù)不為零,則設(shè)置另一個標志(iCsFunction)以指示當線程離開臨界段時,其是否該掛起或退出。當線程舍棄內(nèi)核代碼的臨界段時,它的iCsCount遞減,且如果其變?yōu)榱?,則檢查iCsFunction,且必要時線程將其自己掛起或退出。被調(diào)用來掛起或退出其他線程的線程在任何階段都不會被阻塞-其只是繼續(xù)執(zhí)行。
快速互斥法被作為允許超微內(nèi)核間的互斥的基本方法。它們具有下列特性●沒有爭用鎖的情況時,非常快。
●RAM足跡(footprint)較小。
●如果線程已經(jīng)占用了任何快速互斥體(互斥體是不可嵌套的),則線程可以不等待快速互斥體。
●在占用快速互斥體時,線程可以既不退出也不等待在超微內(nèi)核外部的層中實現(xiàn)的對象。
在本發(fā)明中,上述的線程臨界段系統(tǒng)被擴展,以保證在占用快速互斥體時線程不會被終止;占用快速互斥體的線程被認為處在臨界段中,因此線程的外部掛起和終止被推遲,直到該線程釋放了快速互斥體。例外的是,這樣產(chǎn)生了在占用快速互斥體時線程試圖退出自己的情況;由于在臨界段中時線程試圖退出,所以這將使內(nèi)核出錯。
占用快速互斥體還防止了線程被與同優(yōu)先級的線程分隔時間;這樣做是要減少在短臨界段中的線程之間轉(zhuǎn)換時不必要的時間花費??焖倩コ怏w主要用來有效保護代碼的短臨界段。
快速互斥體包括指向占用線程的指針(iHoldingThread,如果互斥體是空其為NULL)以及指示是出現(xiàn)了互斥體爭用還是由于互斥體被占用而操作被延遲的標志(iWaiting),例如占用線程的掛起、終止、或循環(huán)。另外,每個超微內(nèi)核線程都具有指向當前被線程占用的快速互斥體的指針(iHeldFastMutex,如果沒有被占用則為NULL),其中,由于快速互斥體不能嵌套,所以最多存在一個。每個超微內(nèi)核線程還具有指向快速互斥體的指針,其中,在該快速互斥體上,超微內(nèi)核線程目前被阻塞(iWaitFastMutex,如果沒有則為NULL)。
用于等待快速互斥體的算法可以是Lock the kernelIF(iHoldingThread?。絅ULL)iWaiting=TRUECurrent thread->iWaitFastMutex=thisYield to iHoldingThreadLock the kernelReenable interruptsCurrent thread->iWaitFastMutex=NULLENDIF
Current thread->iHeldFastMutex=thisiHoldingThread=Current threadUnlock the kernel在沒有爭用的情況下,這不過是減少至兩個變量分配。關(guān)于非SMP(對稱處理,symmetrical processing)系統(tǒng),當檢查iHoldingThread時,僅通過禁用中斷而不是鎖定內(nèi)核,就可以優(yōu)化和已經(jīng)進一步優(yōu)化該方法。
本發(fā)明提供了一種自動優(yōu)先級繼承。這意味著在快速互斥體上被阻塞的線程沒有被從就緒表中刪除。這與其他的操作系統(tǒng)和調(diào)度算法總是從就緒表中刪除這樣的線程并將它們排列在阻塞表中,是明顯不同的。(在Symbian OS超微內(nèi)核中存在這樣的阻塞狀態(tài),但是其只用于被阻塞在超微內(nèi)核上的OS層中所實現(xiàn)的等待對象上的線程。)被阻塞在快速互斥體上的線程不從就緒表中刪除,而是執(zhí)行Yield to iHoldingThread操作。這樣完成從當前線程到互斥體占用線程的直接上下文轉(zhuǎn)換。不從就緒表中刪除任何線程,也不執(zhí)行任何長期運行的存儲管理單元(memory management unit,縮寫為MMU)頁表操作;即,為了減少由阻塞在快速互斥體上的線程所引起的系統(tǒng)開銷,當與移動存儲模式一起使用時,不調(diào)用所提供的超微內(nèi)核鉤子,以允許(慢)處理上下文轉(zhuǎn)換。然而,由于這樣非???,所以該操作實際上在多存儲模式上執(zhí)行地址空間改變。
這意味著在當前線程占用快速互斥體時,未確保用戶的地址空間是一致的。僅有的一個例外是,當被占用的快速互斥體是用于移動存儲模式中以保證存儲鉤子函數(shù)不會變?yōu)楸磺短讜r的系統(tǒng)鎖時。應(yīng)該注意,YieldTo隨著禁用中斷和內(nèi)核解鎖而返回,就像如下所述的調(diào)度器本身一樣。還應(yīng)該注意,調(diào)度算法保證YieldTo將不會返回,直到互斥體已經(jīng)被釋放。
不從就緒表中刪除線程,而是立即讓步于互斥體占用線程,來有效地提供優(yōu)先級繼承。這是因為被阻塞在快速互斥體上的線程仍留在就緒表中,因此如果具有至少與最高優(yōu)先級的被阻塞線程相等的優(yōu)先級的另一線程變?yōu)榫途w,則只可以觸發(fā)重新調(diào)度。因此,占用線程有效地將其優(yōu)先級提升至最高優(yōu)先級的被阻塞線程的優(yōu)先級。
用于釋放快速互斥體的典型算法是Lock the kerneliHoldingThread=NULLCurrent thread->iHeldFastMutex=NULLIF iWaitingiWaiting=FALSESet TheScheduler.iRescheduleNeededFlag to cause rescheduleIF CurrentThread->iCsFuntion && CurrentThread->iCsCount==0Do critical section exit processing for current threadENDIFENDIFUnlock the kernel在沒有爭用的情況下,這不過是減少至兩個變量分配。此外,在檢查iWaiting標志的同時,可以通過禁用中斷而不是鎖定內(nèi)核,對非SMP(對稱處理)系統(tǒng)進行優(yōu)化且已經(jīng)進行了進一步優(yōu)化。在當前線程占用互斥體時,如果另一個線程已經(jīng)試圖獲取該互斥體,則iWaiting標志將已經(jīng)被設(shè)置。如果線程的時間片已經(jīng)到期(與其他相等優(yōu)先級的線程的循環(huán)被延遲,直到快速互斥體被釋放)或如果試圖掛起或殺死該線程,iWaiting標志也將已經(jīng)被設(shè)置。后一種情況以與在線程臨界段(即iCsCount非零)中執(zhí)行線程的情況類似的方法來處理。當快速互斥體被釋放時,處理被延遲的操作,因此,互斥體中對iCsCount和iCsFunction的檢查會釋放代碼。
超微內(nèi)核包括調(diào)度器,假設(shè)內(nèi)核沒有被鎖定,如果沒有由中斷服務(wù)例程(ISR)排隊的待決(pending)操作或待決重新調(diào)度,則調(diào)度器在ISR的末端被調(diào)用。它還可以在只要內(nèi)核解除鎖定以及關(guān)于待決的操作和重新調(diào)度應(yīng)用的相同條件下被調(diào)用。
調(diào)度器首先檢查以觀察是否存在由ISR排隊的待決的操作;然后選擇準備運行的最高優(yōu)先級的線程。如上所述,基于循環(huán)法,調(diào)度相同優(yōu)先級的線程。超微內(nèi)核調(diào)度器通過下列步驟具體處理所選擇的線程占用快速互斥體的情況●如果被占用的互斥體是系統(tǒng)鎖,則調(diào)度器可以僅直接轉(zhuǎn)換到線程,而不需要進一步地檢查,這是因為自從線程上次運行以后,地址空間就沒有改變。另外,所選擇的線程不會被阻塞在快速互斥體上(因為其占用一個互斥體而且互斥體不嵌套)。
●如果所選擇的線程占用的是快速互斥體而不是系統(tǒng)鎖,則調(diào)度器仍可以轉(zhuǎn)換至它,且由于在是由快速互斥體而不是系統(tǒng)鎖所保護的臨界段期間不能保證用戶模式地址空間的有效,因此不需要鉤出(hook out)來執(zhí)行地址空間改變。然而,如果將通常地請求地址空間改變,則設(shè)置互斥體iWaiting標志,以保證在快速互斥體被釋放時并不實際改變地址空間。另外,如果線程具有KThreadAttlmplicitSystemLock屬性且系統(tǒng)鎖當前被占用,也設(shè)置iWaiting標志。這是為保證在系統(tǒng)鎖被占用時,線程不脫離互斥體所保護的臨界段。
超微內(nèi)核調(diào)度器通過以下步驟具體處理所選擇的線程被實際阻塞在快速互斥體上的情況●將被阻塞在快速互斥體上的所有線程保持在就緒表中,因此可以在重新調(diào)度期間選擇這些線程。與轉(zhuǎn)換到線程并使其運行以及立刻轉(zhuǎn)換到占用的線程而浪費時間不同,在調(diào)度器中檢查這種情況,然后調(diào)度器直接轉(zhuǎn)到互斥體占用的線程,因此節(jié)省了上下文轉(zhuǎn)換。該檢查也保證用在NFastMutex等待操作中的YieldTo函數(shù)不能夠返回,直到互斥體已經(jīng)釋放。值得注意的是,需要檢查iWaitFastMutex和iWaitFastMutex->iHoldingThread,這是因為當占用線程釋放互斥體時,iHoldingThread將被設(shè)置為NULL,但iWaitFastMutex仍將指向該互斥體。因為前面段落所中闡述的理由,所以如果執(zhí)行轉(zhuǎn)換到互斥體占用線程,則不需要做任何地址空間的改變。也不需要設(shè)置這里的快速互斥iWaiting標志,這是因為在所選擇的線程被阻塞在其上時,它就一定已經(jīng)被設(shè)置了。
本發(fā)明旨在提供以下的優(yōu)于已知操作系統(tǒng)內(nèi)核的顯著優(yōu)點●通過在單一機制中合并互斥法和優(yōu)先級繼承法,排除掉優(yōu)先級繼承由于任何原因被關(guān)閉的可能性。
●由于在單一機構(gòu)中合并優(yōu)先級繼承和互斥功能,快速互斥體(就像其名字暗示的)沒有表現(xiàn)出任何性能損失,所以不再需要由于性能原因而關(guān)閉優(yōu)先級繼承。
●在微內(nèi)核等級提供該快速可靠的雙重用途的機制意味著任何建立于其上的OS自動獲得避免死鎖的好處。
●快速互斥既適合于單一處理器又適合于SMP系統(tǒng)。
盡管已經(jīng)參照實施例具體說明了本發(fā)明,但是應(yīng)該理解,在不脫離權(quán)利要求書限定的本發(fā)明的范圍的條件下,可以對本發(fā)明做各種改變。
權(quán)利要求
1.一種計算裝置,包括調(diào)度器,其結(jié)合了用于將具有不同優(yōu)先級的執(zhí)行的線程的運行排序的算法;并且包括線程表,所述線程根據(jù)優(yōu)先級排序被調(diào)度在所述裝置上運行;所述裝置還包括至少一個鎖定機構(gòu),用于阻塞除去占用所述鎖定機構(gòu)的線程之外的所有線程對所述裝置的資源的訪問;以及其中,被阻塞運行的被調(diào)度線程促使占用所述鎖定機構(gòu)的所述線程運行。
2.根據(jù)權(quán)利要求1所述的計算裝置,其中,將狀態(tài)分配給線程,所述表包括所有具有共同狀態(tài)的線程。
3.根據(jù)權(quán)利要求2所述的計算裝置,其中,不允許被阻塞的線程改變其狀態(tài)。
4.根據(jù)權(quán)利要求1至3中任意一項所述的計算裝置,其中,根據(jù)所述表所包括的所述線程的優(yōu)先級來細分所述表。
5.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置,其中,線程被設(shè)置為包含指向任何上面阻塞所述線程的鎖定機構(gòu)的指針。
6.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置,包括多個不可嵌套的鎖定機構(gòu)。
7.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置,其中,所述調(diào)度器被設(shè)置為在中斷服務(wù)例程的末尾被調(diào)用,其中,使所述中斷服務(wù)例程在所述計算裝置上運行。
8.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置,其中,所述鎖定機構(gòu)包括互斥體,所述互斥體包括指針,其中,如果所述互斥體空閑,則所述指針為空,否則指向占用所述互斥體的所述線程,并包括指示所述互斥體是否被爭用的標志。
9.根據(jù)權(quán)利要求8所述的計算裝置,其中,所述算法被設(shè)置為,將存儲管理委托給可替換存儲模型,所述可替換存儲模型基于所述計算裝置的結(jié)構(gòu)而構(gòu)造。
10.根據(jù)權(quán)利要求9所述的計算裝置,其中,所述存儲模型被設(shè)置為以可預(yù)占或不可預(yù)占模式運行。
11.根據(jù)權(quán)利要求10所述的計算裝置,其中,互斥體被設(shè)置用來保護所述模塊不以所述可預(yù)占模式運行。
12.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置,其中,所述調(diào)度器被包括在所述計算裝置的操作系統(tǒng)的內(nèi)核中。
13.根據(jù)權(quán)利要求12所述的計算裝置,其中,所述內(nèi)核包括微內(nèi)核或超微內(nèi)核,所述線程對應(yīng)地是微內(nèi)核或超微內(nèi)核線程。
14.根據(jù)權(quán)利要求12或13所述的計算裝置,其中,所述調(diào)度器被設(shè)置為在每次解鎖所述內(nèi)核時被調(diào)用。
15.根據(jù)前述權(quán)利要求中任意一項所述的計算裝置包括移動計算裝置。
16.根據(jù)權(quán)利要求15所述的計算裝置包括智能電話。
17.一種操作計算裝置的方法,所述方法包括以下步驟提供調(diào)度器,所述調(diào)度器結(jié)合了用于將具有不同優(yōu)先級的執(zhí)行線程的運行排序的算法,并包括線程表,所述線程以優(yōu)先級排序被調(diào)度在所述裝置上運行;提供至少一個鎖定機構(gòu),用于阻塞除去占用所述鎖定機構(gòu)的線程之外的所有線程對所述裝置的資源的訪問;以及設(shè)置被阻塞運行的被調(diào)度線程,以促使占用所述鎖定機構(gòu)的所述線程運行。
18.一種用于計算裝置的操作系統(tǒng),所述操作系統(tǒng)包括調(diào)度器,其結(jié)合了用于將具有不同優(yōu)先級的線程的運行排序的算法,并且包括用于提供線程表的裝置,所述線程以優(yōu)先級排序被調(diào)度在所述裝置上運行;至少一個鎖定機構(gòu),用于阻塞除去占用所述鎖定機構(gòu)的線程之外的所有線程對所述裝置的資源的訪問;以及用于設(shè)置由于要求的所述資源被鎖定而被阻塞運行的被調(diào)度線程,以使占用所述鎖定機制的所述線程運行的裝置。
19.根據(jù)權(quán)利要求18所述的操作系統(tǒng),其中,將狀態(tài)分配給線程,且所述表包括所有具有共同的狀態(tài)的線程。
20.根據(jù)權(quán)利要求19所述的操作系統(tǒng)被設(shè)置為不允許被阻塞的線程改變其狀態(tài)。
21.根據(jù)權(quán)利要求18至20中任意一項所述的操作系統(tǒng)被設(shè)置為,根據(jù)其包括的所述線程的所述優(yōu)先級來細分所述表。
22.根據(jù)權(quán)利要求18至21中任意一項所述的操作系統(tǒng),其中,所述線程被設(shè)置為包含指向任何上面阻塞所述線程的鎖定機構(gòu)的指針。
23.根據(jù)權(quán)利要求18至22中任意一項所述的操作系統(tǒng),包括多個不可嵌套的鎖定機構(gòu)。
24.根據(jù)權(quán)利要求18至23中任意一項所述的操作系統(tǒng),其中,所述調(diào)度器被設(shè)置為在中斷服務(wù)例程的末尾被調(diào)用,其中,使所述中斷服務(wù)例程在所述計算裝置上運行。
25.根據(jù)權(quán)利要求18至24中任意一項所述的操作系統(tǒng),其中,所述鎖定機構(gòu)包括互斥體,所述互斥體包括指針,其中,如果所述互斥體空閑,則所述指針時為空,否則指向占用所述互斥體的所述線程,并包括指示所述互斥體是否被爭用的標志。
26.根據(jù)權(quán)利要求25所述的操作系統(tǒng),其中,所述算法被設(shè)置為,將存儲管理委托給可替換存儲模型,所述可替換存模型基于所述計算裝置的結(jié)構(gòu)而構(gòu)造。
27.根據(jù)權(quán)利要求26所述的操作系統(tǒng),其中,所述存儲模型被設(shè)置為以可預(yù)占或不可預(yù)占模式運行。
28.根據(jù)權(quán)利要求27所述的計算系統(tǒng),其中,互斥體被設(shè)置用來保護所述模塊不以所述可預(yù)占模式運行。
29.根據(jù)權(quán)利要求18至28中任意一項所述的操作系統(tǒng),其中,所述調(diào)度器被包括在所述內(nèi)核中。
30.根據(jù)權(quán)利要求29所述的操作系統(tǒng),其中,所述內(nèi)核包括微內(nèi)核或超微內(nèi)核,所述線程對應(yīng)地是微內(nèi)核或超微內(nèi)核線程。
31.根據(jù)權(quán)利要求29或30所述的操作系統(tǒng),其中,所述調(diào)度器被設(shè)置為在每次解鎖所述內(nèi)核時被調(diào)用。
全文摘要
一種用于計算裝置的操作系統(tǒng),包括調(diào)度器,其結(jié)合了用于將具有不同優(yōu)先級的執(zhí)行的線程的運行排序的算法。該操作系統(tǒng)還被設(shè)置以提供線程表,線程根據(jù)優(yōu)先級排序被調(diào)度以在該裝置上運行。還提供了至少一個鎖定機構(gòu),用于阻塞除去占用該鎖定機構(gòu)的線程之外的所有線程對裝置資源的訪問。其中,該操作系統(tǒng)設(shè)置由于所請求的資源被鎖定而被阻塞運行的被調(diào)度線程,以使占用鎖定機構(gòu)的線程運行。
文檔編號G06F9/48GK1973266SQ200580016061
公開日2007年5月30日 申請日期2005年4月1日 優(yōu)先權(quán)日2004年4月2日
發(fā)明者丹尼斯·梅 申請人:西姆畢恩軟件有限公司