欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng)的制作方法

文檔序號(hào):6618857閱讀:237來(lái)源:國(guó)知局
專利名稱:一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng),屬于數(shù)據(jù) 通信技術(shù)領(lǐng)域。
背景技術(shù)
嵌入式系統(tǒng)是一種完全嵌入受控器件內(nèi)部,為特定應(yīng)用設(shè)計(jì)的專用電 腦系統(tǒng)。該系統(tǒng)主要適用于對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要 求的應(yīng)用領(lǐng)域。隨著嵌入式系統(tǒng)的發(fā)展,嵌入式軟件的復(fù)雜度越來(lái)越高,因此在嵌入 式系統(tǒng)軟件開發(fā)中引入了嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)是一種支持嵌 入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,能夠有效管理越來(lái)越復(fù)雜的系統(tǒng)資源,對(duì) 嵌入式軟件模塊提供多任務(wù)運(yùn)行環(huán)境,使得程序開發(fā)更加容易,便于維護(hù), 同時(shí)能夠提高系統(tǒng)的穩(wěn)定性和可靠性。在大部分嵌入式操作系統(tǒng)中,多任務(wù)是以多線程的形式實(shí)現(xiàn)的。目前此類操作系統(tǒng)的代表產(chǎn)品是實(shí)時(shí)多任務(wù)操作系統(tǒng)Nucleus PLUS、實(shí)時(shí)操作 系統(tǒng)VxWorks、硬實(shí)時(shí)操作系統(tǒng)ThreadX和實(shí)時(shí)多處理系統(tǒng)RTEMS等。在 這類操作系統(tǒng)中,"任務(wù)(Task)"和"線程(Thread)"是同一個(gè)概念。 從這類系統(tǒng)的角度看,線程是竟?fàn)幭到y(tǒng)資源的最小運(yùn)行單位。線程可以使 用或等待中央處理器(Central Process Unit ,簡(jiǎn)稱CPU)、輸入/輸出 (1叩ut/0utput,簡(jiǎn)稱I/O)設(shè)備及內(nèi)存等系統(tǒng)資源,并獨(dú)立于其他線程, 與它們一起并發(fā)運(yùn)行。我們稱此類操作系統(tǒng)為多線程操作系統(tǒng)。在多線程操作系統(tǒng)中,最關(guān)鍵的部分就是線程調(diào)度器(Scheduler)。 線程調(diào)度器根據(jù)一定的調(diào)度策略將處理器資源分配給合適的線程,得到了5處理器資源的線程就稱為該線程被"調(diào)度運(yùn)行"了。在嵌入式操作系統(tǒng)中 調(diào)度的混合調(diào)度策略,即多優(yōu)先級(jí)輪轉(zhuǎn)調(diào)度。在這種調(diào)度策略下,線程根據(jù)其功能和性能要求確定自己的兩個(gè)關(guān)鍵調(diào)度參數(shù)優(yōu)先級(jí)和時(shí)間片。準(zhǔn) 備好可以運(yùn)行的線程就成為"就緒"的線程,調(diào)度器將所有就緒線程按照 優(yōu)先級(jí)的高低排在不同優(yōu)先級(jí)的調(diào)度等待隊(duì)列中等待分配處理器資源。具 有高優(yōu)先級(jí)的線程能夠優(yōu)先獲得處理器資源,而線程的時(shí)間片則決定了 一 個(gè)線程獲得處理器資源后能夠使用處理器的時(shí)間。 一旦線程的時(shí)間片用 完,調(diào)度器就會(huì)剝奪這個(gè)線程的處理器資源,并將這個(gè)線程重新排到對(duì)應(yīng) 優(yōu)先級(jí)隊(duì)列的尾部重新排隊(duì),這就是同級(jí)之間時(shí)間片輪轉(zhuǎn)的調(diào)度策略。在嵌入式系統(tǒng)中,硬件設(shè)備(如網(wǎng)絡(luò)接口、溫度傳感器等)會(huì)以電子 信號(hào)的形式請(qǐng)求軟件處理發(fā)生在硬件設(shè)備中的事件。這種電子信號(hào)就被稱 為"中斷,,。當(dāng)處理器接收到中斷時(shí)就會(huì)暫時(shí)停止運(yùn)行當(dāng)前正在使用處理 器的線程并轉(zhuǎn)入操作系統(tǒng)提供的中斷服務(wù)程序中進(jìn)行中斷響應(yīng)處理,這就 稱為該線程被中斷打斷了 。在大多數(shù)情況下操作系統(tǒng)在完成中斷響應(yīng)處理 后會(huì)把處理器資源還給之前被中斷打斷的線程恢復(fù)執(zhí)行。但是在某些情況 下中斷響應(yīng)處理過程中,系統(tǒng)可能會(huì)讓具有更高優(yōu)先級(jí)的線程準(zhǔn)備好運(yùn) 行,并加入調(diào)度等待隊(duì)列。這時(shí)調(diào)度器在完成中斷響應(yīng)處理后就會(huì)將處理 器資源分配給這個(gè)新就緒的更高優(yōu)先級(jí)線程而不是之前被打斷的線程。這 就稱為高優(yōu)先級(jí)線程搶占了低優(yōu)先級(jí)線程的處理器資源,而這種調(diào)度策略 就是搶占式調(diào)度策略。操作系統(tǒng)使用一種被稱為線程控制塊(Thread Control Block)或任 務(wù)控制塊(Task Control Block)的數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤和維護(hù)與某個(gè)線程相 關(guān)的信息,包括線程的堆棧、調(diào)度參數(shù)、運(yùn)行狀態(tài)和代碼等。每次線程被 剝奪處理器資源時(shí)操作系統(tǒng)會(huì)暫停線程運(yùn)行,并將線程的運(yùn)行狀態(tài)信息直 接或間接地保存在線程控制塊中。下次將處理器資源重新分配給這個(gè)線程時(shí)操作系統(tǒng)就會(huì)從該線程的線程控制塊中取出上次保存的狀態(tài)信息,將該 線程恢復(fù)到暫停之前的狀態(tài)繼續(xù)正常運(yùn)行。隨著嵌入式系統(tǒng)的發(fā)展,嵌入式系統(tǒng)的功能越來(lái)越強(qiáng)大,軟件系統(tǒng)也 越來(lái)越復(fù)雜,可靠性要求也越來(lái)越高。如網(wǎng)絡(luò)通信設(shè)備等嵌入式系統(tǒng)通常 具有高度復(fù)雜的軟件代碼和較為苛刻的可靠性要求。但在多線程操作系統(tǒng) 中所有的線程都在同一個(gè)資源空間中運(yùn)行,即所有的線程共同使用全局 共享的內(nèi)存資源、文件資源和設(shè)備資源等系統(tǒng)資源。只要任何一個(gè)線程出 現(xiàn)故障都可能導(dǎo)致全局資源被破壞,致使整個(gè)系統(tǒng)崩潰。因此出于故障隔 離和高可靠性的需要,越來(lái)越多的這類復(fù)雜嵌入式系統(tǒng)需要引入原本通常 在個(gè)人電腦或大型計(jì)算機(jī)中使用的進(jìn)程來(lái)彌補(bǔ)多線程操作系統(tǒng)的不足。進(jìn)程相對(duì)于線程其最主要的區(qū)別就是進(jìn)程擁有自己獨(dú)立的資源空間。例如每個(gè)進(jìn)程都擁有自己的內(nèi)存空間和文件資源空間等,進(jìn)程只能操作屬于自己的資源。因此如果進(jìn)程發(fā)生了故障,故障就被嚴(yán)格隔離在進(jìn)程自 己的資源空間內(nèi),而不會(huì)波及其他進(jìn)程以及系統(tǒng)的其他軟件模塊。操作系進(jìn)程的故障并不會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰。所以采用進(jìn)程技術(shù)有利于提高嵌 入式系統(tǒng)的可靠性,目前較新的一些嵌入式操作系統(tǒng)也開始支持多進(jìn)程技術(shù),如實(shí)時(shí)操作系統(tǒng)QNX和一些嵌入式Linux系統(tǒng)等。在多進(jìn)程操作系統(tǒng)中,調(diào)度器通常是專門的多進(jìn)程調(diào)度器,只能調(diào)度 進(jìn)程。而線程作為一種特殊的進(jìn)程參與調(diào)度,如Linux中線程就是一種特 殊的"輕量級(jí)進(jìn)程"。和多線程操作系統(tǒng)類似,多進(jìn)程操作系統(tǒng)也使用一 種叫做進(jìn)程控制塊(Process Control Block)的凄丈據(jù)結(jié)構(gòu)來(lái)跟蹤和維護(hù) 與某個(gè)進(jìn)程相關(guān)的信息。進(jìn)程控制塊所包含的內(nèi)容除了進(jìn)程的堆棧、調(diào)度 參數(shù)、運(yùn)行狀態(tài)和代碼以外,還包含進(jìn)程獨(dú)立的資源空間信息。進(jìn)程的資 源空間中主要包括進(jìn)程文件空間、內(nèi)存空間和設(shè)備空間等,其中最重要的 是進(jìn)程的內(nèi)存空間。進(jìn)程運(yùn)行時(shí)所需的代碼(Code)、動(dòng)態(tài)堆(Heap)和用戶棧(Stack)等關(guān)鍵數(shù)據(jù)都必須位于進(jìn)程的內(nèi)存空間內(nèi)。每次發(fā)生進(jìn) 程切換時(shí),進(jìn)程調(diào)度器必須先切換到準(zhǔn)備調(diào)度運(yùn)行的進(jìn)程的資源空間去, 然后才能恢復(fù)該進(jìn)程的運(yùn)行狀態(tài)并開始運(yùn)行位于進(jìn)程內(nèi)存空間中的進(jìn)程 代碼。
通常對(duì)于新設(shè)計(jì)的嵌入式系統(tǒng)來(lái)說(shuō),我們可以根據(jù)具體需求選擇合適 的多進(jìn)程操作系統(tǒng)進(jìn)行軟件開發(fā)。然而在實(shí)際情況中,我們常常要對(duì)一個(gè) 原有的嵌入式系統(tǒng)進(jìn)行改造,使之具備進(jìn)程支持能力以便適應(yīng)當(dāng)前新的高 可靠性要求,延長(zhǎng)這類原有系統(tǒng)的生命期。對(duì)于原有的基于多線程操作系 統(tǒng)的嵌入式系統(tǒng),業(yè)界一般采取兩種技術(shù)方案使之支持進(jìn)程。 一種技術(shù)方 案是將原有的多線程操作系統(tǒng)更換為多進(jìn)程操作系統(tǒng),然后對(duì)其他軟件模 塊進(jìn)行重構(gòu),即在不改變?cè)浖K功能的情況下對(duì)軟件模塊進(jìn)行重新 開發(fā)和編碼,使之能夠在新的多進(jìn)程操作系統(tǒng)上運(yùn)行。另一種技術(shù)方案是 修改原有系統(tǒng)中的多線程操作系統(tǒng),將其改造為多進(jìn)程操作系統(tǒng)。同時(shí)對(duì) 其他軟件模塊進(jìn)行修訂,使之能夠適應(yīng)改造過的操作系統(tǒng)。
第一種現(xiàn)有技術(shù)方案的問題在于對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),軟件模塊往往 與嵌入式操作系統(tǒng)緊密結(jié)合。通常更換了嵌入式操作系統(tǒng)就意味著整個(gè)系 統(tǒng)的調(diào)度行為、操作系統(tǒng)的應(yīng)用編程接口 (Application Programming Interface,簡(jiǎn)稱API)(即操作系統(tǒng)對(duì)外提供的一組函數(shù)接口 ,其他軟件 模塊可以通過這組接口使用操作系統(tǒng)提供的各種功能)和各種系統(tǒng)服務(wù) (如中斷服務(wù)、設(shè)備驅(qū)動(dòng)、進(jìn)程/線程間通訊、文件系統(tǒng)等)都發(fā)生了徹 底的變化。這種變化之大往往不得不通過徹底改寫相關(guān)軟件模塊的途徑來(lái) 解決。然而對(duì)于一些復(fù)雜的嵌入式系統(tǒng)(如網(wǎng)絡(luò)通信類系統(tǒng))來(lái)說(shuō),其軟 件可能由數(shù)百萬(wàn)行代碼構(gòu)成,需要多名技術(shù)人員經(jīng)過多年的開發(fā)和測(cè)試才 能完成。對(duì)這些代碼進(jìn)行徹底的改寫所耗費(fèi)的人力、物力、財(cái)力和時(shí)間即 使對(duì)大型企業(yè)來(lái)說(shuō)也是一個(gè)非常沉重的負(fù)擔(dān), 一般的中小型企業(yè)根本無(wú)法 承受。
8第二種現(xiàn)有技術(shù)方案則存在兩個(gè)主要問題。第 一個(gè)問題是對(duì)于某些源 代碼不開放的商業(yè)嵌入式操作系統(tǒng)來(lái)說(shuō),由于沒有操作系統(tǒng)源代碼,根本 沒有辦法對(duì)其進(jìn)行修改,無(wú)法實(shí)施該技術(shù)方案。另一個(gè)問題是即使能夠?qū)?原操作系統(tǒng)進(jìn)行修改,并且即使在修改過程中可以盡量保持原操作系統(tǒng)的 API接口和系統(tǒng)服務(wù)等主要機(jī)制不發(fā)生改變。但由于修改后的操作系統(tǒng)對(duì) 軟件模塊呈現(xiàn)的運(yùn)行環(huán)境將由多線程環(huán)境變?yōu)槎噙M(jìn)程環(huán)境的緣故,所有原 有軟件模塊中與線程相關(guān)的部分也必須進(jìn)行相應(yīng)的修改轉(zhuǎn)而支持進(jìn)程,以 適應(yīng)新的多進(jìn)程運(yùn)行環(huán)境。然而對(duì)于一些已經(jīng)開發(fā)和使用了很長(zhǎng)時(shí)間的原 有系統(tǒng)來(lái)說(shuō),由于其規(guī)模龐大、開發(fā)周期長(zhǎng),并且在其投入應(yīng)用以后始終 處于長(zhǎng)期和持續(xù)不斷的維護(hù)過程當(dāng)中,軟件代碼不斷地引入新的修改。在 如此漫長(zhǎng)的過程中可能由于開發(fā)人員的人事變動(dòng),或是由于在開發(fā)和維護(hù) 原有系統(tǒng)時(shí)沒有使用現(xiàn)代軟件工程方法進(jìn)行管理致使文檔不足等緣故,造 成有大量原有系統(tǒng)的代碼無(wú)法被當(dāng)前的軟件開發(fā)人員完全理解。在這種情 況下對(duì)原有軟件代碼進(jìn)行修改的風(fēng)險(xiǎn)極大,可能在修改過程中引入更多的 軟件故障,降低軟件的質(zhì)量和系統(tǒng)的可靠性。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng), 可以在不需要對(duì)原有多線程系統(tǒng)的操作系統(tǒng)和各軟件模塊做任何修改的 情況下有效實(shí)現(xiàn)對(duì)進(jìn)程的支持。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的
方法,所述方法包4舌
創(chuàng)建進(jìn)程;
創(chuàng)建所述進(jìn)程對(duì)應(yīng)的代理線程;
當(dāng)所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器資源轉(zhuǎn) 讓給所述代理線程對(duì)應(yīng)的進(jìn)程。為了實(shí)現(xiàn)上述目的,本發(fā)明還提供了 一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持
的裝置,所述裝置包括創(chuàng)建模塊、進(jìn)程模塊、代理線程模塊和資源分配模塊; 所述創(chuàng)建才莫塊用于創(chuàng)建進(jìn)程,以及所述進(jìn)程對(duì)應(yīng)的代理線程; 所述進(jìn)程模塊與創(chuàng)建模塊連接,用于維護(hù)進(jìn)程相關(guān)信息; 所述代理線程模塊與創(chuàng)建模塊連接,用于維護(hù)代理線程相關(guān)信息; 所述資源分配模塊與創(chuàng)建模塊、進(jìn)程模塊和代理線程模塊連接,用于在
所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器資源轉(zhuǎn)讓給所
述代理線程對(duì)應(yīng)的進(jìn)程。
為了實(shí)現(xiàn)上述目的,本發(fā)明又提供了 一種實(shí)現(xiàn)進(jìn)程支持的多線程系統(tǒng),
包括上述裝置,還包括調(diào)度器模塊和原有中斷服務(wù)模塊;
所述調(diào)度器模塊用于進(jìn)行代理線程的調(diào)度和處理器資源分配;' 所述原有中斷服務(wù)模塊用于進(jìn)行線程中斷響應(yīng)。 ' 本發(fā)明通過代理線程將獲得的處理器資源分配給所述代理線程對(duì)應(yīng)的進(jìn)
程,實(shí)現(xiàn)了在原有多線程系統(tǒng)中實(shí)現(xiàn)對(duì)進(jìn)程的支持。原有多線程系統(tǒng)的調(diào)度
器仍然只需要負(fù)責(zé)多線程調(diào)度而不需要進(jìn)行任何修改,系統(tǒng)中原有線程的調(diào)
度行為也不會(huì)發(fā)生任何變化,因而對(duì)原有多線程系統(tǒng)改動(dòng)很小。


圖1為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例一示意

圖2為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例二示意

圖3為本發(fā)明 一 種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例三示意

圖4為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例四示意

10圖5為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例五示意

圖6為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例一示意

圖7為本發(fā)明 一 種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例二示意

圖8為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例三示意

圖9為本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例四示意

圖10為本發(fā)明一種實(shí)現(xiàn)進(jìn)程支持的多線程系統(tǒng)實(shí)施例示意圖
具體實(shí)施例方式
本發(fā)明提供了一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng),可以在 不需要對(duì)原有多線程系統(tǒng)的操作系統(tǒng)和各軟件模塊做任何修改的情況下 有效實(shí)現(xiàn)對(duì)進(jìn)程的支持。下面結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)的說(shuō)明。
圖1給出了本發(fā)明 一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例一 示意圖,所述方法包括以下步驟
步驟Sl,創(chuàng)建進(jìn)程;
步驟S2,創(chuàng)建所述進(jìn)程對(duì)應(yīng)的代理線程;
代理線程可以是一類具有特殊功能的線程,它可以幫助對(duì)應(yīng)的進(jìn)程在調(diào) 度器的調(diào)度隊(duì)列中排隊(duì)等待處理器的使用權(quán),并在得到處理器使用權(quán)以后將 其轉(zhuǎn)讓給對(duì)應(yīng)進(jìn)程。
步驟S3,當(dāng)所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理 器資源轉(zhuǎn)讓給所述代理線程對(duì)應(yīng)的進(jìn)程。
從原有系統(tǒng)調(diào)度器的角度看來(lái),代理線程和系統(tǒng)中的其他線程并無(wú)任何區(qū)別。因此調(diào)度器按照與調(diào)度其他線程完全相同的策略對(duì)代理線程進(jìn)行調(diào)度, 為其分配處理器資源。只要代理線程位于調(diào)度器的調(diào)度隊(duì)列中,調(diào)度器總會(huì) 在某個(gè)時(shí)刻選中這個(gè)代理線程并將處理器資源分配給它。通過代理線程將獲 得的處理器資源分配給所述代理線程對(duì)應(yīng)的進(jìn)程,實(shí)現(xiàn)了在原有多線程系統(tǒng) 中實(shí)現(xiàn)對(duì)進(jìn)程的支持。原有多線程系統(tǒng)的調(diào)度器仍然只需要負(fù)責(zé)多線程調(diào)度 而不需要進(jìn)行任何修改,系統(tǒng)中原有線程的調(diào)度行為也不會(huì)發(fā)生任何變化, 因而對(duì)原有多線程系統(tǒng)改動(dòng)4艮小。
圖2給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例二
示意圖,本實(shí)施例除了包括方法實(shí)施例一的步驟外,步驟S3中將所述處 理器資源分配給所述代理線程對(duì)應(yīng)的進(jìn)程具體還包括 步驟S31,查找所述代理線程對(duì)應(yīng)的進(jìn)程;
步驟S32,切換到所述進(jìn)程的進(jìn)程資源空間;具體可以從進(jìn)程的進(jìn)程控 制塊中獲取進(jìn)程相關(guān)信息,從而切換到所述進(jìn)程的進(jìn)程資源空間。
進(jìn)行切換時(shí),代理線程應(yīng)當(dāng)使用某種進(jìn)程資源隔離切換技術(shù),如進(jìn)程 內(nèi)存頁(yè)表、進(jìn)程文件表等技術(shù)實(shí)現(xiàn)進(jìn)程資源空間的隔離與切換。
步驟S33,恢復(fù)所述進(jìn)程的運(yùn)行狀態(tài);具體可以從進(jìn)程的進(jìn)程控制塊中 獲取進(jìn)程相關(guān)信息,從而恢復(fù)進(jìn)程的運(yùn)行狀態(tài)。
步驟S34,執(zhí)行所述進(jìn)程的代碼。
由上述步驟可見,代理線程分配處理器資源給對(duì)應(yīng)進(jìn)程并沒有通過調(diào)度 器,所以調(diào)度器無(wú)法知道進(jìn)程的存在,實(shí)現(xiàn)了調(diào)度過程中進(jìn)程對(duì)原有系統(tǒng)調(diào) 度器的屏蔽。 '
圖3給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例三 示意圖,本實(shí)施例除了包括方法實(shí)施例一的步驟外,還包括
步驟S41,在接收到中斷時(shí),檢查當(dāng)前運(yùn)行的是進(jìn)程還是線程,如果是 線程則執(zhí)行步驟S44,如果是進(jìn)程則執(zhí)行步驟S42;
所述檢查當(dāng)前運(yùn)行的是進(jìn)程還是線程具體可以根據(jù)以下方法判斷檢查中斷到達(dá)時(shí)處理器保存的中斷返回地址,該地址就是處理器在中斷產(chǎn)生的時(shí) 刻正在執(zhí)行的指令的地址,如果該地址位于進(jìn)程的進(jìn)程內(nèi)存空間范圍之外, 則認(rèn)為當(dāng)前被中斷的是線程,進(jìn)程內(nèi)存空間可以在創(chuàng)建進(jìn)程時(shí)產(chǎn)生,也可以
在進(jìn)程執(zhí)行的過程中根據(jù)需要產(chǎn)生,具體由進(jìn)程資源隔離切換技術(shù),如進(jìn)
程內(nèi)存頁(yè)表、進(jìn)程文件表等技術(shù)實(shí)現(xiàn)進(jìn)程內(nèi)存空間的分配、隔離與切換。
步驟S42,將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到所述進(jìn)程的進(jìn)程控制塊中; 步驟S43,將進(jìn)程使用的處理器資源轉(zhuǎn)讓給所述進(jìn)程對(duì)應(yīng)的代理線程; 步驟S44,執(zhí)行多線程系統(tǒng)的中斷服務(wù)程序。
由上述步驟可見,本發(fā)明可以在進(jìn)入原有系統(tǒng)的中斷月良務(wù)程序之前先將 處理器資源從進(jìn)程還給了代理線程。因此原有系統(tǒng)的中斷服務(wù)程序也無(wú)法知 道進(jìn)程的存在,仍然認(rèn)為被當(dāng)前中斷打斷的是代理線程。所以原有系統(tǒng)的中 斷服務(wù)程序也不需要進(jìn)行任何修改。
本實(shí)施例除了可以在方法實(shí)施例一的基礎(chǔ)上進(jìn)行上述擴(kuò)展外,還可以在 方法實(shí)施例二的基礎(chǔ)上進(jìn)行上述擴(kuò)展。
圖4給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例四 示意圖,本實(shí)施例除了包括方法實(shí)施例三的步驟外,還包括
步驟S51,在接收到殺死進(jìn)程的命令后,查找所述進(jìn)程對(duì)應(yīng)的代理線程;
步驟S52,終止所述代理線程;
步驟S53,刪除所述代理線程;
步驟S54,刪除與所述進(jìn)程相關(guān)的信息;
具體在創(chuàng)建進(jìn)程的時(shí)候可以生成進(jìn)程列表存儲(chǔ)進(jìn)程相關(guān)信息,刪除進(jìn)程 時(shí)需要?jiǎng)h除進(jìn)程列表中的相關(guān)表項(xiàng)。
步驟S55,釋^L所述進(jìn)程占用的資源。
本實(shí)施例除了可以在方法實(shí)施例三的基礎(chǔ)上進(jìn)行上述擴(kuò)展外,還可以在 方法實(shí)施例一或方法實(shí)施例二的基礎(chǔ)上進(jìn)行上述擴(kuò)展。
圖5給出了本發(fā)明 一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法實(shí)施例五示意圖,本實(shí)施例除了包括方法實(shí)施例二的步驟外,還包括
所述步驟S1之后還包括步驟S11:對(duì)所述進(jìn)程分配進(jìn)程編號(hào),并在進(jìn)程 列表中記錄所述進(jìn)程與進(jìn)程編號(hào)的對(duì)應(yīng)關(guān)系;
系統(tǒng)在創(chuàng)建進(jìn)程后可以將進(jìn)程;故入一個(gè)進(jìn)程列表,并對(duì)每個(gè)進(jìn)程進(jìn)行編 號(hào),進(jìn)程一旦創(chuàng)建就被賦予一個(gè)唯一的編號(hào),系統(tǒng)可以通過這個(gè)編號(hào)找到對(duì) 應(yīng)的進(jìn)程。在該進(jìn)程整個(gè)生命周期內(nèi),即進(jìn)程從創(chuàng)建到消亡的這段時(shí)間內(nèi), 這個(gè)編號(hào)始終不會(huì)改變,我們稱這個(gè)編號(hào)為進(jìn)程編號(hào)(Process ID,簡(jiǎn)稱PID)。 所述步驟S2之后還包括步驟S21:所述代理線程記錄所述進(jìn)程的進(jìn)程編
號(hào);
所述步驟S31具體為根據(jù)進(jìn)程編號(hào)查找所述代理線程對(duì)應(yīng)的進(jìn)程。
每個(gè)代理線程都記錄著其所服務(wù)的進(jìn)程的PID。當(dāng)調(diào)度器將處理器資 源分配給某個(gè)代理線程后,該代理線程就可以根據(jù)進(jìn)程的PID在進(jìn)程列表 查找對(duì)應(yīng)的進(jìn)程,然后將自己的處理器資源轉(zhuǎn)讓給該進(jìn)程,該進(jìn)程獲得處 理器使用權(quán)并開始運(yùn)行。
本實(shí)施例除了可以在方法實(shí)施例二的基礎(chǔ)上進(jìn)行上述擴(kuò)展外,還可以在 方法實(shí)施例三或方法實(shí)施例四的基礎(chǔ)上進(jìn)行上述擴(kuò)展。
本發(fā)明的核心思想在于通過創(chuàng)建代理線程的方式由線程代替進(jìn)程參加 調(diào)度活動(dòng),使得原有系統(tǒng)的調(diào)度器仍然只需要負(fù)責(zé)多線程調(diào)度,因而不需要 對(duì)調(diào)度器進(jìn)行任何修改。同時(shí)由于調(diào)度器沒有變化,系統(tǒng)中原有線程的調(diào)度 行為也不會(huì)發(fā)生任何改變,原有軟件模塊仍然在多線程環(huán)境下運(yùn)行。因此原 有系統(tǒng)中各軟件模塊也不需要因?yàn)檫M(jìn)程的引入而做任何修改。這樣就達(dá)到了 在不改動(dòng)原有系統(tǒng)的前提下實(shí)現(xiàn)進(jìn)程支持的目的,對(duì)原系統(tǒng)影響最小。
系統(tǒng)可以將所有的已創(chuàng)建進(jìn)程放入一個(gè)進(jìn)程列表中,并對(duì)每個(gè)進(jìn)程進(jìn)行 編號(hào)。進(jìn)程一旦創(chuàng)建就被賦予一個(gè)唯一編號(hào),該編號(hào)類似手現(xiàn)實(shí)生活中人的 身份證號(hào),可以唯一標(biāo)識(shí)一個(gè)進(jìn)程,系統(tǒng)可以通過這個(gè)編號(hào)找到對(duì)應(yīng)的進(jìn)程。 在該進(jìn)程整個(gè)生命周期內(nèi),即進(jìn)程從創(chuàng)建到消亡的這段時(shí)間內(nèi),這個(gè)編號(hào)始終不會(huì)改變,我們稱這個(gè)編號(hào)為進(jìn)程的進(jìn)程編號(hào)PID。
在系統(tǒng)中為每個(gè)進(jìn)程各創(chuàng)建一個(gè)線程作為該進(jìn)程的調(diào)度代理,我們稱這 種線程為進(jìn)程的代理線程。代理線程是一類具有特殊功能的線程,它可以幫 助對(duì)應(yīng)的進(jìn)程在調(diào)度器的調(diào)度隊(duì)列中排隊(duì)等待處理器的使用權(quán),并在得到處 理器使用權(quán)以后將其轉(zhuǎn)讓給對(duì)應(yīng)進(jìn)程。代理線程的調(diào)度參數(shù)必須與對(duì)應(yīng)進(jìn)程 完全相同,例如兩者的調(diào)度優(yōu)先級(jí)和時(shí)間片必須相同。
從原有系統(tǒng)調(diào)度器的角度看來(lái),代理線程和系統(tǒng)中的其他線程并無(wú)任何
為其分配處理器使用權(quán)。只要代理線程位于調(diào)度器的調(diào)度隊(duì)列中,調(diào)度器總 會(huì)在某個(gè)時(shí)刻選中這個(gè)代理線程并將處理器資源分配給它。
每個(gè)代理線程都記錄著其所服務(wù)的進(jìn)程的PID。當(dāng)調(diào)度器將處理器資源 分配給某個(gè)代理線程后,該代理線程就會(huì)查找進(jìn)程列表,找到PID所對(duì)應(yīng)的 進(jìn)程后就將自己的處理器資源轉(zhuǎn)讓給該進(jìn)程。則該進(jìn)程獲得處理器使用權(quán)并 開始運(yùn)行。
代理線程采用如圖2所述的步驟S31至步驟S34將自己的處理器資源轉(zhuǎn) 讓給進(jìn)程。步驟S32進(jìn)行進(jìn)程資源空間切換時(shí),代理線程可以使用某種進(jìn)程 資源隔離切換技術(shù),如進(jìn)程內(nèi)存頁(yè)表、進(jìn)程文件表等技術(shù)實(shí)現(xiàn)進(jìn)程資源空 間的隔離與切換。
由此可見該處理器使用權(quán)轉(zhuǎn)讓完全在代理線程與對(duì)應(yīng)進(jìn)程之間進(jìn)行,并 沒有通過調(diào)度器。所以調(diào)度器無(wú)法知道進(jìn)程的存在,實(shí)現(xiàn)了調(diào)度過程中進(jìn)程 對(duì)原有系統(tǒng)調(diào)度器的屏蔽。
在嵌入式操作系統(tǒng)中,每次中斷到達(dá)時(shí),調(diào)度器都會(huì)強(qiáng)制收回處理器資 源以便進(jìn)行中斷處理和處理器資源再分配,即調(diào)度器可能重新選擇最高優(yōu)先 級(jí)的線程調(diào)度運(yùn)行。因此需要在調(diào)度器收回處理器資源之前先把處理器資源 從進(jìn)程還給對(duì)應(yīng)的代理線程。這個(gè)處理必須在中斷服務(wù)程序中進(jìn)行,其處理 過程為處理器在接收到由硬件設(shè)備或定時(shí)器發(fā)來(lái)的中斷時(shí),將自動(dòng)跳轉(zhuǎn)到一個(gè)特定的指令地址去。位于該指令地址的代碼就稱為中斷服務(wù)程序。
本發(fā)明中通過一個(gè)新的代理中斷服務(wù)程序來(lái)替換原有系統(tǒng)的中斷服務(wù)程
序,代理中斷服務(wù)程序?qū)⒆鋈缦绿幚?br> 步驟IOI,檢查當(dāng)前被中斷打斷的是進(jìn)程還是線程。如果是線程則跳到 步驟104,否則執(zhí)行步驟102;
步驟102,將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到該進(jìn)程的進(jìn)程控制塊中,以便 下次代理線程可以重新恢復(fù)運(yùn)^f該進(jìn)程;
步驟103,將處理器資源分配給當(dāng)前進(jìn)程所對(duì)應(yīng)的代理線程;
步驟104,跳轉(zhuǎn)到原有系統(tǒng)的中斷服務(wù)程序,繼續(xù)中斷響應(yīng)過程,通常 該中斷服務(wù)程序會(huì)將處理器資源再轉(zhuǎn)移到調(diào)度器。
可見,本發(fā)明的代理中斷服務(wù)程序在進(jìn)入原有系統(tǒng)的中斷服務(wù)程序之前 先將處理器資源從進(jìn)程還給了代理線程。因此原有系統(tǒng)的中斷服務(wù)程序也無(wú) 法知道進(jìn)程的存在,仍然認(rèn)為被當(dāng)前中斷打斷的是代理線程。所以原有系統(tǒng) 的中斷服務(wù)程序也不需要進(jìn)行任何修改。
從上面的描述可知,本發(fā)明完全在原有系統(tǒng)的調(diào)度器和中斷服務(wù)程序之 外擴(kuò)展實(shí)現(xiàn)了進(jìn)程支持。對(duì)原有系統(tǒng)的其他部分來(lái)說(shuō),進(jìn)程是不可見的,而 原有系統(tǒng)的調(diào)度行為也沒有任何變化。原有系統(tǒng)中的各軟件模塊和操作系統(tǒng) 均無(wú)需做任何修改,只需要按照本發(fā)明中所述方案實(shí)現(xiàn)一進(jìn)程支持模塊即可 在舊有系統(tǒng)的基礎(chǔ)上擴(kuò)展對(duì)進(jìn)程的支持,能夠支持基于進(jìn)程開發(fā)的新應(yīng)用軟 件模塊。
本發(fā)明使用代理線程代替進(jìn)程參與舊有系統(tǒng)中的調(diào)度活動(dòng)。由于代理線 程的存在,進(jìn)程對(duì)原有系統(tǒng)完全屏蔽不可見,原有系統(tǒng)中的原有部分不需要 做任何修訂,使得本發(fā)明實(shí)施起來(lái)工作量小、風(fēng)險(xiǎn)低,因而易于實(shí)施。而由 于代理線程的調(diào)度活動(dòng)仍然由原有系統(tǒng)的調(diào)度器實(shí)施,本發(fā)明實(shí)施時(shí)也不需 要關(guān)心原有系統(tǒng)的調(diào)度策略,因此可以適用于任何嵌入式多線程操作系統(tǒng), 通用性好。由代理線程負(fù)責(zé)將其獲得的處理器資源轉(zhuǎn)讓給進(jìn)程,實(shí)現(xiàn)進(jìn)程的處理器 資源分配,從進(jìn)程的角度來(lái)看,進(jìn)程也感知不到代理線程的存在。因此本發(fā) 明對(duì)進(jìn)程屏蔽了原有系統(tǒng)的線程調(diào)度細(xì)節(jié),呈現(xiàn)給進(jìn)程的仍然是一個(gè)傳統(tǒng)意 義上的多進(jìn)程運(yùn)行環(huán)境,對(duì)進(jìn)程端的軟件開發(fā)沒有特殊要求,兼容性好。
下面再通過一個(gè)較優(yōu)實(shí)施例對(duì)本發(fā)明進(jìn)行進(jìn)一步說(shuō)明。本實(shí)施例可以對(duì)
Nuc 1 eus PLUS操作系統(tǒng)進(jìn)行擴(kuò)展實(shí)現(xiàn)了進(jìn)程支持。Nuc 1 eus PLUS操作系統(tǒng)是 為實(shí)時(shí)嵌入式應(yīng)用而設(shè)計(jì)的一個(gè)搶先式多線程嵌入式操作系統(tǒng),廣泛應(yīng)用于 網(wǎng)絡(luò)通信等嵌入式產(chǎn)品中。
在本實(shí)施例中按照如下步驟創(chuàng)建進(jìn)程
步驟201,初始化進(jìn)程,為進(jìn)程分配PID。并在進(jìn)程列表中記錄進(jìn)程PID 與該進(jìn)程的進(jìn)程控制塊之間的關(guān)系;
步驟202,調(diào)用Nucleus PLUS操作系統(tǒng)提供的TCCE—Create—Task () API 接口創(chuàng)建一個(gè)代理線程,并向該代理線程傳入步驟201中分配的PID值。該 代理線程的調(diào)度優(yōu)先級(jí)和時(shí)間片配置值均與新進(jìn)程的相同;
步驟203,完成代理線程創(chuàng)建后Nucleus PLUS才喿作系統(tǒng)的 TCCE-Create-Task() API接口會(huì)返回代理線程的線程控制塊的指針,將該指 針保存在新進(jìn)程的進(jìn)程控制塊中。
該代理線程被Nucleus PLUS操作系統(tǒng)的調(diào)度器調(diào)度運(yùn)行時(shí)將進(jìn)行如下操

步驟301,將創(chuàng)建進(jìn)程時(shí)傳入的PID保存到自身線程控制塊的tc_argv 字段中,即設(shè)置Nucleus PLUS操作系統(tǒng)的TCD—Current-Thread->tc—argv為 PID;
步驟302,調(diào)用return—to—process ()函數(shù)。 return—to—process ()函數(shù)的處理步驟如下
步驟401,從當(dāng)前線程的線程控制塊中取出PID值,即讀取Nucleus PLUS 才喿作系統(tǒng)的TCD_Current-Thread-Hc-argvii;步驟402,查找進(jìn)程列表,根據(jù)PID找到對(duì)應(yīng)進(jìn)程的進(jìn)程控制塊; 步驟403,從進(jìn)程控制塊中讀取信息,使用某種進(jìn)程資源隔離切換技術(shù) 切換到該進(jìn)程運(yùn)行所需的進(jìn)程資源空間;
步驟404,從進(jìn)程控制塊中讀取信息,恢復(fù)進(jìn)程的運(yùn)行狀態(tài); 步驟405,跳轉(zhuǎn)到進(jìn)程的代碼中,將處理器資源轉(zhuǎn)讓給進(jìn)程。 在系統(tǒng)的代理中斷服務(wù)程序總?cè)肟谔幍奶幚聿襟E如下 步驟501,檢查中斷到達(dá)時(shí)處理器保存的中斷返回地址,該地址就是處 理器在中斷產(chǎn)生的時(shí)刻正在執(zhí)行的指令的地址,如果該地址位于進(jìn)程的進(jìn)程 內(nèi)存空間范圍之外,則認(rèn)為當(dāng)前被中斷的是線程,跳轉(zhuǎn)到步驟504,否則執(zhí) 行步驟502;進(jìn)程內(nèi)存空間可以在創(chuàng)建進(jìn)程時(shí)產(chǎn)生,也可以在進(jìn)程執(zhí)行的過 程中根據(jù)需要產(chǎn)生,具體由進(jìn)程資源隔離切換技術(shù),如進(jìn)程內(nèi)存頁(yè)表、進(jìn) 程文件表等技術(shù)實(shí)現(xiàn)進(jìn)程內(nèi)存空間的分配、隔離與切換。
步驟502,將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到該進(jìn)程的進(jìn)程控制塊中; 步驟503,將中斷返回地址修改為return—to—process ()函數(shù)的地址,這 樣有兩個(gè)目的
a) 步驟4中Nucleus PLUS操作系統(tǒng)的中斷服務(wù)程序在處理中斷時(shí),會(huì)以 為當(dāng)前中斷打斷的是代理線程;
b) Nucleus PLUS #:作系統(tǒng)的調(diào)度器在下次將處理器資源重新分配給代理 線程后,代理線程會(huì)從return—to-process()函數(shù)開始扭4行,重新將處理器 資源轉(zhuǎn)讓給進(jìn)程。
步驟504,跳轉(zhuǎn)到Nucleus PLUS操作系統(tǒng)的中斷服務(wù)程序,繼續(xù)中斷響 應(yīng)過程。
本發(fā)明按照如下步驟殺死一個(gè)進(jìn)程
步驟601,在該進(jìn)程的進(jìn)程控制塊中找到該進(jìn)程對(duì)應(yīng)的'代理線程; 步驟602,調(diào)用Nucleus PLUS操作系統(tǒng)的TCCE—Terminate—Task () API 接口終止該代理線程;步驟603,調(diào)用Nucleus PLUS操作系統(tǒng)的TCCE—Delete_Task () API接 口刪除該代理線程;
步驟604,從進(jìn)程列表中刪除與該進(jìn)程相關(guān)的表項(xiàng); 步驟605,釋放該進(jìn)程占用的所有資源。
圖6給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例一 示意圖,所述裝置包括創(chuàng)建模塊M1、進(jìn)程模塊M2、代理線程模塊M3和資源 分配模塊M4;
所述創(chuàng)建才莫塊Ml用于創(chuàng)建進(jìn)程,以及所述進(jìn)程對(duì)應(yīng)的代理線程;
所述進(jìn)程模塊M2與創(chuàng)建模塊Ml連接,用于維護(hù)進(jìn)程相關(guān)信息;
所述代理線程;漠塊M3與創(chuàng)建模塊M1連接,用于維護(hù)代理線程相關(guān)信息;
所述資源分配模塊M4與創(chuàng)建模塊Ml、進(jìn)程模塊M2和代理線程模塊M3 連接,用于在所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器 資源轉(zhuǎn)讓給所述代理線程對(duì)應(yīng)的進(jìn)程。
圖7給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例二 示意圖,本實(shí)施例除了包括裝置實(shí)施例一的結(jié)構(gòu)特征外,所述資源分配模 塊NM還包括進(jìn)程查找單元M41、資源空間切換單元M42、運(yùn)行狀態(tài)恢復(fù)單元 M43和代碼才丸4亍單元M44;
所述進(jìn)程查找單元M41用于在所述代理線程獲得調(diào)度器分配的處理器資 源后,查找所述代理線程對(duì)應(yīng)的進(jìn)程;
所述資源空間切換單元M42與進(jìn)程查找單元M41連接,用于切換到所述 進(jìn)程的進(jìn)程資源空間;
所述運(yùn)行狀態(tài)恢復(fù)單元M4 3與進(jìn)程查找單元M41和資源空間切換單元M4 2 連接,用于恢復(fù)所述進(jìn)程的運(yùn)行狀態(tài);
所述代碼執(zhí)行單元M44與進(jìn)程查找單元M41和資源空間切換單元M42連 接,用于執(zhí)行所述進(jìn)程的代碼。
圖8給出了本發(fā)明 一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例三示意圖,本實(shí)施例除了包括裝置實(shí)施例一的結(jié)構(gòu)特征外,還包括代理中斷
服務(wù)模塊M5,與進(jìn)程模塊M2和代理線程模塊M3連接,用于在接收到中斷時(shí), 檢查當(dāng)前運(yùn)行的是進(jìn)程還是線程,如果是錢程則執(zhí)行多線程系統(tǒng)的中斷服務(wù) 程序,如果是進(jìn)程則將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到所述進(jìn)程的進(jìn)程控制塊中, 將進(jìn)程使用的處理器資源轉(zhuǎn)讓給所述進(jìn)程對(duì)應(yīng)的代理線程,并執(zhí)行多線程系 統(tǒng)的中斷服務(wù)程序。
所述檢查當(dāng)前運(yùn)行的是進(jìn)程還是線程具體可以根據(jù)以下方法判斷檢查 中斷到達(dá)時(shí)處理器保存的中斷返回地址,該地址就是處理器在中斷產(chǎn)生的時(shí) 刻正在執(zhí)行的指令的地址,如果該地址位于進(jìn)程的進(jìn)程內(nèi)存空間范圍之外, 則認(rèn)為當(dāng)前被中斷的是線程,進(jìn)程內(nèi)存空間可以在創(chuàng)建進(jìn)程時(shí)產(chǎn)生,也可以 在進(jìn)程執(zhí)行的過程中根據(jù)需要產(chǎn)生,具體由進(jìn)程資源隔離切換技術(shù),如進(jìn) 程內(nèi)存頁(yè)表、進(jìn)程文件表等技術(shù)實(shí)現(xiàn)進(jìn)程內(nèi)存空間的分配、隔離與切換。
本實(shí)施例除了可以在裝置實(shí)施例一的基礎(chǔ)上進(jìn)行上述擴(kuò)展外,還可以在 裝置實(shí)施例二的基礎(chǔ)上進(jìn)行上述擴(kuò)展。
圖9給出了本發(fā)明一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置實(shí)施例四 示意圖,本實(shí)施例除了包括裝置實(shí)施例三的結(jié)構(gòu)特征外,還包括進(jìn)程結(jié)束 模塊M6,與進(jìn)程模塊M2和代理線程模塊M3連接,用于在接收到殺死進(jìn)程的 命令后,查找所述進(jìn)程對(duì)應(yīng)的代理線程;終止所述代理線程;刪除所述代理 線程;刪除系統(tǒng)中與所述進(jìn)程相關(guān)的表項(xiàng);釋放所述進(jìn)程占用的資源。
本實(shí)施例除了可以在裝置實(shí)施例三的基礎(chǔ)上進(jìn)行上述擴(kuò)展外,還可以在 裝置實(shí)施例一或裝置實(shí)施例二的基礎(chǔ)上進(jìn)行上述擴(kuò)展。 '
圖IO給出了本發(fā)明一種實(shí)現(xiàn)進(jìn)程支持的多線程系統(tǒng)實(shí)施例示意圖,包括 上述裝置實(shí)施例一至裝置實(shí)施四例所述的任一裝置,還包括調(diào)度器模塊M7和 原有中斷服務(wù)模塊M8;
以所述多線程系統(tǒng)包括裝置實(shí)施例四為例,
所述調(diào)度器模塊M7與資源分配模塊M4和代理中斷服務(wù)模塊M5連接,用于進(jìn)行代理線程的調(diào)度和處理器資源的分配;
所述原有中斷服務(wù)模塊M8與代理中斷服務(wù)模塊M5和調(diào)度器模塊M7連 接,用于進(jìn)行線程中斷響應(yīng)。
本發(fā)明通過創(chuàng)建代理線程的方式由線程代替進(jìn)程參加調(diào)度活動(dòng),使得原 有系統(tǒng)的調(diào)度器仍然只需要負(fù)責(zé)多線程調(diào)度,因而不需要對(duì)調(diào)度器進(jìn)行任何 修改。同時(shí)由于調(diào)度器沒有變化,系統(tǒng)中原有線程的調(diào)度行為也不會(huì)發(fā)生任 何改變,原有軟件模塊仍然在多線程環(huán)境下運(yùn)行。因此原有系統(tǒng)中各軟件模 塊也不需要因?yàn)檫M(jìn)程的引入而做任何修改。這樣就達(dá)到了在不改動(dòng)原有系統(tǒng) 的前提下實(shí)現(xiàn)進(jìn)程支持的目的,對(duì)原系統(tǒng)影響最小。
本發(fā)明使用代理線程代替進(jìn)程參與舊有系統(tǒng)中的調(diào)度活動(dòng)。由于代理線 程的存在,進(jìn)程對(duì)原有系統(tǒng)完全屏蔽不可見,原有系統(tǒng)中的原有部分不需要 做任何修訂,使得本發(fā)明實(shí)施起來(lái)工作量小、風(fēng)險(xiǎn)低,因而易于實(shí)施。而由 于代理線程的調(diào)度活動(dòng)仍然由原有系統(tǒng)的調(diào)度器實(shí)施,本發(fā)明實(shí)施時(shí)也不需 要關(guān)心原有系統(tǒng)的調(diào)度策略,因此可以適用于任何嵌入式多線程操作系統(tǒng), 通用性好。
由代理線程負(fù)責(zé)將其獲得的處理器資源轉(zhuǎn)讓給進(jìn)程,實(shí)現(xiàn)進(jìn)程的處理器 資源分配,從進(jìn)程的角度來(lái)看,進(jìn)程也感知不到代理線程的存在。因此本發(fā) 明對(duì)進(jìn)程屏蔽了原有系統(tǒng)的線程調(diào)度細(xì)節(jié),呈現(xiàn)給進(jìn)程的仍然是一個(gè)傳統(tǒng)意 義上的多進(jìn)程運(yùn)行環(huán)境,對(duì)進(jìn)程端的軟件開發(fā)沒有特殊要求,兼容性好。
本發(fā)明可以在不更改原有系統(tǒng)原有軟件代碼的基礎(chǔ)上為原有系統(tǒng)的 多線程操作系統(tǒng)添加進(jìn)程支持功能。且本發(fā)明提出的方案可以適用于目前 所有主流多線程嵌入式操作系統(tǒng),如Nucleus PLUS、 VxWorks等,通用性 好。具體實(shí)施時(shí)改動(dòng)工作量小、風(fēng)險(xiǎn)低、成本低。并且能夠完整保留原有 系統(tǒng)原有代碼,極大地延長(zhǎng)了舊有系統(tǒng)的生命周期。
最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其 限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的才支術(shù)方案進(jìn)4亍修改,或 者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技
術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
權(quán)利要求
1.一種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的方法,其特征在于,所述方法包括創(chuàng)建進(jìn)程;創(chuàng)建所述進(jìn)程對(duì)應(yīng)的代理線程;當(dāng)所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器資源轉(zhuǎn)讓給所述代理線程對(duì)應(yīng)的進(jìn)程。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將所述處理器資源分 配給所述代理線程對(duì)應(yīng)的進(jìn)程具體為查找所述代理線程對(duì)應(yīng)的進(jìn)程; 切換到所述進(jìn)程的進(jìn)程資源空間; 恢復(fù)所述進(jìn)程的運(yùn)行狀態(tài); 執(zhí)行所述進(jìn)程的代碼。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,還包括 在接收到中斷時(shí),檢查當(dāng)前運(yùn)行的是進(jìn)程還是線程,如果是線程則執(zhí)行多線程系統(tǒng)的中斷服務(wù)程序,如果是進(jìn)程則將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到所 述進(jìn)程的進(jìn)程控制塊中,將進(jìn)程使用的處理器資源轉(zhuǎn)讓給所述進(jìn)程對(duì)應(yīng)的代 理線程,并執(zhí)行多線程系統(tǒng)的中斷服務(wù)程序。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括在接收到殺死進(jìn) 程的命令后,查找所述進(jìn)程對(duì)應(yīng)的代理線程;終止所述代理線程;刪除所述 代理線程;刪除與所述進(jìn)程相關(guān)的信息;釋放所述進(jìn)程占用的資源。
5. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述創(chuàng)建進(jìn)程之后還包括對(duì)所述進(jìn)程分配進(jìn)程編號(hào),并在進(jìn)程列表中 記錄所述進(jìn)程與進(jìn)程編號(hào)的對(duì)應(yīng)關(guān)系;所述創(chuàng)建所述進(jìn)程對(duì)應(yīng)的代理線程之后還包括所述代理線程記錄所述進(jìn)程的進(jìn)程編號(hào);所述查找所述代理線程對(duì)應(yīng)的進(jìn)程具體為根據(jù)進(jìn)程編號(hào)查找所述代理 線程對(duì)應(yīng)的進(jìn)程。
6. —種在多線程系統(tǒng)中實(shí)現(xiàn)進(jìn)程支持的裝置,其特征在于,包括創(chuàng)建模 塊、進(jìn)程模塊、代理線程模塊和資源分配模塊;所述創(chuàng)建模塊用于創(chuàng)建進(jìn)程,以及所述進(jìn)程對(duì)應(yīng)的代理線程; 所述進(jìn)程模塊與創(chuàng)建模塊連接,用于維護(hù)進(jìn)程相關(guān)信息; 所述代理線程模塊與創(chuàng)建模塊連接,用于維護(hù)代理線程相關(guān)信息; 所述資源分配模塊與創(chuàng)建模塊、進(jìn)程模塊和代理線程;漠塊連接,用于在所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器資源轉(zhuǎn)讓給所述代理線程對(duì)應(yīng)的進(jìn)程。
7. 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述資源分配模塊包括進(jìn) 程查找單元、資源空間切換單元、運(yùn)行狀態(tài)恢復(fù)單元和代碼執(zhí)行單元;所述進(jìn)程查找單元用于在所述代理線程獲得調(diào)度器分配的處理器資源 后,查找所述代理線程對(duì)應(yīng)的進(jìn)程;所述資源空間切換單元與進(jìn)程查找單元連接,用于切換到所述進(jìn)程的進(jìn) 程資源空間;所述運(yùn)行狀態(tài)恢復(fù)單元與進(jìn)程查找單元和資源空間切換單元連接,用于 恢復(fù)所述進(jìn)程的運(yùn)行狀態(tài);所述代碼執(zhí)行單元與進(jìn)程查找單元和資源空間切換單元連接,用于執(zhí)行 所述進(jìn)程的代碼。
8. 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,還包括代理中斷服務(wù) 模塊,與進(jìn)程模塊和代理線程模塊連接,用于在接收到中斷時(shí),檢查當(dāng)前運(yùn) 行的是進(jìn)程還是線程,如果是線程則執(zhí)行多線程系統(tǒng)的中斷服務(wù)程序,如果 是進(jìn)程則將當(dāng)前進(jìn)程的運(yùn)行狀態(tài)保存到所述進(jìn)程的進(jìn)程控制塊中,將進(jìn)程使 用的處理器資源轉(zhuǎn)讓給所述進(jìn)程對(duì)應(yīng)的代理線程,并執(zhí)行多線程系統(tǒng)的中斷服務(wù)程序。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,還包括進(jìn)程結(jié)束模塊,與 進(jìn)程模塊和代理線程模塊連接,用于在接收到殺死進(jìn)程的命令后,查找所述進(jìn)程對(duì)應(yīng)的代理線程;終止所述代理線程;刪除所述代理線程;刪除系統(tǒng)中 與所述進(jìn)程相關(guān)的表項(xiàng);釋放所述進(jìn)程占用的資源。
10. —種實(shí)現(xiàn)進(jìn)程支持的多線程系統(tǒng),其特征在于,包括權(quán)利要求6-9 所述的任一裝置,還包括調(diào)度器模塊和原有中斷服務(wù)模塊;所述調(diào)度器模塊用于進(jìn)行代理線程的調(diào)度和處理器資源的分配; 所述原有中斷服務(wù)模塊用于進(jìn)行線程中斷響應(yīng)。
全文摘要
本發(fā)明提供了一種實(shí)現(xiàn)進(jìn)程支持的方法、裝置和多線程系統(tǒng)。所述方法包括創(chuàng)建進(jìn)程;創(chuàng)建所述進(jìn)程對(duì)應(yīng)的代理線程;當(dāng)所述代理線程獲得調(diào)度器分配的處理器資源后,將所述處理器資源分配給所述代理線程對(duì)應(yīng)的進(jìn)程。本發(fā)明可以在不需要對(duì)原有多線程系統(tǒng)的操作系統(tǒng)和各軟件模塊做任何修改的情況下有效實(shí)現(xiàn)對(duì)進(jìn)程的支持。
文檔編號(hào)G06F9/46GK101556545SQ200910084359
公開日2009年10月14日 申請(qǐng)日期2009年5月22日 優(yōu)先權(quán)日2009年5月22日
發(fā)明者丁兆杰 申請(qǐng)人:北京星網(wǎng)銳捷網(wǎng)絡(luò)技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
保康县| 莲花县| 恩平市| 宁德市| 教育| 二连浩特市| 隆安县| 浠水县| 繁峙县| 海南省| 景宁| 永寿县| 芜湖县| 耒阳市| 务川| 赤水市| 贡嘎县| 泗阳县| 承德县| 莫力| 河曲县| 西安市| 麻阳| 建湖县| 鲁甸县| 巫山县| 汝城县| 铁岭市| 宣威市| 汕头市| 崇阳县| 汉寿县| 毕节市| 镇宁| 墨竹工卡县| 织金县| 正镶白旗| 溧水县| 马龙县| 乐都县| 乐安县|