本發(fā)明涉及一種設(shè)計(jì)方法,特別是涉及一種多線程設(shè)計(jì)方法。
背景技術(shù):
BIOS(Basic Input Output System)是計(jì)算機(jī)運(yùn)行的第一個(gè)程序,該程序保存了電腦的詳細(xì)硬件信息,擔(dān)負(fù)著初始化計(jì)算機(jī)硬件,檢測硬件功能以及引導(dǎo)操作系統(tǒng)的作用。2000年,Intel公司發(fā)明了用以規(guī)范BIOS開發(fā)的可擴(kuò)展固件接口(Extensible Firmware Interface,EFI),用以規(guī)范PC固件體系結(jié)構(gòu)、接口和服務(wù)的建議標(biāo)準(zhǔn)。之后,業(yè)界多家著名公司制定了新的國際標(biāo)準(zhǔn)UEFI規(guī)范,基于UEFI規(guī)范的 BIOS又稱為UEFI BIOS。眾所周知多線程在多核系統(tǒng)上有很多的優(yōu)點(diǎn),但是由于多年前處理器只是單核,加上設(shè)計(jì)多線程的軟件產(chǎn)品是更為復(fù)雜,大多數(shù)產(chǎn)品包括最新的UEFI BIOS都是單線程的。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種多線程設(shè)計(jì)方法,其結(jié)構(gòu)簡單,實(shí)現(xiàn)多線程。
本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:一種多線程設(shè)計(jì)方法,其特征在于,其包括以下步驟:
步驟一,線程的狀態(tài)機(jī)設(shè)計(jì);
步驟二,硬件處理器的狀態(tài)機(jī)設(shè)計(jì);
步驟三,調(diào)度器的設(shè)計(jì)。
優(yōu)選地,所述步驟一包括以下步驟:線程被創(chuàng)建以后,該線程就成為默認(rèn)狀態(tài);隨后會(huì)被創(chuàng)建線程的函數(shù)插入到線程等待隊(duì)列中成為線程隊(duì)列等待狀態(tài);線程如果被調(diào)度,則該線程就會(huì)運(yùn)行起來,成為線程運(yùn)行狀態(tài);線程如果正在等待,同時(shí)又有取消的請求,那么調(diào)度器就會(huì)取消線程,該線程進(jìn)入到取消狀態(tài);最后線程處理完畢,或者直接調(diào)用線程服務(wù)中的退出函數(shù)達(dá)到退出狀態(tài)。
優(yōu)選地,所述步驟二的硬件處理器在多處理器服務(wù)的操作下能夠?qū)崿F(xiàn)關(guān)閉,開啟的狀態(tài);線程服務(wù)則可以利用處理器空閑的狀態(tài)來調(diào)度線程,并運(yùn)行。
優(yōu)選地,所述步驟三的調(diào)度器的訪問對象就是三十二個(gè)循環(huán)隊(duì)列構(gòu)成的數(shù)組;對于每一個(gè)特定的隊(duì)列,則每次都去詢問并執(zhí)行;每一個(gè)循環(huán)隊(duì)列在被調(diào)度的過程中是按照入隊(duì)的先后順序來調(diào)度的。
本發(fā)明的積極進(jìn)步效果在于:本發(fā)明結(jié)構(gòu)簡單,實(shí)現(xiàn)多線程,主要保障DXE驅(qū)動(dòng)程序加載的正確性和驅(qū)動(dòng)程序安裝服務(wù)的完整性,保證在DXE后期和BDS階段,其他驅(qū)動(dòng)使用的線程服務(wù)的合法無誤。
具體實(shí)施方式
本發(fā)明多線程服務(wù)庫是通過EFI驅(qū)動(dòng)在DXE階段加載后建立的標(biāo)準(zhǔn)的uEFI 協(xié)議實(shí)現(xiàn)。由于標(biāo)準(zhǔn)的EDK[5]并沒有提供創(chuàng)建這些服務(wù)程序的驅(qū)動(dòng),因此必須首先要開發(fā)建立多線程服務(wù)的EFI驅(qū)動(dòng)。最底層是真正的硬件平臺,也就是物理多核CPU。它是真實(shí)存在的物理設(shè)備,沒有被任何軟件抽象?;趗EFI的協(xié)議,實(shí)現(xiàn)了線程服務(wù)的調(diào)度、創(chuàng)建、取消、同步等工作。
本發(fā)明多線程設(shè)計(jì)方法包括以下步驟:
步驟一,線程的狀態(tài)機(jī)設(shè)計(jì),線程在調(diào)度器的協(xié)調(diào)下能夠正常地工作,關(guān)于線程的狀態(tài)切換,具體如下:線程被創(chuàng)建以后,該線程就成為默認(rèn)狀態(tài);隨后會(huì)被創(chuàng)建線程的函數(shù)插入到線程等待隊(duì)列中成為線程隊(duì)列等待狀態(tài);線程如果被調(diào)度,則該線程就會(huì)運(yùn)行起來,成為線程運(yùn)行狀態(tài);線程如果正在等待,同時(shí)又有取消的請求,那么調(diào)度器就會(huì)取消線程,該線程進(jìn)入到取消狀態(tài);最后線程處理完畢,或者直接調(diào)用線程服務(wù)中的退出函數(shù)達(dá)到退出狀態(tài)。
步驟二,硬件處理器的狀態(tài)機(jī)設(shè)計(jì),在線程的啟動(dòng),運(yùn)行,退出的過程中,線程的服務(wù)會(huì)對處理器做出不同的操作。有時(shí)候需要等待CPU,有時(shí)候需要啟動(dòng)CPU等,硬件處理器在多處理器服務(wù)的操作下能夠?qū)崿F(xiàn)關(guān)閉,開啟的狀態(tài);線程服務(wù)則可以利用處理器空閑的狀態(tài)來調(diào)度線程,并運(yùn)行。
步驟三,調(diào)度器的設(shè)計(jì),調(diào)度器在默認(rèn)情況下使用EFI_SCHED_FCFS。線程調(diào)度器是多線程服務(wù)的核心,調(diào)度器的訪問對象就是三十二個(gè)循環(huán)隊(duì)列構(gòu)成的數(shù)組;對于每一個(gè)特定的隊(duì)列,則每次都去詢問并執(zhí)行;每一個(gè)循環(huán)隊(duì)列在被調(diào)度的過程中是按照入隊(duì)的先后順序來調(diào)度的。在優(yōu)先級調(diào)度的時(shí)候,是按照在創(chuàng)建線程的時(shí)候,默認(rèn)的優(yōu)先級數(shù)來調(diào)度的。在調(diào)度器的內(nèi)部還有一個(gè)計(jì)數(shù)器,確保每次調(diào)度線程都是較高優(yōu)先級的。并且級別較低的線程等待時(shí)間超過規(guī)定時(shí)間,那么調(diào)度器會(huì)自動(dòng)提升低優(yōu)先級的線程優(yōu)先級數(shù)。
本發(fā)明采用多線程服務(wù)協(xié)議,多線程服務(wù)協(xié)議提供了一種比較通用的uEFI協(xié)議來完成多線程的各種工作,EFI_THREAD_SERVICES_PROTOCOL這個(gè)協(xié)議服務(wù)協(xié)議就是本論文開發(fā)的重中之重。在這個(gè)協(xié)議里面提供了所有多線程服務(wù)鎖需要的功能函數(shù)。
本發(fā)明采用以下設(shè)計(jì)原則:遵循uEFI 規(guī)范,對其他EFI組件不做修改。要做到更好的模塊化。本發(fā)明采用獨(dú)立的模塊,以Protocol的形式提供線程服務(wù),這樣才符合uEFI 的宗旨易于擴(kuò)展和升級。本發(fā)明保證以實(shí)現(xiàn)規(guī)定的順序加載EFI驅(qū)動(dòng),并保證驅(qū)動(dòng)程序的完整性。本發(fā)明保證EFI Shell命令,EFI應(yīng)用程序以及OS加載器的完整性。本發(fā)明保證多線程服務(wù)的可靠性,包括線程的創(chuàng)建、取消、終止。本發(fā)明保證多線程服務(wù)的可靠性,包括線程的創(chuàng)建、取消、終止。本發(fā)明保證多線程服務(wù)調(diào)度的合理性,包括避免調(diào)度可能出現(xiàn)的死鎖。本發(fā)明采用線程1:1模式來映射LWP,且保證每一個(gè)CPU內(nèi)核運(yùn)行一個(gè)線程。本發(fā)明通過研究uEFI BIOS的架構(gòu)和實(shí)現(xiàn)原理,具體實(shí)現(xiàn)了uEFI 環(huán)境下的多線程服務(wù),豐富并增強(qiáng)了uEFI 這個(gè)可擴(kuò)展接口的標(biāo)準(zhǔn)。該多線程服務(wù),可以提高應(yīng)用程序的性能,可以提高加快BIOS的啟動(dòng)速度,可以提高應(yīng)用程序的反應(yīng)速度等。因此,該多線程服務(wù)技術(shù)有很高的使用價(jià)值。
本發(fā)明多線程的優(yōu)勢在其他的操作系統(tǒng)下面已經(jīng)都得到了論證,那么下面主要介紹多線程的在uEFI 下的應(yīng)用,主要包括三個(gè)方面:
(一)uEFI 的快速啟動(dòng),最剛性的需求是WIN8對OS和BIOS的啟動(dòng)時(shí)間做了非常精確的定義。比如在筆記本電腦上,用SSD的情況下,必須要在2秒內(nèi)進(jìn)OS;臺式機(jī)則是4秒。這對于傳統(tǒng)的BIOS來說是一項(xiàng)很大的挑戰(zhàn)。顯然,多線程在這個(gè)方面表現(xiàn)是客觀的。不過目前,BIOS行業(yè)還沒有采用這一技術(shù)??梢灶A(yù)見的未來,在BIOS快速啟動(dòng)這一塊,多線程可以做出很多的貢獻(xiàn)。
(二)uEFI 應(yīng)用程序的性能提高,在uEFI 的環(huán)境下,現(xiàn)在已經(jīng)越來越多的普通的EFI應(yīng)用程序大量出現(xiàn)在研發(fā)部門和工廠部門。在市場上也出現(xiàn)了多種多樣的EFI應(yīng)用程序。尤其uEFI 在畫圖的方面原本就做了很多的提高。在用到Hii的時(shí)候,那么多線程顯得尤為有優(yōu)勢。純軟件的設(shè)計(jì)和操作,正是多線程的強(qiáng)項(xiàng)。
(三)uEFI 應(yīng)用程序的反應(yīng)速度提高,多線程能夠提高那些數(shù)量計(jì)算較多的反應(yīng)速度。比如現(xiàn)在很多大廠(HP, DELL等等),他們在主板出貨之前都會(huì)做嚴(yán)格的硬件診斷。而這些診斷程序都是在EFI SHELL下運(yùn)行的。其中不乏有大量數(shù)據(jù)處理的EFI應(yīng)用程序。那么,這個(gè)時(shí)候,多線程服務(wù)就派上用場了。
本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改型和改變。因此,本發(fā)明覆蓋了落入所附的權(quán)利要求書及其等同物的范圍內(nèi)的各種改型和改變。