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

用于調(diào)度協(xié)處理器的處理的方法和系統(tǒng)的制作方法

文檔序號(hào):6601428閱讀:687來(lái)源:國(guó)知局
專利名稱:用于調(diào)度協(xié)處理器的處理的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)處理器,更具體而言涉及用于調(diào)度協(xié)處理器處理的硬件和軟 件。
背景技術(shù)
目前,許多計(jì)算機(jī)系統(tǒng)都包括協(xié)處理器,比如圖形處理單元(GPU)。有時(shí)候,協(xié)處理 器可以駐留在帶有諸如微處理器之類的中央處理器(CPU)的系統(tǒng)的主板上,而在另外一些 系統(tǒng)中,協(xié)處理器可以駐留在獨(dú)立的圖形卡上。協(xié)處理器在執(zhí)行其處理任務(wù)進(jìn)程中經(jīng)常要 訪問(wèn)輔助的內(nèi)存,比如視頻內(nèi)存。目前的協(xié)處理器往往被優(yōu)化成執(zhí)行三維圖形計(jì)算,以用來(lái) 支持諸如游戲和計(jì)算機(jī)輔助設(shè)計(jì)(CAD)之類的應(yīng)用程序。雖然當(dāng)運(yùn)行單個(gè)圖形密集的應(yīng)用 程序時(shí),目前的計(jì)算機(jī)系統(tǒng)和協(xié)處理器足以勝任執(zhí)行工作,但是當(dāng)運(yùn)行多個(gè)圖形密集的應(yīng) 用程序時(shí)它們可能會(huì)遇到問(wèn)題。這其中的一個(gè)原因就是通常的協(xié)處理器不能有效地調(diào)度其工作量。目前的協(xié)處 理器通常實(shí)現(xiàn)了協(xié)作式多任務(wù)處理,它是這樣一種多任務(wù)處理,即其中當(dāng)前控制協(xié)處理器 的應(yīng)用程序必須把控制讓與其它的應(yīng)用程序。如果應(yīng)用程序沒(méi)有讓與控制權(quán),那么它就能 夠有效地“獨(dú)占(hog)”協(xié)處理器。雖然當(dāng)執(zhí)行單個(gè)圖形密集的程序時(shí)這還不存在顯著的利 害關(guān)系,但是當(dāng)多個(gè)應(yīng)用程序試圖利用協(xié)處理器時(shí),協(xié)處理器的獨(dú)占問(wèn)題可能會(huì)變得更加 嚴(yán)重。盡管在CPU中已經(jīng)慮及操作間的均分處理問(wèn)題,其中多重操作的復(fù)雜調(diào)度已經(jīng)變 得必要,但是協(xié)處理器中的調(diào)度尚未得到有效地處理。這是因?yàn)樵谀壳暗南到y(tǒng)中,協(xié)處理 器通常被視作為一種用來(lái)把繁重的計(jì)算操作及耗時(shí)的操作轉(zhuǎn)離CPU并為CPU提供更多用于 其它功能的處理時(shí)間的資源。這種繁重的計(jì)算操作通常為圖形操作,人們都知道,這種圖形 操作需要效果顯著的處理能力。隨著應(yīng)用程序的復(fù)雜性增加,它們往往對(duì)協(xié)處理器需要更 大的依賴性,以便處理穩(wěn)健的計(jì)算活動(dòng)。這種增加的依賴性繼而又產(chǎn)生迄今為止無(wú)法預(yù)知 的需要,以便克服準(zhǔn)智能化均分協(xié)處理器資源中所涉及到的技術(shù)壁壘。對(duì)于這些及其它原 因,就希望得到一種用于有效地調(diào)度協(xié)處理器工作及其它協(xié)處理器資源的使用的系統(tǒng)和方 法。

發(fā)明內(nèi)容
為此,就希望得到一種用于有效地支持GPU中環(huán)境(context)切換的系統(tǒng)和方法。 在一個(gè)實(shí)施例中,這種系統(tǒng)和方法使用了每協(xié)處理器的(per-coprocessor)環(huán)境地址空 間。協(xié)處理器一般使用專用圖形內(nèi)存(例如,圖形卡上的內(nèi)存),或使用為GPU的使用而分 配的部分計(jì)算機(jī)主系統(tǒng)內(nèi)存,或使用上述兩者的組合。在帶有每協(xié)處理器的環(huán)境地址空間的系統(tǒng)中,可以將GPU配置成依照其自己的內(nèi)存觀察(view)來(lái)提供每個(gè)應(yīng)用程序或線程。 舉例來(lái)說(shuō),只要所述結(jié)構(gòu)(texture)是特定應(yīng)用程序所需要的,載入內(nèi)存中的結(jié)構(gòu)的地址 就可以保持恒定。依照本發(fā)明各種不同的實(shí)施例,通過(guò)支持那些需要進(jìn)行處理的各種任務(wù)之間的切 換,協(xié)處理器能夠首先處理較高優(yōu)先級(jí)的任務(wù),然后按比例分配多個(gè)任務(wù)之間的處理。當(dāng)運(yùn) 行多個(gè)圖形密集的應(yīng)用程序時(shí),協(xié)處理器可以轉(zhuǎn)換環(huán)境以便服務(wù)于多個(gè)應(yīng)用程序。本發(fā)明 進(jìn)一步考慮到任務(wù)列表(如隊(duì)列)的維護(hù),所述任務(wù)列表需要為每個(gè)應(yīng)用程序進(jìn)行處理。可 以將這些任務(wù)提交給調(diào)度程序(scheduler),然后調(diào)度程序就能判定每個(gè)應(yīng)用程序有權(quán)接 收多少處理。結(jié)合此進(jìn)程,系統(tǒng)就可以維護(hù)由內(nèi)存管理器所管理的實(shí)際物理內(nèi)存或虛擬內(nèi) 存當(dāng)中的任務(wù)列表。此外,也提供了各種不同的技術(shù),以用來(lái)判斷特定任務(wù)是否已準(zhǔn)備好進(jìn) 行處理,或者判斷是否可能發(fā)生因內(nèi)存資源失調(diào)而造成的故障??梢允褂谩斑\(yùn)行列表”來(lái)確 保協(xié)處理器不會(huì)在任務(wù)之間或中斷之后耗費(fèi)時(shí)間。本發(fā)明同時(shí)也提供了用于通過(guò)不允許應(yīng) 用程序修改部分內(nèi)存來(lái)確保計(jì)算機(jī)系統(tǒng)安全的技術(shù),其中所述部分內(nèi)存可能是維護(hù)主系統(tǒng) 操作正常運(yùn)行的必要組成部分。本發(fā)明的這些及其它方面和優(yōu)點(diǎn)將在下面作詳細(xì)描述。


本專利或申請(qǐng)文件包含至少一個(gè)附圖。圖1是現(xiàn)有技術(shù)中協(xié)處理器的調(diào)度處理的概念例圖。圖2是依照本發(fā)明的協(xié)處理器調(diào)度改進(jìn)的示范性例圖。圖3是在提供圖2中從概念上舉例說(shuō)明的調(diào)度改進(jìn)時(shí)所涉及的計(jì)算組件的更詳細(xì) 例圖。圖4(A)和圖4(B)是偽代碼算法,它們表示將圖3的步驟組合成功能序列的各種 非限定性的可能方式。圖5舉例說(shuō)明了依照本發(fā)明、調(diào)度程序可如何使用已提供的信息,以定義用于直 接內(nèi)存存取(DMA)緩沖區(qū)中的內(nèi)存資源的時(shí)間安排(timeline)。圖6是依照本發(fā)明的算法,其舉例說(shuō)明了準(zhǔn)備工作器線程與輔助內(nèi)存管理器之間 的動(dòng)態(tài)性。圖7是依照本發(fā)明的分頁(yè)緩沖區(qū)預(yù)備的示范性例圖,它示出準(zhǔn)備分頁(yè)緩沖區(qū)并處 理分頁(yè)緩沖區(qū)的CPU預(yù)處理的工作器線程。圖8是依照本發(fā)明、表示一連串在工作器線程中可能發(fā)生的事件的算法,所述工 作器線程包括分頁(yè)緩沖區(qū)中的柵欄(fence)處理。圖9舉例說(shuō)明處于內(nèi)核工作方式下的輔助內(nèi)存管理器“VidMm”,所述內(nèi)存管理器 能為協(xié)處理器環(huán)境提供虛擬地址空間,并能管理各種不同協(xié)處理器環(huán)境中間的物理內(nèi)存, 以便它們能獲得其應(yīng)得的那份內(nèi)存。圖10舉例說(shuō)明了依照本發(fā)明的基本調(diào)度模型。圖11舉例說(shuō)明了依照本發(fā)明的高級(jí)調(diào)度模型。圖12 (A)和圖12⑶提供能實(shí)現(xiàn)高級(jí)調(diào)度模型動(dòng)作序列的示范性表示。圖13舉例說(shuō)明了本發(fā)明結(jié)合可變長(zhǎng)度平面頁(yè)表的使用。圖14舉例說(shuō)明了本發(fā)明結(jié)合多級(jí)頁(yè)表的使用。
圖15是示范性進(jìn)程的例圖,所述進(jìn)程是由與高級(jí)調(diào)度模型相結(jié)合的調(diào)度程序來(lái) 維護(hù)的,所述高級(jí)調(diào)度模型支持表面級(jí)故障。圖16是多重環(huán)境的例圖,其中每一種環(huán)境都帶有其自己的DMA環(huán)(ring),當(dāng)結(jié)合 本發(fā)明實(shí)現(xiàn)了表面級(jí)故障時(shí)能同時(shí)地處理所述多重環(huán)境。圖17(A)、圖17⑶和圖17(C)提供了一種偽代碼算法,該算法描述了本發(fā)明結(jié)合 圖16的組件的操作,并且還包括可以證明有效的各種附加特征。圖18是依照本發(fā)明、概念上表示運(yùn)行列表使用的圖表。圖19舉例說(shuō)明了能夠?qū)h(huán)境轉(zhuǎn)換歷史寫入到指定系統(tǒng)內(nèi)存單元的硬件操作,所 述指定系統(tǒng)內(nèi)存單元可由結(jié)合本發(fā)明所使用的調(diào)度程序來(lái)讀取。圖20舉例說(shuō)明了通過(guò)將特權(quán)命令直接插入到協(xié)處理器環(huán)境環(huán)中來(lái)支持特權(quán)DMA 通道的硬件方法。圖21舉例說(shuō)明了用于支持協(xié)處理器中的受限相對(duì)于特權(quán)DMA緩沖區(qū)的方法,在所 述協(xié)處理器中,將間接命令中的位(bit)插入到環(huán)形緩沖區(qū)中。圖22提供了一種查詢協(xié)處理器有關(guān)當(dāng)前顯示表面的方法。圖23是當(dāng)結(jié)合本發(fā)明使用即時(shí)交換(flip)時(shí)排隊(duì)交換(queuing flip)的優(yōu)選方法。圖24是用于使對(duì)資源的訪問(wèn)同步化以確保兩個(gè)或多個(gè)處理器在描繪 (rendering)時(shí)能使用有效內(nèi)容的示范性技術(shù)。圖25舉例說(shuō)明了事件歷史緩沖區(qū)的各種實(shí)施例。圖26舉例說(shuō)明了支持使用PCI插孔的每協(xié)處理器的環(huán)境虛擬地址空間的優(yōu)選方 法,所述PCI插孔能在輔助內(nèi)存中的任何地方被重定向。
具體實(shí)施例方式許多這類的系統(tǒng)和方法在以下幾篇美國(guó)臨時(shí)專利申請(qǐng)中作了描述由 StevePronovost 于 2003 年 2 月 8 日申請(qǐng)的"Video Memory Manager Rectangular Heap,,、 由 Steve Pronovost 于 2003 年 2 月 18 日申請(qǐng)的“視頻內(nèi)存 Manager Architecture"以 及由 Steve Pronovost 于 2003 年 2 月 18 日申請(qǐng)的"GPU Scheduler Overview,,,序號(hào)為 60/448,402。將這三篇臨時(shí)專利申請(qǐng)全部引入于此,以供參考。通過(guò)圖1和圖2的比較,能夠從概念上說(shuō)明本發(fā)明所完成的部分改進(jìn)。圖1表示 協(xié)處理器的任務(wù)調(diào)度的一般的現(xiàn)有技術(shù)方法。提供能夠被各種應(yīng)用程序訪問(wèn)的緩沖區(qū),所 述各種應(yīng)用程序比如是應(yīng)用程序1、應(yīng)用程序2和應(yīng)用程序3。所述應(yīng)用程序能夠?qū)f(xié)處理 器的任務(wù)載入到緩沖區(qū)中,并且協(xié)處理器可以在完成預(yù)先提交任務(wù)之后處理那些任務(wù)。正 如所說(shuō)明的那樣,這個(gè)方法未解決潛在的協(xié)處理器的“獨(dú)占(hogging)”。在圖1中,應(yīng)用程 序1正在獨(dú)占協(xié)處理器。應(yīng)用程序1已經(jīng)請(qǐng)求協(xié)處理器對(duì)七個(gè)任務(wù)進(jìn)行處理,與此同時(shí)其 它兩個(gè)已組合的應(yīng)用程序已經(jīng)請(qǐng)求僅僅處理三個(gè)任務(wù)。在像這種多個(gè)應(yīng)用程序需要協(xié)處理 器的情形下,諸如像圖2所提供的這類系統(tǒng)可以提供改進(jìn)功能。圖2舉例說(shuō)明了依照本發(fā)明的一種系統(tǒng)和方法,借此每個(gè)應(yīng)用程序,例如應(yīng)用程 序1、應(yīng)用程序2和應(yīng)用程序3能夠維持其自己的緩沖區(qū),即圖2的“第一緩沖區(qū)”。將這些 緩沖區(qū)(下文將稱為“命令緩沖區(qū)”)提交給調(diào)度進(jìn)程,該調(diào)度進(jìn)程能夠確定何時(shí)把各種任務(wù)交付給協(xié)處理器。如圖2中舉例說(shuō)明的那樣,在這種情況下,調(diào)度進(jìn)程已經(jīng)把任務(wù)插入到 “第二緩沖區(qū)”中。為簡(jiǎn)明起見,將圖2的“第二緩沖區(qū)”舉例說(shuō)明為單個(gè)緩沖區(qū)。然而,實(shí) 際上,可能需要幾個(gè)緩沖區(qū)來(lái)執(zhí)行圖2中的“第二緩沖區(qū)”的功能。圖2的第二緩沖區(qū)已將 任務(wù)分開以待交付給協(xié)處理器,以便應(yīng)用程序1不再能獨(dú)占協(xié)處理器資源。調(diào)度進(jìn)程已經(jīng) 允許將應(yīng)用程序1作為協(xié)處理器上的第一個(gè)任務(wù),繼而是應(yīng)用程序2、再繼而是應(yīng)用程序3、 然后再是應(yīng)用程序1等等。盡管圖2中從概念上舉例說(shuō)明的系統(tǒng)和方法的實(shí)施方案比圖2示范的更加復(fù)雜, 但是這里所公開的改進(jìn)方案通常致力于支持如圖2中所舉例說(shuō)明的基本概念?,F(xiàn)在,轉(zhuǎn)到 本發(fā)明實(shí)施例的更詳細(xì)說(shuō)明,為便于參考而提供下列術(shù)語(yǔ)定義命令緩沖區(qū)-一種由用戶工作方式驅(qū)動(dòng)器構(gòu)造的緩沖區(qū)。這種緩沖區(qū)可以是在描 繪(rendering)應(yīng)用程序的情況下的規(guī)則的可分頁(yè)內(nèi)存。DMA緩沖區(qū)-“直接內(nèi)存存取”緩沖區(qū)。一種內(nèi)核工作方式驅(qū)動(dòng)器構(gòu)造的緩沖區(qū)。 這種緩沖區(qū)可以是基于命令緩沖區(qū)的內(nèi)容的。一般說(shuō)來(lái),它是從內(nèi)核可分頁(yè)內(nèi)存中分配的, 并且僅對(duì)內(nèi)核而言是可見的。在這點(diǎn)上,頁(yè)面可在協(xié)處理器能從其中讀取之前通過(guò)插孔來(lái) 鎖定并映射。分頁(yè)緩沖區(qū)-一種由內(nèi)核工作方式驅(qū)動(dòng)器構(gòu)造的緩沖區(qū)。這種緩沖區(qū)可用于頁(yè) 入、驅(qū)逐和移動(dòng)特定DMA緩沖區(qū)所需的內(nèi)存資源。分頁(yè)緩沖區(qū)可以配置成在其DMA緩沖區(qū) 對(duì)應(yīng)方之前立即運(yùn)行。環(huán)形緩沖區(qū)-這是一種協(xié)處理器環(huán)境特定的緩沖區(qū)??梢詫⒌紻MA緩沖區(qū)的方向 插入到這種緩沖區(qū)中。在這點(diǎn)上,協(xié)處理器能夠從這種環(huán)形緩沖區(qū)中取出命令來(lái)執(zhí)行。環(huán) 形緩沖區(qū)通常包含重定向指令,一旦DMA緩沖區(qū)已經(jīng)完全被處理過(guò),該重定向指令就指示 協(xié)處理器開始從DMA緩沖區(qū)中讀取命令,并繼而返回到環(huán)形緩沖區(qū)。輔助內(nèi)存-通常專由協(xié)處理器使用的內(nèi)存,它不必是物理系統(tǒng)內(nèi)存的一部分。舉 例來(lái)說(shuō),它可以是駐留在圖形卡上的本地視頻內(nèi)存。它也可以是其它的協(xié)處理器可讀的內(nèi) 存,比如通過(guò)系統(tǒng)內(nèi)存插孔映射的內(nèi)存。一般而言,這種內(nèi)存不不存在于集成的或UMA圖形 設(shè)備中。這種內(nèi)存不是經(jīng)由基于GART狀頁(yè)表的插孔來(lái)進(jìn)行訪問(wèn)的。系統(tǒng)內(nèi)存插孔_這是物理系統(tǒng)內(nèi)存的子設(shè)備(subset)。它對(duì)于協(xié)處理器經(jīng)由基于 GART狀頁(yè)表的插孔而言是可見的。CPU將能獨(dú)立于系統(tǒng)內(nèi)存插孔而訪問(wèn)物理系統(tǒng)內(nèi)存。當(dāng) 經(jīng)由插孔訪問(wèn)這種內(nèi)存時(shí),概念上相似的一些示例為加速圖形接口(“AGP”)內(nèi)存、外設(shè) 部件互連(“PCI”)專用內(nèi)存、或者統(tǒng)一內(nèi)存體系結(jié)構(gòu)(“UMA”)內(nèi)存。可以在圖3中看到本發(fā)明各種實(shí)施例的更詳細(xì)視圖。圖3提供了各種軟件和硬件 對(duì)象的示意圖,可以把所述軟件和硬件對(duì)象組合起來(lái),以提供圖2中從概念上示范的功能。 圖3顯現(xiàn)了將在下面描述的一系列順序步驟。為了清楚地解釋和實(shí)現(xiàn)本發(fā)明起見,順序地 顯現(xiàn)出這些步驟,但是不應(yīng)該把它理解成顯現(xiàn)實(shí)踐本發(fā)明所需要的序列。依照所屬技術(shù)領(lǐng) 域中已知的或者未來(lái)將開發(fā)的實(shí)踐方式,上述順序是可以變化的。下列論述將從圖3的系 統(tǒng)和方法的概觀開始,然后繼續(xù)進(jìn)行圖3 —些方面中的更詳細(xì)論述。圖3中的步驟1表示對(duì)應(yīng)用程序接口( “API”)的應(yīng)用程序調(diào)用。一個(gè)應(yīng)用程序 可以是供用戶編制軟件用的任何文件組。API —般是供應(yīng)用程序與操作系統(tǒng)內(nèi)核進(jìn)行通信 而使用的語(yǔ)言和消息格式,而且還是指用來(lái)與其它控制程序進(jìn)行通信的這類格式,所述其它控制程序比如是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)或通信協(xié)議。結(jié)合本發(fā)明使用的一個(gè)示范性API 是由微軟公司(MICROSOFT )開發(fā)的 Direct3D Runtime API。步驟2表示從API到用戶工作方式驅(qū)動(dòng)器的調(diào)用。通常,用戶工作方式驅(qū)動(dòng)器是 能將軟件系統(tǒng)(通常為操作系統(tǒng))鏈接到外圍子例程的程序例程(或硬件),外圍子例程可 以是軟件或硬件。這里,用戶工作方式驅(qū)動(dòng)器接收來(lái)自于API的調(diào)用,所述API可以包含與 來(lái)自于步驟1的原始調(diào)用相對(duì)應(yīng)的API參數(shù)。步驟3表示命令緩沖區(qū)中描繪(rendering) 命令的累積,所述描繪命令是由用戶工作方式驅(qū)動(dòng)器生成的。緩沖區(qū)是為用作中間儲(chǔ)存庫(kù) 而保留的內(nèi)存區(qū)域。當(dāng)?shù)却趦蓚€(gè)位置之間進(jìn)行傳遞數(shù)據(jù)時(shí),數(shù)據(jù)可以被暫時(shí)保存在緩沖 區(qū)中,所述位置比如是數(shù)據(jù)區(qū)域以及用來(lái)處理的處理器或協(xié)處理器。正如下面進(jìn)一步描述 的那樣,可以選擇由用戶工作方式驅(qū)動(dòng)器生成的命令緩沖區(qū)內(nèi)容的具體細(xì)節(jié),以便于轉(zhuǎn)換 成硬件特定的DMA緩沖區(qū)。而且,在定義命令緩沖區(qū)的進(jìn)程中,忽略對(duì)內(nèi)存資源的直接內(nèi)存 引用可能是有用的,所述內(nèi)存資源比如“結(jié)構(gòu)(texture)”或“頂緩沖區(qū)(vertex buffer)”。 或者,獨(dú)立硬件供應(yīng)商(“IHV”)可以定義選擇性包含句柄(handle)的命令緩沖區(qū),以便當(dāng) 這種內(nèi)存資源正被創(chuàng)建時(shí),內(nèi)核接口可以提供對(duì)命令緩沖區(qū)的內(nèi)存引用。步驟4表示命令緩沖區(qū)的清除(flushing)?!扒宄焙?jiǎn)單來(lái)說(shuō)是指讓所累積的描 繪命令變空。正如舉例說(shuō)明的那樣,為了將描繪命令傳送到圖3中所示的協(xié)處理器內(nèi)核,可 以將這些描繪命令送回到API。清除可能因任何原因發(fā)生,包括但不限于因命令緩沖區(qū)已滿 和需要更多空間以供新來(lái)的描繪命令用而清除,以及因命令緩沖區(qū)中存在需要立即處理的 高優(yōu)先級(jí)描繪命令而清除。步驟5表示由API將已累積的命令緩沖區(qū)清除到協(xié)處理器內(nèi)核。內(nèi)核通常稱作為 操作系統(tǒng)的核心部分,選擇性地管理內(nèi)存、文件和外圍設(shè)備的部分,并且也可以運(yùn)行應(yīng)用程 序和分配系統(tǒng)資源。將要領(lǐng)會(huì)到的是協(xié)處理器內(nèi)核可以是任何類型的內(nèi)核,包括主系統(tǒng)內(nèi) 核或獨(dú)立地特定協(xié)處理器的內(nèi)核,或例如是一種特定類型的內(nèi)核,比如MICROSOFT 的 DirectX 內(nèi)核(“DXG”)。步驟6表示命令緩沖區(qū)到內(nèi)核工作方式驅(qū)動(dòng)器的提交情況。協(xié)處理器內(nèi)核能夠把 命令緩沖區(qū)指向內(nèi)核工作方式驅(qū)動(dòng)器。正如上面參照用戶工作方式驅(qū)動(dòng)器所描述的那樣, 內(nèi)核工作方式驅(qū)動(dòng)器通??梢允浅芤詢?nèi)核工作方式操作的內(nèi)核工作方式驅(qū)動(dòng)器以外的 驅(qū)動(dòng)器,就如其名稱暗指的那樣。在這點(diǎn)上,內(nèi)核工作方式驅(qū)動(dòng)器能負(fù)責(zé)將命令變換成DMA 緩沖區(qū)。IHV可以考慮將用以確保命令緩沖區(qū)的適當(dāng)證實(shí)(validation)及復(fù)制的適當(dāng)機(jī)制 提供至指定DMA緩沖區(qū)的內(nèi)核工作方式中。DMA緩沖區(qū)可以是指定硬件的,因?yàn)樗鼈兪亲罱K 指定給協(xié)處理器的命令的匯集,因此它們應(yīng)該正確地與協(xié)處理器和支持硬件相對(duì)接。注意橫貫圖3的水平線將圖3分成用戶工作方式和內(nèi)核工作方式。正如該直線 暗指的那樣,本發(fā)明可以在計(jì)算機(jī)內(nèi)存分配的常規(guī)布局內(nèi)操作,所述常規(guī)布局是為系統(tǒng)安 全而實(shí)施的。用戶工作方式為無(wú)特權(quán)的內(nèi)存,它可以被應(yīng)用程序訪問(wèn)。另一方面,內(nèi)核工作 方式是有特權(quán)的,它不能被應(yīng)用程序訪問(wèn)。盡管內(nèi)核工作方式分配的DMA緩沖區(qū)理論上能 被映射到任何存儲(chǔ)空間中,但是應(yīng)該緊記的是,映射到應(yīng)用程序的專用進(jìn)程空間中可能會(huì) 導(dǎo)致安全性風(fēng)險(xiǎn)。這是因?yàn)樵趹?yīng)用程序的專用進(jìn)程空間中,由線程指示的任何虛擬地址的 內(nèi)容都能被修改;換言之,DMA緩沖區(qū)的內(nèi)容可以在它被證實(shí)的時(shí)刻與它被硬件處理的時(shí) 刻之間被修改。
9
正如步驟7表明的那樣,內(nèi)核工作方式驅(qū)動(dòng)器也可以構(gòu)造一個(gè)由DMA緩沖區(qū)使用 的內(nèi)存資源列表??梢园堰@當(dāng)作為命令緩沖區(qū)證實(shí)的一部分來(lái)完成。這個(gè)列表例如可以 包括列表上各種內(nèi)存資源的內(nèi)核句柄(handle)和內(nèi)存資源被引用的緩沖區(qū)位置(buffer location) 0此外,這個(gè)列表還可以包括所列內(nèi)存資源的預(yù)期環(huán)境狀態(tài)。這允許作為任何當(dāng) 前硬件狀態(tài)一部分的內(nèi)存資源(例如“當(dāng)前的描繪目標(biāo)”、“當(dāng)前的ζ緩沖區(qū)”等)成為列表 的一部分,所述列表將在DMA緩沖區(qū)起始處被重新編程,這是因?yàn)樗鼈兛赡茏陨弦粋€(gè)DMA緩 沖區(qū)被提交給協(xié)處理器以來(lái)改變了位置。步驟8表示連同任何內(nèi)存資源列表一起將DMA緩沖區(qū)發(fā)送到協(xié)處理器內(nèi)核。所述 協(xié)處理器內(nèi)核繼而可以向協(xié)處理器調(diào)度程序提交DMA緩沖區(qū),正如步驟9所示的那樣,并且 返回到用戶工作方式,正如步驟10中那樣。協(xié)處理器調(diào)度程序通常負(fù)責(zé)為協(xié)處理器調(diào)度任務(wù)流(諸如被包含在各種DMA緩沖 區(qū)中以及被送到協(xié)處理器的其它工作)。協(xié)處理器調(diào)度程序的功能可能是很廣的,而本說(shuō) 明書包括許多協(xié)處理器調(diào)度程序可能執(zhí)行的潛在功能。協(xié)處理器調(diào)度程序可以稱為協(xié)處理 器調(diào)度程序或者簡(jiǎn)稱為調(diào)度程序。在各種不同的實(shí)施例中,如圖3所示,調(diào)度程序可以在將 DMA緩沖區(qū)提交到協(xié)處理器之前先執(zhí)行一個(gè)或多個(gè)功能。步驟Ila動(dòng)態(tài)地說(shuō)明了 調(diào)度程 序的一個(gè)功能就是提交待處理的DMA緩沖區(qū)。步驟lib表示調(diào)度程序確定添加到預(yù)備的DMA緩沖區(qū)的列表或者下一次運(yùn)行的 DMA緩沖區(qū)選擇。在這點(diǎn)上,調(diào)度程序能夠?qū)MA緩沖區(qū)傳遞至預(yù)備線程。這里使用的術(shù)語(yǔ) ‘預(yù)備線程’通常提供了確?,F(xiàn)存有適當(dāng)內(nèi)存資源以處理DMA緩沖區(qū)的功能。首先,預(yù)備線 程可能調(diào)用輔助內(nèi)存管理進(jìn)程(未示出),來(lái)確定用以對(duì)全部所需的內(nèi)存對(duì)象進(jìn)行分頁(yè)的 充足存儲(chǔ)單元(在圖形環(huán)境中,“表面”),其中所述內(nèi)存對(duì)象當(dāng)前不在輔助內(nèi)存中(這是步 驟12)。注意,術(shù)語(yǔ)“輔助內(nèi)存”是指為供協(xié)處理器使用而分配的內(nèi)存;就GPU協(xié)處理器來(lái) 說(shuō),將輔助內(nèi)存通常稱為“視頻內(nèi)存”。有可能并非DMA緩沖區(qū)所需的全部?jī)?nèi)存資源都將立刻適合可用的輔助內(nèi)存。在這 一點(diǎn)上來(lái)講,由于種種原因,輔助內(nèi)存管理器可能無(wú)法取來(lái)輔助內(nèi)存中的所有表面。如果這 種情況發(fā)生的話,那么可能會(huì)進(jìn)行某種進(jìn)一步的處理,以便在輔助內(nèi)存中騰出更多空間,或 者作為選擇與騰出更多空間相結(jié)合進(jìn)行,DMA緩沖區(qū)可以被分成多個(gè)片段(fragment)。在 這種情況下,預(yù)備線程可以利用驅(qū)動(dòng)器預(yù)定義分割點(diǎn)來(lái)分割緩沖區(qū),并且試圖定位小型DMA 緩沖區(qū)所需的內(nèi)存資源的子設(shè)備(subset)。如步驟13舉例說(shuō)明的那樣,一旦為DMA緩沖區(qū)定位了充足的輔助內(nèi)存,預(yù)備線程 就可以調(diào)用內(nèi)核工作方式驅(qū)動(dòng)器。正如本領(lǐng)域技術(shù)人員將會(huì)領(lǐng)會(huì)到的那樣這可以是結(jié)合 步驟6、7和8所提及的內(nèi)核工作方式驅(qū)動(dòng)器,或者它可以是獨(dú)立的內(nèi)核工作方式驅(qū)動(dòng)器。步驟14舉例說(shuō)明了 內(nèi)核工作方式驅(qū)動(dòng)能夠?yàn)榈却幚淼腄MA緩沖區(qū)構(gòu)造分頁(yè)緩 沖區(qū)。內(nèi)核工作方式驅(qū)動(dòng)器可以根據(jù)來(lái)自于預(yù)備線程的處理命令來(lái)構(gòu)造這種分頁(yè)緩沖區(qū)。 如上文所定義的,分頁(yè)緩沖區(qū)是以分頁(yè)內(nèi)存資源為目的的緩沖區(qū)。“分頁(yè)”是指利用映射硬 件來(lái)改變內(nèi)存塊(頁(yè)面)的物理地址。一般而言,分頁(yè)緩沖區(qū)是包含協(xié)處理器指令的DMA 緩沖區(qū),所述協(xié)處理器指令用于將內(nèi)存資源轉(zhuǎn)移到它們指定的存儲(chǔ)單元。分頁(yè)緩沖區(qū)起到 了將DMA緩沖區(qū)所需的任何內(nèi)存資源引入到正確存儲(chǔ)單元的作用,其中必要時(shí)協(xié)處理器可 以從所述存儲(chǔ)單元那里訪問(wèn)那些資源。如果恰當(dāng)?shù)禺a(chǎn)生了分頁(yè)緩沖區(qū),則特定協(xié)處理器任務(wù)(S卩,DMA緩沖區(qū))的任何必備內(nèi)存資源的存儲(chǔ)單元就都是已知的。步驟15表示通知預(yù)備線程已經(jīng)產(chǎn)生分頁(yè)緩沖區(qū)。步驟16表示分頁(yè)緩沖區(qū)就緒 的調(diào)度程序的信號(hào)。在此,調(diào)度程序可以假定下一個(gè)DMA緩沖區(qū)就緒,以待進(jìn)行處理,或者 它可以在將其發(fā)送到協(xié)處理器以進(jìn)行處理之前,先對(duì)DMA緩沖區(qū)繼續(xù)進(jìn)行進(jìn)一步的預(yù)備操 作。例如,由于存儲(chǔ)單元也許自原始DMA緩沖區(qū)創(chuàng)建以來(lái)已經(jīng)改變,因此調(diào)度程序此時(shí)可以 再一次調(diào)用內(nèi)核工作方式驅(qū)動(dòng)器,從而允許它用內(nèi)存資源的實(shí)際存儲(chǔ)單元來(lái)修補(bǔ)(patch) DMA緩沖區(qū)。最后,調(diào)度程序可以將分頁(yè)緩沖區(qū)(如果它存在)以及DMA緩沖區(qū)提交給協(xié)處 理器(以及任何其它輔助硬件)以待處理。如上所述的步驟1至16能夠通過(guò)硬件、軟件以及上述兩者的組合來(lái)實(shí)現(xiàn)。關(guān)于這 一點(diǎn),圖4(A)和4(B)以偽算法的形式從總體上舉例說(shuō)明了圖3的步驟。圖4(A)和4(B) 并不是潛在偽算法步驟的窮舉列表,這些步驟可以結(jié)合本發(fā)明加以實(shí)施,而且不應(yīng)將其解 釋為圖4(A)和4(B)中的每一個(gè)步驟都是實(shí)施發(fā)明所必須的。而是為了講授本發(fā)明,將圖 4(A)和4(B)作為一種示意性的列表。結(jié)合圖3提供的以上論述是對(duì)本發(fā)明各種實(shí)施例的說(shuō)明。然而,結(jié)合如上所述的 本發(fā)明的實(shí)施方案,已經(jīng)看出了多個(gè)進(jìn)步之處。本說(shuō)明的其余部分是為了實(shí)現(xiàn)各種改進(jìn)并 且克服本發(fā)明在實(shí)際中可能出現(xiàn)的困難。調(diào)度考慮預(yù)先定義的一些或全部操作(參看以上步驟1-16)可能會(huì)在DMA緩沖區(qū)被提交給 硬件之前發(fā)生。然而,這些操作中的一些操作可能難以執(zhí)行,直至DMA緩沖區(qū)被提交給硬件 為止。舉例來(lái)說(shuō),內(nèi)存資源的存儲(chǔ)單元可能難以確定,直至DMA緩沖區(qū)被提交給協(xié)處理器以 前的瞬間為止。這是因?yàn)檩o助內(nèi)存資源會(huì)因其在協(xié)處理器上運(yùn)行而隨著每個(gè)DMA緩沖區(qū)遷 移。由上文的步驟1-16包含的操作中的一些操作可能是耗時(shí)的,而由此無(wú)法在中斷 時(shí)間完成,比如無(wú)法在調(diào)度程序挑選接下來(lái)運(yùn)行哪個(gè)任務(wù)之后完成。同樣,恰恰由于它們耗 時(shí),當(dāng)協(xié)處理器忙于處理其它事情的時(shí)候在中央處理單元(“CPU”)上執(zhí)行它們將是有益 的。這是為了使協(xié)處理器資源缺乏最小化。協(xié)處理器資源缺乏僅指在協(xié)處理器沒(méi)有執(zhí)行處 理功能時(shí)花費(fèi)的時(shí)間。響應(yīng)于這個(gè)問(wèn)題,也許有益于結(jié)合所述調(diào)度程序使用“工作器線程”。 工作器線程能夠執(zhí)行幫助處理一些耗時(shí)的設(shè)置工作的功能。作為它結(jié)合本發(fā)明其它進(jìn)程的 操作示例,將工作器線程添加到圖4(B)的偽算法中。進(jìn)一步針對(duì)此調(diào)度考慮,注意,在圖3的系統(tǒng)中的任何指定時(shí)間,可能存在處于以 下三種狀態(tài)下的DMA緩沖區(qū)正在運(yùn)行的DMA緩沖區(qū)(即,當(dāng)前正由協(xié)處理器進(jìn)行處理的 DMA緩沖區(qū))、正在預(yù)備的DMA緩沖區(qū)、以及一列正準(zhǔn)備將預(yù)備的DMA緩沖區(qū)。新DMA緩沖區(qū) 一旦提交給調(diào)度程序,就能將它插入到就緒隊(duì)列并且依它們的優(yōu)先級(jí)而作適當(dāng)?shù)嘏判?。?而,如果新DMA緩沖區(qū)在被提交給調(diào)度程序時(shí)無(wú)法搶占(preempt)已選作為協(xié)處理器的下 一個(gè)任務(wù)的DMA緩沖區(qū),那么本發(fā)明的各種實(shí)施例就都可以提高功能性。這個(gè)的理由就是 預(yù)備DMA緩沖區(qū)可能會(huì)牽扯到把內(nèi)存資源頁(yè)入和頁(yè)出輔助內(nèi)存。因此,已選定進(jìn)行處理的 下一個(gè)DMA緩沖區(qū)的搶占,可能會(huì)導(dǎo)致輔助內(nèi)存管理器的持續(xù)狀態(tài)的變化。如果正在預(yù)備 的任務(wù)可能會(huì)被搶占,那么由于預(yù)備了重新選定的DMA緩沖區(qū),因而它就會(huì)導(dǎo)致撤銷對(duì)輔 助內(nèi)存管理器的持續(xù)狀態(tài)所作的改變。通過(guò)DMA緩沖區(qū)上的操作中途撤銷對(duì)輔助內(nèi)存的改變可能不是微不足道的,而是可能會(huì)導(dǎo)致潛在地更頻繁的協(xié)處理器資源缺乏。分割DMA緩沖區(qū)當(dāng)API將命令緩沖區(qū)提交給協(xié)處理器內(nèi)核時(shí),內(nèi)核工作方式驅(qū)動(dòng)器繼而可以負(fù)責(zé) 生成硬件特定的DMA緩沖區(qū),以及生成運(yùn)行該DMA緩沖區(qū)所需的一列內(nèi)存資源。雖然特定 的DMA緩沖區(qū)格式可以由IHV來(lái)定義,但是軟件供應(yīng)商可能會(huì)發(fā)現(xiàn)他們本身就肩負(fù)著為內(nèi) 核工作方式驅(qū)動(dòng)器定義資源列表格式的任務(wù)。內(nèi)存資源列表能夠提供關(guān)于不同內(nèi)存資源的時(shí)間安排(timeline)信息,這些不 同內(nèi)存資源可由DMA緩沖區(qū)使用。繼而,調(diào)度程序又能使用內(nèi)存資源列表,以便當(dāng)DMA緩沖 區(qū)在協(xié)處理器上運(yùn)行之前頁(yè)入(page in)任何所需要的內(nèi)存資源,并且如有必要?jiǎng)t對(duì)DMA 緩沖區(qū)進(jìn)行分割,比如當(dāng)DMA緩沖區(qū)同時(shí)使用太多資源時(shí)等等。如果調(diào)度程序?qū)?duì)DMA緩沖區(qū)進(jìn)行分割,那么內(nèi)核工作方式驅(qū)動(dòng)器就可以通過(guò)在 內(nèi)存資源列表中提供時(shí)間安排信息來(lái)便于此分割操作。這可以通過(guò)允許所述驅(qū)動(dòng)器規(guī)定 DMA緩沖區(qū)內(nèi)的“偏移量”來(lái)完成。當(dāng)正通過(guò)插入內(nèi)存資源標(biāo)識(shí)符來(lái)對(duì)內(nèi)存資源進(jìn)行編排 時(shí),可以設(shè)定偏移量,所述內(nèi)存資源標(biāo)識(shí)符規(guī)定了在所述偏移量處對(duì)內(nèi)存資源的使用。由于 內(nèi)存資源能夠不止一次出現(xiàn)在DMA緩沖區(qū)中,因而相同的內(nèi)存資源可能會(huì)在內(nèi)存資源列表 中出現(xiàn)多次。在DMA緩沖區(qū)中,每次對(duì)內(nèi)存資源的引用都將把一個(gè)項(xiàng)目附加到資源列表中。實(shí)質(zhì)上,所述那個(gè)句柄/偏移量(handle/offset)列表可能不足以給調(diào)度程序充 分的信息,所述信息是關(guān)于其需要分割DMA緩沖區(qū)的內(nèi)存資源的信息。為了精確地了解在 DMA緩沖區(qū)中何時(shí)需要特定的內(nèi)存資源,所述調(diào)度程序可能還需要有關(guān)何時(shí)內(nèi)存資源被另 一個(gè)資源替代的信息。舉例來(lái)說(shuō),在第一結(jié)構(gòu)(texture)階段,DMA緩沖區(qū)的起始處可以包 含第一結(jié)構(gòu)(texture)即結(jié)構(gòu)A,它被位于中間處的第二結(jié)構(gòu)(texture)即結(jié)構(gòu)B所替代, 然后恢復(fù)成緩沖區(qū)末尾處的結(jié)構(gòu)A。調(diào)度程序可以使用此附加信息來(lái)將DMA緩沖區(qū)分到成 塊,這些塊將使用較少的內(nèi)存資源。然而,在上述情形中,也可能已經(jīng)在第一結(jié)構(gòu)階段中對(duì) 結(jié)構(gòu)B進(jìn)行了編排,而在這樣情況下,可能在使用結(jié)構(gòu)A的同時(shí)就已使用了所述結(jié)構(gòu)B,且不 應(yīng)該將它分成DMA緩沖區(qū)的獨(dú)立的子設(shè)備。在上述改進(jìn)方法中,為了實(shí)現(xiàn)分割DMA緩沖區(qū)所需的“細(xì)粒狀(finer grain),,臨 時(shí)信息,調(diào)度程序可以在整個(gè)DMA緩沖區(qū)中使用關(guān)于內(nèi)存資源使用的信息。在一個(gè)實(shí)施例 中,這可以當(dāng)內(nèi)核工作方式驅(qū)動(dòng)器為內(nèi)存資源列表中的每個(gè)項(xiàng)目提供資源標(biāo)識(shí)符時(shí)加以實(shí) 現(xiàn)。簡(jiǎn)單來(lái)說(shuō),資源標(biāo)識(shí)符是一個(gè)整數(shù)值,它表示將要如何使用特定的內(nèi)存資源。例如,值0 可表示內(nèi)存資源正在用作為描繪(render)目標(biāo),而值1可表示資源正在用作為Z緩沖區(qū)。 利用這一信息,調(diào)度程序能夠確定結(jié)構(gòu)B是否正在替代結(jié)構(gòu)A(例如,如果兩者都具有相同 的資源標(biāo)識(shí)符),或者確定在使用結(jié)構(gòu)A的同時(shí)是否將要使用結(jié)構(gòu)B (例如,A和B具有不同 的資源標(biāo)識(shí)符)。資源標(biāo)識(shí)符的實(shí)際值及其平均值可以由HV來(lái)定義,或者在軟件體系結(jié)構(gòu) 中提供上述值。這能有助于確保用作資源標(biāo)識(shí)符的值是基于零的,并且為所述驅(qū)動(dòng)器規(guī)定 其將在驅(qū)動(dòng)器初始化時(shí)使用的最大追索(recourse)標(biāo)識(shí)符值。圖5舉例說(shuō)明了調(diào)度程序是如何使用所提供的信息來(lái)為內(nèi)存資源定義時(shí)間安排 的,所述內(nèi)存資源被用于DMA緩沖區(qū)中。調(diào)度程序可以繼續(xù)使用所述時(shí)間安排來(lái)定義緩 沖區(qū)分割點(diǎn)。也許注意如下問(wèn)題是很重要的,所述問(wèn)題就是通常,DMA緩沖區(qū)應(yīng)該從當(dāng)前 內(nèi)存資源(即,當(dāng)前位于前一 DMA緩沖區(qū)末尾處的那個(gè)內(nèi)存)的“設(shè)置(setup)”或識(shí)別(identification)進(jìn)程開始。這個(gè)的理由就是內(nèi)存資源也許已經(jīng)因執(zhí)行前一 DMA緩沖區(qū) 而遷移,且因此可能需要被重新編程。直到調(diào)度DMA緩沖區(qū)以進(jìn)行處理之前,都可能需要對(duì) 內(nèi)存資源進(jìn)行重新編程。 正如圖5中舉例說(shuō)明的那樣,內(nèi)存資源列表可以包含許多個(gè)域。下列表提供了非 排他性的有效域的列表 分頁(yè)一般說(shuō)來(lái),在提交DMA緩沖區(qū)以待由協(xié)處理器執(zhí)行之前,將DMA緩沖區(qū)所引用的內(nèi) 存資源納入內(nèi)存。將所引用的內(nèi)存資源納入到內(nèi)存的進(jìn)程,稱作資源的分頁(yè)。分頁(yè)能夠涉 及到上述預(yù)備工作器線程與諸如內(nèi)核工作方式驅(qū)動(dòng)器這類驅(qū)動(dòng)器之間的交互。現(xiàn)在參照?qǐng)D 6,該圖6舉例說(shuō)明了預(yù)備工作器線程與輔助內(nèi)存管理器之間動(dòng)態(tài)性的偽算法。一般而言,當(dāng)已經(jīng)選定DMA緩沖區(qū)以進(jìn)行處理、并且已經(jīng)生成特定DMA緩沖區(qū)的資 源列表時(shí),將會(huì)出現(xiàn)分頁(yè)步驟。實(shí)施分頁(yè)是為了確定如何把內(nèi)存資源獲取到輔助內(nèi)存中,以 及確定在輔助內(nèi)存中的哪些位置放置這些內(nèi)存資源。分頁(yè)進(jìn)程可以由輔助內(nèi)存管理器來(lái)處理。輔助內(nèi)存管理器能夠使用提示(hint), 一旦創(chuàng)建了特定的配置,就選擇性地由內(nèi)核工作方式驅(qū)動(dòng)器來(lái)提供所述提示。創(chuàng)建所述提 示是為了在內(nèi)存中為內(nèi)存資源找到適當(dāng)?shù)奈恢?。存在幾個(gè)與分頁(yè)內(nèi)存資源相關(guān)的問(wèn)題。可能沒(méi)有充足的可用空閑輔助內(nèi)存來(lái)納入所有的資源,而在上述情況下,會(huì)驅(qū)逐當(dāng)前位于內(nèi)存中的一些資源。即使在驅(qū)逐輔助內(nèi)存中 的其它對(duì)象之后,對(duì)于所述DMA緩沖區(qū)而言,也可能沒(méi)有充足的內(nèi)存。在那種情況下,可以 把DMA緩沖區(qū)分成多個(gè)小塊,所述多個(gè)小塊需要很少的內(nèi)存資源。在分頁(yè)期間,輔助內(nèi)存管理器能夠構(gòu)造一列命令,這列命令可以用于將內(nèi)存資源 置于適當(dāng)?shù)奈恢?。舉例來(lái)說(shuō),可以根據(jù)下列操作來(lái)構(gòu)造此命令列表1)驅(qū)逐將特定的內(nèi)存資源從其當(dāng)前片段中移出并移動(dòng)至系統(tǒng)內(nèi)存,以便為另一 個(gè)資源騰出空間;2)頁(yè)入將特定的內(nèi)存資源從系統(tǒng)內(nèi)存引入到輔助內(nèi)存中的空閑單元。3)再定位將特定的內(nèi)存資源從一個(gè)輔助內(nèi)存單元移動(dòng)至另一個(gè)輔助內(nèi)存單元??梢栽试S輔助內(nèi)存管理器使用這些操作中的任何一個(gè),以便解決內(nèi)存布局問(wèn)題。 這是非排他性的。命令列表可以由輔助內(nèi)存管理器在分頁(yè)操作期間生成,并且在之后由調(diào) 度程序使用以生成分頁(yè)緩沖區(qū)。輔助內(nèi)存管理器能夠?yàn)橐匀魏畏绞奖辉俣ㄎ?、被?qū)逐或被 頁(yè)入或者反之被遷移或變更的任何內(nèi)存資源生成命令列表中的項(xiàng)目。在這點(diǎn)上,本發(fā)明的 各種實(shí)施例都可以提供命令列表中的下列域 分頁(yè)緩沖區(qū)生成利用上述命令列表,調(diào)度程序可以生成分頁(yè)緩沖區(qū),以執(zhí)行所述命令。結(jié)合本發(fā)明 使用的分頁(yè)緩沖區(qū)的各種實(shí)施例能夠按照?qǐng)D7中舉例說(shuō)明的那樣加以實(shí)現(xiàn)。正如圖7中舉例說(shuō)明的那樣,一些命令可能在它們被執(zhí)行以前需要進(jìn)行預(yù)處理, 而同時(shí)可以處理其它命令而無(wú)需進(jìn)行預(yù)處理。預(yù)處理能以包含在工作器線程中的許多方式 來(lái)完成。注意,在預(yù)處理命令的過(guò)程中,也許必須要等待,直到分頁(yè)緩沖區(qū)的一部分已被處 理完為止。在按圖7舉例說(shuō)明的模型中,工作器線程預(yù)備分頁(yè)緩沖區(qū)并為該分頁(yè)緩沖區(qū)操 控CPU預(yù)處理。當(dāng)在分頁(yè)緩沖區(qū)中的操作以前必須進(jìn)行CPU預(yù)處理時(shí),工作器線程塊就會(huì)對(duì) 協(xié)處理器中的分頁(yè)緩沖區(qū)進(jìn)行操作。繼而,它在重新啟動(dòng)分頁(yè)緩沖區(qū)以前,再一次提交CPU 請(qǐng)求,以完成所述操作。因此,對(duì)于命令列表中的每個(gè)命令來(lái)說(shuō),下列動(dòng)作可能是適當(dāng)?shù)脑诜猪?yè)緩沖區(qū)生成時(shí)進(jìn)行預(yù)處理;在分頁(yè)緩沖區(qū)中,在同步點(diǎn)處進(jìn)行CPU處理;“Blit”命令,以移動(dòng)內(nèi)存資源;一旦完成分頁(yè)緩沖區(qū),就對(duì)CPU工作進(jìn)行后處理。
參照上述可能動(dòng)作的列表,分頁(yè)緩沖區(qū)本身可以包含當(dāng)CPU處理一些工作時(shí)請(qǐng) 求協(xié)處理器停止的命令。這里,將這類產(chǎn)生中斷并使協(xié)處理器停止的命令稱為“塊柵欄 (fence)”。利用塊柵欄,能夠?qū)⒎猪?yè)緩沖區(qū)中的任何命令放在前面或放在后面。因?yàn)橹袛?并不是所希望的,所以可以通過(guò)把后操作柵欄聚集到緩沖區(qū)的末尾,來(lái)減少CPU可能中斷 協(xié)處理器的次數(shù)。調(diào)度程序?qū)?huì)檢測(cè)出在緩沖結(jié)束以前需要后操作柵欄(或“后柵欄”)的 情況,并且將其與命令的預(yù)操作柵欄(或“預(yù)柵欄”)合并在一起,所述命令將需要將被執(zhí)行 的后柵欄。注意,為了維護(hù)輔助內(nèi)存的相干性,不允許在處理分頁(yè)緩沖區(qū)的進(jìn)程中發(fā)生外部 中斷也許是有利的。因此,如果在分頁(yè)緩沖區(qū)被完全執(zhí)行以前時(shí)間片(quantum)期滿,那么 就可以允許該分頁(yè)緩沖區(qū)保持處于協(xié)處理器的控制下,直到完成它為止?,F(xiàn)在參照?qǐng)D8,該圖8是表示一連串的事件的偽算法,這一連串事件可能在工作器 線程中發(fā)生,所述工作器線程包括分頁(yè)緩沖區(qū)中的柵欄處理。結(jié)合圖8,以下列表提供了一 列歸納后的命令,這列命令可能在命令列表中發(fā)生,并且還提供了就預(yù)處理而言的那類命 令的可能分支、分頁(yè)緩沖區(qū)生成以及可能產(chǎn)生的任何終止柵欄。下列表僅僅是作為有用示 例來(lái)提供的,而不意味著它是可能命令的類型的排他性列表或是結(jié)合那些可能發(fā)生的動(dòng)作 的排他性列表。

注意,這里給出的調(diào)度模型可能需要顯著數(shù)量的非平凡的CPU處理,以保持協(xié)處 理器忙。此工作至少在某種程度上是現(xiàn)今存在的協(xié)處理器硬件的能力所必須的。未來(lái)圖形 硬件可以設(shè)計(jì)成具有更強(qiáng)的內(nèi)存虛擬化和協(xié)處理器調(diào)度。在這點(diǎn)上,已經(jīng)實(shí)現(xiàn)了幾項(xiàng)進(jìn)步, 并且也將結(jié)合本發(fā)明被公開。對(duì)于每個(gè)硬件能力,我們?yōu)樗龈倪M(jìn)解釋一下促動(dòng)因素以及對(duì)上述調(diào)度模型的影響。根據(jù)具體的實(shí)施方法,展現(xiàn)出了確定的改進(jìn)。注意,雖然在任何未 來(lái)模型中并不是必須支持所有這些方法,但是如果并且當(dāng)特定方法被實(shí)施時(shí),那么這里如 此所述的各種改進(jìn)就是為了提供將改進(jìn)采用到實(shí)施方法上的基礎(chǔ)??芍袛嘤布榱颂岣邊f(xié)處理器調(diào)度的可靠性,協(xié)處理器能夠支持細(xì)小的粒狀中斷,而不是整 個(gè)DMA緩沖區(qū)的中斷。例如,協(xié)處理器和支持硬件可以支持三角處理內(nèi)的中斷,而不是僅僅 在處理三角之前或處理三角之后的中斷。在此類可中斷硬件的各種實(shí)施例中,優(yōu)選的設(shè)計(jì)方法可能就是通過(guò)自動(dòng)地把協(xié)處 理器環(huán)境保存和恢復(fù)到輔助內(nèi)存,來(lái)提供協(xié)處理器的潛在完全的虛擬化。例如但不限于 每個(gè)協(xié)處理器環(huán)境都可以具有專用地址空間、在其中累積DMA緩沖區(qū)的專用環(huán)形緩沖區(qū)、 以及當(dāng)協(xié)處理器環(huán)境不運(yùn)行時(shí)保存硬件狀態(tài)的專用內(nèi)存塊。為了支持這些設(shè)置中的環(huán)境轉(zhuǎn) 換,調(diào)度程序能夠通過(guò)存儲(chǔ)映像注冊(cè)來(lái)向協(xié)處理器提供已保存環(huán)境的輔助內(nèi)存中的物理地 址。協(xié)處理器于是將那個(gè)協(xié)處理器環(huán)境載入,證實(shí)所有內(nèi)存資源都有效,然后執(zhí)行已在環(huán)形 緩沖區(qū)中累積的DMA緩沖區(qū),而當(dāng)它們遇到故障時(shí)載入需要的資源。結(jié)合上文,內(nèi)核工作方式驅(qū)動(dòng)器還能夠查詢未運(yùn)行的協(xié)處理器環(huán)境的狀態(tài)。這可 以通過(guò)檢查保存環(huán)境、通過(guò)使用“運(yùn)行列表”事件追蹤(如下所述)或通過(guò)任何查詢手段來(lái) 完成。在這點(diǎn)上所述驅(qū)動(dòng)器能夠確定有用的信息,比如(1)為何協(xié)處理器最近轉(zhuǎn)離特定環(huán) 境(例如,空、新運(yùn)行列表、頁(yè)面錯(cuò)誤)的理由;(2)硬件正在使用的內(nèi)存資源列表(如果支 持表面級(jí)故障的話);(3)故障地址(如果支持頁(yè)面級(jí)故障的話);以及(4)正已運(yùn)行特定 環(huán)境的協(xié)處理器時(shí)鐘循環(huán)次數(shù)。此外,內(nèi)核工作方式驅(qū)動(dòng)器能夠把新DMA緩沖區(qū)插入到當(dāng)前未運(yùn)行著的環(huán)境的環(huán) 當(dāng)中。在已保存的環(huán)境中,它還能夠修改所述環(huán)的位置,存儲(chǔ)在該環(huán)境中的頁(yè)表或任何其它 的物理內(nèi)存參考。舉例來(lái)說(shuō),隨著內(nèi)存中那些資源的移動(dòng),可能需要此類修改。每協(xié)處理器的環(huán)境虛擬地址空間上述基本調(diào)度模型的某種復(fù)雜性是由于如下事實(shí)協(xié)處理器環(huán)境可能正在共享 公共的協(xié)處理器地址空間。虛擬化這一地址空間的進(jìn)程中能夠提供較光滑的系統(tǒng)。在虛 擬化地址空間的過(guò)程中,輔助內(nèi)存管理器能夠來(lái)回移動(dòng)輔助內(nèi)存,甚至是徹底地從輔助內(nèi) 存當(dāng)中驅(qū)逐資源。那意味著對(duì)于資源而言,實(shí)際的協(xié)處理器可見的地址可能在其使用期 (lifetime)期間發(fā)生改變。因此,在用戶工作方式中構(gòu)造的命令緩沖區(qū)不能直接通過(guò)其地 址來(lái)引用分配(allocation),這是因?yàn)橹钡秸{(diào)度所述命令緩沖區(qū)以供執(zhí)行以前,那個(gè)地址 都有可能是未知的。例如,可以通過(guò)每協(xié)處理器的環(huán)境地址空間的用戶來(lái)消除上述基本調(diào)度模型的下 列要素(element)1)通過(guò)用實(shí)際位置替代句柄(handle)來(lái)修補(bǔ)命令緩沖區(qū)2)為內(nèi)存存取證實(shí)命令緩沖區(qū)3)在內(nèi)核工作方式中構(gòu)造內(nèi)存資源列表4)創(chuàng)建獨(dú)立的命令以及DMA緩沖區(qū)5)把被中斷的DMA緩沖區(qū)的資源引回預(yù)中斷位置在提供每協(xié)處理器的環(huán)境虛擬地址空間的過(guò)程中,特定協(xié)處理器環(huán)境內(nèi)的配置能夠獲得它們自己在那個(gè)環(huán)境的地址空間內(nèi)的唯一地址。在配置的使用期期間,不會(huì)要求改 變地址。因此,命令緩沖區(qū)能夠直接引用那個(gè)地址并且不需要修補(bǔ)。對(duì)具備已證實(shí)并且已 復(fù)制到DMA存取緩沖區(qū)中的命令緩沖區(qū)的需要也將會(huì)消失。由于DMA緩沖區(qū)中的內(nèi)存引用 將會(huì)在協(xié)處理器的虛擬地址空間中發(fā)生,而且地址空間實(shí)際上將被專用于任何協(xié)處理器環(huán) 境,因而將不必為有效性而證實(shí)內(nèi)存引用,且因此也不必在DMA緩沖區(qū)中隱藏已證實(shí)的命 令緩沖區(qū)內(nèi)容,所述DMA緩沖區(qū)對(duì)于應(yīng)用程序而言是不可見的。硬件可以將未由配置或已 驅(qū)逐配置占用的地址空間(句柄或物理地址)重定向至假頁(yè)面(dummy page)或者引起引 用故障。這將能保護(hù)內(nèi)核工作方式內(nèi)存的安全性,這是因?yàn)樗鲞@些環(huán)境將沒(méi)有機(jī)會(huì)訪問(wèn) 那些它們不應(yīng)該訪問(wèn)的內(nèi)存。每協(xié)處理器的環(huán)境虛擬地址空間的其中一些優(yōu)點(diǎn)如下在分配(allocation)時(shí), 每個(gè)分配都將獲得協(xié)處理器可見的地址(或句柄)。將不存在命令緩沖區(qū);對(duì)于用戶工作 方式驅(qū)動(dòng)器而言,DMA緩沖區(qū)將是直接可見的,并且可由用戶工作方式驅(qū)動(dòng)器來(lái)填充。DMA 緩沖區(qū)將直接引用其使用的分配的地址(或句柄)。用于分頁(yè)的資源列表將由用戶工作方 式驅(qū)動(dòng)器構(gòu)造?;叵胍幌氯缭趫D3中闡述的本發(fā)明各種實(shí)施例的模型以及相應(yīng)的說(shuō)明??梢岳?可中斷硬件和/或每協(xié)處理器的環(huán)境虛擬地址空間來(lái)進(jìn)一步地改進(jìn)這個(gè)模型。在這點(diǎn)上, 除了本發(fā)明的附加進(jìn)步所進(jìn)一步改進(jìn)的地方之外,以下部分描述了與圖3相類似地基本原理。表面分配以及解除分配在高級(jí)模型中,輔助內(nèi)存管理器、比如處于內(nèi)核工作方式中的視頻內(nèi)存管理器 "VidMm"能夠?yàn)閰f(xié)處理器環(huán)境提供虛擬地址空間,并且能夠管理各種協(xié)處理器環(huán)境中間的 物理內(nèi)存,以便它們能夠獲得應(yīng)得的那份內(nèi)存。圖9中描繪出了在基本模型的分配方案上 的這一改進(jìn)的各種實(shí)施例。圖9舉例說(shuō)明了使用本領(lǐng)域技術(shù)人員所熟知的術(shù)語(yǔ)的本發(fā)明實(shí) 施例,因?yàn)樗嫌诒炯夹g(shù)領(lǐng)域中所公認(rèn)的概念。舉例來(lái)說(shuō),“VidMm”為視頻內(nèi)存管理器, 而“Trumk接口 ”是形實(shí)轉(zhuǎn)換程序接口。然而,請(qǐng)注意,盡管這個(gè)術(shù)語(yǔ)是用來(lái)更清楚解釋本發(fā) 明的,但是不應(yīng)該將它理解成是意圖限制本發(fā)明的體現(xiàn)。因此,“VidMm”可以是任何輔助內(nèi) 存的內(nèi)存管理器,而“ Thunk接口 ”可以是任何適當(dāng)?shù)慕涌诘鹊取=Y(jié)合圖9,所述高級(jí)模型允許DMA緩沖區(qū)被直接映射到應(yīng)用程序的地址空間中, 這選擇性地使它們可直接由用戶工作方式驅(qū)動(dòng)器訪問(wèn)。用戶工作方式驅(qū)動(dòng)器利用它需要 訪問(wèn)的每個(gè)內(nèi)存資源的永久性虛擬地址或句柄(handle),將描繪描繪原語(yǔ)(rendering primitive)直接批處理到DMA緩沖區(qū)(所以不需要進(jìn)行修補(bǔ))。用戶工作方式驅(qū)動(dòng)器還構(gòu) 造一列DMA緩沖區(qū)正在使用的內(nèi)存資源,以便輔助內(nèi)存管理器能夠在DMA緩沖區(qū)被調(diào)度之 前將那些內(nèi)存資源引入到輔助內(nèi)存中。如果惡意應(yīng)用程序修改了資源列表,那么將不能恰 當(dāng)?shù)匕颜_的資源組頁(yè)入。注意,這未必會(huì)中斷存儲(chǔ)保護(hù)模型,這是因?yàn)榭赡苄枰丛L問(wèn)有 效內(nèi)存的地址空間范圍訪問(wèn)假存儲(chǔ)頁(yè)面或者令硬件產(chǎn)生故障并停止執(zhí)行特定協(xié)處理器環(huán) 境。不論發(fā)生那一種情況,破壞的資源列表都不必產(chǎn)生能夠訪問(wèn)另一個(gè)環(huán)境的內(nèi)存的協(xié)處 理器環(huán)境。在高級(jí)模型中,用戶工作方式驅(qū)動(dòng)器將DMA緩沖區(qū)提交給內(nèi)核工作方式驅(qū)動(dòng)器, 該內(nèi)核工作方式驅(qū)動(dòng)器又將DMA緩沖區(qū)提交給調(diào)度程序。在請(qǐng)求內(nèi)存管理器將資源頁(yè)入至資源列表中后,調(diào)度程序按現(xiàn)狀將DMA緩沖區(qū)發(fā)送到硬件。高級(jí)模型中的調(diào)度高級(jí)模型中的調(diào)度非常類似于基本模型中的調(diào)度。在DMA緩沖區(qū)被提交給協(xié)處理 器以前,仍然存在有預(yù)備DMA緩沖區(qū)的工作器線程。然而,在高級(jí)模型中,附有工作器線程 的工作僅需限制于分頁(yè)操作?,F(xiàn)在參照?qǐng)D10和圖11,該圖10和圖11是基本模型中的調(diào)度以及高級(jí)模型中的調(diào) 度的實(shí)施例。正如將變得顯而易見的是,高級(jí)模型具有兩個(gè)調(diào)度選擇。當(dāng)在沒(méi)有需求故障 的情況下進(jìn)行調(diào)度時(shí),能夠?qū)崿F(xiàn)預(yù)備階段。然而,當(dāng)高級(jí)模型使用需求故障時(shí),就不必實(shí)現(xiàn) 預(yù)備階段了。此外,圖12(A)、12 (B)并12(C)提供了能實(shí)現(xiàn)高級(jí)調(diào)度模型的示范性偽代碼的流 程圖。頁(yè)入高級(jí)模型頁(yè)入高級(jí)模型不同于頁(yè)入基本模型。在高級(jí)模型中,早已知道正在分頁(yè)的分配地 址,而內(nèi)存管理器僅僅需要使其有效。為了讓資源列表中的分配有效,內(nèi)存管理器需要發(fā)現(xiàn) 大范圍的空閑的物理輔助內(nèi)存,并且請(qǐng)求所述驅(qū)動(dòng)器將頁(yè)表或句柄映射到那個(gè)范圍中。如 有必要,物理內(nèi)存的范圍可能就需要是一組連續(xù)頁(yè)面。如果沒(méi)有足夠的物理視頻內(nèi)存可以用來(lái)使分配有效,那么這里稱為VidMm的輔助 內(nèi)存管理器就會(huì)使某個(gè)當(dāng)前的有效分配被驅(qū)逐出去。當(dāng)分配被驅(qū)逐時(shí),其內(nèi)容被轉(zhuǎn)入系統(tǒng) 內(nèi)存(假定它尚不在系統(tǒng)內(nèi)存中),然后其使虛擬地址或句柄無(wú)效。虛擬地址空間結(jié)合本發(fā)明可以使用本技術(shù)領(lǐng)域中的或者未來(lái)將開發(fā)的任何用于提供虛擬地址 空間的已知技術(shù)。為了示范說(shuō)明在其中能使用此類地址空間的方法,在這里提供了使用公 共虛擬地址空間技術(shù)的兩個(gè)示例。應(yīng)當(dāng)理解的是,存在多種方法來(lái)為協(xié)處理器創(chuàng)建虛擬地 址空間,而且本領(lǐng)域的技術(shù)人員將能從這里所提供的示例中推導(dǎo)出來(lái)。在這點(diǎn)上,在這里描 述了使用可變長(zhǎng)度平面頁(yè)表和多級(jí)頁(yè)表的虛擬地址空間??勺冮L(zhǎng)度平面頁(yè)表。在圖13中舉例說(shuō)明了本發(fā)明結(jié)合可變長(zhǎng)度平面頁(yè)表的使用。 在此方法中,通過(guò)使用平面頁(yè)表來(lái)將協(xié)處理器的地址空間虛擬化。虛擬地址空間能夠被分 成預(yù)定內(nèi)存數(shù)量的頁(yè)面,比如4KB。對(duì)于虛擬地址空間中的每一個(gè)頁(yè)面而言,提供包含標(biāo)識(shí) 符的頁(yè)表,比如64位項(xiàng)目,以用來(lái)規(guī)定關(guān)聯(lián)的物理內(nèi)存的物理地址及位置(例如,加速圖形 接口(AGP)、外設(shè)部件互連(PCI)或視頻)。在一個(gè)實(shí)施例中,協(xié)處理器所支持的頁(yè)面大小 不是任意的,而必須為4KB,這是為了允許協(xié)處理器頁(yè)表能夠訪問(wèn)系統(tǒng)內(nèi)存頁(yè)面。此外,在這 個(gè)實(shí)施例中,協(xié)處理器頁(yè)表必須既能夠?qū)ぶ穪?lái)自于同一地址空間的本地視頻內(nèi)存和系統(tǒng)內(nèi) 存。協(xié)處理器可以要求所有屬于單個(gè)表面的頁(yè)面都被映射到單一類型的內(nèi)存中。例如,協(xié) 處理器能夠要求所有屬于特定描繪描繪目標(biāo)的頁(yè)面被映射到本地視頻內(nèi)存中。然而,將表 面映射到多種物理內(nèi)存類型(AGP、本地視頻等等)的頁(yè)表項(xiàng)目能夠共存于所述頁(yè)表當(dāng)中。對(duì)于PCI和AGP適配器而言,每個(gè)頁(yè)表項(xiàng)目的示范性實(shí)施例都可以包含32位,其 允許完全4GB的物理地址空間都能由協(xié)處理器可見。對(duì)于使用PCI專用類型的適配器的實(shí) 施例而言,協(xié)處理器可以支持64位尋址周期。每個(gè)頁(yè)表項(xiàng)目都可以包含40位或更多位,以 尋址內(nèi)存的每個(gè)千兆字節(jié)。如果相應(yīng)的視頻適配器不能尋址整個(gè)地址空間的話,那么實(shí)現(xiàn)與主板毗連的64位系統(tǒng)的實(shí)施例就可能會(huì)經(jīng)受性能損失(performance penalty),所述64 位系統(tǒng)使用了多于40位的物理地址。因此,建議它支持全64位。除了沒(méi)有頁(yè)面目錄之外,平面頁(yè)表方法類似于INTEL 8086 (x86)族CPU上現(xiàn)用 的虛擬化機(jī)制,僅有巨大的頁(yè)表。與有效分配無(wú)關(guān)聯(lián)的虛擬地址能夠被重定向到假頁(yè)面,以防止讓惡意DMA緩沖區(qū) 強(qiáng)制協(xié)處理器存取它不該存取的內(nèi)存。所述硬件能夠?qū)崿F(xiàn)每一個(gè)頁(yè)表項(xiàng)目中的有效位,該 有效位規(guī)定了所述項(xiàng)目是否有效。當(dāng)關(guān)聯(lián)的協(xié)處理器環(huán)境當(dāng)前未在協(xié)處理器上運(yùn)行時(shí),頁(yè)表可以是可重定位的。當(dāng) 所述環(huán)境未運(yùn)行時(shí),VidMm能夠?qū)㈨?yè)表驅(qū)逐到系統(tǒng)內(nèi)存。當(dāng)所述環(huán)境即將再次運(yùn)行時(shí),可將 頁(yè)表引回到視頻內(nèi)存,但卻是在可能不同的位置。所述驅(qū)動(dòng)器也許能更新保存協(xié)處理器環(huán) 境中頁(yè)表的位置。在這個(gè)實(shí)施例中,所有的內(nèi)存存取都可能經(jīng)由協(xié)處理器虛擬地址發(fā)生。然而,它不 應(yīng)該暗指本發(fā)明要求這類存取??梢砸云渌椒▉?lái)存取某些要素,如果以其它方法來(lái)存取 的話,甚至可以提供增強(qiáng)的功能。可能從虛擬地址方案當(dāng)中被舍掉的項(xiàng)目的一些示例是1)經(jīng)由物理地址可以訪問(wèn)頁(yè)表本身。2)陰極射線管(CRT)可以被編排成連續(xù)內(nèi)存范圍的物理地址。3)虛擬打印引擎(VPE)能夠直接對(duì)物理地址執(zhí)行DMA。4)重復(fù)占位程序段(Overlay)能夠從物理地址上直接讀取。5)能夠經(jīng)由物理地址來(lái)引用協(xié)處理器環(huán)境。6)能夠經(jīng)由物理地址來(lái)引用主環(huán)形緩沖區(qū)。注意,在環(huán)境轉(zhuǎn)換期間,協(xié)處理器能夠?qū)φ换謴?fù)的環(huán)境正使用的虛擬地址進(jìn)行 重譯。這將確保內(nèi)存資源位于適當(dāng)位置,而不是允許協(xié)處理器產(chǎn)生潛在地錯(cuò)誤假設(shè),即當(dāng)在 環(huán)境轉(zhuǎn)換之前時(shí)那些地址正在訪問(wèn)相同的物理頁(yè)面。還應(yīng)注意的是,結(jié)合本發(fā)明的各種實(shí) 施例,將會(huì)有益于允許單個(gè)頁(yè)表中或是跨過(guò)多個(gè)頁(yè)表的多個(gè)項(xiàng)目訪問(wèn)同一個(gè)物理頁(yè)面。在各種實(shí)施例中,協(xié)處理器可以實(shí)現(xiàn)給定頁(yè)表當(dāng)前尺寸的界限寄存器。經(jīng)過(guò)頁(yè)表 末尾存取的任何內(nèi)存都能被視為協(xié)處理器的無(wú)效存取并按此予以對(duì)待。頁(yè)表可以按2的冪 加以擴(kuò)大,并且在一個(gè)實(shí)施例中,能夠支持至少2GB的地址空間(2MB的頁(yè)表)。如果與協(xié)處理器環(huán)境相關(guān)聯(lián)的虛擬地址空間變得支離破碎,那么API,例如 MICROSOFT Direct3D Runtime,就能執(zhí)行垃圾回收,以減少地址空間以及相關(guān)頁(yè)表的 尺寸。在高位虛擬地址的分配將被刪除并再分配到較低位的地址。結(jié)合本發(fā)明使用可變長(zhǎng)度平面頁(yè)表來(lái)實(shí)現(xiàn)虛擬地址空間的優(yōu)點(diǎn)和缺點(diǎn),應(yīng)當(dāng)對(duì)本 領(lǐng)域的技術(shù)人員來(lái)說(shuō)是顯而易見的。綜上所述,使用平面頁(yè)表的一個(gè)優(yōu)點(diǎn)就是僅僅存在對(duì) 物理內(nèi)存的一級(jí)間接尋址。另一個(gè)優(yōu)點(diǎn)是可以利用一組不連續(xù)的頁(yè)面來(lái)解決分頁(yè)。然而, 也存在缺點(diǎn)。例如,當(dāng)協(xié)處理器正在運(yùn)行時(shí),整個(gè)頁(yè)表通常都將需要存在于內(nèi)存中。此外, 頁(yè)表還會(huì)耗費(fèi)大量的內(nèi)存??赡茈y以確定頁(yè)表,因?yàn)樗ǔP枰獌?nèi)存中的一組連續(xù)頁(yè)面。多級(jí)頁(yè)表。在圖14中舉例說(shuō)明了本發(fā)明結(jié)合多級(jí)頁(yè)表的使用。多級(jí)頁(yè)表通???類似于可變長(zhǎng)度平面頁(yè)表,然而在多級(jí)頁(yè)表中,虛擬地址的變址部分跨過(guò)多個(gè)表而分裂。例 如,各種實(shí)施例都可以使用32位地址空間。在這種情況下,可以要求硬件具有二級(jí)間接尋 址。間接尋址的第一級(jí)稱為頁(yè)面目錄,而第二級(jí)稱為頁(yè)表。當(dāng)協(xié)處理器正在運(yùn)行特定環(huán)境時(shí),僅僅是在資源列表中分配所需的環(huán)境和頁(yè)表的頁(yè)面目錄必須存在于內(nèi)存中。將會(huì)認(rèn)識(shí)到的是,提供結(jié)合本發(fā)明的多級(jí)頁(yè)表的一個(gè)優(yōu)點(diǎn)就是能夠利用一組不 連續(xù)的頁(yè)面來(lái)解決分頁(yè)。同樣,分配能夠?qū)?lái)自于系統(tǒng)視頻內(nèi)存和本地視頻內(nèi)存的頁(yè)面混 合,只有使用中的頁(yè)面目錄和頁(yè)表需要存在于內(nèi)存中,并且頁(yè)面目錄和頁(yè)表中的每一個(gè)都 僅僅需要一個(gè)頁(yè)面(不需要多個(gè)頁(yè)面鄰接分配)。然而,盡管存在這些優(yōu)點(diǎn),但是仍存在存 取內(nèi)存需要兩次間接尋址的缺點(diǎn)。表面級(jí)故障在具有額外的每協(xié)處理器的環(huán)境虛擬地址空間的情況下,高級(jí)調(diào)度模型就能相當(dāng) 好地進(jìn)行工作,并且通常不需要更多的CPU開銷,特別是當(dāng)有一點(diǎn)或無(wú)內(nèi)存壓力時(shí)。時(shí)常, 當(dāng)DMA緩沖區(qū)能夠被提交給調(diào)度程序時(shí),其訪問(wèn)的資源早已存在于內(nèi)存中,并且由此DMA 緩沖區(qū)不需要由分頁(yè)線程進(jìn)行任何分頁(yè)。然而,就調(diào)度而言,能夠進(jìn)一步地通過(guò)提高計(jì)時(shí) (time keeping)的準(zhǔn)確度來(lái)改進(jìn)該模型。在實(shí)現(xiàn)本發(fā)明的過(guò)程中所遇到的一個(gè)問(wèn)題就是它也許不能預(yù)先知道特定DMA緩 沖區(qū)將花費(fèi)多久時(shí)間來(lái)執(zhí)行。這可能會(huì)導(dǎo)致調(diào)度程序?yàn)橄乱粋€(gè)DMA緩沖區(qū)預(yù)備時(shí)的潛在低 劣選擇。如果沒(méi)有別的環(huán)境處于與當(dāng)前環(huán)境相同的優(yōu)先級(jí)或較高優(yōu)先級(jí),或者如果處于那 個(gè)優(yōu)先級(jí)的所有其它環(huán)境都為空,那么調(diào)度程序就可以從當(dāng)前環(huán)境中挑選下一個(gè)DMA緩沖 區(qū)。否則,調(diào)度程序就可以從具有與當(dāng)前環(huán)境相同優(yōu)先級(jí)的或較高優(yōu)先級(jí)的下一個(gè)環(huán)境中 挑選下一個(gè)DMA緩沖區(qū)。然而,那個(gè)選擇不能保證是準(zhǔn)確的。當(dāng)從下一個(gè)較高優(yōu)先級(jí)環(huán)境 中選擇DMA緩沖區(qū)時(shí),調(diào)度程序可以假定當(dāng)前環(huán)境的DMA緩沖區(qū)將運(yùn)行比一個(gè)時(shí)間片更長(zhǎng) 的時(shí)間。如果不是這種情況的話,調(diào)度程序就可能會(huì)過(guò)快地轉(zhuǎn)離那個(gè)硬件環(huán)境。在當(dāng)前DMA 緩沖區(qū)運(yùn)行時(shí)間少于一個(gè)時(shí)間片的情況下,調(diào)度程序應(yīng)該已經(jīng)從當(dāng)前環(huán)境中選擇了下一個(gè) DMA緩沖區(qū)(因?yàn)檫@將已把協(xié)處理器的有效利用最大化了)。當(dāng)有一點(diǎn)或無(wú)內(nèi)存壓力時(shí),一般說(shuō)來(lái),對(duì)下一個(gè)DMA緩沖區(qū)的兩種可能候選早就 可以讓它們的資源存在于內(nèi)存中了,所以緩沖區(qū)很可能也不需要分頁(yè)。在那種情況下,當(dāng)?shù)?一 DMA緩沖區(qū)的時(shí)間片結(jié)束時(shí),調(diào)度程序能夠意識(shí)到它的錯(cuò)誤,立即改變它的想法,并將正 確的DMA緩沖區(qū)給予協(xié)處理器。然而,在內(nèi)存壓力下,該模型可能變得不太穩(wěn)定。在確保平穩(wěn)運(yùn)轉(zhuǎn)的進(jìn)程中,下一 個(gè)DMA緩沖區(qū)的“尺寸調(diào)節(jié)(sizing)”可能變成了一個(gè)優(yōu)選的步驟。在內(nèi)存壓力下,對(duì)于需 要某種分頁(yè)且由此而被發(fā)送給預(yù)備線程的下一個(gè)DMA緩沖區(qū)兩種可能候選的而言,在先前 描述情形下的幾率是兩種可能候選的其中一種。在那種情況下,對(duì)于調(diào)度程序而言,在最后 一刻“改變其想法”并且交換兩個(gè)DMA緩沖區(qū)的作法通常是不可取的。然而,請(qǐng)注意,可以 作出這類改變,并且這種實(shí)施不超出本發(fā)明的說(shuō)明書范圍。例如,在完成預(yù)備下一個(gè)DMA緩 沖區(qū)并且其它可能的DMA緩沖區(qū)候選不需要分頁(yè)的情況下,就可以交換DMA緩沖區(qū)。這可 能暗指可由輔助內(nèi)存管理器共享的分配的某種特定支持,但是它是明顯可能的。自然而然的是,上述潛在的計(jì)時(shí)誤差不是非常壞的,并且可能通過(guò)給定環(huán)境來(lái)繞 過(guò)它在連續(xù)時(shí)間片期間遺漏的處理時(shí)間。同樣,在大多數(shù)情況下,DMA緩沖區(qū)包含足夠的命 令以供多個(gè)協(xié)處理器時(shí)間片運(yùn)行用,所以每個(gè)環(huán)境都可以獲得其完全的時(shí)間片。然而,在內(nèi) 存壓力下,輔助內(nèi)存管理器可能要被迫將DMA緩沖區(qū)(如上所述)分割成更小的緩沖區(qū),以 便于減少每個(gè)環(huán)境的工作區(qū)。這種DMA緩沖區(qū)的分割減少了 DMA緩沖區(qū)的尺寸,并且相應(yīng)地增加了上述的量化問(wèn)題。在內(nèi)存壓力下,可能出現(xiàn)的另一個(gè)問(wèn)題是所述模型可以人工地引起額外壓力,這 是因?yàn)闈撛诘卮嬖诒葘?shí)際由DMA緩沖區(qū)使用的更多的獲得頁(yè)入的內(nèi)存。所有被頁(yè)入的額外 內(nèi)存都將可能在下一個(gè)時(shí)間片到來(lái)以前遭到驅(qū)逐,并且將需要再一次被頁(yè)入。當(dāng)分頁(yè)活動(dòng) 早已很高時(shí),這可能會(huì)導(dǎo)致增多的分頁(yè)活動(dòng)。在基本模型和高級(jí)模型中,輔助內(nèi)存管理器可 以通過(guò)選擇適當(dāng)?shù)尿?qū)逐策略來(lái)面對(duì)增多分頁(yè)的問(wèn)題。例如,在輕的內(nèi)存壓力下,每個(gè)環(huán)境在 其工作區(qū)中很可能都具有適當(dāng)數(shù)量的內(nèi)存。在從其它的環(huán)境中驅(qū)逐內(nèi)存以前,輔助內(nèi)存管 理器可以試圖從第一當(dāng)前環(huán)境中驅(qū)逐內(nèi)存,并分割其DMA緩沖區(qū),以便使其在可用工作區(qū) 中大小適宜。一旦特定環(huán)境的DMA緩沖區(qū)正被分割成其最小尺寸,就讓輔助內(nèi)存管理器不 作選擇而是從另一個(gè)環(huán)境中驅(qū)逐內(nèi)存。解決這個(gè)問(wèn)題的一個(gè)優(yōu)選的方法就是,允許協(xié)處理器所需的內(nèi)存的需求故障。那 樣,我們就能夠確保只有協(xié)處理器所需的內(nèi)存子設(shè)備存在于內(nèi)存中。為高級(jí)模型而建議的故障級(jí)是以表面粒度為準(zhǔn)的。然而,應(yīng)當(dāng)理解的是,任何故障 級(jí)都可適合結(jié)合本發(fā)明的使用。同樣,還要注意到由于輔助內(nèi)存管理器會(huì)在內(nèi)存中同時(shí)產(chǎn) 生整體分配,因而就頁(yè)表硬件來(lái)說(shuō),硬件只得查看分配的第一頁(yè)面的狀態(tài),以便判斷分配是 否有效。在各種實(shí)施例中,當(dāng)以下幾種情況出現(xiàn)時(shí),硬件可能會(huì)產(chǎn)生頁(yè)面錯(cuò)誤1)到訪問(wèn)無(wú)效環(huán)形緩沖區(qū)或DMA緩沖區(qū)的環(huán)境轉(zhuǎn)換發(fā)生。2)即將形成的原語(yǔ)以及一些所需的內(nèi)存資源不存在(例如,頂shader代碼、頂緩 沖區(qū)、結(jié)構(gòu)(texture))。注意,在第二種情況下,可能需要硬件在描繪描繪每個(gè)三角關(guān)系以前重采樣其當(dāng) 前的內(nèi)存資源。輔助內(nèi)存管理器將可以隨時(shí)地使虛擬地址或句柄無(wú)效,包括當(dāng)協(xié)處理器正 在運(yùn)行的時(shí)候。同時(shí),也期望硬件可以允許查詢所有它當(dāng)前正在使用的內(nèi)存資源。輔助內(nèi) 存管理器可以使用那個(gè)信息來(lái)判斷何時(shí)特定分配可以被硬件使用。輔助內(nèi)存管理器可以假 定如果分配在使其虛擬地址或句柄無(wú)效之后、未出現(xiàn)在當(dāng)前正由協(xié)處理器使用的資源的 列表中,那么它必定驅(qū)逐那個(gè)分配,這是因?yàn)閰f(xié)處理器無(wú)法訪問(wèn)那個(gè)分配。試圖這樣做會(huì)引 起頁(yè)面錯(cuò)誤。通過(guò)以下對(duì)表面級(jí)故障模型的更詳述解釋,進(jìn)一步解釋了對(duì)結(jié)合本發(fā)明的表面級(jí) 故障的使用。下列模型只是一些實(shí)施例的示例,而不應(yīng)該把它視作是對(duì)本發(fā)明的可能使用 的限制或是對(duì)結(jié)合這里所提供的調(diào)度模型環(huán)境以外的其它應(yīng)用程序的表面級(jí)故障概念的 使用的限制。首先,內(nèi)存資源的分配方案可以與在本篇的每協(xié)處理器的環(huán)境虛擬地址空間部分 中描述的分配方案相同。可以參看那個(gè)部分的詳細(xì)描述。其次,DMA緩沖區(qū)和資源列表的描繪描繪命令方案也與在本篇的每協(xié)處理器的環(huán) 境虛擬地址空間部分中解釋的描繪描繪命令方案相同。在這個(gè)模型中,即使圖形硬件支持 表面級(jí)故障,但也仍需要資源列表。輔助內(nèi)存管理器(在此是“VidMm”)利用資源列表來(lái)獲 得關(guān)于內(nèi)存分配的使用信息。當(dāng)需要在內(nèi)存中騰出空間時(shí),此使用信息允許VidMm為驅(qū)逐 而確定候選者。在具有額外的表面級(jí)故障的情況下,不存在有關(guān)資源列表的安全性關(guān)系,所以就能夠以用戶工作方式來(lái)構(gòu)造它。如果惡意應(yīng)用程序?qū)o(wú)效數(shù)據(jù)放入到資源列表中,那么可 能發(fā)生的最壞情況就是將遭受惡意應(yīng)用程序的運(yùn)行。VidMm可能會(huì)為驅(qū)逐而提出關(guān)于候選 者的不合邏輯的選擇,這將會(huì)為那個(gè)應(yīng)用程序帶來(lái)額外的分頁(yè)活動(dòng)。帶有表面的需求故障的調(diào)度模型可能在許多方面不同于那些未使用表面級(jí)故障 的模型。一般說(shuō)來(lái),可以將就緒表中的進(jìn)程直接提交給協(xié)處理器,而不需要預(yù)備階段。調(diào)度 程序可以為那些要求此頁(yè)面錯(cuò)誤被解決的環(huán)境維護(hù)專用列表以及分頁(yè)線程。存在有被用來(lái) 分頁(yè)操作的特定VidMm的協(xié)處理器環(huán)境。最后,使提交給環(huán)境的DMA緩沖區(qū)連接起來(lái),以形 成單個(gè)工作項(xiàng)目。在這個(gè)模型中,可以消除預(yù)備階段。調(diào)度程序可以請(qǐng)求協(xié)處理器直接從一個(gè)環(huán)境 切換到另一個(gè)環(huán)境,并且假定所有環(huán)境都已就緒,以待隨時(shí)地執(zhí)行。如果正在轉(zhuǎn)入的環(huán)境沒(méi) 有讓其所有的內(nèi)存資源都存在于內(nèi)存中,那么硬件就可能發(fā)生故障,并且該環(huán)境將被加到 列表(比如,頁(yè)入列表,參看圖15)中,以便分頁(yè)線程能夠開始解決所述故障。在圖15中舉例說(shuō)明了結(jié)合這個(gè)模型的由調(diào)度程序維護(hù)的一列示范性進(jìn)程?,F(xiàn)在 參照?qǐng)D15,當(dāng)故障發(fā)生時(shí),就能夠?qū)⒁鹪摴收系沫h(huán)境添加到頁(yè)入列表中。然后,分頁(yè)線程 解決該故障。分頁(yè)線程能夠選擇出現(xiàn)故障的最高優(yōu)先級(jí)的環(huán)境,以便首先加以解決。可以 使用循環(huán)優(yōu)先級(jí)推進(jìn)來(lái)確保低優(yōu)先環(huán)境將最終能獲得足夠高的優(yōu)先級(jí),以便讓它們的故障 得以解決。當(dāng)頁(yè)入工作器線程正在解決這些故障時(shí),調(diào)度程序可以調(diào)度更多待在協(xié)處理器 上執(zhí)行的環(huán)境。當(dāng)協(xié)處理器正在工作時(shí),頁(yè)入工作器線程能夠通過(guò)調(diào)用驅(qū)動(dòng)器從地址處映 射或解除映射分配,來(lái)操縱視頻內(nèi)存??梢宰尞?dāng)前協(xié)處理器正在使用的分配變?yōu)闊o(wú)效。下次協(xié)處理器試圖訪問(wèn)這種分配 時(shí),它將會(huì)發(fā)生故障。然而,由于協(xié)處理器不能在任意時(shí)間立即發(fā)生故障(例如,一些協(xié)處 理器將僅對(duì)三角關(guān)系間的當(dāng)前分配的狀態(tài)進(jìn)行重采樣),因而存在這樣的可能,即協(xié)處理器 將在它已經(jīng)被無(wú)效掉之后需要一段時(shí)間來(lái)使用分配。為了防止這種情況發(fā)生,VidMm可以確保用于分配的內(nèi)存保持有效,直到下一個(gè)環(huán) 境轉(zhuǎn)換為止,即使它的虛擬地址或句柄已經(jīng)被無(wú)效了。這可以通過(guò)因在專用VidMm協(xié)處理 器環(huán)境中作了分頁(yè)而進(jìn)行清除來(lái)實(shí)現(xiàn)。由于清除是在獨(dú)立的環(huán)境中完成的,因而我們能夠 肯定的是將在內(nèi)存內(nèi)容被改變之前存在環(huán)境轉(zhuǎn)換。對(duì)于訪問(wèn)系統(tǒng)內(nèi)存的虛擬地址或句柄 而言,在驅(qū)逐期間沒(méi)有清除。在那種情況下,VidMm可以通過(guò)保持它受約束(pinned down) 而確保系統(tǒng)內(nèi)存保持有效,直到協(xié)處理器環(huán)境轉(zhuǎn)換到VidMm的專用環(huán)境。專用VidMm的協(xié)處理器環(huán)境是常規(guī)的協(xié)處理器環(huán)境,它被VidMm使用以完成系統(tǒng) 內(nèi)存與視頻內(nèi)存之間的清除。VidMm環(huán)境是可變優(yōu)先級(jí)的環(huán)境,它在頁(yè)入列表中持有最高優(yōu) 先級(jí)項(xiàng)目的優(yōu)先級(jí)。在單一環(huán)境中擁有串行化后的所有分頁(yè)操作,簡(jiǎn)化了 VidMm的同步模 型(synchronization model)0在這個(gè)模型中,另一個(gè)引起關(guān)注的差異就是所有為特定環(huán)境提交的DMA緩沖區(qū) 都能夠被連接起來(lái)以形式單個(gè)任務(wù)的方式。在上述模型中,形成工作項(xiàng)目的每個(gè)DMA緩沖 區(qū)以及每個(gè)環(huán)境都將維護(hù)那些工作項(xiàng)目的列表。調(diào)度程序?qū)⒉槐卣{(diào)度該環(huán)境;它將為與環(huán) 境相關(guān)聯(lián)的特定工作項(xiàng)目進(jìn)行調(diào)度(并啟動(dòng)預(yù)備)。在那個(gè)工作項(xiàng)目有機(jī)會(huì)完成之前,該調(diào) 度程序?qū)⒁呀?jīng)選擇了下一個(gè)工作項(xiàng)目。每個(gè)工作項(xiàng)目都不得不在它被提交之前加以預(yù)備, 這樣調(diào)度程序就必須預(yù)先知道下一個(gè)工作項(xiàng)目應(yīng)該是什么,這并不總是可能的。
利用表面級(jí)故障,DMA緩沖區(qū)不需要預(yù)備。由于這個(gè)原因,調(diào)度程序就不必把環(huán)境 看作為許多工作項(xiàng)目。反之,調(diào)度程序真實(shí)地調(diào)度環(huán)境,并且一旦環(huán)境獲得協(xié)處理器的控 制,它就能夠保持協(xié)處理器的控制??梢栽试S一些事件來(lái)停止處理器的環(huán)境控制,例如1)協(xié)處理器結(jié)束當(dāng)前已排隊(duì)的所有命令2)協(xié)處理器產(chǎn)生由無(wú)效的內(nèi)存存取所引起的頁(yè)面錯(cuò)誤3)調(diào)度程序請(qǐng)求轉(zhuǎn)換到不同的環(huán)境4)協(xié)處理器按照DMA流中的無(wú)效命令而產(chǎn)生無(wú)效操作中斷。圖16提供了舉例說(shuō)明依照上述的本發(fā)明的各種實(shí)施例的圖表。現(xiàn)在參照?qǐng)D 16,在同一個(gè)硬件環(huán)境中,兩側(cè)均表示從第一環(huán)境的介入到第二環(huán)境的介入的連續(xù)進(jìn)階 (progression)。在左手一側(cè),調(diào)度程序請(qǐng)求內(nèi)核驅(qū)動(dòng)程序?qū)⑻囟―MA緩沖區(qū)插入到協(xié)處理 器環(huán)境#1的環(huán)中。驅(qū)動(dòng)器修改所述環(huán),并且更新協(xié)處理器,以引用新的位置。在協(xié)處理器 環(huán)境#1中DMA緩沖區(qū)的插入發(fā)生在特定協(xié)處理器環(huán)境#1的加鎖的保護(hù)下。由此,其它的 線程都能夠?qū)MA緩沖區(qū)插入到其它協(xié)處理器環(huán)境的環(huán)中。在右手一側(cè),調(diào)度程序請(qǐng)求內(nèi)核工作方式驅(qū)動(dòng)器將特定DMA緩沖區(qū)插入到協(xié)處理 器環(huán)境#2的環(huán)中。然而,所述環(huán)已經(jīng)滿了,由此線程B將被加鎖,直到在此環(huán)中空閑出一些 空間。注意這樣的事實(shí),即正在等待的線程B沒(méi)有阻止線程A在其擁有的環(huán)中插入新DMA 緩沖區(qū)。在這個(gè)模型中,每個(gè)環(huán)境都有其自己的DMA環(huán),所述DMA環(huán)可以包含對(duì)部分DMA緩 沖區(qū)的重定向,以待執(zhí)行。在提交時(shí),調(diào)度程序可以試圖將已提交的DMA緩沖區(qū)添加到那個(gè) 環(huán)境的環(huán)中。如果所述環(huán)已經(jīng)滿了,那么調(diào)度程序就可以等待,直到在此環(huán)中有足夠的空間 以供另一次提交。注意,此等待將僅僅鎖定對(duì)正提交給的特定環(huán)境的進(jìn)一步提交。它不會(huì) 鎖定對(duì)其它環(huán)境的提交。換言之,多個(gè)線程都能并行地將工作項(xiàng)目添加到它們自己的環(huán)境 中。由于新DMA緩沖區(qū)能夠被添加到正運(yùn)行著的環(huán)境的隊(duì)列中,因而協(xié)處理器可以在 產(chǎn)生中斷之前對(duì)隊(duì)列尾進(jìn)行重采樣,所述中斷用于報(bào)告一個(gè)環(huán)境為空。當(dāng)然,能夠緊接著協(xié) 處理器對(duì)其隊(duì)列采樣之后就將DMA緩沖區(qū)添加到隊(duì)列。然而,恰好在產(chǎn)生中斷之前采樣所 述隊(duì)列尾,減少了這種情況發(fā)生的可能性,同時(shí)增加了調(diào)度的準(zhǔn)確性。當(dāng)通知調(diào)度程序環(huán)境 為空時(shí),它將查詢驅(qū)動(dòng)器,以便看看是否真是這種情況。對(duì)于驅(qū)動(dòng)器來(lái)說(shuō),為了判斷當(dāng)前在 其中是否存在尚未被處理的隊(duì)列命令而存取已保存的協(xié)處理器環(huán)境,應(yīng)當(dāng)是可能的。圖17 提供了描述這種模型的偽代碼算法。正如將在后面詳述的那樣,介紹受限-特權(quán)DMA緩沖區(qū)的概念,以便當(dāng)允許內(nèi)核 工作方式驅(qū)動(dòng)器構(gòu)造包含特權(quán)命令的DMA緩沖區(qū)的同時(shí),能允許以用戶工作方式直接構(gòu)造 DMA緩沖區(qū),而無(wú)需兼顧系統(tǒng)安全性。由這種模型來(lái)表示的各種實(shí)施例可以結(jié)合受限-特權(quán)內(nèi)存的概念來(lái)使用,所述受 限-特權(quán)內(nèi)存將在本篇后面的部分中作出描述。眼下要注意的是在這種模型中可能會(huì)出 現(xiàn)問(wèn)題,這是因?yàn)樵谙惹八故镜膬?nèi)存虛擬化模型中,未能在由受限D(zhuǎn)MA緩沖區(qū)-特權(quán)DMA 緩沖區(qū)存取的內(nèi)存之間作出區(qū)分;所有的虛擬內(nèi)存都是可存取的。這意味著,一些內(nèi)存資 源,比如像頁(yè)表或環(huán)形緩沖區(qū),也許經(jīng)由協(xié)處理器虛擬地址空間而被不適當(dāng)?shù)仫@現(xiàn)出來(lái)了, 因此這會(huì)允許惡意應(yīng)用程序改寫頁(yè)表或環(huán)形緩沖區(qū)。由于這個(gè)原因,可以將硬件設(shè)計(jì)成能支持一些類資源的物理地址以及其它類資源的虛擬尋址。解決這個(gè)問(wèn)題的一個(gè)不同方法就是加入特權(quán)內(nèi)存的概念。在各種實(shí)施例中,只能 從特權(quán)DMA緩沖區(qū)來(lái)訪問(wèn)特權(quán)內(nèi)存,并且如果受限D(zhuǎn)MA緩沖區(qū)試圖訪問(wèn)特權(quán)內(nèi)存單元時(shí), 協(xié)處理器會(huì)引起頁(yè)面錯(cuò)誤。從另一方面來(lái)說(shuō),特權(quán)DMA緩沖區(qū)能夠不加區(qū)別地訪問(wèn)特權(quán) 內(nèi)存以及無(wú)特權(quán)內(nèi)存。為了支持特權(quán)內(nèi)存,硬件必須具有這樣一種機(jī)制,即根據(jù)每句柄 (per-handle)來(lái)規(guī)定(在基于句柄的虛擬化的情況下)或者根據(jù)每頁(yè)面來(lái)規(guī)定(在基于頁(yè) 表的虛擬化的情況下)所述內(nèi)存是否是有特權(quán)的。注意,為了支持特權(quán)內(nèi)存,支持帶有頁(yè)表的表面級(jí)故障的協(xié)處理器不再能僅僅根 據(jù)內(nèi)存資源的基址來(lái)發(fā)生故障。協(xié)處理器必須查看由當(dāng)前資源覆蓋的所有頁(yè)表項(xiàng)目,并且 確定所有這些頁(yè)表項(xiàng)目都具有正確的保護(hù)位設(shè)置。僅僅檢查內(nèi)存資源的第一個(gè)頁(yè)面,將可 能允許惡意應(yīng)用程序按照受限內(nèi)存基址來(lái)訪問(wèn)特權(quán)內(nèi)存,所述基址是在受限D(zhuǎn)MA緩沖區(qū)中 規(guī)定的。運(yùn)行列表先前所展示的需求故障模型可能難以使用中斷來(lái)發(fā)信號(hào)通知多次事件。這些事件 中的一些,例如像頁(yè)面錯(cuò)誤,能夠在內(nèi)存壓力下高頻發(fā)生。在命中中斷時(shí)與CPU給協(xié)處理器 新任務(wù)時(shí)之間,協(xié)處理器可能是處于資源缺乏的。為了隱藏中斷等待時(shí)間并保持協(xié)處理器 忙,我們介紹一下運(yùn)行列表的概念。運(yùn)行列表只不過(guò)是一列能夠由協(xié)處理器運(yùn)行而無(wú)需CPU介入的協(xié)處理器環(huán)境。環(huán) 境可以按照指定的次序運(yùn)行,或者按照能為實(shí)施本發(fā)明的那些人證明其便利性的任何其它 命令運(yùn)行。協(xié)處理器能夠因多種原因中的任何一種原因而從一個(gè)環(huán)境轉(zhuǎn)換到運(yùn)行列表上的 下一個(gè)環(huán)境,所述環(huán)境是能夠結(jié)合本發(fā)明實(shí)施的環(huán)境,例如1)當(dāng)前環(huán)境為空,也就是沒(méi)有任何事需要作2)當(dāng)前環(huán)境產(chǎn)生頁(yè)面故障3)當(dāng)前環(huán)境產(chǎn)生一般性保護(hù)故障(如果由協(xié)處理器支持的話))4)協(xié)處理器被要求轉(zhuǎn)換到新運(yùn)行列表在各種實(shí)施例中,當(dāng)協(xié)處理器從運(yùn)行列表中的一個(gè)項(xiàng)目轉(zhuǎn)換為下一個(gè)項(xiàng)目時(shí),它 中斷CPU但不停止,并且可以將環(huán)境轉(zhuǎn)換到列表中的下一個(gè)項(xiàng)目,且開始執(zhí)行它。運(yùn)行列表 的首部可以是調(diào)度程序能夠試圖首先運(yùn)行的環(huán)境,并且運(yùn)行列表的其它元素都可以分幾部 分位于此處,以便在中斷等待時(shí)間期間保持協(xié)處理器忙。一旦CPU接收到了協(xié)處理器已轉(zhuǎn) 離列表首部的中斷信號(hào),CPU就可以構(gòu)造新運(yùn)行列表并將它發(fā)送到協(xié)處理器。當(dāng)協(xié)處理器轉(zhuǎn)離列表首部時(shí),它可以開始執(zhí)行運(yùn)行列表中的下一個(gè)環(huán)境,與此同 時(shí)中斷它使用CPU的路徑。CPU將產(chǎn)生的新運(yùn)行列表的首部可以不同于協(xié)處理器恰好轉(zhuǎn)入 的環(huán)境。在那種情況下,協(xié)處理器將需要再次進(jìn)行轉(zhuǎn)換,并且也許沒(méi)有時(shí)間在完成更多有關(guān) 那個(gè)環(huán)境的工作。然而,由CPU構(gòu)造的新運(yùn)行列表的首部環(huán)境可以是與上述運(yùn)行列表的第二元素相 同的環(huán)境,這是因?yàn)樽詮纳洗芜\(yùn)行列表被構(gòu)造以來(lái)環(huán)境優(yōu)先級(jí)不會(huì)被改變。在那種情況下, 協(xié)處理器將已提早開始處理正確的環(huán)境。在圖18中提供了表示運(yùn)行列表概念的圖。當(dāng)運(yùn)行列表被歸入本發(fā)明的各種實(shí)施 例中時(shí),調(diào)度程序的運(yùn)行環(huán)境可以由當(dāng)前的運(yùn)行列表所替代。將稱為待定運(yùn)行列表的第二運(yùn)行列表引入,以便簡(jiǎn)化運(yùn)行列表轉(zhuǎn)換的同步。當(dāng)前的運(yùn)行列表是調(diào)度程序能夠假定當(dāng)前 正在執(zhí)行硬件的環(huán)境的列表,而待定運(yùn)行列表是當(dāng)調(diào)度程序想要將硬件從一個(gè)運(yùn)行列表改 變?yōu)榱硪粋€(gè)時(shí)所使用的過(guò)渡運(yùn)行列表。當(dāng)調(diào)度程序想要轉(zhuǎn)換為新運(yùn)行列表時(shí),它構(gòu)造待定 運(yùn)行列表并且請(qǐng)求協(xié)處理器轉(zhuǎn)換為它。一旦調(diào)度程序從協(xié)處理器接收(通過(guò)中斷)到了證 實(shí),所述協(xié)處理器就開始執(zhí)行新運(yùn)行列表,待定運(yùn)行列表變成新的當(dāng)前運(yùn)行列表,而且待定 運(yùn)行列表可能為空。當(dāng)待定運(yùn)行列表為空時(shí),硬件可能正在執(zhí)行當(dāng)前運(yùn)行列表中的環(huán)境或者也許處于 空閑。當(dāng)待定運(yùn)行列表不為空時(shí),調(diào)度程序可能不知道硬件當(dāng)前正在執(zhí)行哪個(gè)運(yùn)行列表,直 到它從發(fā)生變化的協(xié)處理器那里接收到證實(shí)為止。特定的事件可能需要調(diào)度程序?qū)\(yùn)行列表重定優(yōu)先級(jí)。例如,頁(yè)面錯(cuò)誤也許已通 過(guò)使高優(yōu)先級(jí)協(xié)處理器環(huán)境待執(zhí)行而被解決。為了簡(jiǎn)化這類事件的同步,調(diào)度程序可能遵 從的一般規(guī)則就是只有當(dāng)已經(jīng)沒(méi)有由上述事件提交的待定運(yùn)行列表時(shí),它才將提交新運(yùn) 行列表(待定運(yùn)行列表)。試圖用另一個(gè)待定列表來(lái)替換一個(gè)待定列表可能難以同步,這是 由于所述列表已經(jīng)被交付給協(xié)處理器,由此而隨時(shí)可能發(fā)生變化,并且只是在上述事實(shí)情 況發(fā)生以后才會(huì)通知調(diào)度程序。在后者的情況下,運(yùn)行列表的重定優(yōu)先級(jí)可以委托給環(huán)境轉(zhuǎn)換處理機(jī)來(lái)完成。在 未來(lái)的一些時(shí)刻上,可接著調(diào)用所述處理機(jī)來(lái)通知從待定列表到運(yùn)行列表的變化,并且如 果優(yōu)先級(jí)已經(jīng)改變的話,則在那時(shí)處理機(jī)就能夠產(chǎn)生新運(yùn)行列表以發(fā)送到硬件。運(yùn)行列表轉(zhuǎn)換同步。在一個(gè)運(yùn)行列表模型中,圖形硬件當(dāng)它轉(zhuǎn)換環(huán)境時(shí)能產(chǎn)生中 斷。由于中斷交付及處理不是瞬時(shí)的,因而可能會(huì)在CPU實(shí)際獲得中斷以前產(chǎn)生多次中斷。 如果沒(méi)有恰當(dāng)?shù)貙?shí)現(xiàn)同步,那么調(diào)度程序就可能會(huì)受到干擾,繼而就會(huì)作出不正確的調(diào)度 決定。調(diào)度程序可能需要區(qū)別的兩個(gè)關(guān)鍵事件就是第一,當(dāng)協(xié)處理器從運(yùn)行列表的首 部轉(zhuǎn)離時(shí),以及第二,當(dāng)協(xié)處理器轉(zhuǎn)變?yōu)榇ㄟ\(yùn)行列表時(shí)。僅利用在每個(gè)環(huán)境轉(zhuǎn)換時(shí)的來(lái)自 于簡(jiǎn)單中斷的信息來(lái)把那些事件區(qū)分開,可能是很困難的。為了進(jìn)一步舉例說(shuō)明這點(diǎn),考慮 下列示例當(dāng)前協(xié)處理器正在運(yùn)行運(yùn)行列表A,該運(yùn)行列表A由環(huán)境1-3-5-2組成,并且調(diào) 度程序想要轉(zhuǎn)變?yōu)檫\(yùn)行列表B,該運(yùn)行列表B由環(huán)境4-1-3-2組成。下列兩種情況可能會(huì)發(fā) 生情況#1當(dāng)前協(xié)處理器正在執(zhí)行運(yùn)行列表A (1-3-5-2)??紤]環(huán)境4來(lái)提交命令,該環(huán)境4是空閑的并且具有比環(huán)境1更高的優(yōu)先級(jí)。產(chǎn) 生運(yùn)行列表B (4-1-3-2)并且調(diào)度程序?qū)⑦\(yùn)行列表B提交給協(xié)處理器。環(huán)境#1運(yùn)行,直到協(xié)處理器變化為運(yùn)行列表B中的環(huán)境M為止。協(xié)處理器產(chǎn)生通知所述變化的中斷。協(xié)處理器從環(huán)境#4變化到環(huán)境#1,繼而在CPU被中斷以前變化為環(huán)境#3。CPU被中斷,并且調(diào)用環(huán)境轉(zhuǎn)換處理機(jī)。驅(qū)動(dòng)器對(duì)當(dāng)前的協(xié)處理器環(huán)境進(jìn)行采樣,它為環(huán)境#3。情況#2當(dāng)前協(xié)處理器正在執(zhí)行運(yùn)行列表A (1-3-5-2)。
考慮環(huán)境4來(lái)提交命令,該環(huán)境4是空閑的并且具有比環(huán)境1更高的優(yōu)先級(jí)。調(diào) 度程序?qū)⑦\(yùn)行列表B提交給協(xié)處理器。當(dāng)調(diào)度程序正在忙于構(gòu)造運(yùn)行列表B的時(shí)候,協(xié)處理器變化到環(huán)境#3。協(xié)處理器產(chǎn)生通知已變化到環(huán)境#3的中斷。CPU被中斷,并且調(diào)用環(huán)境轉(zhuǎn)換處理機(jī)。驅(qū)動(dòng)器對(duì)當(dāng)前的協(xié)處理器環(huán)境進(jìn)行采樣,它是環(huán)境#3。在上述兩種情況下,在環(huán)境轉(zhuǎn)換中斷時(shí),當(dāng)前正在運(yùn)行的環(huán)境是環(huán)境#3。然而,注 意,沒(méi)有附加信息的話,調(diào)度程序就無(wú)法在上述兩種情況之間進(jìn)行區(qū)別。在第一種情況下, 協(xié)處理器從運(yùn)行列表B的首部轉(zhuǎn)離,并且由此調(diào)度程序需要產(chǎn)生運(yùn)行列表C并且請(qǐng)求協(xié)處 理器改變成它。然而,在第二種情況下,甚至第二運(yùn)行列表還仍未開始,并且由此調(diào)度程序 將會(huì)等待。以上示例表明單獨(dú)的環(huán)境轉(zhuǎn)換中斷可能不足以恰當(dāng)?shù)刂С终{(diào)度模型中的運(yùn)行列 表。需要更多信息來(lái)區(qū)分開上述情況。下一部分詳細(xì)描述一下可以連同硬件支持一起來(lái) 解決此問(wèn)題的一些方式,所述硬件支持是在解決此類問(wèn)題的進(jìn)程中可能有用的支持。二元素運(yùn)行列表。這種同步方法需要協(xié)處理器支持一些附加特征。在這些特征當(dāng) 中,結(jié)合二元素運(yùn)行列表的實(shí)施方案能夠支持的特征如下1) 二元素的運(yùn)行列表。2)具有在每次環(huán)境轉(zhuǎn)換時(shí)產(chǎn)生中斷的能力(包括從環(huán)境X到X的偽造環(huán)境轉(zhuǎn)換)。3)使VidMm隨時(shí)查詢當(dāng)前正在運(yùn)行的協(xié)處理器環(huán)境的方法。4)在中斷以前,將待發(fā)(outgoing)協(xié)處理器環(huán)境保存到內(nèi)存。5)以環(huán)境由CPU可讀的方式來(lái)保存協(xié)處理器環(huán)境,以便允許調(diào)度程序確定環(huán)境轉(zhuǎn) 換幕后的原因。注意,盡管硬件可以用來(lái)支持上述功能,但是這種專用設(shè)備不是為允許調(diào)度程序 區(qū)分正規(guī)環(huán)境轉(zhuǎn)換與運(yùn)行列表所必需的。而是,調(diào)度程序可以通過(guò)當(dāng)構(gòu)造運(yùn)行列表時(shí)總是 注意區(qū)分那兩個(gè)事件來(lái)完成。盡管對(duì)于本發(fā)明的各種實(shí)施例而言,具體規(guī)則可能會(huì)變,但是 提供這些功能的示范性規(guī)則就是第一,無(wú)法出現(xiàn)在新的待定運(yùn)行列表中的當(dāng)前運(yùn)行列表 的第一環(huán)境,以及第二,如果當(dāng)前運(yùn)行列表的第二環(huán)境不是新的待定運(yùn)行列表的首部,那么 它就根本不準(zhǔn)處于新的待定運(yùn)行列表中。以下是假設(shè)的表,該表是當(dāng)這兩個(gè)示范性規(guī)則如 下時(shí)、調(diào)度程序在從一個(gè)環(huán)境變化到另一個(gè)環(huán)境期間可能會(huì)產(chǎn)生的表。在以下的表中,運(yùn)行 列表A由環(huán)境1-2組成;第二運(yùn)行列表B由環(huán)境2-3組成;而第三運(yùn)行列表C由環(huán)境3-4組成。
實(shí)現(xiàn)運(yùn)行列表的這個(gè)方法或許是最簡(jiǎn)單的,且不必需要效果重要的附加硬件支 持。然而,注意,上述表中的運(yùn)行列表在尺寸方面受限制(擴(kuò)展超過(guò)二倍尺寸的時(shí)候可能會(huì) 變得不實(shí)際),并且在環(huán)境轉(zhuǎn)換期間可能會(huì)丟失一些非關(guān)鍵的信息。例如,從A到C的變化 過(guò)程中,調(diào)度程序也許不總是知道環(huán)境#2是否曾被執(zhí)行過(guò)。它可能已被執(zhí)行過(guò)了,引起了 頁(yè)面錯(cuò)誤,但是使其中斷被另一個(gè)環(huán)境轉(zhuǎn)換所隱瞞了。在那種情況下,調(diào)度程序不會(huì)知道曾 經(jīng)產(chǎn)生過(guò)故障并且將重新調(diào)度它。調(diào)度事件的協(xié)處理器追蹤。當(dāng)硬件向調(diào)度程序提供一些調(diào)度事件的歷史信息時(shí),運(yùn)行列表可能易于被擴(kuò)大N倍的尺寸。隨著簡(jiǎn)單中斷而來(lái)的一個(gè)問(wèn)題就是多次中斷可能 被擠在一起,并且它也許不能精確地確定發(fā)生了什么而引起中斷??梢越Y(jié)合本發(fā)明的方法, 利用硬件特征來(lái)解決這個(gè)問(wèn)題??赏ㄟ^(guò)實(shí)施能將環(huán)境轉(zhuǎn)換歷史寫入到指定的系統(tǒng)內(nèi)存單元 的硬件來(lái)完成,所述系統(tǒng)內(nèi)存單元是調(diào)度程序可讀的。為了解釋本發(fā)明的這個(gè)方面,考慮下 列情況1)調(diào)度程序調(diào)度運(yùn)行列表A (1-2-3-4-5)。2)環(huán)境#1的時(shí)間片期滿,并且調(diào)度程序發(fā)送新運(yùn)行列表B (2-3-4-5-1)。3)當(dāng)處理CPU上的時(shí)間片滿期時(shí),協(xié)處理器結(jié)束了環(huán)境#1,因?yàn)樗D(zhuǎn)換成空的,而 因此轉(zhuǎn)換成環(huán)境#2。協(xié)處理器產(chǎn)生對(duì)于這個(gè)事件的環(huán)境轉(zhuǎn)換中斷。4)協(xié)處理器從CPU那里接收關(guān)于新運(yùn)行列表的通知,且因此而轉(zhuǎn)換它。協(xié)處理器 產(chǎn)生對(duì)于這個(gè)事件的環(huán)境轉(zhuǎn)換中斷。5)當(dāng)處理新運(yùn)行列表的環(huán)境#2中的描繪命令時(shí),協(xié)處理器遇到頁(yè)面錯(cuò)誤,且因此 而轉(zhuǎn)換成環(huán)境#3。協(xié)處理器產(chǎn)生對(duì)于這個(gè)事件的環(huán)境轉(zhuǎn)換中斷。6)環(huán)境#3立刻命中頁(yè)面錯(cuò)誤,且因此協(xié)處理器轉(zhuǎn)換為環(huán)境#4。協(xié)處理器產(chǎn)生對(duì) 于這個(gè)事件的環(huán)境轉(zhuǎn)換中斷。7)最后CPU因環(huán)境轉(zhuǎn)換而被中斷。實(shí)際上已經(jīng)由于產(chǎn)生原始中斷而發(fā)生了四次環(huán) 境轉(zhuǎn)換。圖19舉例說(shuō)明了上述情況下的硬件歷史機(jī)制的操作。為了支持這種歷史機(jī)制,該 硬件可以被配置成能夠執(zhí)行下列任務(wù)。提供這些任務(wù)是作為舉例而并非是限制1)規(guī)定歷史緩沖區(qū)的基址。每個(gè)協(xié)處理器中可以存在單個(gè)歷史緩沖區(qū)。在優(yōu)選實(shí) 施例中,這可以是PCI或者AGP內(nèi)存中的系統(tǒng)內(nèi)存單元。這可以由操作系統(tǒng)調(diào)整在4KB范 圍上。對(duì)于PCI專用的系統(tǒng)來(lái)說(shuō),優(yōu)選地,訪問(wèn)這個(gè)緩沖區(qū)可以利用窺探(snoop)周期來(lái)實(shí) 現(xiàn),以便系統(tǒng)內(nèi)存緩沖區(qū)能被高速緩存,以供更高效的CPU讀取。2)規(guī)定歷史緩沖區(qū)的尺寸。歷史緩沖區(qū)至少可以是運(yùn)行列表尺寸的兩倍。這是為 了確保在緩沖區(qū)中有足夠的空間來(lái)處理最壞的情況,所述最壞情況的就是當(dāng)前運(yùn)行列表 和待定運(yùn)行列表在中斷發(fā)生以前完成。3)規(guī)定協(xié)處理器寫入點(diǎn),該點(diǎn)可以是經(jīng)過(guò)最后一次事件時(shí)緊接于寫入歷史緩沖區(qū) 的地址。VidMm也許能時(shí)時(shí)查詢這個(gè)指針,包括當(dāng)協(xié)處理器正在運(yùn)行時(shí)。在更新指針以前,歷 史緩沖區(qū)中的數(shù)據(jù)可以被恰當(dāng)?shù)厍宄絻?nèi)存中,以便確保調(diào)度程序總是獲得連貫的數(shù)據(jù)。各種實(shí)施例可能配置歷史緩沖區(qū),所以它對(duì)于DMA緩沖區(qū)而言是不可見的,所述 DMA緩沖區(qū)是以用戶工作方式來(lái)構(gòu)造的。如果歷史緩沖區(qū)對(duì)于受限D(zhuǎn)MA緩沖區(qū)而言是可見 的,那么惡意應(yīng)用程序就可能會(huì)改寫歷史緩沖區(qū),打斷調(diào)度程序并且可能會(huì)引起系統(tǒng)崩潰 或更惡劣的情況。由于這個(gè)原因,這些實(shí)施例中的歷史緩沖區(qū)可以由硬件通過(guò)僅在特權(quán)DMA 緩沖區(qū)中可見的物理地址或者通過(guò)虛擬地址來(lái)訪問(wèn)。在這些實(shí)施例中,可能需要協(xié)處理器 來(lái)環(huán)繞式處理(wraparound)歷史緩沖區(qū)的末尾,而無(wú)需CPU介入。注意,依照所述實(shí)施例的運(yùn)行列表沒(méi)有立刻消除所有協(xié)處理器能夠多次在同一環(huán) 境上因相同的原因而發(fā)生故障的需要。這其中的一個(gè)原因就是調(diào)度程序通常是當(dāng)協(xié)處理 器忙著執(zhí)行當(dāng)前運(yùn)行列表的同時(shí)構(gòu)造新運(yùn)行列表。由于調(diào)度程序可能需要包括已經(jīng)存在于 上述運(yùn)行列表中的新運(yùn)行列表中的一些環(huán)境,因此存在這樣的可能,就是正在重復(fù)的環(huán)境的狀態(tài)、在它被放入正在構(gòu)造的運(yùn)行列表的時(shí)間與運(yùn)行列表被提交給協(xié)處理器的時(shí)間之間改變。受限-特權(quán)DMA依照高級(jí)調(diào)度模型中內(nèi)存保護(hù)的介紹,發(fā)送給協(xié)處理器的DMA緩沖區(qū)可以主要由 運(yùn)行應(yīng)用程序進(jìn)程內(nèi)部的用戶工作方式驅(qū)動(dòng)器來(lái)構(gòu)造??梢栽趹?yīng)用程序的進(jìn)程中映射那些 DMA緩沖區(qū),用戶工作方式驅(qū)動(dòng)器能夠直接寫入它們,而內(nèi)核驅(qū)動(dòng)程序無(wú)法證實(shí)它們??梢?在應(yīng)用程序偶然訪問(wèn)它們的虛擬地址或惡意應(yīng)用程序故意對(duì)其訪問(wèn)時(shí)濫寫DMA緩沖區(qū)。為 了允許驅(qū)動(dòng)器模型保持安全性,也就是說(shuō),不容許應(yīng)用程序有機(jī)會(huì)訪問(wèn)它不應(yīng)訪問(wèn)的資源, 在能允許以用戶工作方式構(gòu)造的DMA緩沖區(qū)做什么的方面,對(duì)該DMA緩沖區(qū)進(jìn)行限制。具 體來(lái)講,內(nèi)置的DMA緩沖區(qū)可以具有在以下示范性方式中限制的功能1)它們可以僅僅包含對(duì)虛擬地址的訪問(wèn),而根本不具有對(duì)物理地址的訪問(wèn)(包括 柵欄)。2)不能允許它們包含將影響當(dāng)前顯示(例如,CRT、空閑存取控制(DAC)、技術(shù)文件 管理系統(tǒng)(TDMS)、電視輸出端口 (TV-OUT) ,Internet2(I2C)總線)的指令。3) 一般說(shuō)來(lái),它們不包含將影響適配器(例如,鎖相環(huán)(PLL))的指令。4)可以限制它們的功率管理和/或配置空間。5)不能允許它們包含將防礙環(huán)境轉(zhuǎn)換的指令。可以在以用戶工作方式構(gòu)造的DMA緩沖區(qū)中編排的實(shí)際的寄存器組,將可能會(huì)從 硬件到硬件變化。然而,不管硬件怎樣,寄存器都遵循一般的規(guī)則,也就是說(shuō),這種DMA緩沖 區(qū)應(yīng)當(dāng)僅允許使用對(duì)資源和柵欄的虛擬地址訪問(wèn)的描繪操作。為了提供增強(qiáng)的安全性,能 夠要求這種DMA緩沖區(qū)不許應(yīng)用程序使用該應(yīng)用程序不應(yīng)該訪問(wèn)的內(nèi)存,或是不允許在某 種潛伏地大變動(dòng)和不可回收的方式中可能會(huì)影響硬件的應(yīng)用程序?qū)ζ湓L問(wèn)。為了防止以用戶工作方式構(gòu)造的DMA緩沖區(qū)訪問(wèn)確定的功能,可以在協(xié)處理器中 實(shí)施多種手段。這些手段可以依功能的性質(zhì)以及功能是否需要在應(yīng)用程序的協(xié)處理器環(huán)境 流中排隊(duì)而變。確定的特權(quán)操作通常需要在協(xié)處理器環(huán)境流中排隊(duì),所述環(huán)境流既包含以 用戶工作方式構(gòu)造的DMA緩沖區(qū)(例如,描繪的應(yīng)用程序)又包含以內(nèi)核工作方式構(gòu)造的 特權(quán)DMA緩沖區(qū)(例如,隊(duì)列交換)。不需要排隊(duì)的函數(shù)。大多數(shù)特權(quán)函數(shù)都不需要在應(yīng)用程序協(xié)處理器環(huán)境流中排 隊(duì)。諸如下列這樣的函數(shù)是不需要排隊(duì)的1)程序 CRT 計(jì)時(shí)(timing)。2)更新DAC的查找表(注意由于如果主屏幕無(wú)論如何想要的話那么任何應(yīng)用程 序都可以給予主屏幕,因而并非絕對(duì)地要求編排DAC LUT是特權(quán)函數(shù),并且重新編排查找表 (LUT)不會(huì)允許應(yīng)用對(duì)它早已不能訪問(wèn)的信息進(jìn)行用戶訪問(wèn))。3)對(duì)顯示器輸出編程(TDMS、TV-OUT...)4)與子女設(shè)備/監(jiān)視器相通信(I2C、...)5)程序時(shí)鐘(PLL)6)改變協(xié)處理器的功率狀態(tài)7)配置協(xié)處理器(配置空間、基本輸入輸出系統(tǒng)、...)通常要求這種函數(shù)遵循系統(tǒng)事件,該系統(tǒng)事件是完全獨(dú)立于應(yīng)用程序描繪流的(例如,引導(dǎo)、分辨率改變、Pnp檢測(cè)、功率管理)。照此,不需要這種函數(shù)在特定應(yīng)用程序的 協(xié)處理器環(huán)境中排隊(duì)。當(dāng)在無(wú)任何來(lái)自于用戶工作方式驅(qū)動(dòng)器的介入的情況下專用系統(tǒng)事 件發(fā)生時(shí),這種函數(shù)可以由內(nèi)核工作方式驅(qū)動(dòng)器本身使用。對(duì)于這種函數(shù)而言,IHV可以決定僅通過(guò)存儲(chǔ)映像輸入/輸出(MMIO)來(lái)讓所有下 層寄存器成為可訪問(wèn)的。由于寄存器通常僅僅被映射到內(nèi)核空間中,因而它可能不能讓應(yīng) 用程序或用戶工作方式驅(qū)動(dòng)器訪問(wèn)它們,因此有效地保護(hù)了所述函數(shù)。另一個(gè)手段將會(huì)是實(shí)施每協(xié)處理器的環(huán)境特權(quán)級(jí)。利用這個(gè)手段,一些環(huán)境將在 當(dāng)別人不能做時(shí)它們能做什么的方面受限制。在那種情況下,以用戶工作方式構(gòu)造的應(yīng)用 程序的DMA緩沖區(qū)將排隊(duì)到受限環(huán)境中。在另一方面,內(nèi)核工作方式驅(qū)動(dòng)器將使用特權(quán)環(huán) 境以提交特權(quán)函數(shù)。需要排隊(duì)的函數(shù)。由于能夠插入以用戶工作方式構(gòu)造的DMA緩沖區(qū)中的命令是受 限制的,因而可以實(shí)施高級(jí)模型以要求協(xié)處理器支持受限D(zhuǎn)MA緩沖區(qū)(也就是考慮先前狀 態(tài)的DMA緩沖區(qū))和特權(quán)DMA緩沖區(qū)。需要特權(quán)DMA緩沖區(qū),是為了允許特權(quán)函數(shù)沿著協(xié) 處理器環(huán)境的描繪流而排隊(duì)。特權(quán)DMA緩沖區(qū)可以包含在無(wú)特權(quán)DMA緩沖區(qū)中發(fā)現(xiàn)的任何指令。本發(fā)明的各種 優(yōu)選實(shí)施例都可以實(shí)施特權(quán)DMA緩沖區(qū),該DMA緩沖區(qū)至少允許下列情況(在后面的部分 中將用進(jìn)一步詳述來(lái)解釋)1)特權(quán)柵欄的插入2)交換指令的插入3) “非環(huán)境轉(zhuǎn)換”區(qū)域的插入此外,特權(quán)DMA緩沖區(qū)能夠?qū)θ魏蜪HV需要的硬件寄存器進(jìn)行編排,并且如有需要 則能夠訪問(wèn)虛擬內(nèi)存和物理內(nèi)存兩者。特權(quán)DMA緩沖區(qū)可能不能被構(gòu)造或者在用戶工作方 式中不可見。只有信任的內(nèi)核組件能夠訪問(wèn)并構(gòu)造特權(quán)DMA緩沖區(qū)。下列部分表示了實(shí)施特權(quán)DMA緩沖區(qū)的三種可能方式,并且意圖是闡明特權(quán)DMA 緩沖區(qū)實(shí)施方案的概念,而不是為了限制可以實(shí)踐本發(fā)明的各種方式1.僅以內(nèi)核工作方式的DMA緩沖區(qū)構(gòu)造支持特權(quán)DMA緩沖區(qū)的一個(gè)方法就是不需要將要求實(shí)際的DMA緩沖區(qū)發(fā)送給以 內(nèi)核工作方式構(gòu)造的硬件的任何專用硬件支持。在那種情況下,用戶工作方式驅(qū)動(dòng)器將構(gòu) 造十分類似于DMA緩沖區(qū)的命令緩沖區(qū),并且將它提交給內(nèi)核工作方式驅(qū)動(dòng)器。內(nèi)核工作 方式驅(qū)動(dòng)器將證實(shí)并將這種命令緩沖區(qū)復(fù)制到DMA緩沖區(qū)中,也就是只有在內(nèi)核工作方式 中可見。在證實(shí)期間,內(nèi)核工作方式驅(qū)動(dòng)器將證實(shí)不存在無(wú)特許的指令。這類似于基本模 型所需要的證實(shí),但是不需要內(nèi)存訪問(wèn)的證實(shí),這是因?yàn)閮?nèi)存是虛擬化的。2.直接將特權(quán)命令插入到環(huán)中大概支持特權(quán)DMA通道的最容易的硬件手段就是直接將特權(quán)命令插入到協(xié)處理 器環(huán)境環(huán)中。環(huán)本身已經(jīng)是僅可從內(nèi)核工作方式訪問(wèn)的特權(quán)通道了。這在圖20的圖中描 繪出了。3.通過(guò)間接尋址來(lái)規(guī)定特權(quán)在圖21中舉例說(shuō)明了支持協(xié)處理器中的受限-特權(quán)DMA緩沖區(qū)的不同手段。參 照該圖,注意,起始地址和結(jié)束地址都能按DWORD設(shè)置。地址未使用位可以被再使用,以規(guī)定標(biāo)志位。起始地址的第一位能夠規(guī)定正被重定向?yàn)樘貦?quán)DMA緩沖區(qū)的DMA緩沖區(qū)。為提 高安全性,特權(quán)DMA緩沖區(qū)能夠訪問(wèn)輔助內(nèi)存中的物理地址。受限D(zhuǎn)MA緩沖區(qū)能夠訪問(wèn)協(xié) 處理器環(huán)境虛擬地址空間中的虛擬地址。在這個(gè)手段中,間接尋址命令中的位可以被插入到環(huán)形緩沖區(qū)中。該位表示正在 被執(zhí)行的DMA緩沖區(qū)是否是特權(quán)DMA緩沖區(qū)。這個(gè)暗指協(xié)處理器可以利用物理地址來(lái)訪問(wèn) 環(huán)形緩沖區(qū)本身,并且在協(xié)處理器虛擬地址空間中所述環(huán)形緩沖區(qū)本身可能是不可見的。 允許主環(huán)形緩沖區(qū)在協(xié)處理器虛擬地址空間中可見,將會(huì)允許惡意應(yīng)用程序改寫該主環(huán)形 緩沖區(qū),并且允許它以特權(quán)級(jí)運(yùn)行命令,這將意味著在多數(shù)計(jì)算環(huán)境中的安全性破壞。在這 點(diǎn)上,像受限D(zhuǎn)MA緩沖區(qū)一樣,能夠通過(guò)物理地址而非虛擬地址來(lái)訪問(wèn)特權(quán)DMA緩沖區(qū)。DMA控制指令對(duì)于用以追蹤任何協(xié)處理器環(huán)境的連續(xù)進(jìn)階并且控制那個(gè)環(huán)境的DMA流當(dāng)中的 指令流量的調(diào)度程序和輔助內(nèi)存管理器而言,協(xié)處理器可以被配置成支持其DMA流中的下 列示范性指令1)柵欄(受限的和特權(quán)的兩者)2)陷阱3)啟動(dòng)/無(wú)效環(huán)境轉(zhuǎn)換柵欄。柵欄能夠是這樣的指令,它既包含一段數(shù)據(jù)(例如,64位數(shù)據(jù)段)又包含能 夠插入在DMA流中的地址。當(dāng)協(xié)處理器從所述流中讀取該指令時(shí),它將使得協(xié)處理器在特 定地址處對(duì)與柵欄相關(guān)聯(lián)的數(shù)據(jù)段進(jìn)行寫。在協(xié)處理器能夠在內(nèi)存中寫入柵欄數(shù)據(jù)以前, 它必須確保來(lái)自于柵欄指令前的原語(yǔ)的像素已經(jīng)退休并且已經(jīng)被完完全全地寫入內(nèi)存了。 注意,這并不意味著協(xié)處理器需要停止整個(gè)流水線。當(dāng)協(xié)處理器正在等待將要退休的柵欄 前的指令的最后一個(gè)像素時(shí),能夠執(zhí)行跟隨柵欄指令之后的所述原語(yǔ)。盡管可以結(jié)合本發(fā)明使用適合上述說(shuō)明的任何柵欄,但是將在這里具體描述兩種 類型的柵欄正規(guī)柵欄和特權(quán)柵欄。正規(guī)柵欄是能夠被插入在DMA緩沖區(qū)中的柵欄,所述DMA緩沖區(qū)是由用戶工作方 式驅(qū)動(dòng)器創(chuàng)建的。由于DMA緩沖區(qū)的內(nèi)容出自于用戶工作方式,因而它不被信任。由此,這 種DMA緩沖區(qū)內(nèi)的柵欄能夠訪問(wèn)那個(gè)協(xié)處理器環(huán)境的地址空間中的虛擬地址而不是物理 地址。不言而喻,就如協(xié)處理器所訪問(wèn)的任何其它虛擬地址一樣,對(duì)這種虛擬地址的訪問(wèn)受 到相同的內(nèi)存證實(shí)機(jī)制的約束。特權(quán)柵欄是只能被插入在DMA緩沖區(qū)中的柵欄,所述DMA緩沖區(qū)是以內(nèi)核工作方 式創(chuàng)建的(并且僅僅在內(nèi)核工作方式中可見)。這種柵欄能夠訪問(wèn)內(nèi)存中的物理地址,以 提高系統(tǒng)的安全性。如果柵欄目標(biāo)地址在協(xié)處理器環(huán)境的地址空間中是可見的,那么惡意 應(yīng)用程序就會(huì)在那個(gè)內(nèi)存單元上進(jìn)行圖形操作,由此而覆蓋掉內(nèi)核工作方式代碼正在期待 接收的那些東西的內(nèi)容。對(duì)于潛在安全性問(wèn)題的另一個(gè)解決方案將是在PTE中具有特權(quán) 位,該特權(quán)位表示虛擬地址是否能夠被來(lái)自于非特權(quán)DMA緩沖區(qū)訪問(wèn)。然而,上面的第一個(gè) 手段被視為對(duì)于早期硬件生成的簡(jiǎn)單手段。注意,特權(quán)DMA緩沖區(qū)能夠包含正規(guī)柵欄和特權(quán)柵欄兩者。然而,當(dāng)特權(quán)DMA緩沖 區(qū)包含正規(guī)柵欄時(shí),產(chǎn)生DMA緩沖區(qū)的內(nèi)核組件得知它插入的柵欄可能從不可見。IHV可以決定支持額外類型的柵欄,以為了最小化需要被清除的內(nèi)部緩沖區(qū)的數(shù)目。下列類型的柵欄是可以為此目的而支持的示范性柵欄(注意特權(quán)的和無(wú)特權(quán)的)1.寫柵欄寫柵欄可以是先前所述那種類型的柵欄,而且是唯一所需的柵欄類型。寫柵欄確 保在柵欄指令被處理前的所有內(nèi)存寫入均是全局可見的(即,已將它們清除出了高速緩 存,并且已從內(nèi)存控制器那里接收到了確認(rèn))。2.讀柵欄讀柵欄是類似于寫柵欄的更輕的一種柵欄類型。讀柵欄確保在柵欄結(jié)束以前用于 描繪操作的所有內(nèi)存讀取,但是一些寫入仍然可以是尚未完成的。如果支持讀柵欄,那么調(diào) 度程序就將利用它們來(lái)控制非描繪目標(biāo)分配的使用期。3.管頂端柵欄管頂端柵欄是非常輕量級(jí)的柵欄。管頂端柵欄的支持是可任選的。管頂端柵欄僅 僅確保協(xié)處理器讀取防DMA緩沖區(qū)中的御指令前的末尾字節(jié)(然而仍不是必須要處理的)。 在柵欄被處理之后,協(xié)處理器可以不必再讀取管頂端柵欄前的任何部分的DMA緩沖區(qū)(由 于DMA緩沖區(qū)的內(nèi)容可能不再有效)。如果支持的話,則這類柵欄將由調(diào)度程序使用,以控 制DMA緩沖區(qū)的使用期。陷阱??梢栽诒景l(fā)明的各種實(shí)施例中實(shí)施陷阱。陷阱可以是插入在DMA緩沖區(qū)中 的指令,該指令能夠當(dāng)其由協(xié)處理器處理時(shí)產(chǎn)生CPU中斷。在協(xié)處理器能夠中斷CPU以前, 最好確保來(lái)自于陷阱指令前的原語(yǔ)的所有像素都已經(jīng)退休并且都已被適當(dāng)?shù)貙懭氲絻?nèi)存 (可以包括來(lái)自于柵欄指令的內(nèi)存寫入的操作)。注意,這不意味著協(xié)處理器需要停止整個(gè) 流水線。當(dāng)協(xié)處理器在等待將要退休的陷阱之前的指令的末尾像素時(shí),能夠執(zhí)行跟隨陷阱 指令的原語(yǔ)。陷阱指令不必是特許指令并且能夠被插入在任何DMA緩沖區(qū)中,包括那些直接由 用戶工作方式驅(qū)動(dòng)器構(gòu)造的DMA緩沖區(qū)。啟動(dòng)/禁用環(huán)境轉(zhuǎn)換。對(duì)于支持次三角關(guān)系中斷的硬件來(lái)說(shuō),能夠提供指令來(lái)啟 動(dòng)和禁用環(huán)境轉(zhuǎn)換。盡管環(huán)境轉(zhuǎn)換被禁用,但是協(xié)處理器通常不應(yīng)該轉(zhuǎn)離當(dāng)前的協(xié)處理器 環(huán)境。盡管如果CPU提供新運(yùn)行列表則可以要求協(xié)處理器更新其當(dāng)前的運(yùn)行列表信息,但 是協(xié)處理器可以推遲對(duì)于那個(gè)新運(yùn)行列表的環(huán)境轉(zhuǎn)換,直到環(huán)境轉(zhuǎn)換被重新啟動(dòng)為止。OS 能夠確保下列規(guī)則保持樹當(dāng)環(huán)境轉(zhuǎn)換時(shí)被禁用1)僅僅特權(quán)DMA緩沖區(qū)將被處理。2)非環(huán)境轉(zhuǎn)換指令將存在于DMA流中。3) DMA流將不在指令外運(yùn)行。4)頁(yè)面錯(cuò)誤將不會(huì)發(fā)生(如果支持頁(yè)面級(jí)故障的話)。在許多計(jì)算機(jī)系統(tǒng)中,禁用和啟動(dòng)環(huán)境轉(zhuǎn)換都是可以僅僅存在于特權(quán)DMA緩沖區(qū) 中的特許指令。對(duì)于這些指令的使用情況是為了允許調(diào)度程序在其不可能被中斷的情況下 調(diào)度將出現(xiàn)在屏幕上的操作(即,顯現(xiàn)blit)。在這樣一個(gè)操作中被中斷各會(huì)導(dǎo)致在顯著的 一段時(shí)間中在屏幕上可以見到偽像。注意,如果協(xié)處理器遇到DMA緩沖區(qū)中無(wú)法預(yù)知的誤差,那么即使環(huán)境轉(zhuǎn)換被禁 用,它也能夠進(jìn)行環(huán)境轉(zhuǎn)換以轉(zhuǎn)離這個(gè)DMA緩沖區(qū)。由于僅僅以內(nèi)核工作方式構(gòu)造的DMA 緩沖區(qū)可以包含不可中斷的部分,因而無(wú)法預(yù)知的誤差將成為驅(qū)動(dòng)器錯(cuò)誤(bug)或硬件錯(cuò)誤的結(jié)果。如果在那些情況下協(xié)處理器不進(jìn)行環(huán)境轉(zhuǎn)換以轉(zhuǎn)離出去,那么顯示器看門狗 (watchdog)就將捕獲到所述掛起(hang)并重置協(xié)處理器,以便恢復(fù)系統(tǒng)。任選的控制指令。盡管調(diào)度程序能夠利用上述的簡(jiǎn)單控制指令來(lái)構(gòu)造高級(jí)同步原 語(yǔ),但是可以讓結(jié)果變得更為有效。在許多計(jì)算機(jī)系統(tǒng)中,協(xié)處理器環(huán)境在其能取得同步對(duì) 象的所有權(quán)以前被CPU中斷。如果取得了同步對(duì)象并且以高頻加以釋放的話,那么這就會(huì) 成為問(wèn)題。為了具有更多有效的同步原語(yǔ),調(diào)度程序能夠從協(xié)處理器那里接收專用指令。具 體來(lái)講,協(xié)處理器可以被配置成能在適當(dāng)時(shí)間發(fā)送“等待”指令和“發(fā)信號(hào)”指令。等待指令被插入在DMA流中,以通知協(xié)處理器它檢查指定計(jì)數(shù)器的值。如果計(jì)數(shù) 器是非零的,那么協(xié)處理器就能夠遞減計(jì)數(shù)器并繼續(xù)執(zhí)行當(dāng)前的協(xié)處理器環(huán)境。如果計(jì)數(shù) 器是零,那么協(xié)處理器就能夠在等待指令以前重置當(dāng)前協(xié)處理器環(huán)境的指令指針,并且轉(zhuǎn) 入運(yùn)行列表中的下一個(gè)環(huán)境。當(dāng)協(xié)處理器環(huán)境需要停止在等待指令上并且在之后被重新調(diào) 度時(shí),由于仍不滿足等待條件,因此協(xié)處理器可以重新執(zhí)行該等待指令。等待指令僅僅需要具有一個(gè)參數(shù),即規(guī)定將被比較/縮減的內(nèi)存單元的虛擬地 址。計(jì)數(shù)器可以是至少32位并且可以是任何有效的虛擬地址。在優(yōu)選實(shí)施例中,等待指令 可以是不可中斷的;也就是說(shuō),如果將新運(yùn)行列表給予協(xié)處理器,那么它就能夠在等待指令 以前或者在它完成之后而轉(zhuǎn)入新運(yùn)行列表。等待指令能夠被插入在受限D(zhuǎn)MA緩沖區(qū)和特權(quán) DMA緩沖區(qū)兩者中。發(fā)信號(hào)指令可以被插入在DMA流中,以通知協(xié)處理器它可以更新計(jì)數(shù)器的值。接 著,協(xié)處理器可以將計(jì)數(shù)器的值加1。協(xié)處理器可以忽略在加法期間的潛在溢出。作為選 擇,協(xié)處理器能夠?qū)⒁绯鲎鳛榱髦械恼`差予以報(bào)告,以便幫助追蹤軟件錯(cuò)誤。發(fā)信號(hào)指令僅僅需要具有一個(gè)參數(shù),即應(yīng)該更新的計(jì)數(shù)器的虛擬地址??梢园延?jì) 數(shù)器尺寸作成匹配等待指令計(jì)數(shù)器的尺寸,并且在優(yōu)選實(shí)施例中,該尺寸至少是32位。發(fā) 信號(hào)指令能夠被插入在受限D(zhuǎn)MA緩沖區(qū)和特權(quán)DMA緩沖區(qū)兩者中。交換為了允許全屏幕應(yīng)用程序無(wú)縫地運(yùn)行而沒(méi)有流水線中的氣泡,協(xié)處理器可以提供 用于交換排隊(duì)的指令(即,顯示的基址的改變)。通常連續(xù)地分配來(lái)自于物理內(nèi)存的顯示表 面,并且CRTC利用物理地址而非虛擬地址來(lái)訪問(wèn)所述顯示表面。因此,交換指令可用于將 CRTC編程為將要顯示的新物理地址。由于這是物理地址而非虛擬地址,因而騙子應(yīng)用程序 能夠潛在地將CRTC編程為顯示屬于另一個(gè)應(yīng)用程序或用戶的部分輔助內(nèi)存(這部分內(nèi)存 可能包含有機(jī)密)。為此,可以實(shí)施交換指令,從而通過(guò)確保它僅僅是由內(nèi)核工作方式驅(qū)動(dòng) 器插入在DMA流中的特許指令,并且一旦目的地已被證實(shí),就能保護(hù)多數(shù)計(jì)算機(jī)系統(tǒng)的安 全性。在結(jié)合交換功能的本發(fā)明的各種優(yōu)選實(shí)施例中,至少可以支持兩種類型的交換 立即交換和顯示刷新的同步交換。當(dāng)協(xié)處理器處理立即交換時(shí),它可以立刻更新顯示的基 址,即使這樣做將造成可見的圖像撕裂(tearing)。當(dāng)協(xié)處理器處理同步交換時(shí),它可以鎖 住新的基址,但是推遲其更新直到下一個(gè)垂直同步周期到來(lái)為止。如果協(xié)處理器在垂直同 步周期之間正在處理多于一個(gè)的同步交換,那么協(xié)處理器僅僅能夠鎖住最近的一個(gè)并且忽 略前面的一個(gè)。當(dāng)處理同步交換時(shí),可能配置各種實(shí)施例,以便協(xié)處理器可以不必停止圖形流水線。OS將確保不會(huì)在環(huán)形緩沖區(qū)中排列任何描繪命令,所述環(huán)形緩沖區(qū)將形成當(dāng)前可見的 表面。注意,在這里,正如在將于下面進(jìn)一步解釋的“優(yōu)化交換”情形那樣,也可以在無(wú)這些 要求的情況下配置其它實(shí)施例。為確定哪個(gè)表面是當(dāng)前可見的,驅(qū)動(dòng)器可能首先能確定特定的排隊(duì)交換何時(shí)已經(jīng) 出現(xiàn)并且通知調(diào)度程序這一事件,也就是在顯示基址被改變之后通知調(diào)度程序。對(duì)于立即 交換而言,確定何時(shí)發(fā)生交換是容易的,這是因?yàn)閺腄MA流讀取交換指令可以被視為是與 更新顯示表面相同的事件。柵欄和中斷都能夠被插入在跟隨交換指令后的DMA流中,以便 通知調(diào)度程序特定交換被讀取。在同步交換的情形中,確定哪個(gè)表面是當(dāng)前可見的,更加困難。協(xié)處理器將首先從 DMA流中讀取交換指令,但是將在下一個(gè)vsync中斷時(shí)遲一些更新顯示表面。為了消除在 此期間停止協(xié)處理器的需要,可以提供一種用以通知調(diào)度程序顯示表面改變何時(shí)生效的機(jī) 制。對(duì)于這種供結(jié)合本發(fā)明之用的通知而言,存在了許多方法來(lái)設(shè)計(jì)這種機(jī)制。在圖 22中舉例說(shuō)明了一個(gè)可能的簡(jiǎn)單手段。圖22提供了一種查詢與當(dāng)前顯示表面有關(guān)的協(xié)處 理器的方法。在舉例說(shuō)明的實(shí)施例中,這些功能可以被認(rèn)為是由MMIO寄存器提供的。圖22 的系統(tǒng)是這樣一種設(shè)計(jì),即當(dāng)寄存器讀取實(shí)際顯示表面而不是讀取最新的“已鎖定的顯示 表面”時(shí),這種設(shè)計(jì)將產(chǎn)生更大的可靠性。在協(xié)處理器處理另一個(gè)排隊(duì)的交換的同時(shí),查詢 最新的已鎖定顯示表面能夠產(chǎn)生競(jìng)態(tài)條件(race condition),這可能會(huì)導(dǎo)致屏幕上的圖像 撕裂??梢岳萌魏芜m當(dāng)?shù)募夹g(shù)來(lái)產(chǎn)生交換指令。對(duì)于本發(fā)明,唯一的兼容性一般要求就 是實(shí)施解決方案應(yīng)該確保交換不會(huì)被確認(rèn),直到它有效為止。隊(duì)列交換。為了提供最大的性能,可以修改高級(jí)調(diào)度模型以便在應(yīng)用程序的描繪 流中排隊(duì)交換操作,所述應(yīng)用程序擁有監(jiān)視器。當(dāng)進(jìn)行η型緩沖時(shí),調(diào)度程序可以允許達(dá) η-1次之多的交換,所述交換將要在DMA流中被排隊(duì),并且當(dāng)?shù)讦谴谓粨Q即將被插入時(shí),該調(diào) 度程序還可以將其阻塞。這就意味著在雙重緩沖中,調(diào)度程序可以允許應(yīng)用程序?qū)σ淮谓粨Q排隊(duì),并且讓 它繼續(xù)預(yù)備DMA緩沖區(qū)以待接下來(lái)的幀,而此時(shí)協(xié)處理器結(jié)束描繪當(dāng)前幀并且處理/確認(rèn) 此次交換。它還意味著如果隨著為下列幀而預(yù)備DMA緩沖區(qū)并提交第二次交換、直到應(yīng)用 程序結(jié)束為止時(shí),那么它就可以被阻塞,直到第一次交換得到協(xié)處理器確認(rèn)為止。當(dāng)調(diào)度程序使用立即交換時(shí),排隊(duì)交換機(jī)構(gòu)按上述那樣工作。然而,當(dāng)使用同步交 換時(shí),調(diào)度程序還可以專門地照顧經(jīng)過(guò)n-1次交換而被排隊(duì)的DMA緩沖區(qū)。實(shí)際上,經(jīng)過(guò)那 次交換的DMA緩沖區(qū)通常將被描繪給當(dāng)前可見的表面。建議在多數(shù)系統(tǒng)中,不處理這些DMA 緩沖區(qū),直到當(dāng)前已排隊(duì)的交換的次數(shù)一直變回到n-2或n-2以下。解決這個(gè)問(wèn)題的最簡(jiǎn)單手段就是僅允許n-2次交換排隊(duì),而不是n-1次。然而, 這種解決方案將還意味著在雙重緩沖的情況下,我們無(wú)法將任何交換排隊(duì),所以我們將需 要在每一幀完成之后阻塞所述應(yīng)用程序,直到相應(yīng)的交換被處理為止。在圖23中,舉例說(shuō)明了在此設(shè)置中的優(yōu)選手段。作為舉例說(shuō)明,允許n-1次的交 換排隊(duì)。為了防止在交換n-1次之后執(zhí)行DMA緩沖區(qū)的排隊(duì),調(diào)度程序可以在那個(gè)協(xié)處理 器的虛擬環(huán)形緩沖區(qū)中累積那些DMA緩沖區(qū)。調(diào)度程序可以等待直到當(dāng)前隊(duì)列交換的次數(shù) 一直變回到n-2,以便將那些隊(duì)列交換提交給實(shí)際的協(xié)處理器環(huán)境的環(huán)。
正如在圖23中舉例說(shuō)明的那樣,當(dāng)多個(gè)應(yīng)用程序同時(shí)運(yùn)行時(shí),協(xié)處理器可以不必 停止。盡管協(xié)處理器通常將停止處理來(lái)自于特定協(xié)處理器環(huán)境的DMA緩沖區(qū),但是調(diào)度程 序可以調(diào)度其它的協(xié)處理器環(huán)境以便運(yùn)行,由此有效地保持了協(xié)處理器忙。然而,當(dāng)單個(gè)應(yīng) 用程序正在運(yùn)行時(shí),例如當(dāng)玩全屏幕游戲時(shí),協(xié)處理器可以在那些時(shí)間間隔期間停止。下一 個(gè)部分描述了這樣一種機(jī)制,即如果能得到支持的話,所述機(jī)制將由調(diào)度程序來(lái)使用,以便 減少停止時(shí)間。優(yōu)化交換。試圖為全屏幕應(yīng)用程序而優(yōu)化,我們想要減少協(xié)處理器從停止到最小 值所占的時(shí)間。參看圖23,注意到,協(xié)處理器能夠因至少兩個(gè)原因而停止第一、因?yàn)閹Y(jié) 束,但系統(tǒng)正在等待vsync以便交換;第二、因?yàn)榻粨Q結(jié)束,但系統(tǒng)正在等待中斷以便通知 CPU。為了因第一個(gè)原因而減少停止,可以將更多的緩沖區(qū)添加到交換鏈中。例如從雙 倍緩沖區(qū)開始直到三倍緩沖區(qū),由此將大大地減少這種停止。然而,這樣做并不總是在驅(qū)動(dòng) 器的控制下,并且可能產(chǎn)生過(guò)度的內(nèi)存耗費(fèi)。為了因第二個(gè)原因而減少停止,可以添加協(xié)處理器機(jī)制以便完全地消除掉這一停 止的需要。協(xié)處理器能夠提供在交換指令上的等待,所述交換指令將停止協(xié)處理器,直到先 前隊(duì)列交換已經(jīng)被處理為止。當(dāng)支持此類指令時(shí),調(diào)度程序能夠?yàn)槿聊粦?yīng)用程序而使用 它,以便對(duì)交換進(jìn)行排隊(duì),并且CPU不必在每一次交換之后重新啟動(dòng)DMA流。高級(jí)同步對(duì)象通過(guò)使用先前定義的控制指令,調(diào)度程序能夠構(gòu)造諸如臨界區(qū)以及人工干預(yù)之類 的高級(jí)同步對(duì)象。一旦符合等待狀態(tài)時(shí),調(diào)度程序就能夠通過(guò)防止執(zhí)行部分DMA緩沖區(qū)直 到它由CPU顯式地重新調(diào)度,來(lái)實(shí)施這種同步原語(yǔ)。可以由調(diào)度程序來(lái)實(shí)施等待對(duì)象,就像 柵欄一樣。邏輯上遵循柵欄的DMA緩沖區(qū)可以由調(diào)度程序進(jìn)行排隊(duì),但不將其提交到協(xié)處 理器環(huán)境的環(huán)中,直到符合等待條件為止。一旦它正在等待對(duì)象,協(xié)處理器環(huán)境繼而就可以 由調(diào)度程序移動(dòng)到特定對(duì)象上的等待列表中,直到發(fā)信號(hào)通知它為止??梢酝ㄟ^(guò)在協(xié)處理 器環(huán)境DMA流中插入柵欄并繼之以中斷指令,來(lái)發(fā)信號(hào)通知對(duì)象。當(dāng)接收這種中斷時(shí),調(diào)度 程序可以識(shí)別正在發(fā)信號(hào)通知哪個(gè)對(duì)象,繼而可以確定是否有任何等待協(xié)處理器環(huán)境應(yīng)該 在就緒隊(duì)列中向后移。當(dāng)在就緒隊(duì)列中將協(xié)處理器環(huán)境向后移時(shí),調(diào)度程序?qū)沫h(huán)中阻止 的DMA緩沖區(qū)插入進(jìn)來(lái)。例如,考慮本發(fā)明的實(shí)施例,在其中應(yīng)用程序具有在生產(chǎn)者和消費(fèi)者之間共享的 表面,并且所述應(yīng)用程序需要同步訪問(wèn)資源,以便當(dāng)描繪時(shí)、消費(fèi)者總是能使用有效的內(nèi) 容。在圖24中舉例說(shuō)明了同步化此情形的一種可能的方法。轉(zhuǎn)向圖24,在調(diào)度程序端上,例如可以通過(guò)下列內(nèi)核形實(shí)轉(zhuǎn)換程序(kernelthimk) 來(lái)實(shí)施同步,所述內(nèi)核形實(shí)轉(zhuǎn)換程序可以在任何組合中或者結(jié)合其它動(dòng)作來(lái)實(shí)施1)CreateSynchronizationObject 為同步對(duì)象創(chuàng)建內(nèi)核軌道結(jié)構(gòu)。將對(duì)象的句柄 返回到可被用于后續(xù)等待/釋放/刪除調(diào)用的用戶工作方式。2)DeleteSynchronizationObject 銷毀先前創(chuàng)建的對(duì)象。3)WaitOnSingleObject/ffaitOnMultipleObject 將等待同步事件 (wait-on-synchronization event)插入到當(dāng)前協(xié)處理器環(huán)境的DMA流中。連同正對(duì)在等 待的對(duì)象的訪問(wèn)一起,將所述事件插入到調(diào)度程序事件歷史中。
4) ReleaseObject/SignalObject 將發(fā)信號(hào)同步事件插入(signal synchronizationevent)到當(dāng)前協(xié)處理器環(huán)境(柵欄/中斷)的DMA流中。連同對(duì)正在釋 放或者發(fā)信號(hào)的對(duì)象的訪問(wèn)一起,將所述事件插入到調(diào)度程序事件歷史中。將圖24的例圖應(yīng)用到人工干預(yù),一旦協(xié)處理器處理DMA流中的同步事件,調(diào)度程 序就能夠執(zhí)行下列動(dòng)作,這些動(dòng)作也可以在任何組合中或者結(jié)合其它的動(dòng)作來(lái)實(shí)施1)等待(On a wait)檢查人工干預(yù)的狀態(tài)。如果當(dāng)前未采取人工干預(yù),則采取人 工干預(yù)并將協(xié)處理器線程放回到調(diào)度程序的就緒隊(duì)列中。如果已經(jīng)采取了人工干預(yù),則將 協(xié)處理器線程放在等待隊(duì)列中以供人工干預(yù)。2)發(fā)信號(hào)(On a signal)檢測(cè)其它協(xié)處理器線程是否正在等待人工干預(yù)。如果 其它線程正在等待,則取得在列表中正在等待的線程,并將它放回到調(diào)度程序的就緒列表 中。如果沒(méi)有線程正在等待,則將人工干預(yù)置回未采取狀態(tài)。利用這個(gè)機(jī)制,調(diào)度程序就能夠構(gòu)造。例如,考慮下列類型的能由調(diào)度程序構(gòu)造的 同步原語(yǔ)人工干預(yù)(Mutex):同時(shí)只有一個(gè)協(xié)處理器線程有權(quán)存取共享資源。打信號(hào)(Semaphore)指定數(shù)目的協(xié)處理器線程有權(quán)同時(shí)存取共享資源。通知事件(Notification event)許多協(xié)處理器線程能夠等待來(lái)自于另一個(gè)協(xié)處 理器線程的信號(hào)。在一些情況下,應(yīng)用程序可以被配置成當(dāng)協(xié)處理器已經(jīng)結(jié)束處理描繪指令時(shí)請(qǐng)求 通知。為了支持這個(gè),調(diào)度程序可能允許驅(qū)動(dòng)器為DMA緩沖區(qū)請(qǐng)求它正在進(jìn)行提交的通知。 所述驅(qū)動(dòng)器繼而可以在提交時(shí)間規(guī)定CPU同步事件,一旦協(xié)處理器已經(jīng)完成已提交的DMA 緩沖區(qū),就可以發(fā)信號(hào)通知所述提交時(shí)間。所述調(diào)度程序能夠?qū)⒅付ǖ腄MA緩沖區(qū)插入在 指定協(xié)處理器環(huán)境的環(huán)中,并且接著將用戶工作方式協(xié)處理器事件通知添加到該環(huán)(繼之 以中斷的柵欄)中。當(dāng)協(xié)處理器事件得到協(xié)處理器的處理時(shí),調(diào)度程序能夠發(fā)信號(hào)通知相 關(guān)的CPU同步事件。調(diào)度程序事件歷史緩沖區(qū)調(diào)度程序可以為多個(gè)目的而使用上述的同步機(jī)制。由于中斷不會(huì)停止協(xié)處理器, 因而CPU僅僅需要參看通知的子設(shè)備,且因此可以將一些通知擠壓在一起。為了適當(dāng)?shù)仨?應(yīng)DMA緩沖區(qū)中的每個(gè)通知,調(diào)度程序可以維護(hù)事件的歷史,所述事件是連同任何處理那 些事件所需的參數(shù)一起被插入的事件。事件歷史緩沖區(qū)可能只不過(guò)是事件信息結(jié)構(gòu)的每協(xié)處理器的環(huán)境陣列,所述事件 信息結(jié)構(gòu)追蹤每個(gè)需要調(diào)度程序處理以及被插入那個(gè)環(huán)境的DMA流中的事件。注意,調(diào)度 程序柵欄是由調(diào)度程序使用的柵欄,以便同步化事件。每協(xié)處理器環(huán)境都可能有一個(gè)柵欄, 以保持安全性,可將所述柵欄作成僅僅允許通過(guò)特許指令來(lái)進(jìn)行更新。在任何情況下,這類 事件都可以作為繼之以中斷指令的柵欄指令而被插入到DMA流中。—旦每個(gè)柵欄中斷,調(diào)度程序就可以首先確定當(dāng)前的柵欄,然后仔細(xì)檢查事件歷 史緩沖區(qū)來(lái)確定事件已經(jīng)發(fā)生。這個(gè)確定可以根據(jù)相關(guān)聯(lián)的柵欄來(lái)完成。調(diào)度程序可以繼 續(xù)處理柵欄中斷。圖25舉例說(shuō)明了事件歷史緩沖區(qū)的各種實(shí)施例??梢灾С衷S多事件。以下列表描述了一些當(dāng)前支持的事件,但是這不意指限制可 能支持的事件的個(gè)數(shù)和類型。
可編程PCI插孔現(xiàn)今的協(xié)處理器正在顯露為非常接近于PCI規(guī)格所允許的限制的PCI插孔。未來(lái) 一代協(xié)處理器將具有比通過(guò)插孔置露的輔助內(nèi)存更多的插件級(jí)輔助內(nèi)存。因此,在將來(lái)我 們無(wú)法假定所有的輔助內(nèi)存都同時(shí)將通過(guò)PCI插孔可見。這個(gè)限制可以實(shí)行多種方式。支持每協(xié)處理器的環(huán)境虛擬地址空間的高級(jí)調(diào)度模 型的優(yōu)選方法是使用無(wú)論在輔助內(nèi)存中的任何地方都能夠被重定向的PCI插孔,所述輔 助內(nèi)存處于4KB的粒度。這在圖26中作了描繪。正如在圖26中所描繪的那樣,PCI插孔頁(yè)表能夠獨(dú)立于協(xié)處理器頁(yè)表。當(dāng)協(xié)處理 器本身正在從環(huán)境到環(huán)境轉(zhuǎn)換時(shí),存在多個(gè)正在運(yùn)行并訪問(wèn)PCI插孔的一部分的CPU進(jìn)程。 PCI插孔的頁(yè)表是所有協(xié)處理器環(huán)境當(dāng)中的共享資源,并且將根據(jù)輔助內(nèi)存來(lái)對(duì)其進(jìn)行分 配。驅(qū)動(dòng)器能夠提供一個(gè)映射/解除映射的DDI,以便允許輔助內(nèi)存管理器VidMm管理正運(yùn) 行的應(yīng)用程序當(dāng)中的PCI插孔地址空間。可以利用物理地址來(lái)讓協(xié)處理器訪問(wèn)PCI插孔的頁(yè)表。注意,PCI插孔可以被配置成僅僅將地址空間重定向到本地輔助內(nèi)存。它不需要 將所述地址空間重定向到系統(tǒng)內(nèi)存,因?yàn)閂idMm將總是直接映射系統(tǒng)內(nèi)存,而不通過(guò)那個(gè) 插孔。頁(yè)面級(jí)故障盡管先前描述的表面級(jí)故障通常能在大多數(shù)情況下較好地工作,但是也存在一些 可能需要對(duì)其進(jìn)行改進(jìn)的情況。例如,利用表面級(jí)故障,某些使用非常大量數(shù)據(jù)集的應(yīng)用程 序不能同時(shí)獲得內(nèi)存中的全部數(shù)據(jù)集,因此也許不能很好地工作??梢栽诟呒?jí)模型中實(shí)施 的對(duì)此問(wèn)題的解決方案就是頁(yè)面級(jí)故障機(jī)制。利用頁(yè)面級(jí)故障,所述模型類似于在前面部分中所述的模型那樣進(jìn)行工作。主要 差異就在于頁(yè)面錯(cuò)誤被匯報(bào)且由VidMm句柄的方法不同。盡管表面級(jí)故障可能需要協(xié)處理 器規(guī)定它需要取得進(jìn)一步進(jìn)展的整個(gè)資源列表(為了消除死循環(huán),在其中分頁(yè)一個(gè)資源意 味著驅(qū)逐所需的另一個(gè)),頁(yè)面級(jí)故障不需要協(xié)處理器展示一列虛擬地址。對(duì)于頁(yè)面級(jí)故障 而言,協(xié)處理器僅僅需要報(bào)告那個(gè)故障的虛擬地址。VidMm能夠找出這個(gè)地址屬于哪個(gè)分 配,并且判斷是僅僅這個(gè)特定頁(yè)面需要被駐留還是需要一些預(yù)取操作。當(dāng)單個(gè)像素需要多 個(gè)頁(yè)面時(shí),可能會(huì)因那個(gè)單象素而產(chǎn)生多個(gè)故障。當(dāng)另一個(gè)頁(yè)面正被引入時(shí),那個(gè)像素需要 的頁(yè)面也有可能會(huì)遭到驅(qū)逐。然而,只要應(yīng)用程序的所述工作組足夠地大于像素可能需要 的頁(yè)面的最大數(shù)目,通過(guò)頁(yè)面錯(cuò)誤的循環(huán)的概率就是非常小的。最后,應(yīng)當(dāng)理解的是,在這里描述的各種技術(shù)都可以結(jié)合硬件或軟件來(lái)實(shí)施,或者 在適當(dāng)?shù)那闆r下,可以結(jié)合上述兩者加以實(shí)施。因此,本發(fā)明的方法和設(shè)備或者其中的某些 方面或部分,都可以采取嵌入在有形介質(zhì)中的程序代碼(即,指令)的形式,所述有形介質(zhì) 比如是軟盤、CD-ROM、硬盤、或任何其它機(jī)器可讀的存儲(chǔ)介質(zhì),其中當(dāng)程序代碼被載入并由 諸如計(jì)算機(jī)之類的機(jī)器執(zhí)行時(shí),所述機(jī)器就成為用于實(shí)施本發(fā)明的設(shè)備。在程序代碼在可 編程計(jì)算機(jī)上執(zhí)行情況下,所述計(jì)算設(shè)備通常包括處理器、由處理器可讀的存儲(chǔ)介質(zhì)(包 括易失性和非易失性內(nèi)存和/或存儲(chǔ)元件)、至少一個(gè)輸入裝置以及至少一個(gè)輸出裝置。為 了與計(jì)算機(jī)系統(tǒng)相通信,可以實(shí)施或者使用本發(fā)明的用戶接口技術(shù)的一個(gè)或多個(gè)程序,例 如通過(guò)使用數(shù)據(jù)處理API、可再次使用的控制器等等,都是優(yōu)選以高級(jí)程序或者面向?qū)ο缶?程語(yǔ)言來(lái)實(shí)施的。然而,如有需要,則所述程序能夠以匯編語(yǔ)言或者機(jī)器語(yǔ)言中來(lái)實(shí)施。在 任何情況下,所述語(yǔ)言都可以是編譯語(yǔ)言或者解釋語(yǔ)言,并且同硬件實(shí)現(xiàn)相結(jié)合。盡管示范性實(shí)施例是涉及在獨(dú)立的計(jì)算機(jī)系統(tǒng)環(huán)境中使用本發(fā)明的,但是本發(fā)明 不限于此,而是可以結(jié)合諸如網(wǎng)絡(luò)或分布式計(jì)算環(huán)境之類的任何計(jì)算環(huán)境加以實(shí)施。更進(jìn) 一步來(lái)講,本發(fā)明可以在多個(gè)處理芯片或設(shè)備中或者跨過(guò)多個(gè)處理芯片或設(shè)備加以實(shí)施, 并且跨過(guò)多個(gè)設(shè)備也可以同樣地實(shí)施存儲(chǔ)。此類設(shè)備可以包括個(gè)人電腦、網(wǎng)絡(luò)服務(wù)器、手持 設(shè)備、超大規(guī)模計(jì)算機(jī)或者集成于其它諸如汽車和飛機(jī)之類的系統(tǒng)中的計(jì)算機(jī)。因此,本發(fā) 明不應(yīng)該限于任何單個(gè)實(shí)施例,而是應(yīng)該解釋成落入依照所附權(quán)利要求的廣度和范圍中。
權(quán)利要求
一種用于向應(yīng)用程序提供內(nèi)存以支持任務(wù)處理以供協(xié)處理器處理的方法,包括向至少一個(gè)應(yīng)用程序提供虛擬地址空間;在虛擬地址空間中存儲(chǔ)與由協(xié)處理器處理的一個(gè)或多個(gè)任務(wù)有關(guān)的信息,其中所述一個(gè)或多個(gè)任務(wù)至少部分是由所述至少一個(gè)應(yīng)用程序產(chǎn)生的;標(biāo)識(shí)物理內(nèi)存中對(duì)應(yīng)于所述虛擬地址空間中的至少一個(gè)虛擬地址的位置;當(dāng)所述一個(gè)或多個(gè)任務(wù)被提交給所述協(xié)處理器以供處理時(shí),訪問(wèn)所述物理內(nèi)存中對(duì)應(yīng)于所述虛擬地址空間中的所述至少一個(gè)虛擬地址的所述位置。
2.如權(quán)利要求1所述的方法,其特征在于,所述協(xié)處理器包括圖形處理單元(GPU)。
3.如權(quán)利要求1所述的方法,其特征在于,標(biāo)識(shí)物理內(nèi)存中的位置是由內(nèi)存管理器完 成的,所述內(nèi)存管理器能將內(nèi)存資源移動(dòng)至物理內(nèi)存中的另一個(gè)位置。
4.如權(quán)利要求1所述的方法,其特征在于,所述與一個(gè)或多個(gè)任務(wù)有關(guān)的信息被分配 給所述虛擬地址空間的分開的部分,每個(gè)部分包括環(huán)境信息,所述環(huán)境包括處理任務(wù)所需 的內(nèi)存資源的位置。
5.如權(quán)利要求1所述的方法,其特征在于,還包括證實(shí)內(nèi)存資源,其中所述證實(shí)包括發(fā) 現(xiàn)空閑的物理內(nèi)存的范圍,并且請(qǐng)求驅(qū)動(dòng)程序?qū)?nèi)存資源句柄映射到該范圍。
6.如權(quán)利要求1所述的方法,其特征在于,所述虛擬地址空間是通過(guò)使用平面頁(yè)表來(lái) 虛擬化的,其中所述平面頁(yè)表將協(xié)處理器可讀的內(nèi)存分成預(yù)定義內(nèi)存數(shù)量的頁(yè)面,其中在 所述虛擬地址空間中進(jìn)一步提供包含用于指定協(xié)處理器可讀的內(nèi)存地址的標(biāo)識(shí)符的頁(yè)表。
7.如權(quán)利要求1所述的方法,其特征在于,所述虛擬地址空間是通過(guò)使用多級(jí)頁(yè)表來(lái) 虛擬化的,其中所述多級(jí)頁(yè)表將協(xié)處理器可讀的內(nèi)存分成預(yù)定義內(nèi)存數(shù)量的頁(yè)面,其中在 虛擬地址空間中進(jìn)一步提供包含用于指定協(xié)處理器可讀的內(nèi)存地址的標(biāo)識(shí)符的多個(gè)頁(yè)表。
8.如權(quán)利要求1所述的方法,其特征在于,所述物理內(nèi)存的一部分被用來(lái)指示在物理 內(nèi)存中是否與需要處理的任務(wù)相關(guān)聯(lián)的所有所需內(nèi)存資源都是可供處理的。
9.如權(quán)利要求1所述的方法,其特征在于,所述物理內(nèi)存包括兩部分,一個(gè)大的部分和 一個(gè)小的部分,并且所述小的部分包括對(duì)所述大的部分中的內(nèi)存單元的引用。
10.如權(quán)利要求9所述的方法,其特征在于,所述小的部分引用所述大的部分中的四千 字節(jié)(6個(gè))的內(nèi)存塊。
11.如權(quán)利要求9所述的方法,其特征在于,一輔助內(nèi)存管理器將所述引用映射到所述 大的部分中的內(nèi)存單元。
12.一種用于向應(yīng)用程序提供內(nèi)存以支持任務(wù)處理以供協(xié)處理器處理的計(jì)算設(shè)備,包括向至少一個(gè)應(yīng)用程序提供虛擬地址空間的裝置;在虛擬地址空間中存儲(chǔ)與由協(xié)處理器處理的一個(gè)或多個(gè)任務(wù)有關(guān)的信息的裝置,其中 所述一個(gè)或多個(gè)任務(wù)至少部分是由所述至少一個(gè)應(yīng)用程序產(chǎn)生的;標(biāo)識(shí)物理內(nèi)存中對(duì)應(yīng)于所述虛擬地址空間中的至少一個(gè)虛擬地址的位置的裝置;當(dāng)所述一個(gè)或多個(gè)任務(wù)被提交給所述協(xié)處理器以供處理時(shí),訪問(wèn)所述物理內(nèi)存中對(duì)應(yīng) 于所述虛擬地址空間中的所述至少一個(gè)虛擬地址的所述位置的裝置。
13.一種用于調(diào)度任務(wù)以供協(xié)處理器處理的方法,包括在應(yīng)用程序接口 API接收來(lái)自第一應(yīng)用程序的調(diào)用,所述調(diào)用請(qǐng)求要求由協(xié)處理器處理的任務(wù);由所述API向用戶模式驅(qū)動(dòng)器發(fā)送所述任務(wù)用于存儲(chǔ)在命令緩沖器內(nèi)存組中,所述命 令緩沖器的至少一部分是在所述第一應(yīng)用程序的環(huán)境中分配的;根據(jù)所述命令緩沖區(qū)的清除,由所述API從所述命令緩沖區(qū)接收所述任務(wù); 由所述API將所述任務(wù)發(fā)送到協(xié)處理器內(nèi)核用于處理;由所述協(xié)處理器內(nèi)核將所述任務(wù)交付給協(xié)處理器調(diào)度程序,其中協(xié)處理器調(diào)度程序 功能包括確定處理任務(wù)的次序,其中所述次序能包括與一個(gè)或多個(gè)其它應(yīng)用程序有關(guān)的任 務(wù),所述次序指明在與所述任務(wù)有關(guān)的所述第一應(yīng)用程序以及與其它任務(wù)有關(guān)的所述一個(gè) 或多個(gè)其它應(yīng)用程序中間的任何相對(duì)優(yōu)先級(jí),以及指明所述第一應(yīng)用程序以及所述一個(gè)或 多個(gè)其它應(yīng)用程序被授權(quán)的相應(yīng)處理時(shí)間量;通過(guò)確保任何所需的內(nèi)存資源在協(xié)處理器可存取的內(nèi)存單元中是可用的,來(lái)預(yù)備任務(wù) 以供處理,其中所述預(yù)備任務(wù)以協(xié)處理器調(diào)度程序所確定的所述次序發(fā)生;以及 向協(xié)處理器提交預(yù)備好的任務(wù)以供處理。
14.如權(quán)利要求13所述的方法,其特征在于,所述API依照Direct3D運(yùn)行時(shí)API來(lái)工作。
15.如權(quán)利要求13所述的方法,其特征在于,所述協(xié)處理器內(nèi)核按照DirectX內(nèi)核來(lái)工作。
16.如權(quán)利要求13所述的方法,其特征在于,還包括由內(nèi)核模式驅(qū)動(dòng)器產(chǎn)生直接內(nèi)存 存取DMA緩沖區(qū),其中要求由協(xié)處理器處理的一個(gè)或多個(gè)任務(wù)用于產(chǎn)生所述DMA緩沖區(qū),所 述DMA緩沖區(qū)表示用于產(chǎn)生所述DMA緩沖區(qū)的所述一個(gè)或多個(gè)任務(wù)。
17.如權(quán)利要求16所述的方法,其特征在于,還包括由內(nèi)核模式驅(qū)動(dòng)器產(chǎn)生一內(nèi)存資 源列表,其中協(xié)處理器需要由所述列表所表示的內(nèi)存資源來(lái)處理由所述DMA緩沖區(qū)所表示 的一個(gè)或多個(gè)任務(wù)。
18.如權(quán)利要求16所述的方法,其特征在于,還包括構(gòu)造分頁(yè)緩沖區(qū)以將內(nèi)存資源列 表上的內(nèi)存資源引入到協(xié)處理器可存取的內(nèi)存單元內(nèi)的正確的內(nèi)存地址。
19.一種用于調(diào)度任務(wù)以供協(xié)處理器處理的計(jì)算設(shè)備,包括在應(yīng)用程序接口 API接收來(lái)自第一應(yīng)用程序的調(diào)用的裝置,所述調(diào)用請(qǐng)求要求由協(xié)處 理器處理的任務(wù);由所述API向用戶模式驅(qū)動(dòng)器發(fā)送所述任務(wù)用于存儲(chǔ)在命令緩沖器內(nèi)存組中的裝置, 所述命令緩沖器的至少一部分是在所述第一應(yīng)用程序的環(huán)境中分配的;根據(jù)所述命令緩沖區(qū)的清除,由所述API從所述命令緩沖區(qū)接收所述任務(wù)的裝置; 由所述API將所述任務(wù)發(fā)送到協(xié)處理器內(nèi)核用于處理的裝置; 由所述協(xié)處理器內(nèi)核將所述任務(wù)交付給協(xié)處理器調(diào)度程序的裝置,其中協(xié)處理器調(diào)度 程序功能包括確定處理任務(wù)的次序,其中所述次序能包括與一個(gè)或多個(gè)其它應(yīng)用程序有關(guān) 的任務(wù),所述次序指明在與所述任務(wù)有關(guān)的所述第一應(yīng)用程序以及與其它任務(wù)有關(guān)的所述 一個(gè)或多個(gè)其它應(yīng)用程序中間的任何相對(duì)優(yōu)先級(jí),以及指明所述第一應(yīng)用程序以及所述一 個(gè)或多個(gè)其它應(yīng)用程序被授權(quán)的相應(yīng)處理時(shí)間量;通過(guò)確保任何所需的內(nèi)存資源在協(xié)處理器可存取的內(nèi)存單元中是可用的,來(lái)預(yù)備任務(wù) 以供處理的裝置,其中所述預(yù)備任務(wù)以協(xié)處理器調(diào)度程序所確定的所述次序發(fā)生;以及向協(xié)處理器提交預(yù)備好的任務(wù)以供處理的裝置。全文摘要
提供了用于調(diào)度協(xié)處理器的處理的系統(tǒng)和方法,借此應(yīng)用程序能夠?qū)⑷蝿?wù)提交給調(diào)度程序,并且調(diào)度程序能夠確定多少個(gè)正處理的每個(gè)應(yīng)用程序是有權(quán)的,并確定處理的次序。結(jié)合這個(gè)進(jìn)程,需要處理的任務(wù)能被存儲(chǔ)在由內(nèi)存管理器管理的物理內(nèi)存或虛擬內(nèi)存中。本發(fā)明還提供了各種判斷特定任務(wù)是否就緒以供處理的技術(shù)??梢允褂谩斑\(yùn)行列表”來(lái)確保協(xié)處理器不會(huì)在任務(wù)之間或在中斷之后耗費(fèi)時(shí)間。本發(fā)明還通過(guò)不允許應(yīng)用程序修改用以維護(hù)系統(tǒng)操作正常運(yùn)行的那部分必要的內(nèi)存,而提供了用于確保計(jì)算機(jī)系統(tǒng)安全性的技術(shù)。
文檔編號(hào)G06T1/20GK101894044SQ20101015861
公開日2010年11月24日 申請(qǐng)日期2004年2月18日 優(yōu)先權(quán)日2003年2月18日
發(fā)明者A·B·戈沙利亞, S·布魯諾弗斯特 申請(qǐng)人:微軟公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
朔州市| 宁化县| 阿坝县| 关岭| 桦川县| 苗栗市| 青神县| 石渠县| 靖西县| 东兰县| 江孜县| 宜良县| 雷波县| 军事| 汝阳县| 宁夏| 措美县| 江口县| 浦东新区| 靖江市| 济南市| 云龙县| 梨树县| 常州市| 尼玛县| 尖扎县| 吉首市| 榕江县| 巴林右旗| 剑川县| 盐池县| 新沂市| 石台县| 萨嘎县| 十堰市| 西和县| 吉林市| 义马市| 万荣县| 阿城市| 昌黎县|