專利名稱:命令同步的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于確定由進(jìn)程向一個(gè)或多個(gè)硬件處理單元發(fā)布的命令應(yīng)當(dāng)執(zhí)行的 順序的方法。本發(fā)明還涉及用于執(zhí)行此方法的計(jì)算設(shè)備。
背景技術(shù):
多數(shù)計(jì)算設(shè)備包括圖形用戶接口(⑶I),運(yùn)行在計(jì)算設(shè)備上的應(yīng)用通過圖形用戶 接口向用戶顯示內(nèi)容。某些應(yīng)用可以顯示在圖形上密集的圖像,這需要大量的處理能力。有 鑒于此,計(jì)算設(shè)備通常包括專門設(shè)計(jì)用于執(zhí)行基于圖形的進(jìn)程的硬件。對(duì)于任何硬件/軟件接口,客戶端應(yīng)用一般不被布置為直接指示硬件。相反,操作 系統(tǒng)通常包括用于圖形繪制的一個(gè)或多個(gè)硬件抽象層(HAL),其向客戶端應(yīng)用提供應(yīng)用編 程接口(API)。以此方式,可以對(duì)將客戶端應(yīng)用進(jìn)行編寫以與單個(gè)HAL接口連接,由此允許 客戶端應(yīng)用與不同的圖形硬件結(jié)合使用,而無需重寫應(yīng)用的接口代碼。工業(yè)標(biāo)準(zhǔn)HAL的兩 個(gè)示例是OpenGL ES和OpenVG。在某些情況下,單個(gè)HAL映射到單個(gè)硬件單元,并且計(jì)算設(shè)備可以包括多個(gè)HAL/ 硬件配對(duì)。備選地,單個(gè)硬件單元可以與多個(gè)不同的HAL相關(guān)聯(lián),每個(gè)HAL被布置用于執(zhí)行 不同的圖形功能。然而,HAL被映射,該映射對(duì)于最終用戶而言是透明的。在使用多個(gè)HAL時(shí),操作系統(tǒng)必須實(shí)現(xiàn)確保它們之間同步的機(jī)制。例如,如果利用 OpenVG HL來繪制2D圖像以便隨后在使用OpenGL ES HAL的3D環(huán)境中使用,則OpenVG HAL 必須在OpenGLES HAL使用所繪制的圖像之前,完成對(duì)2D圖像的繪制。如果系統(tǒng)沒有適當(dāng) 地同步HAL過程,則應(yīng)用可能致使損壞的圖像被顯示,由此導(dǎo)致不良的用戶體驗(yàn)。而且,實(shí) 際的圖形環(huán)境可能比僅僅兩個(gè)順序過程的情況要復(fù)雜得多,因此,在沒有同步的情況下計(jì) 算設(shè)備可能是不可用的??梢詫?duì)HAL操作進(jìn)行同步的一種方式允許操作系統(tǒng)使用系統(tǒng)存儲(chǔ)器作為緩沖區(qū)來控制HAL同步。然而,這通常是不適當(dāng)?shù)?,因?yàn)橛布僮鲗?duì)于用戶和操作系統(tǒng)而言應(yīng)當(dāng)是 透明的。此外,多數(shù)硬件具有其自己的緩沖區(qū)和串行化軟件,如果操作系統(tǒng)接管同步操作的 控制,則這些緩沖區(qū)和串行化軟件將是冗余的。優(yōu)選的是由硬件來處理多個(gè)HAL操作的同 步,因?yàn)檫@將允許操作系統(tǒng)關(guān)注于更為一般的處理需求。這種方法的有益結(jié)果還可以是線 程可以持續(xù)發(fā)布繪制命令,而無需等待相關(guān)HAL完成之前的命令。這將提高CPU正在處理 的操作系統(tǒng)進(jìn)程與圖形硬件之間的并行度。在現(xiàn)有技術(shù)中,通過優(yōu)化HAL特定的同步對(duì)象來提供硬件特定的同步是已知的。 在這種方法中,將用戶線程繪制命令直接傳遞到硬件驅(qū)動(dòng)器,這些命令在其中拖延,直到所 有之前的命令已經(jīng)執(zhí)行之時(shí)。這消除了操作系統(tǒng)使用戶線程在發(fā)布其命令之前進(jìn)行等待的 需要,并且較好地利用了由圖形硬件提供的硬件資源。該系統(tǒng)可以使用排隊(duì)來確保正確的 順序。然而,此類硬件特定同步的問題在于其不支持多個(gè)HAL之間的同步。提供可以在多個(gè)HAL之間共享的同步對(duì)象,這也是已知的。這種對(duì)象允許HAL等 待以執(zhí)行由特定線程發(fā)布的命令,直到另一 HAL完成了由另一線程命令的繪制任務(wù)。然而,這種透明HAL對(duì)象不支持由上述備選系統(tǒng)提供的硬件特定同步。上文描述的問題不限于用于圖形繪制的HAL;需要一種用于一般硬件單元的HAL 之間的同步的改進(jìn)機(jī)制。
發(fā)明內(nèi)容
在第一方面中,本發(fā)明提供一種用于確定由進(jìn)程向一個(gè)或多個(gè)硬件處理單元發(fā)布的命令應(yīng)當(dāng)執(zhí)行的順序的方法,所述方法包括確定所發(fā)布的命令是涉及僅僅一個(gè)硬件處 理單元還是涉及多于一個(gè)硬件處理單元;當(dāng)僅向一個(gè)硬件處理單元發(fā)布命令時(shí),允許該硬 件處理單元來確定其執(zhí)行順序;以及當(dāng)向不止一個(gè)硬件處理單元發(fā)布命令時(shí),在硬件處理 單元外部確定其執(zhí)行順序。在第二方面中,本發(fā)明提供用于執(zhí)行上述方法的計(jì)算機(jī)可讀指令。所述計(jì)算機(jī)可 讀指令可以描述操作系統(tǒng)。在第四方面中,本發(fā)明提供一種配置用于執(zhí)行上述方法的計(jì)算設(shè)備。
現(xiàn)在,將參考附圖,僅以示例的方式來描述本發(fā)明的實(shí)施方式。在附圖中圖1示出了一種數(shù)據(jù)處理系統(tǒng),在該系統(tǒng)中已選擇將在硬件圖形設(shè)備中執(zhí)行命令 同步。圖2示出了一種數(shù)據(jù)處理系統(tǒng),在該系統(tǒng)中已選擇將使用系統(tǒng)存儲(chǔ)器來執(zhí)行命令 同步。
具體實(shí)施例方式圖1示出了一種數(shù)據(jù)處理系統(tǒng),其示出了物理組件1和軟件組件2。系統(tǒng)的硬件組 件包括中央處理單元(CPU) 10、工作存儲(chǔ)器(例如,RAM) 11以及非易失性存儲(chǔ)器12 (例如, 硬盤或者只讀存儲(chǔ)器(ROM)),所有這些都由主總線13連接。非易失性存儲(chǔ)器存儲(chǔ)程序代 碼,其可由中央處理單元執(zhí)行,以使用工作存儲(chǔ)器11來實(shí)現(xiàn)操作系統(tǒng)和用戶應(yīng)用。用戶可 以借助于連接至鍵盤控制器15的小鍵盤14或者連接至鼠標(biāo)控制器16的諸如鼠標(biāo)150之 類的指示設(shè)備,來向系統(tǒng)提供輸入??梢越柚谕ㄓ脠D形硬件單元18和矢量圖形硬件單元 19來向顯示器17提供輸出。圖形硬件單元18和19每個(gè)都布置用于執(zhí)行圖形敏感的操作, 諸如圖像繪制。在軟件域2中,操作系統(tǒng)20提供接口,用戶應(yīng)用21、22可以借助于所述接口來與 計(jì)算設(shè)備的各種硬件組件通信。操作系統(tǒng)還包括多個(gè)硬件抽象層(HAL)。HAL布置用于為用戶應(yīng)用提供與圖形硬 件單元的接口。每個(gè)HAL布置用于使用圖形硬件單元之一來執(zhí)行特定的圖形功能。在這種 情況下,操作系統(tǒng)包括通用2D和3D圖形產(chǎn)生HAL 23,2D矢量圖形HAL 24以及3D圖形產(chǎn) 生HAL 25。通用2D和3D圖形產(chǎn)生HAL 23以及3D圖形產(chǎn)生HAL25使用通用圖形硬件單元 18,而2D矢量圖形HAL 24使用矢量圖形硬件單元19。用戶應(yīng)用可能需要控制顯示器17來呈現(xiàn)信息。為此,用戶應(yīng)用通常將借助于對(duì)一 個(gè)或多個(gè)HAL的API調(diào)用來發(fā)布適當(dāng)?shù)拿?。而且,每個(gè)應(yīng)用可以具有在操作系統(tǒng)20的監(jiān)管下運(yùn)行于CPU 10之上的一個(gè)或多個(gè)線程。這些線程可以獨(dú)立地向一個(gè)或多個(gè)HAL發(fā)布命令。某些用戶應(yīng)用可以布置用于執(zhí)行一系列圖形操作。例如,如果應(yīng)用需要產(chǎn)生3D圖 形以便顯示在顯示設(shè)備17上,該應(yīng)用可以產(chǎn)生包括兩個(gè)命令線程27、28的進(jìn)程26。這些線 程之一將生成針對(duì)通用2D和3D圖形產(chǎn)生HAL 23的命令,用以產(chǎn)生2D繪制的圖像。另一 線程將包括針對(duì)3D圖形產(chǎn)生HAL 25的命令,用以產(chǎn)生3D圖形。3D圖形可以通過操縱2D 繪制的圖像來生成。在創(chuàng)建進(jìn)程時(shí),操作系統(tǒng)產(chǎn)生同步對(duì)象29,其將控制對(duì)各HAL的訪問。 應(yīng)用為同步對(duì)象29提供如下信息,該信息指示該進(jìn)程的線程將使用哪些HAL,并且指示HAL 將如何使用進(jìn)程26。在線程向HAL發(fā)布命令之前向同步對(duì)象29提供該信息,這使得同步對(duì) 象29能夠在考慮優(yōu)化性能的情況下控制HAL操作。同步對(duì)象使用該信息的方式將取決于計(jì)算設(shè)備的硬件配置。在一個(gè)示例中,如果 同步對(duì)象29確定進(jìn)程將要使用的所有HAL都使用相同的硬件圖形單元,則同步對(duì)象29將 不會(huì)在操作系統(tǒng)級(jí)別實(shí)現(xiàn)對(duì)進(jìn)程HAL命令的同步,而是將留給硬件圖形單元來執(zhí)行同步。 然而,如果同步對(duì)象確定進(jìn)程將要使用的所有HAL使用不同的硬件圖形單元,則其將代之 以在操作系統(tǒng)級(jí)別實(shí)現(xiàn)對(duì)進(jìn)程HAL命令的同步。在上文描述的示例中,應(yīng)用需要產(chǎn)生3D圖形以便顯示在顯示設(shè)備17上。應(yīng)用產(chǎn) 生包括兩個(gè)命令線程的進(jìn)程。這些線程之一將生成針對(duì)通用2D和3D圖形產(chǎn)生HAL 23的 命令,用以產(chǎn)生2D繪制的圖像。另一線程將生成針對(duì)3D圖形產(chǎn)生HAL 23的命令,用以產(chǎn) 生3D圖形。在創(chuàng)建進(jìn)程時(shí),操作系統(tǒng)創(chuàng)建相應(yīng)的同步對(duì)象,并且應(yīng)用向該同步對(duì)象傳送定 義了該進(jìn)程將使用哪些HAL的信息。在此示例中,進(jìn)程將僅使用通用2D和3D圖形產(chǎn)生HAL 23以及3D圖形產(chǎn)生HAL 25。這兩個(gè)HAL都使用相同的硬件單元,也即,通用圖形硬件單元 18。同步對(duì)象認(rèn)識(shí)到這一情況,并且將同步的責(zé)任交給硬件單元18。這可以如下完成命令 通用圖形硬件單元18負(fù)責(zé)來自特定線程或者來自特定進(jìn)程或應(yīng)用的命令的執(zhí)行順序;或 者,如果通用圖形硬件單元18默認(rèn)地執(zhí)行這種串行化,則將不需要這種命令。進(jìn)程繼而可 以進(jìn)行到發(fā)布HAL命令,這些命令將由通用圖形硬件單元18來串行化。通用圖形硬件單元18可以使用硬件特定的串行化技術(shù)來同步進(jìn)程線程。例如,通 用圖形硬件單元可以布置用于使用序列化來串行化進(jìn)程線程命令。通用圖形硬件單元18 可以在RAM 11中或者在硬件單元18上的存儲(chǔ)器中實(shí)現(xiàn)隊(duì)列,由此將來自進(jìn)程的每個(gè)命令 接收到存儲(chǔ)器中并對(duì)其進(jìn)行排隊(duì),直到其確定應(yīng)當(dāng)執(zhí)行該命令為止。這意味著產(chǎn)生命令的 軟件進(jìn)程以及解釋命令并將其中繼給硬件的HAL,在輸出下一命令之前都無需等待硬件完 成之前的繪制任務(wù)。這提供了如下顯著優(yōu)點(diǎn)將透明HAL同步的責(zé)任從操作系統(tǒng)移到了圖 形硬件。在圖2中,進(jìn)程29被示為包括線程命令27、30,其針對(duì)涉及不同圖形硬件單元(例 如,矢量圖形硬件單元19和通用圖形硬件單元18)的HAL。與圖1中類似,應(yīng)用為同步對(duì)象 提供如下信息,該信息指示進(jìn)程的線程將使用哪些HAL,并指示HAL將如何使用進(jìn)程29。在 線程向HAL發(fā)布其命令之前向同步對(duì)象29提供該信息,這使得同步對(duì)象29能夠在考慮優(yōu) 化性能的情況下控制HAL操作。如果命令的性質(zhì)是使同步對(duì)象無法將對(duì)這些命令的同步的 所有控制轉(zhuǎn)載給硬件,則同步對(duì)象可以自己承擔(dān)同步這些命令的任務(wù)。在一個(gè)實(shí)施方式中,基于OS的同步對(duì)象可以使操作系統(tǒng)創(chuàng)建基于CPU的同步對(duì)象,該同步對(duì)象由硬件驅(qū)動(dòng)器來控制?;贑PU的同步對(duì)象將用來對(duì)CPU 10上運(yùn)行的應(yīng)用線程進(jìn)行同步,這些應(yīng)用線程可以獨(dú)立地向一個(gè)或多個(gè)HAL發(fā)布命令?;贑PU的同步對(duì) 象將對(duì)來自于在其監(jiān)管之下運(yùn)行于CPU上的線程的命令發(fā)布進(jìn)行同步,以確保這些命令按 照正確的順序執(zhí)行。為此,當(dāng)一個(gè)HAL正在處理來自進(jìn)程的一個(gè)基于CPU的線程的命令時(shí), 同步對(duì)象延遲從該進(jìn)程的其他基于CPU的線程向HAL的命令發(fā)布,直到該HAL信號(hào)通知基 于CPU的同步對(duì)象它已完成了處理它從該進(jìn)程接收到的命令為止。為此,同步對(duì)象可以使 得從該進(jìn)程的其他基于CPU的線程接收到命令被緩沖,直到其可以發(fā)布給HAL ;或者,同步 對(duì)象可以信號(hào)通知一個(gè)或多個(gè)基于CPU的線程停止發(fā)布命令,直到HAL已經(jīng)完成處理其發(fā) 出的命令。將會(huì)理解,盡管已經(jīng)在圖形硬件和圖形命令的上下文中描述了本發(fā)明,但是主要 的特征和優(yōu)點(diǎn)可以擴(kuò)展到其他硬件和命令類型。具體地,由不止一個(gè)編程接口訪問的任何 硬件單元可以利用本發(fā)明。示例包括音頻子系統(tǒng)、網(wǎng)絡(luò)接口卡和存儲(chǔ)硬件接口。由此,申請(qǐng)人在如下程度上公開了在此描述的每個(gè)獨(dú)立個(gè)體特征以及兩個(gè)或更多 此類特征的任意組合按照本領(lǐng)域技術(shù)人員的公知常識(shí),這些特征或者組合能夠基于作為 整體的本說明書而被實(shí)現(xiàn),不論此類特征或者特征組合是否解決了在此公開的任何問題, 并且不限制本發(fā)明的范圍。申請(qǐng)人指出本發(fā)明的各方面可以包括任何此類個(gè)體特征或者 特征的組合。根據(jù)上文描述,對(duì)于本領(lǐng)域技術(shù)人員而言易見的是,可以在本發(fā)明的范圍內(nèi)進(jìn) 行各種修改。
權(quán)利要求
一種用于確定由進(jìn)程向一個(gè)或多個(gè)硬件處理單元發(fā)布的命令應(yīng)當(dāng)執(zhí)行的順序的方法,所述方法包括確定所發(fā)布的命令是涉及僅僅一個(gè)硬件處理單元還是涉及多于一個(gè)硬件處理單元;當(dāng)僅向一個(gè)硬件處理單元發(fā)布所述命令時(shí),允許該硬件處理單元來確定其執(zhí)行順序;以及當(dāng)向不止一個(gè)硬件處理單元發(fā)布所述命令時(shí),在所述硬件處理單元外部確定其執(zhí)行順序。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括從所述進(jìn)程接收向其發(fā)布所述命令的硬件處理單元的指示, 其中所述確定是基于接收到的信息。
3.根據(jù)任一在前權(quán)利要求所述的方法,其中所述進(jìn)程是多線程的進(jìn)程。
4.根據(jù)任一在前權(quán)利要求所述的方法,其中在所述硬件處理單元外部確定所述執(zhí)行順 序包括使用中央處理單元來確定其執(zhí)行順序。
5.根據(jù)任一在前權(quán)利要求所述的方法,其中通過在所述硬件處理單元之間交換數(shù)據(jù), 來實(shí)現(xiàn)跨多個(gè)硬件處理單元的命令串行化。
6.根據(jù)任一在前權(quán)利要求所述的方法,其中所述硬件處理單元中的至少一個(gè)是圖形處 理單元。
7.根據(jù)任一在前權(quán)利要求所述的方法,其中所述進(jìn)程是多線程的進(jìn)程。
8.一種用于執(zhí)行根據(jù)任一在前權(quán)利要求所述的方法的計(jì)算機(jī)可讀指令。
9.根據(jù)權(quán)利要求8所述的計(jì)算機(jī)可讀指令,其描述了操作系統(tǒng)。
10.一種計(jì)算設(shè)備,配置用于執(zhí)行根據(jù)權(quán)利要求1至7中任意一項(xiàng)所述的方法。
11.根據(jù)權(quán)利要求10所述的計(jì)算設(shè)備,包括所述一個(gè)或多個(gè)硬件處理單元。
12.根據(jù)權(quán)利要求10或11所述的計(jì)算設(shè)備,包括應(yīng)用編程接口,進(jìn)程可以通過所述應(yīng) 用編程接口來向所述硬件處理單元發(fā)布命令。
13.根據(jù)權(quán)利要求10到12中任一項(xiàng)所述的計(jì)算設(shè)備,進(jìn)一步包括操作系統(tǒng),其中由所 述操作系統(tǒng)在所述硬件處理單元外部執(zhí)行對(duì)所述執(zhí)行順序的確定。
14.根據(jù)權(quán)利要求10到12中任一項(xiàng)所述的計(jì)算設(shè)備,進(jìn)一步包括系統(tǒng)存儲(chǔ)器,其中使 用所述系統(tǒng)存儲(chǔ)器在所述硬件處理單元外部執(zhí)行對(duì)所述執(zhí)行順序的確定。
15.根據(jù)權(quán)利要求10到13中任一項(xiàng)所述的計(jì)算設(shè)備,進(jìn)一步包括硬件同步組件,其用 于確定所述硬件處理單元執(zhí)行所述命令的順序。
全文摘要
基于是向僅僅一個(gè)還是向多于一個(gè)硬件處理單元發(fā)布命令,來確定由進(jìn)程向一個(gè)或多個(gè)硬件處理單元發(fā)布的命令應(yīng)當(dāng)執(zhí)行的順序。當(dāng)僅向一個(gè)硬件處理單元發(fā)布命令時(shí),允許該硬件處理單元自己來確定其執(zhí)行順序。然而,當(dāng)向不止一個(gè)硬件處理單元發(fā)布命令時(shí),在硬件處理單元外部確定其執(zhí)行順序。這尤其可用于調(diào)度由多線程的進(jìn)程所發(fā)布的命令的執(zhí)行。
文檔編號(hào)G06F9/46GK101802786SQ200880101426
公開日2010年8月11日 申請(qǐng)日期2008年7月31日 優(yōu)先權(quán)日2007年7月31日
發(fā)明者R·帕爾默 申請(qǐng)人:諾基亞公司