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