本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種處理器調(diào)度方法及系統(tǒng)。
背景技術(shù):
雙系統(tǒng)智能終端可以同時運行2個獨立的系統(tǒng)(例如安全系統(tǒng)和標準系統(tǒng)),兩個系統(tǒng)的應(yīng)用也都是獨立的。這兩個系統(tǒng)都是運行在虛擬層之上的,并且該虛擬層進行處理器調(diào)度時候,所采用的處理器調(diào)度算法是基于進程優(yōu)先級的調(diào)度算法。進程處于生存周期里有三種狀態(tài):就緒、執(zhí)行和阻塞,這三種狀態(tài)之間的切換都由進程調(diào)度程序控制。進程通常被定義為一個正在運行的程序的實例,它是資源分配的單位,進程可以支持多個線程,一個進程中的多個線程共享相同的內(nèi)存地址空間。
因為現(xiàn)有的雙系統(tǒng)智能終端是基于進程優(yōu)先級的調(diào)度算法,而進程間切換會比較消耗資源,所以進程間切換頻繁的話,效率會比較差,處理器資源的利用率就不會很高。并且當最高優(yōu)先級任務(wù)在運行時,它將持續(xù)占有CPU直到結(jié)束或阻塞,否則其他任務(wù)無法獲得運行機會,因此系統(tǒng)的實時性會比較差。
綜上可知,現(xiàn)有技術(shù)在實際使用上顯然存在不便與缺陷,所以有必要加以改進。
技術(shù)實現(xiàn)要素:
針對上述的缺陷,本發(fā)明的目的在于提供一種處理器調(diào)度方法及系統(tǒng),其提升了不同和相同優(yōu)先級線程之間在占有CPU的切換效率,也兼顧了線程間占有處理器資源的公平性,系統(tǒng)實時性高。
為了實現(xiàn)上述目的,本發(fā)明提供一種處理器調(diào)度方法,所述方法包括如下步驟:
接收線程優(yōu)先級或時間片修改指令;
修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程;
當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將所述處于就緒狀態(tài)且優(yōu)先 級最高的線程按照其時間片長短在處理器中執(zhí)行。
根據(jù)本發(fā)明的處理器調(diào)度方法,所述修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程的步驟之后還包括:
判斷所述處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比所述當前處于運行狀態(tài)的線程的優(yōu)先級高;
若是則所述處理器內(nèi)核中斷執(zhí)行所述當前處于運行狀態(tài)的線程,否則等待所述當前處于運行狀態(tài)的線程的時間片結(jié)束。
根據(jù)本發(fā)明的處理器調(diào)度方法,所述方法還包括:
在所述處于就緒狀態(tài)且優(yōu)先級最高的線程具有多個時,按照各線程的時間片比例輪流在所述處理器中執(zhí)行。
根據(jù)本發(fā)明的處理器調(diào)度方法,判斷所述處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比所述當前處于運行狀態(tài)的線程的優(yōu)先級高的步驟之前還包括:
檢查函數(shù)是否被線程調(diào)度以及所述處理器內(nèi)核是否允許線程調(diào)度,若是則計算處于就緒狀態(tài)的線程的最高優(yōu)先級。
根據(jù)本發(fā)明的處理器調(diào)度方法,修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程的步驟包括:
判斷待修改優(yōu)先級的線程的狀態(tài);
若所述待修改優(yōu)先級的線程為就緒狀態(tài),則在修改所述線程的優(yōu)先級后獲取處于就緒狀態(tài)且優(yōu)先級最高的線程;
若所述待修改優(yōu)先級的線程不為就緒狀態(tài),則等待當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)。
本發(fā)明相應(yīng)提供一種處理器調(diào)度系統(tǒng),所述系統(tǒng)包括:
指令接收模塊,用于接收線程優(yōu)先級或時間片修改指令;
處理模塊,用于修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程;
執(zhí)行模塊,用于當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將所述處于就緒狀態(tài)且優(yōu)先級最高的線程按照其時間片長短在處理器中執(zhí)行。
根據(jù)本發(fā)明的處理器調(diào)度系統(tǒng),所述處理模塊還包括第一判斷單元,所述第一判斷單元用于判斷所述處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比 所述當前處于運行狀態(tài)的線程的優(yōu)先級高;
所述執(zhí)行模塊還用于所述處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級比所述當前處于運行狀態(tài)的線程的優(yōu)先級高時,請求所述處理器內(nèi)核中斷執(zhí)行所述當前處于運行狀態(tài)的線程,否則等待所述當前處于運行狀態(tài)的線程的時間片結(jié)束。
根據(jù)本發(fā)明的處理器調(diào)度系統(tǒng),所述執(zhí)行模塊還用于在所述處于就緒狀態(tài)且優(yōu)先級最高的線程具有多個時,按照各線程的時間片比例輪流在所述處理器中執(zhí)行。
根據(jù)本發(fā)明的處理器調(diào)度系統(tǒng),所述處理模塊還包括檢查單元,用于檢查函數(shù)是否被線程調(diào)度以及所述處理器內(nèi)核是否允許線程調(diào)度,若是所述處理模塊則計算處于就緒狀態(tài)的線程的最高優(yōu)先級。
根據(jù)本發(fā)明的處理器調(diào)度系統(tǒng),所述處理模塊還包括第二判斷單元,所述第二判斷單元用于判斷待修改優(yōu)先級的線程的狀態(tài);
所述執(zhí)行模塊還用于在所述待修改優(yōu)先級的線程為就緒狀態(tài)時,在修改所述線程的優(yōu)先級后獲取處于就緒狀態(tài)且優(yōu)先級最高的線程;
所述執(zhí)行模塊還用于在所述待修改優(yōu)先級的線程不為就緒狀態(tài)時,則等待當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)。
本發(fā)明通過修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程,當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將處于就緒狀態(tài)且優(yōu)先級最高的線程按照其時間片長短在處理器中執(zhí)行。本發(fā)明融合了優(yōu)先級強制機制和時間片輪轉(zhuǎn)機制,在不同優(yōu)先級的線程間采用優(yōu)先級搶占機制,在相同優(yōu)先級線程間采用時間片輪轉(zhuǎn)機制,因為是基于線程的調(diào)度機制,所以線程間切換所消耗的資源很小,因此,其提升了不同和相同優(yōu)先級線程之間在占有CPU的切換效率,也兼顧了線程間占有處理器資源的公平性,系統(tǒng)實時性高。
附圖說明
圖1是本發(fā)明一種處理器調(diào)度系統(tǒng)的原理框圖;
圖2是本發(fā)明一種實施例中動態(tài)修改線程優(yōu)先級的流程圖;
圖3是本發(fā)明一種實施例中動態(tài)修改線程時間片的流程圖;
圖4是本發(fā)明一種處理器調(diào)度方法的流程圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,本發(fā)明提供一種處理器調(diào)度系統(tǒng)100,系統(tǒng)100可應(yīng)用于雙系統(tǒng)智能終端中,該智能終端可以是手機、PDA(Personal Digital Assistant,個人數(shù)字助理)、平板電腦等通信終端。該系統(tǒng)100可以是內(nèi)置于移動終端的軟件單元,硬件單元或軟硬件結(jié)合單元。該系統(tǒng)100包括指令接收模塊10、處理模塊20以及執(zhí)行模塊30。
指令接收模塊10,用于接收線程優(yōu)先級或時間片修改指令。線程的優(yōu)先級和時間片是在建立的時候分配的,但線程在程序運行期間動態(tài)實時修改優(yōu)先級和時間片。例如在進入代碼的關(guān)鍵部分之前(在此期間,線程常常使用由鎖定控制的共享資源),線程常常請求提高優(yōu)先級,以降低在執(zhí)行關(guān)鍵部分時線程被搶險的可能性,當線程完成代碼的關(guān)鍵部分之后,鎖定被釋放,線程的優(yōu)先級被操作系統(tǒng)重置。在雙系統(tǒng)移動終端的安全系統(tǒng)和標準系統(tǒng)同時有多個進程存在的情況下,會進行線程調(diào)度修改優(yōu)先級和時間片。線程調(diào)度是指按照特定機制為多個線程分配處理器的使用權(quán)。
處理模塊20,用于修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程。在修改某個線程的優(yōu)先級后,線程緩沖池內(nèi)的線程優(yōu)先級排序會發(fā)生變化,此時需要選擇處于就緒狀態(tài)且優(yōu)先級最高的線程待執(zhí)行。
執(zhí)行模塊30,用于當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將處于就緒狀態(tài)且優(yōu)先級最高的線程按照其時間片長短在處理器中執(zhí)行。在處于就緒狀態(tài)且優(yōu)先級最高的線程具有多個時,執(zhí)行模塊30按照各線程的時間片比例輪流在處理器中執(zhí)行。具體的,每一個線程具有一時間片,其占用內(nèi)核獨占區(qū)的時間由該時間片決定。當前處于運行狀態(tài)的線程時間片結(jié)束時退出處理器的內(nèi)核獨占區(qū),處于就緒狀態(tài)且優(yōu)先級最高的線程進入內(nèi)核獨占區(qū)占用處理器資源。
處理模塊20還包括第一判斷單元21,第一判斷單元21用于判斷處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比當前處于運行狀態(tài)的線程的優(yōu)先級高;執(zhí)行模塊30還用于處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級比當前處于 運行狀態(tài)的線程的優(yōu)先級高時,請求處理器內(nèi)核中斷執(zhí)行當前處于運行狀態(tài)的線程,否則等待當前處于運行狀態(tài)的線程的時間片結(jié)束。具體的,每個線程被分配一個優(yōu)先級,優(yōu)先級高的線程只要進入了就緒態(tài),就可以立即執(zhí)行。除了優(yōu)先級最高的那個線程外,其他線程在執(zhí)行過程中隨時都可能停下來,讓給優(yōu)先級更高的線程先執(zhí)行,從而能保證系統(tǒng)的實時性。
處理模塊20還包括檢查單元22,檢查單元22用于檢查函數(shù)是否被線程調(diào)度以及處理器內(nèi)核是否允許線程調(diào)度,若是處理模塊20則計算處于就緒狀態(tài)的線程的最高優(yōu)先級。
處理模塊20還包括第二判斷單元23,第二判斷單元用于判斷待修改優(yōu)先級的線程的狀態(tài),執(zhí)行模塊30還用于在待修改優(yōu)先級的線程為就緒狀態(tài)時,在修改線程的優(yōu)先級后獲取處于就緒狀態(tài)且優(yōu)先級最高的線程。執(zhí)行模塊30還用于在待修改優(yōu)先級的線程不為就緒狀態(tài)時,則等待當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)。具體的,線程包括5個狀態(tài):新建狀態(tài)、就緒狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)。新建狀態(tài)是指新創(chuàng)建了線程對象。就緒狀態(tài)是該線程變得可運行,等待獲取處理器的使用權(quán)。運行狀態(tài)是指獲取了處理器使用權(quán)正在執(zhí)行程序代碼。阻塞狀態(tài)是指線程因為某種原因放棄CPU使用權(quán)暫時停止運行。死亡狀態(tài)是指線程執(zhí)行完了或者因異常退出,該線程結(jié)束生命周期。對于就緒狀態(tài)的優(yōu)先級被修改后,將會可能出現(xiàn)就緒狀態(tài)的線程優(yōu)先級比正在運行線程的優(yōu)先級高而需要處理器進行線程調(diào)度將正在運行的線程退出內(nèi)核獨占區(qū),因此需要計算處于就緒狀態(tài)優(yōu)先級最高的線程;而對于其他狀態(tài)的線程修改了優(yōu)先級則不需要處理器進行線程調(diào)度,只有就緒狀態(tài)線程才能進入運行狀態(tài),因此僅僅就緒狀態(tài)的線程修改了優(yōu)先級后才會發(fā)生線程調(diào)度。
本發(fā)明融合了優(yōu)先級強制機制和時間片輪轉(zhuǎn)機制,在不同優(yōu)先級的線程間采用優(yōu)先級搶占機制,在相同優(yōu)先級線程間采用時間片輪轉(zhuǎn)機制,也即首先根據(jù)優(yōu)先級的高低進行線程調(diào)度,在優(yōu)先級相同的情況先才會根據(jù)時間片進行線程調(diào)度。因為本發(fā)明是基于線程的調(diào)度機制,線程間切換所消耗的資源很小,其提升了不同和相同優(yōu)先級線程之間在占有CPU的切換效率,也兼顧了線程間占有處理器資源的公平性,系統(tǒng)實時性高。
圖2是本發(fā)明一種實施例中動態(tài)修改線程優(yōu)先級的流程圖。該流程包括:
步驟S201,判斷線程是否允許被修改優(yōu)先級。若是則進入步驟S202,否則 直接返回。默認情況下線程優(yōu)先級是可以修改的,但是可以修改參數(shù),使其優(yōu)先級不可修改。所以,默認情況下線程允許修改優(yōu)先級。
步驟S202,內(nèi)核進入獨占區(qū)。程序中有調(diào)用內(nèi)核代碼,并且調(diào)用部分處于獨占區(qū)。
步驟S203,判斷線程是否處于就緒狀態(tài)。若是則進入步驟S205,否則進入步驟S204。具體的判斷待修改優(yōu)先級的線程是否為就緒狀態(tài)。線程狀態(tài)包括:新建狀態(tài)、就緒狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)。
步驟S204,直接修改線程的優(yōu)先級,并進入步驟S210。對于新建狀態(tài)、運行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)的線程可以直接修改優(yōu)先級。并且處于阻塞狀態(tài)的線程有單獨的函數(shù)來處理,可以使得處于阻塞狀態(tài)的線程快速進入就緒狀態(tài)。由于僅處于就緒狀態(tài)的線程才有可能進入運行狀態(tài),其他狀態(tài)只有先進入就緒狀態(tài)才可能進入運行狀態(tài),因此修改了非就緒狀態(tài)的線程的優(yōu)先級后直接等待內(nèi)核退出獨占區(qū)。
步驟S205,修改就緒狀態(tài)線程的優(yōu)先級。
步驟S206,判斷函數(shù)是否被線程調(diào)用且內(nèi)核是否允許線程調(diào)度。若是則進入步驟S207,否則進入步驟S210。
步驟S207,獲取處于就緒狀態(tài)線程的最高優(yōu)先級。在本發(fā)明中首先判斷函數(shù)是否被線程調(diào)用且內(nèi)核是否允許線程調(diào)度,在均允許的情況下才進行計算最高優(yōu)先級,計算最高優(yōu)先級的目的就是為了進行線程調(diào)度,若不允許進行線程調(diào)度則沒有進行優(yōu)先級計算的必要。
步驟S208,判斷處于最高就緒優(yōu)先級是否比當前運行線程的優(yōu)先級高。若是則進入步驟S209,否則進入步驟S210。具體的,判斷處于最高優(yōu)先級的就緒狀態(tài)線程的優(yōu)先級是否比當前運行的線程的優(yōu)先級高。
步驟S209,請求線程調(diào)度。最高優(yōu)先級的就緒狀態(tài)線程的優(yōu)先級比當前運行的線程的優(yōu)先級高,則向處理器內(nèi)核申請線程調(diào)度,使正在運行的線程退出獨占區(qū),讓給優(yōu)先級更高的線程先執(zhí)行。最高優(yōu)先級的就緒狀態(tài)線程的優(yōu)先級比當前運行的線程的優(yōu)先級低,表示該優(yōu)先級低的線程不被調(diào)度。
步驟S210,內(nèi)核退出獨占區(qū)。內(nèi)核代碼退出獨占區(qū)后可能發(fā)生中斷,在中斷退出時可能發(fā)生線程調(diào)度。
圖3是本發(fā)明一種實施例中動態(tài)修改線程時間片的流程圖。該流程包括:
步驟S301,內(nèi)核進入獨占區(qū)。
步驟S302,判斷線程時間片長度是否可修改。若是則進入步驟S303,否則進入步驟S304。
步驟S303,修改線程時間片長度。
步驟S204,內(nèi)核退出獨占區(qū)。
圖4是本發(fā)明一種處理器調(diào)度方法的流程圖,該方法通過如圖1所示的系統(tǒng)100實現(xiàn),該方法包括:
步驟S401,接收線程優(yōu)先級或時間片修改指令。本步驟通過指令接收模塊10實現(xiàn)。
步驟S402,修改線程的優(yōu)先級或時間片并獲取處于就緒狀態(tài)且優(yōu)先級最高的線程。本步驟通過處理模塊20實現(xiàn)。
步驟S403,當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將處于就緒狀態(tài)且優(yōu)先級最高的線程按照其時間片長短在處理器中執(zhí)行。本步驟通過執(zhí)行模塊30實現(xiàn)。
優(yōu)選的是,該方法還包括:在處于就緒狀態(tài)且優(yōu)先級最高的線程具有多個時,按照各線程的時間片比例輪流在處理器中執(zhí)行。
優(yōu)選的是,步驟S402之后還包括:判斷處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比當前處于運行狀態(tài)的線程的優(yōu)先級高;若是則處理器內(nèi)核中斷執(zhí)行當前處于運行狀態(tài)的線程,否則等待當前處于運行狀態(tài)的線程的時間片結(jié)束。判斷處于就緒狀態(tài)且優(yōu)先級最高的線程的優(yōu)先級是否比當前處于運行狀態(tài)的線程的優(yōu)先級高的步驟之前還包括:檢查函數(shù)是否被線程調(diào)度以及處理器內(nèi)核是否允許線程調(diào)度,若是則計算處于就緒狀態(tài)的線程的最高優(yōu)先級。
優(yōu)選的是,步驟S402包括:判斷待修改優(yōu)先級的線程的狀態(tài);若待修改優(yōu)先級的線程為就緒狀態(tài),則在修改線程的優(yōu)先級后獲取處于就緒狀態(tài)且優(yōu)先級最高的線程;若待修改優(yōu)先級的線程不為就緒狀態(tài),則等待當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)。
綜上所述,的線程,當前處于運行狀態(tài)的線程退出內(nèi)核獨占區(qū)時,將處于就緒狀態(tài)且優(yōu)先級最高的線程按照其時間片長短在處理器中執(zhí)行。本發(fā)明融合了優(yōu)先級強制機制和時間片輪轉(zhuǎn)機制,在不同優(yōu)先級的線程間采用優(yōu)先級搶占機制,在相同優(yōu)先級線程間采用時間片輪轉(zhuǎn)機制,因為是基于線程的調(diào)度機制, 所以線程間切換所消耗的資源很小,因此,其提升了不同和相同優(yōu)先級線程之間在占有CPU的切換效率,也兼顧了線程間占有處理器資源的公平性,系統(tǒng)實時性高。
當然,本發(fā)明還可有其它多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。