專利名稱::用于增強(qiáng)協(xié)處理器性能的系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)處理器,并且尤其涉及用于調(diào)度協(xié)處理器的處理的硬件和軟件。
背景技術(shù):
:現(xiàn)在,許多計(jì)算機(jī)系統(tǒng)都包括協(xié)處理器,例如,圖形處理單元(GPU)。在某些情況下,一個(gè)協(xié)處理器可以與中央處理單元(CPU)—起駐留(reside)在系統(tǒng)的主板上,例如微處理器,并且,在其它系統(tǒng)中一個(gè)協(xié)處理器可以駐留在一個(gè)單獨(dú)的圖形卡上。在實(shí)現(xiàn)其處理任務(wù)的過(guò)程中,協(xié)處理器經(jīng)常要訪問(wèn)輔助存儲(chǔ)器,例如視頻存儲(chǔ)器。當(dāng)前的協(xié)處理器經(jīng)常進(jìn)行優(yōu)化來(lái)實(shí)現(xiàn)三維圖形計(jì)算,從而支持游戲和計(jì)算機(jī)輔助設(shè)計(jì)(CAD)之類的應(yīng)用程序。盡管當(dāng)運(yùn)行單一的圖形強(qiáng)化應(yīng)用程序時(shí)充分地執(zhí)行了當(dāng)前的計(jì)算機(jī)系統(tǒng)和協(xié)處理器,但當(dāng)運(yùn)行多個(gè)圖形強(qiáng)化應(yīng)用程序時(shí)就可能遇到問(wèn)題。這個(gè)問(wèn)題的一個(gè)原因就是典型的協(xié)處理器不能有效地調(diào)度其工作量(workload)。典型地,當(dāng)前的協(xié)處理器執(zhí)行協(xié)作的多任務(wù),這是一種多任務(wù),其中,一個(gè)當(dāng)前控制該協(xié)處理器的應(yīng)用程序必須放棄對(duì)其它應(yīng)用程序的控制。如果該應(yīng)用程序未能放棄控制,則它就可能有效地“掛起”協(xié)處理器。盡管在運(yùn)行單個(gè)的用圖表表示的增強(qiáng)程序時(shí)這并沒(méi)有什么重大關(guān)系,然而當(dāng)多應(yīng)用程序都試圖使用一個(gè)協(xié)處理器時(shí),掛起協(xié)處理器的問(wèn)題就會(huì)變得更加嚴(yán)重。盡管分配操作間處理的問(wèn)題已經(jīng)在CPU的設(shè)備環(huán)境中進(jìn)行了編址,其中必然需要改進(jìn)的多操作系統(tǒng)調(diào)度,然而,協(xié)處理器中的調(diào)度尚不能有效地編址。這是因?yàn)樵诂F(xiàn)代系統(tǒng)中,協(xié)處理器通常被看作是一種資源來(lái)使得大量的計(jì)算和耗時(shí)的操作脫離CPU,給CPU提供更多的處理時(shí)間來(lái)實(shí)現(xiàn)其它功能。這種大量的計(jì)算操作往往是圖形操作,眾所周知,這些圖形操作要求具有有效的處理能力。如果為一個(gè)協(xié)處理器調(diào)度任務(wù)就引發(fā)一個(gè)問(wèn)題,這個(gè)問(wèn)題就是協(xié)處理器的“資源缺乏(starvation)”的可能性。當(dāng)協(xié)處理器不忙時(shí)就產(chǎn)生資源缺乏,并且因此計(jì)算機(jī)系統(tǒng)的處理資源不能被有效利用。為了這個(gè)以及其它原因,就需要有用于通過(guò)將協(xié)處理器資源缺乏最小化來(lái)增強(qiáng)協(xié)處理器的性能的又允許用于增強(qiáng)其它調(diào)度效率的系統(tǒng)和方法。
發(fā)明內(nèi)容這個(gè)發(fā)明提供了多種技術(shù),這些技術(shù)能夠串聯(lián)地或單個(gè)地使用,用于將協(xié)處理器的“資源缺乏”最小化,并且用于有效地調(diào)度協(xié)處理器中的處理以獲得更高的效率和能力。在這方面,中央處理單元(“CPU”)提供了一種運(yùn)行列表,用來(lái)允許協(xié)處理器在頁(yè)面故障或者任務(wù)完成之類的轉(zhuǎn)換事件發(fā)生的時(shí)候立即從一個(gè)任務(wù)向另一個(gè)轉(zhuǎn)換,而不用等待CPU干預(yù)。除了該運(yùn)行列表之外,一種稱作“表面故障”的方法允許協(xié)處理器在一個(gè)大的任務(wù)開(kāi)始的地方發(fā)生故障,而不是在已經(jīng)完成有效的處理資源之后在該表面的中間的某個(gè)地方發(fā)生故障,該大的任務(wù)例如再現(xiàn)一個(gè)表面。進(jìn)一步,可以提供DMA控制指令即“電子籬笆”、“陷阱”以及“能夠/不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換”,該指令可以被插入到處理流中,從而使得協(xié)處理器執(zhí)行增強(qiáng)協(xié)處理器的效率和能力的任務(wù)。如下面將要更詳細(xì)地描述的那樣,這些指令還能用于創(chuàng)建高級(jí)的同步目標(biāo)程序。最后,描述了一種“觸發(fā)”技術(shù),其可以把用于顯示的基本索引從一個(gè)位置轉(zhuǎn)換到另一個(gè)位置,由此改變整個(gè)顯示表面。除了對(duì)本發(fā)明的這些和其它方面的進(jìn)一步說(shuō)明之外,下面還提供了這些技術(shù)能夠妥善使用的情況。本發(fā)明或申請(qǐng)文件包含至少一個(gè)用色彩來(lái)完成的圖。本專利或?qū)@暾?qǐng)的公開(kāi)的副本與彩圖一起都將通過(guò)貴局按照請(qǐng)求書(shū)和所需費(fèi)用的支付金額來(lái)提供。圖1是現(xiàn)有技術(shù)的調(diào)度用于協(xié)處理器的處理的方法的總體示意圖。圖2是按照本發(fā)明的協(xié)處理器調(diào)度改進(jìn)的示例性示意圖。圖3是涉及提供了圖2中總體說(shuō)明的調(diào)度改進(jìn)的計(jì)算部件的更詳細(xì)的示意圖。圖4(A)和圖4(B)是偽碼算法,表明了多種非限定性可行的方式來(lái)將圖3的步驟組合為一個(gè)函數(shù)序列。圖5說(shuō)明了按照本發(fā)明的一個(gè)調(diào)度程序如何能夠利用所給的信息來(lái)指定用于存儲(chǔ)器資源的時(shí)間界限,該存儲(chǔ)器資源用在直接存儲(chǔ)器存取(DMA)緩沖器中。圖6是說(shuō)明按照本發(fā)明的準(zhǔn)備作業(yè)線程與輔助存儲(chǔ)器管理器之間的動(dòng)態(tài)的算法。圖7是按照本發(fā)明的頁(yè)入緩沖器的準(zhǔn)備的示例性示意圖,該頁(yè)入緩沖器示出了一個(gè)作業(yè)線程,該作業(yè)線程為該頁(yè)入緩沖器作準(zhǔn)備并且處理CPU對(duì)頁(yè)入緩沖器的預(yù)處理。圖8是表示按照本發(fā)明的一個(gè)事件鏈的算法,該事件鏈可能發(fā)生在一個(gè)包括對(duì)頁(yè)入緩沖器中的一個(gè)電子籬笆的處理的作業(yè)線程。圖9說(shuō)明了一種采用內(nèi)核模式的輔助存儲(chǔ)器管理器“VidMm”,能夠?yàn)閰f(xié)處理器的設(shè)備環(huán)境提供一個(gè)虛擬地址空間,還能管理不同的協(xié)處理器的設(shè)備環(huán)境中的物理存儲(chǔ)器,以便它們能夠進(jìn)行合理的存儲(chǔ)器共享。圖10說(shuō)明了一種按照本發(fā)明的基本調(diào)度模型。圖11說(shuō)明了一種按照本發(fā)明的改進(jìn)的調(diào)度模型。圖12(A)和圖12⑶都提供了一種能夠?qū)崿F(xiàn)該改進(jìn)的調(diào)度模型的動(dòng)作序列的示例性表示。圖13說(shuō)明了本發(fā)明結(jié)合可變長(zhǎng)度平面頭部表(flatpatetable)的使用。圖14說(shuō)明了本發(fā)明結(jié)合多級(jí)頁(yè)表的使用。圖15是由該調(diào)度程序與一個(gè)改進(jìn)的調(diào)度模型一起支持的示例性處理的示意圖,改進(jìn)的調(diào)度模型支持表面能級(jí)故障。圖16是多設(shè)備環(huán)境的示意圖,每一個(gè)都有其自己的DMA環(huán),結(jié)合本發(fā)明能夠在表面能級(jí)故障與本發(fā)明一起實(shí)現(xiàn)時(shí)同時(shí)進(jìn)行處理。圖17(A)、圖17⑶和圖17(C)都提供了一種偽碼算法,描述了結(jié)合圖16的部件的本發(fā)明的操作,包括多種可以證明有用的附加特征。圖18是一個(gè)按照本發(fā)明大體上表示運(yùn)行列表的使用的框圖。圖19說(shuō)明了能夠?yàn)榱私Y(jié)合本發(fā)明的使用將設(shè)備環(huán)境轉(zhuǎn)換歷史寫(xiě)到由該調(diào)度程序可讀的特定的系統(tǒng)存儲(chǔ)器位置上的硬件的操作。圖20說(shuō)明了一種硬件方法,用來(lái)通過(guò)將有特權(quán)的命令直接插入到協(xié)處理器設(shè)備環(huán)境環(huán)中來(lái)支持有特權(quán)的DMA通道。圖21說(shuō)明了一種方法,用于支持該協(xié)處理器中限定的對(duì)有特權(quán)的DMA緩沖器,其中,將該間接命令的一個(gè)比特插入到一個(gè)環(huán)形緩沖器中。圖22提供了一種查詢協(xié)處理器關(guān)于當(dāng)前顯示表面的方法。圖23是結(jié)合本發(fā)明的一個(gè)優(yōu)選的方法,用于當(dāng)把立即觸發(fā)與本發(fā)明一起使用時(shí)查詢觸發(fā)。圖24是用于同步訪問(wèn)資源來(lái)確保當(dāng)提供兩個(gè)或兩個(gè)以上的處理器時(shí)都能夠使用的示例性技術(shù)。圖25說(shuō)明了事件歷史緩沖器的多種實(shí)施例。圖26說(shuō)明了支持各協(xié)處理器設(shè)備環(huán)境虛擬地址空間的優(yōu)選方法,該虛擬地址空間使用一個(gè)PCI縫隙,該P(yáng)CI縫隙能夠重定向到輔助存儲(chǔ)器中的任何地方。具體實(shí)施例方式本發(fā)明所實(shí)現(xiàn)的多種改進(jìn)都能夠通過(guò)圖1和圖2的比較從總體上進(jìn)行說(shuō)明。圖1表示一種典型的現(xiàn)有的對(duì)協(xié)處理器的任務(wù)調(diào)度的方法。提供了一個(gè)緩沖器,該緩沖器能夠由不同的應(yīng)用程序來(lái)訪問(wèn),例如應(yīng)用程序1、應(yīng)用程序2以及應(yīng)用程序3。該應(yīng)用程序能夠?qū)⒂糜趨f(xié)處理器的任務(wù)加載到緩沖器中,并且能夠在完成之前提交的任務(wù)之后用該協(xié)處理器來(lái)處理那些任務(wù)。如所示,這種方法只能打開(kāi)一種可能的協(xié)處理器的“掛起”。圖1中,App.1是掛起該協(xié)處理器。App.1要求該協(xié)處理器對(duì)七個(gè)任務(wù)起作用,而組合的另外兩個(gè)應(yīng)用程序要求僅對(duì)三個(gè)任務(wù)起作用。在類似于多應(yīng)用程序需要該協(xié)處理器的情況下,一種系統(tǒng)就可提供改進(jìn)的功能性,該系統(tǒng)例如是圖2所提供的那樣。圖2說(shuō)明了一種按照本發(fā)明的系統(tǒng)和方法,借此,每個(gè)應(yīng)用程序,例如應(yīng)用程序1、應(yīng)用程序2以及應(yīng)用程序3,都可以保持其自己的緩沖器,就是圖2的“第一緩沖器”。把這些緩沖器(后面將稱作“命令緩沖器”)都提交給一種調(diào)度處理,該調(diào)度處理能夠在把多個(gè)任務(wù)傳送給協(xié)處理器的時(shí)候作出判定。如圖2所示,在這種情況下,該調(diào)度處理將任務(wù)插入至IJ“第二緩沖器”中。為簡(jiǎn)單起見(jiàn),圖2中的“第二緩沖器”已經(jīng)表示為一個(gè)單獨(dú)的緩沖器。然而,實(shí)際上,可能要有多個(gè)緩沖器來(lái)執(zhí)行圖2中的“第二緩沖器”的功能。圖2中的第二緩沖器已經(jīng)為了傳送給協(xié)處理器而將這些任務(wù)進(jìn)行了劃分以便應(yīng)用程序1可以不再掛起協(xié)處理器資源。該調(diào)度處理允許應(yīng)用程序1在協(xié)處理器上完成第一任務(wù),接著是應(yīng)用程序2,然后是應(yīng)用程序3,并且然后又是應(yīng)用程序1,以此類推。盡管圖2中總體說(shuō)明的系統(tǒng)和方法的實(shí)現(xiàn)比圖2所示范的更為復(fù)雜,但是此處所公開(kāi)的改進(jìn)通常都是直接朝著支持如圖2中所示的基本原理的方向的?,F(xiàn)在,接下來(lái)的是本發(fā)明的實(shí)施例的更詳細(xì)的說(shuō)明,提供以下術(shù)語(yǔ)定義以易于參考命令緩沖器-一種用用戶模式驅(qū)動(dòng)器創(chuàng)建的緩沖器。這種緩沖器可以是有規(guī)則地可分頁(yè)的存儲(chǔ)器,該存儲(chǔ)器置于該再現(xiàn)(rendering)應(yīng)用程序的設(shè)備環(huán)境中。DMA緩沖器-“直接存儲(chǔ)器存取”緩沖器。一種用內(nèi)核模式驅(qū)動(dòng)器創(chuàng)建的緩沖器。這一緩沖器可以是基于命令緩沖器的內(nèi)容的。通常,它從一個(gè)內(nèi)核可分頁(yè)存儲(chǔ)器中進(jìn)行分配并且僅僅對(duì)該內(nèi)核是可見(jiàn)的。在這方面,在協(xié)處理器可以從其中讀取之前,這些頁(yè)可以鎖定并通過(guò)一個(gè)縫隙來(lái)進(jìn)行映射。頁(yè)入緩沖器-一種用內(nèi)核模式驅(qū)動(dòng)器創(chuàng)建的緩沖器。這種緩沖器能夠用于頁(yè)入、收回以及移動(dòng)一個(gè)特定的DMA緩沖器所需的存儲(chǔ)器資源。頁(yè)入緩沖器可以構(gòu)造為在它們的DMA緩沖器的對(duì)應(yīng)物(counterpart)之前立即運(yùn)行。環(huán)形緩沖器-這是一個(gè)特定的協(xié)處理器設(shè)備環(huán)境緩沖器。向DMA緩沖器的指向可以插在這個(gè)緩沖器中。在這方面,一個(gè)協(xié)處理器能夠從這樣的環(huán)形緩沖器中取出命令來(lái)執(zhí)行。一個(gè)環(huán)形緩沖器通常包含方向指令,該方向指令指示該協(xié)處理器開(kāi)始從DMA緩沖器中讀取命令,并且然后一旦該DMA緩沖器完成處理就返回到該環(huán)形緩沖器。輔助存儲(chǔ)器_通常是專供協(xié)處理器使用并且無(wú)需作為物理系統(tǒng)存儲(chǔ)器的部分的存儲(chǔ)器。例如,它可以是駐留在圖形卡上的本地視頻存儲(chǔ)器。它還可以是其它協(xié)處理器可讀的存儲(chǔ)器,例如通過(guò)系統(tǒng)存儲(chǔ)器縫隙來(lái)映射的存儲(chǔ)器。典型地,這種存儲(chǔ)器不是集成或UMA圖形設(shè)備。這種存儲(chǔ)器不是通過(guò)基于縫隙的類似GART的頁(yè)表來(lái)進(jìn)行訪問(wèn)的。系統(tǒng)存儲(chǔ)器縫隙_這是物理系統(tǒng)存儲(chǔ)器的子設(shè)備。通過(guò)基于縫隙的類似GART的頁(yè)表,它對(duì)于協(xié)處理器來(lái)說(shuō)是可見(jiàn)的。CPU能夠不依賴于系統(tǒng)存儲(chǔ)器縫隙而對(duì)物理系統(tǒng)存儲(chǔ)器進(jìn)行訪問(wèn)。當(dāng)這樣的存儲(chǔ)器通過(guò)縫隙來(lái)進(jìn)行存取時(shí),大體上類似的一些例子為加速圖形接口(“AGP”)、外設(shè)部件互連(“PCI”)快速存儲(chǔ)器或者標(biāo)準(zhǔn)化存儲(chǔ)器結(jié)構(gòu)(“UMA”)存儲(chǔ)器。在圖3中可以找到本發(fā)明的不同實(shí)施例的更詳細(xì)的視圖。圖3提供了不同的軟件和硬件目標(biāo)程序的示意圖,這些目標(biāo)程序可以組合起來(lái)提供圖2中總體示出的功能。圖3給出了一系列連續(xù)的步驟,這將在后面進(jìn)行描述。為了清楚地解釋和能夠?qū)崿F(xiàn)本發(fā)明的目的,順序地給出了這些步驟,并且不應(yīng)當(dāng)把這些步驟當(dāng)作是給出了用于實(shí)踐本發(fā)明所要求的序列。其次序可以按照本領(lǐng)域所公知或者將來(lái)開(kāi)發(fā)實(shí)踐的需要來(lái)改變。下面的討論將以圖3中的系統(tǒng)和方法的概述開(kāi)始,并對(duì)圖3中的一些方面作詳細(xì)的討論。圖3中,步驟1表示一個(gè)應(yīng)用程序調(diào)用一個(gè)應(yīng)用程序接口(“API”)。一個(gè)應(yīng)用程序可能是組成用戶軟件的任意一組文件。典型地,API不僅是應(yīng)用程序所使用的一種語(yǔ)言和信息格式從而與操作系統(tǒng)內(nèi)核進(jìn)行通信,還涉及這樣一種格式,該格式用于與其它控制程序進(jìn)行通信,這些控制程序例如是數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)或通信協(xié)議。結(jié)合本發(fā)明所使用的一種示例性API是由MICROSOFT開(kāi)發(fā)的直接3D運(yùn)行時(shí)間API。步驟2表示一種從API向用戶模式驅(qū)動(dòng)器的調(diào)用。通常,該用戶模式驅(qū)動(dòng)器是一個(gè)程序例程(或軟件),它能夠?qū)⒁粋€(gè)軟件系統(tǒng)(常常是操作系統(tǒng))鏈接到一個(gè)外部設(shè)備子程序,它也可以是軟件或者硬件。此處,用戶模式驅(qū)動(dòng)器從API處接收調(diào)用,該API可能包含響應(yīng)于來(lái)自步驟1的原始調(diào)用的API參數(shù)。步驟3表示命令緩沖器中如用戶模式驅(qū)動(dòng)器所產(chǎn)生的再現(xiàn)命令的累加。緩沖器是被用作中間儲(chǔ)存庫(kù)的存儲(chǔ)器區(qū)域。當(dāng)?shù)戎趦蓚€(gè)位置之間的傳送時(shí),數(shù)據(jù)可以暫存在一個(gè)緩沖器中,這兩個(gè)位置例如是數(shù)據(jù)區(qū)和用于處理的處理器或者協(xié)處理器。如用戶模式驅(qū)動(dòng)器所產(chǎn)生的,能夠選擇特定的命令緩沖器內(nèi)容從而有利于轉(zhuǎn)換成硬件指定的DMA緩沖器,如后面的進(jìn)一步描述。而且,在規(guī)定一個(gè)命令緩沖器的過(guò)程中,它可能對(duì)于省略對(duì)存儲(chǔ)器資源的直接存儲(chǔ)器索引是有用的,該存儲(chǔ)器資源例如是“紋理”或“頂點(diǎn)緩沖器”。相反,獨(dú)立的硬件商(“IHV”)可以將命令緩沖器規(guī)定為任意地包含處理,以便一個(gè)內(nèi)核接口可以在都創(chuàng)建了這些存儲(chǔ)器資源的同時(shí)將存儲(chǔ)器索引資料提供給一個(gè)命令緩沖器。步驟4表示該命令緩沖器的刷新?!八⑿隆焙?jiǎn)單地講是指將所運(yùn)算的再現(xiàn)命令進(jìn)行清空。如圖所示,為了按照?qǐng)D3中所表明的將它們傳送給協(xié)處理器內(nèi)核,該再現(xiàn)命令可以發(fā)送回API。刷新可以由任何原因而產(chǎn)生,包括但并不限于因?yàn)樵撁罹彌_器已滿而為了獲得再現(xiàn)命令要求更多的空間所以進(jìn)行刷新,以及該命令緩沖器中有要求立即處理的高優(yōu)先權(quán)再現(xiàn)命令的存在。步驟5表示由API為該協(xié)處理器內(nèi)核刷新所運(yùn)算的命令緩沖器。眾所周知,一個(gè)內(nèi)核是操作系統(tǒng)的核心部分,是任意地管理存儲(chǔ)器、文件以及外設(shè)的部分,而且還可以裝入應(yīng)用程序以及對(duì)系統(tǒng)資源進(jìn)行定位。所期待的是,協(xié)處理器內(nèi)核能夠是任何類型的內(nèi)核,包括初級(jí)系統(tǒng)內(nèi)核或者一個(gè)分開(kāi)的協(xié)處理器專用內(nèi)核或者,例如,MICROSOFTDirectXKernel(“DXG”)之類的特定類型的內(nèi)核。步驟6表示協(xié)處理器內(nèi)核將該命令緩沖器給內(nèi)核模式驅(qū)動(dòng)器的提交。該協(xié)處理器內(nèi)核能夠?qū)⒚罹彌_器指向內(nèi)核模式驅(qū)動(dòng)器。除了該內(nèi)核模式驅(qū)動(dòng)器能夠按照內(nèi)核模式操作之外,如其名稱所暗示的,該內(nèi)核模式驅(qū)動(dòng)器通??梢允侨缫陨蠀⒄沼脩裟J津?qū)動(dòng)器所描述的驅(qū)動(dòng)器。在這方面,內(nèi)核模式驅(qū)動(dòng)器就能夠擔(dān)負(fù)將命令緩沖器轉(zhuǎn)化為DMA緩沖器的功能。IHV可考慮提供該期望裝置以便確保適當(dāng)?shù)挠行圆⑶铱紤]將命令緩沖器復(fù)制到內(nèi)核模式定位DMA緩沖器中。DMA緩沖器可以是專用硬件,因?yàn)樗鼈兪亲罱K指定給協(xié)處理器的命令的集合,并且因此應(yīng)當(dāng)適當(dāng)?shù)嘏c該協(xié)處理器和支持硬件連結(jié)。注意,穿過(guò)圖3有一條水平線,將用戶模式和內(nèi)核模式分開(kāi)了。按照該線條所暗示的,本發(fā)明能夠在傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)器分配地址的線路圖上進(jìn)行操作,這是為了系統(tǒng)的安全性而執(zhí)行的。另一方面,該內(nèi)核模式是無(wú)特權(quán)的并且能被應(yīng)用程序訪問(wèn)。盡管在理論上分配DMA緩沖器的內(nèi)核模式能夠映射到任何存儲(chǔ)器空間中,但應(yīng)當(dāng)謹(jǐn)記,映射到該應(yīng)用程序的專用處理空間中可能招致安全性的風(fēng)險(xiǎn)。這是因?yàn)橐粋€(gè)應(yīng)用程序?qū)S锰幚砜臻g中的由線程所涉及的任何虛擬地址的容量都能夠修改;換言之,該DMA緩沖器的容量應(yīng)當(dāng)在確認(rèn)的時(shí)間和硬件處理的時(shí)間之間進(jìn)行修改。如步驟7所指出的,該內(nèi)核模式驅(qū)動(dòng)器還可創(chuàng)建一個(gè)存儲(chǔ)器資源列表以供DMA緩沖器使用。這個(gè)可按照命令緩沖器的確定的部分來(lái)實(shí)現(xiàn)。這個(gè)列表可以包含,例如,一個(gè)用于列表上的不同存儲(chǔ)器的內(nèi)核編號(hào)(handle)以及一個(gè)緩沖器位置,其中在該位置處訪問(wèn)存儲(chǔ)器資源。這個(gè)列表還可包括一個(gè)用于所列出的存儲(chǔ)器資源的預(yù)計(jì)的設(shè)備環(huán)境狀態(tài)。因?yàn)樗鼈兛赡芤呀?jīng)由于提交給協(xié)處理器的最后一個(gè)DMA緩沖器的緣故而改變了位置,所以這就允許存儲(chǔ)器資源作為該列表的一部分而在DMA緩沖器的開(kāi)始處改編程序,其中這些存儲(chǔ)器資源是任何當(dāng)前硬件狀態(tài)(例如“當(dāng)前再現(xiàn)目標(biāo)”、“當(dāng)前Z-緩沖器”等)的一部分。步驟8表示遵循任何存儲(chǔ)器資源列表來(lái)將一個(gè)DMA緩沖器發(fā)送給一個(gè)協(xié)處理器內(nèi)核。接著,該協(xié)處理器內(nèi)核可以將DMA緩沖器提交給一個(gè)協(xié)處理器調(diào)度程序,如步驟9中所示,并且按照步驟10中所示返回到用戶模式。通常,一個(gè)協(xié)處理器調(diào)度程序負(fù)責(zé)用于該協(xié)處理器的任務(wù)流程的調(diào)度(如不同的DMA緩沖器和發(fā)送給該協(xié)處理器的其它任務(wù)中所舉出的)。該協(xié)處理器調(diào)度程序的功能性可能是非常廣的,并且這樣的說(shuō)明包含許多潛在的功能,其中該協(xié)處理器調(diào)度程序可以完成這些功能。該協(xié)處理器調(diào)度程序可以稱作協(xié)處理器調(diào)度程序或者簡(jiǎn)稱為調(diào)度程序。在不同的實(shí)施例中,如圖3所示,該調(diào)度程序可以完成在把DMA緩沖器提交給協(xié)處理器之前的一種或多種功能。步驟11a動(dòng)態(tài)地說(shuō)明該調(diào)度程序的一個(gè)功能是提交DMA緩沖器來(lái)為處理作準(zhǔn)備。步驟lib表示DMA緩沖器的選擇,該調(diào)度程序確定是添加到準(zhǔn)備好的DMA緩沖器的列表上還是接著運(yùn)行。在這方面,該調(diào)度程序能夠?qū)⒃揇MA緩沖器傳遞給一個(gè)預(yù)備線程。一個(gè)預(yù)備線程,此處使用該術(shù)語(yǔ),通常提供一種功能,該功能是確?,F(xiàn)有適當(dāng)?shù)拇鎯?chǔ)器資源用于處理該DMA緩沖器。首先,該預(yù)備線程可以請(qǐng)求一個(gè)輔助存儲(chǔ)器管理器過(guò)程(未示出)確定一個(gè)足夠的位置,該位置中頁(yè)入當(dāng)前不在輔助存儲(chǔ)器中(這是步驟12)的所有需要的存儲(chǔ)器目標(biāo)程序(圖形原理中為“表面”)。注意,該術(shù)語(yǔ)“輔助存儲(chǔ)器”是指為協(xié)處理器的使用而分配的存儲(chǔ)器;就GPU協(xié)處理器而言,輔助存儲(chǔ)器往往稱作“視頻存儲(chǔ)器”。可能并不是所有的DMA緩沖器所需的存儲(chǔ)器資源都將立刻適于有效的輔助存儲(chǔ)器。該輔助存儲(chǔ)器管理器可能無(wú)法在這點(diǎn)上為了不同的原因而帶來(lái)輔助存儲(chǔ)器中所有的表面。如果這是應(yīng)當(dāng)發(fā)生的,則可能做出某種進(jìn)一步的處理來(lái)騰出輔助存儲(chǔ)器中的更多的空位,或者,可替換地,或者組合騰出更多的空位,該DMA緩沖器可能拆分成多個(gè)段。在這種情況下,該預(yù)備線程可能使用一個(gè)驅(qū)動(dòng)器預(yù)定拆分點(diǎn)來(lái)拆分該緩沖器并且力圖為這個(gè)較小的DMA緩沖器所需的存儲(chǔ)器資源的子設(shè)備進(jìn)行定位。一旦有效的輔助存儲(chǔ)器為DMA緩沖器進(jìn)行了定位,那么該預(yù)備線程就能夠請(qǐng)求一個(gè)內(nèi)核模式驅(qū)動(dòng)器,如步驟13所示。這可以是與步驟6、7和8的步驟有關(guān)的所提及的內(nèi)核模式驅(qū)動(dòng)器,或者它可能是一個(gè)單獨(dú)的內(nèi)核模式驅(qū)動(dòng)器,如本領(lǐng)域技術(shù)人員所理解的那樣。步驟14說(shuō)明了該內(nèi)核模式驅(qū)動(dòng)器能夠創(chuàng)建一個(gè)用于該DMA緩沖器等待處理的頁(yè)入緩沖器。該內(nèi)核模式驅(qū)動(dòng)器可以基于來(lái)自該預(yù)備線程的處理命令創(chuàng)建這種頁(yè)入緩沖器。如上所規(guī)定的,頁(yè)入緩沖器是一種為了頁(yè)入存儲(chǔ)器資源的緩沖器?!绊?yè)入”是指利用映射硬件改變存儲(chǔ)器的一塊(一頁(yè))的物理地址。一般來(lái)講,頁(yè)入緩沖器是一種包含協(xié)處理器指令來(lái)將存儲(chǔ)器資源移動(dòng)到它們所分配的位置上的DMA緩沖器。該頁(yè)入緩沖器用于將DMA緩沖器所需的任何存儲(chǔ)器資源帶到一個(gè)正確的存儲(chǔ)器位置,從該位置上,那些資源就能夠在需要的時(shí)候被協(xié)處理器所訪問(wèn)。如果適當(dāng)?shù)禺a(chǎn)生一個(gè)頁(yè)入緩沖器,那么就知道了用于一個(gè)特定的協(xié)處理器任務(wù)(即DMA緩沖器)的任何必要的存儲(chǔ)器資源的位置。步驟15表示向一個(gè)預(yù)備線程通知已經(jīng)產(chǎn)生了一個(gè)頁(yè)入緩沖器。步驟16向該調(diào)度程序提示一個(gè)信號(hào)來(lái)表示頁(yè)入緩沖器準(zhǔn)備好了。在這點(diǎn)上,該調(diào)度程序可以假設(shè)下一個(gè)DMA緩沖器已經(jīng)準(zhǔn)備好處理了,或者在將其發(fā)送給協(xié)處理器處理之前,它可以繼續(xù)在一個(gè)DMA緩沖器上實(shí)施進(jìn)一步的預(yù)備操作。例如,因?yàn)榇鎯?chǔ)器位置可能由于初始的DMA緩沖器的創(chuàng)建的緣故而改變了,所以在這點(diǎn)上,該調(diào)度程序可以再次調(diào)用該內(nèi)核模式驅(qū)動(dòng)器,從而允許它在DMA緩沖器中提取存儲(chǔ)器資源的實(shí)際位置。最后,該調(diào)度程序可以把頁(yè)入緩沖器和DMA緩沖器兩個(gè)都提交給協(xié)處理器(和任何其它附加硬件)以處理該程序。如上所述的步驟1至16可通過(guò)硬件、軟件及其組合來(lái)實(shí)現(xiàn)。在這方面,圖4(A)和4(B)一般地以偽碼算法的形式說(shuō)明了圖3的這些步驟。圖4(A)和4(B)并不是該潛在的偽碼算法步驟的窮舉列表,這些步驟可以聯(lián)系本發(fā)明得以實(shí)現(xiàn),并且不應(yīng)當(dāng)解釋為圖4(A)和4(B)中的各個(gè)步驟都是實(shí)現(xiàn)本發(fā)明所必要的。相反,圖4(A)和4(B)都是出于教導(dǎo)本發(fā)明的目的的啟示性列表。與圖3有關(guān)的上述討論是本發(fā)明的多種實(shí)施例的一個(gè)說(shuō)明。然而,如上所述與本發(fā)明的實(shí)現(xiàn)有關(guān),已經(jīng)公開(kāi)了多種改進(jìn)。這個(gè)說(shuō)明的其余部分是為了能夠做出不同的改進(jìn)而且克服了在實(shí)現(xiàn)本發(fā)明的過(guò)程中可能出現(xiàn)的困難。調(diào)度補(bǔ)償之前所規(guī)定的某些或所有的操作(見(jiàn)上述步驟1-16)可能在DMA緩沖器提交給硬件之前發(fā)生。然而,這些操作中的一些可能很難執(zhí)行,直到將DMA緩沖器提交給該硬件。例如,存儲(chǔ)器資源的位置可能很難確定,直到將DMA緩沖器提供給該協(xié)處理器的那個(gè)時(shí)刻。這是因?yàn)檩o助存儲(chǔ)器資源應(yīng)當(dāng)隨著每個(gè)DMA緩沖器進(jìn)行移動(dòng),因?yàn)樗窃谠搮f(xié)處理器上運(yùn)行的。步驟1-16所包含的一些操作,如上,可能很耗時(shí),并且由此就不能在中斷時(shí)間的時(shí)候執(zhí)行,例如是在該調(diào)度程序挑選了接下來(lái)運(yùn)行哪個(gè)任務(wù)之后。類似地,正好因?yàn)樗鼈兒芎臅r(shí),所以就有利于該協(xié)處理器忙于做其它事情的同時(shí)在該中央處理單元(“CPU”)上執(zhí)行這些操作。這就將協(xié)處理器的資源缺乏最小化了。協(xié)處理器資源缺乏僅指時(shí)間消耗,其中該協(xié)處理器不執(zhí)行處理功能。為了解決這個(gè)問(wèn)題,可能有利于結(jié)合該調(diào)度程序來(lái)利用一種“作業(yè)線程”。作業(yè)線程可以實(shí)現(xiàn)幫助處理一些費(fèi)時(shí)的安裝工作的功能。將一個(gè)作業(yè)線程添加到圖4(B)的偽碼算法中來(lái)用于其與本發(fā)明的其它處理有關(guān)的操作并作為其操作的例子。為補(bǔ)充這種調(diào)度補(bǔ)償,注意,在圖3的系統(tǒng)中的任何給定的時(shí)間內(nèi),可能運(yùn)行DMA緩沖器(即當(dāng)前由協(xié)處理器來(lái)處理DMA緩沖器),正在預(yù)備的DMA緩沖器以及準(zhǔn)備好預(yù)備的DMA緩沖器的列表。在向該調(diào)度程序的提交上,新的DMA緩沖器可能插入到準(zhǔn)備序列中并且根據(jù)其優(yōu)先權(quán)進(jìn)行適當(dāng)排序。然而,在向該調(diào)度程序的提交上,如果新的DMA緩沖器不能搶先選作用于該協(xié)處理器的下一個(gè)任務(wù)的DMA緩沖器,本發(fā)明的多種實(shí)施例就可以增加功能性。其原因是預(yù)備一個(gè)DMA緩沖器在輔助存儲(chǔ)器之中和之外可能包括頁(yè)入存儲(chǔ)器資源。因此,為處理所選擇的下一個(gè)DMA緩沖器的搶先可導(dǎo)致改變?yōu)檩o助存儲(chǔ)器管理器的不變狀態(tài)。如果正在預(yù)備的任務(wù)搶先了,就可能導(dǎo)致取消改變,該取消改變是由于新選出的DMA緩沖器的預(yù)備而得到的輔助存儲(chǔ)器管理器的不變狀態(tài)。通過(guò)在DMA緩沖器任務(wù)上的操作而在半路上對(duì)輔助存儲(chǔ)器取消改變不可能是微不足道的,并且可能會(huì)導(dǎo)致更頻繁的協(xié)處理器資源缺乏。拆分DMA緩沖器當(dāng)通過(guò)API把一個(gè)命令緩沖器提交給協(xié)處理器內(nèi)核時(shí),然后,該內(nèi)核模式驅(qū)動(dòng)器可能隨著一個(gè)特定的DMA緩沖器和存儲(chǔ)器資源列表的產(chǎn)生而發(fā)生改變,該存儲(chǔ)器資源列表用于運(yùn)行那個(gè)DMA緩沖器。盡管特定的DMA緩沖器格式可以由那些IHV來(lái)指定,但軟件提供商可能發(fā)現(xiàn)它們自身所具有的指定用于該內(nèi)核模式驅(qū)動(dòng)器的資源列表的格式的任務(wù)。該存儲(chǔ)器資源列表能夠提供有關(guān)不同的存儲(chǔ)器資源的時(shí)間界限信息,這些存儲(chǔ)器資源供DMA緩沖器使用。反過(guò)來(lái),該調(diào)度程序能夠使用這些存儲(chǔ)器資源列表,從而在協(xié)處理器上運(yùn)行之前,并且如果有必要拆分DMA緩沖器的話,例如當(dāng)DMA緩沖器一次使用太多資源10的時(shí)候,DMA緩沖器就可以頁(yè)入任何所需的存儲(chǔ)器資源。如果DMA緩沖器由一個(gè)調(diào)度程序來(lái)拆分,那么通過(guò)在存儲(chǔ)器資源列表上提供時(shí)間界限信息,內(nèi)核模式驅(qū)動(dòng)器就可能對(duì)此有利。這可以通過(guò)允許該驅(qū)動(dòng)器在DMA緩沖器中規(guī)定一個(gè)“偏移”來(lái)實(shí)現(xiàn)。存儲(chǔ)器資源正在通過(guò)插入一個(gè)存儲(chǔ)器資源標(biāo)識(shí)符來(lái)進(jìn)行編程的時(shí)候,可以設(shè)置一個(gè)偏移,該標(biāo)識(shí)符規(guī)定在該偏移上的存儲(chǔ)器資源的使用。因?yàn)榇鎯?chǔ)器資源在DMA緩沖器中可能出現(xiàn)不止一次,所以相同的存儲(chǔ)器資源可能在存儲(chǔ)器資源列表中多次出現(xiàn)。對(duì)DMA緩沖器中的存儲(chǔ)器資源的每個(gè)索引都將添加一個(gè)對(duì)該資源列表的項(xiàng)。實(shí)質(zhì)上,那個(gè)編號(hào)/偏移列表可能不足以提供有關(guān)存儲(chǔ)器資源的調(diào)度程序有效信息,其中該存儲(chǔ)器資源需要拆分DMA緩沖器。為了精確地知道在DMA緩沖器中需要一個(gè)特定的存儲(chǔ)器資源,該調(diào)度程序還可要求有關(guān)一個(gè)存儲(chǔ)器資源被另一個(gè)資源代替時(shí)的信息。例如,一個(gè)第一紋理可能被一個(gè)第二紋理所代替,其中,該第一紋理,紋理A,包括在第一紋理階段中的DMA緩沖器的起始處,而該第二紋理,紋理B,在中間,并且然后返回到該DMA緩沖器的末尾處的紋理A。該調(diào)度程序可使用這種附加信息來(lái)將DMA緩沖器拆分成塊,這些塊將使用較少的存儲(chǔ)器資源。然而,在上述概況中,紋理B還可能在第一紋理階段已經(jīng)進(jìn)行了編程,在這種情況下就可能像紋理A—樣同時(shí)被使用,并且不應(yīng)該拆分成單獨(dú)的DMA緩沖器子設(shè)備。為了獲得該“更好的晶?!睍簳r(shí)信息,其中該暫時(shí)信息是以上述復(fù)雜的方式拆分DMA緩沖器所需的,一個(gè)調(diào)度程序可以利用有關(guān)全部DMA緩沖器的存儲(chǔ)器資源的使用的信息。在一個(gè)實(shí)施例中,當(dāng)內(nèi)核模式驅(qū)動(dòng)器為存儲(chǔ)器資源列表中的每一項(xiàng)都提供了一個(gè)資源標(biāo)識(shí)符時(shí),就能夠?qū)⑵鋵?shí)現(xiàn)。資源標(biāo)識(shí)符簡(jiǎn)單地講就是一個(gè)表示特定的存儲(chǔ)器資源怎樣就是將要使用的整數(shù)值。例如,值0可說(shuō)明一個(gè)存儲(chǔ)器正用作一個(gè)提交目標(biāo),而值1就說(shuō)明一個(gè)資源正用作Z-緩沖器。具有這些信息,該調(diào)度程序就能夠確定紋理B是否代替了紋理A(例如,兩個(gè)紋理是否具有相同的資源標(biāo)識(shí)符)或者是紋理B是否替換了紋理A(例如,A和B具有不同的資源標(biāo)識(shí)符)。用于該資源標(biāo)識(shí)符及其意義的實(shí)際值可由IHV來(lái)指定,或者置于軟件結(jié)構(gòu)中。對(duì)于確保用作資源標(biāo)識(shí)符的值是基于0的,它可能是有用的,并且為該驅(qū)動(dòng)器規(guī)定最大的資源標(biāo)識(shí)符值,它將在驅(qū)動(dòng)器初始化時(shí)使用。圖5說(shuō)明了一個(gè)調(diào)度程序如何使用所提供的信息來(lái)指定一個(gè)時(shí)間界限,該時(shí)間界限是用于正用在DMA緩沖器中的存儲(chǔ)器資源的。更值得注意的是,通常,DMA緩沖器應(yīng)當(dāng)以當(dāng)前存儲(chǔ)器資源(即,那些之前DMA緩沖器的結(jié)尾處的當(dāng)前的資源)“安裝”或者初始化過(guò)程為開(kāi)始。這是因?yàn)榇鎯?chǔ)器資源可能已經(jīng)由于執(zhí)行一個(gè)之前的DMA緩沖器的緣故而移動(dòng)了,并且這就可能需要改編程序。存儲(chǔ)器資源可能需要改編程序,直到該DMA緩沖器調(diào)度用于處理的時(shí)刻。該存儲(chǔ)器列表,如圖5所示,可包含任何數(shù)量的字段。下表提供了一個(gè)有用字段的非窮舉列表頁(yè)入通常,DMA緩沖器所訪問(wèn)的存儲(chǔ)器資源都在DMA緩沖器提供給協(xié)處理器執(zhí)行之前就帶進(jìn)了存儲(chǔ)器之中。將所訪問(wèn)的存儲(chǔ)器資源帶進(jìn)存儲(chǔ)器中稱為頁(yè)入資源。頁(yè)入可包括一個(gè)如上所述的預(yù)備作業(yè)線程與一個(gè)內(nèi)核模式驅(qū)動(dòng)器之類的驅(qū)動(dòng)器之間的交互。參見(jiàn)圖6,對(duì)于偽碼算法,說(shuō)明了該預(yù)備作業(yè)線程與輔助存儲(chǔ)器管理器之間的動(dòng)態(tài)關(guān)系。典型地,該頁(yè)入步驟發(fā)生在已經(jīng)選擇用于處理的DMA緩沖器并且已經(jīng)產(chǎn)生了用于特定的DMA緩沖器的資源列表的時(shí)候。進(jìn)行頁(yè)入從而確定如何將存儲(chǔ)器資源提供給輔助存儲(chǔ)器并且確定在輔助存儲(chǔ)器的什么位置放置它們。該頁(yè)入過(guò)程可能有一個(gè)輔助存儲(chǔ)器管理器來(lái)處理。該輔助存儲(chǔ)器管理器可使用一個(gè)提示(hint),該提示由該內(nèi)核模式驅(qū)動(dòng)器在特殊分配的創(chuàng)建上任意地提供。創(chuàng)建該提示來(lái)為存儲(chǔ)器資源在存儲(chǔ)器中找到適當(dāng)?shù)奈恢谩R延卸喾N有關(guān)頁(yè)入存儲(chǔ)器資源的問(wèn)題??赡軟](méi)有足夠的輔助存儲(chǔ)器來(lái)有效地獲取所有的資源,在這種情況下,普遍都會(huì)收回存儲(chǔ)器中的某些資源。即使在收回輔助存儲(chǔ)器中的其它目標(biāo)程序之后,也可能存在用于DMA緩沖器的存儲(chǔ)器不夠的情況。在那種情況下,該DMA緩沖器就會(huì)被拆分成多個(gè)較小的塊,這些塊都要求較少的存儲(chǔ)器資源。在頁(yè)入過(guò)程中,輔助存儲(chǔ)器管理器會(huì)創(chuàng)建一個(gè)命令列表,這些命令可以用于將該存儲(chǔ)器資源放在適當(dāng)?shù)奈恢蒙?。那個(gè)命令列表會(huì),例如,從以下的操作中創(chuàng)建1)收回將一個(gè)特定的存儲(chǔ)器資源移動(dòng)到當(dāng)前段的外面以及為了給另一個(gè)資源騰出空間而移動(dòng)到系統(tǒng)存儲(chǔ)器中;2)頁(yè)入將一個(gè)特定的存儲(chǔ)器資源從系統(tǒng)存儲(chǔ)器帶進(jìn)輔助存儲(chǔ)器中的合適的位置上;3)重新定位將一個(gè)特定的存儲(chǔ)器資源從一個(gè)輔助存儲(chǔ)器的位置上移動(dòng)到另一個(gè)位置??稍试S該輔助存儲(chǔ)器管理器使用這些操作中的任何操作,從而解決存儲(chǔ)器的放置問(wèn)題。這種非窮舉的命令列表可以由該輔助存儲(chǔ)器管理器在一個(gè)頁(yè)入操作的過(guò)程中產(chǎn)生并且之后可以由該調(diào)度程序使用來(lái)產(chǎn)生一個(gè)頁(yè)入緩沖器。為了重新定位、收回或頁(yè)入或者否則以任何方式移動(dòng)或改變的任何存儲(chǔ)器資源,該輔助存儲(chǔ)器管理器會(huì)在命令列表中產(chǎn)生一個(gè)項(xiàng)。在這方面,本發(fā)明的多種的實(shí)施例在命令列表中提供了以下字段頁(yè)入緩沖器的產(chǎn)生使用如上所述的命令列表,調(diào)度程序就可以產(chǎn)生一個(gè)頁(yè)入緩沖器來(lái)執(zhí)行這些命令。如圖7中所示實(shí)現(xiàn)了用于與本發(fā)明有關(guān)的頁(yè)入緩沖器的多種實(shí)施例。如圖7中所示,一些命令可能需要在運(yùn)行之前進(jìn)行預(yù)處理,而其它命令不需要預(yù)處理就可以處理。預(yù)處理可以以任何數(shù)量的方式來(lái)實(shí)現(xiàn),這些方式中包括作業(yè)線程方式。注意,可能在預(yù)處理命令的過(guò)程中必須等待,直到已經(jīng)處理了一部分頁(yè)入緩沖器。在圖7所示的模型中,一個(gè)作業(yè)線程為該頁(yè)入緩沖器作準(zhǔn)備并且為了該頁(yè)入緩沖器運(yùn)行CPU預(yù)處理。當(dāng)頁(yè)入緩沖器中的一個(gè)操作之前需要CPU預(yù)處理的時(shí)候,該作業(yè)線程將協(xié)處理器中的該頁(yè)入緩沖器上的操作分塊。然后,它就在再次啟動(dòng)該頁(yè)入緩沖器之前提出一個(gè)CPU請(qǐng)求從而完成該操作。這樣,對(duì)于命令列表中的每條命令,以下的動(dòng)作都是適合的在產(chǎn)生頁(yè)入緩沖器的時(shí)候進(jìn)行預(yù)處理;在頁(yè)入緩沖器的同步的點(diǎn)上進(jìn)行CPU處理;。剩趙運(yùn)麗捉猞ra叵M軹挺塔遐豳運(yùn)豳攙屮gQIffe_as粽耶運(yùn)務(wù)豳粽耶^i^sl罵煢gm蓉。趙彼搌wlt銀采驟SM軹雎纏樺$運(yùn)行“Blit”命令來(lái)移動(dòng)存儲(chǔ)器資源;一旦完成頁(yè)入緩沖器就進(jìn)行后處理CPU的工作。參見(jiàn)以上可能的動(dòng)作的列表,頁(yè)入緩沖器本身可能包含命令,這些命令將要求協(xié)處理器在CPU執(zhí)行某些工作的同時(shí)是阻塞的。這樣一種產(chǎn)生中斷并拖延了協(xié)處理器的命令在此稱作“電子籬笆”。一個(gè)頁(yè)入緩沖器中的任一命令都可以加在電子籬笆的前頭或者后頭。因?yàn)橹袛嗍遣豢扇〉?,所以通過(guò)將后操作電子籬笆合計(jì)到一個(gè)緩沖器的結(jié)尾,就能夠減少CPU可能中斷協(xié)處理器的次數(shù)。在后操作電子籬笆(或“后電子籬笆”)需要在該緩沖器的結(jié)尾之前的情況將由該調(diào)度程序來(lái)檢測(cè),并且將該命令的前操作電子籬笆(或“前電子籬笆”)進(jìn)行合并,其中該命令應(yīng)當(dāng)要求該后電子籬笆是已經(jīng)執(zhí)行了的。注意,為了保持輔助存儲(chǔ)器之間的相關(guān)性,可能在該頁(yè)入緩沖器的處理過(guò)程中不允許外部中斷。這樣,如果在一個(gè)頁(yè)入緩沖器完全實(shí)現(xiàn)之前就終止了一個(gè)量程,那么該頁(yè)入緩沖器就可以允許保持在該協(xié)處理器的控制中,直到完成。參見(jiàn)圖8,為偽碼算法表示了一連串的事件,這些事件可能發(fā)生在一個(gè)包括頁(yè)入緩沖器中的電子籬笆處理的作業(yè)線程中。與圖8有關(guān),以下表格提供了廣義的命令列表和可能產(chǎn)生的任何終止電子籬笆,其中這些命令在命令列表中發(fā)生。下表僅用作是幫助性的例子,并不意味著是作為可能的命令或者動(dòng)作的類型的窮舉列表,其中這些動(dòng)作可能是關(guān)于那些命令而產(chǎn)生的。加到擁有該表面的處理上;主存儲(chǔ)器未鎖存該系統(tǒng)存儲(chǔ)器緩沖器;從該處理器中脫離。在該頁(yè)入緩沖器中無(wú)。在該頁(yè)入緩沖器的終止電子籬笆中如果該縫隙范圍已經(jīng)由任何之前的操作映射了。不映射到該縫隙的范圍;加到擁有該表面的處理上;主存儲(chǔ)器未鎖存該系統(tǒng)存儲(chǔ)器緩沖器;從該處理器中脫_離。_注意,此處表示出的調(diào)度模式可能要求有效數(shù)量的非平凡CPU處理,從而保證協(xié)處理器是繁忙的。依照如今現(xiàn)有的協(xié)處理器硬件的性能,迫使進(jìn)行,至少部分地,這個(gè)工作。進(jìn)一步,圖形硬件可設(shè)計(jì)成具有更強(qiáng)大的存儲(chǔ)器虛擬化和協(xié)處理器調(diào)度。在這方面,本發(fā)明已經(jīng)得到了許多改進(jìn)并且這些改進(jìn)還將連同本發(fā)明一起公開(kāi)。對(duì)于每個(gè)硬件的性能,我們闡明了改進(jìn)的動(dòng)機(jī)以及對(duì)上述調(diào)度模型的影響。某些改進(jìn)是給予特定的實(shí)現(xiàn)方法來(lái)示出的。注意,盡管不是所有的這些方法都必然支持任何將來(lái)的模型,但是此處以一種方式描述了多種改進(jìn),這種方式是如果實(shí)行該特定方法并且當(dāng)實(shí)行該特定方法的時(shí)候向?qū)崿F(xiàn)方法提供一種適于改進(jìn)的基本原理。可中斷的硬件為了增加協(xié)處理器調(diào)度的可靠性,協(xié)處理器可能支持更好的間隔尺寸上的中斷,該間隔尺寸比整個(gè)DMA緩沖器的間隔尺寸要好。例如,協(xié)處理器和支持硬件可以支持三角處理中的中斷,而不是僅僅先于或者滯后于處理三角。在這樣的可中斷硬件的多種實(shí)施例中,可以提供一種優(yōu)選的設(shè)計(jì)方法,用于通過(guò)對(duì)于輔助存儲(chǔ)器的協(xié)處理器設(shè)備環(huán)境的自動(dòng)保存和恢復(fù)大概地完成協(xié)處理器的虛擬化。每個(gè)協(xié)處理器設(shè)備環(huán)境都可能具有,示例的方式而非限定,一個(gè)專用地址空間、一個(gè)專用環(huán)形緩沖器以及一個(gè)存儲(chǔ)器的專用片斷,其中在專用環(huán)形緩沖器中累加DMA緩沖器,而當(dāng)協(xié)處理器的設(shè)備環(huán)境沒(méi)有運(yùn)行時(shí),在存儲(chǔ)器的專用片斷中保存該硬件的狀態(tài)。為了以這種設(shè)置來(lái)支持設(shè)備環(huán)境轉(zhuǎn)換,通過(guò)一個(gè)所映射的存儲(chǔ)器寄存器,調(diào)度程序可能把一個(gè)所保存的設(shè)備環(huán)境的輔助存儲(chǔ)器中的物理地址提供給協(xié)處理器。然后,該協(xié)處理器載入那個(gè)協(xié)處理器設(shè)備環(huán)境、驗(yàn)證所有的存儲(chǔ)器資源都是有效的,并且然后運(yùn)行該DMA緩沖器,該DMA緩沖器已經(jīng)在環(huán)形緩沖器中進(jìn)行了累加,按照它們所遇到的資源的需要發(fā)生故障。與上述有關(guān),它還能夠使得內(nèi)核模式驅(qū)動(dòng)器查詢沒(méi)有運(yùn)行的協(xié)處理器設(shè)備環(huán)境的狀態(tài)。這通過(guò)利用“運(yùn)行列表”事件跟蹤文件(如下所述)來(lái)檢查所保存的設(shè)備環(huán)境而得以實(shí)現(xiàn),或者由任何查詢裝置都能夠?qū)崿F(xiàn)。在這方面,該驅(qū)動(dòng)器能夠確定有用的信息,例如(1)協(xié)處理器離開(kāi)一個(gè)特定的設(shè)備環(huán)境(例如清空、新運(yùn)行列表、頁(yè)入失敗)進(jìn)行最近轉(zhuǎn)換的原因;(2)硬件使用的存儲(chǔ)器資源的列表(如果支持表面能級(jí)故障);(3)發(fā)生故障的地址(如果支持頁(yè)面能級(jí)故障);以及(4)協(xié)處理器時(shí)鐘周期數(shù),其中該時(shí)鐘周期是特定的設(shè)備環(huán)境正在運(yùn)行的周期。還有,該內(nèi)核模式驅(qū)動(dòng)器能夠?qū)⑿碌腄MA緩沖器插到設(shè)備環(huán)境的一個(gè)當(dāng)前并未運(yùn)行的環(huán)中。在所保存的設(shè)備環(huán)境中,它還能夠修改該環(huán)的位置、該頁(yè)表或者那個(gè)設(shè)備環(huán)境中存儲(chǔ)的任何物理存儲(chǔ)器資料。可能要求這種修改,例如,隨后的存儲(chǔ)器中的那些資源的移動(dòng)。通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間上述基本調(diào)度模型的某些復(fù)雜性是由于協(xié)處理器設(shè)備環(huán)境可能共享公共的協(xié)處理器地址空間的原因。虛擬化這個(gè)地址空間可以供給一種磨光器(sleeker)系統(tǒng)。在虛擬化該地址空間的過(guò)程中,輔助存儲(chǔ)器管理器可以來(lái)回移動(dòng)存儲(chǔ)器,甚至從整個(gè)輔助存儲(chǔ)器中收回資源。這就意味著用于資源的實(shí)際的協(xié)處理器可見(jiàn)的地址可以在其時(shí)間界限內(nèi)改變。這樣,以用戶模式創(chuàng)建的命令緩沖器就不能直接索引對(duì)其地址的分配,因?yàn)槟切┑刂房赡苁俏粗?,直到該命令緩沖器調(diào)度用來(lái)運(yùn)行。例如,上述基本調(diào)度模型的以下要素能夠通過(guò)通用協(xié)處理器設(shè)備環(huán)境地址空間的用戶來(lái)消除1)通過(guò)用實(shí)際的存儲(chǔ)器位置代替處理來(lái)修補(bǔ)命令緩沖器2)確認(rèn)用于存儲(chǔ)器訪問(wèn)的命令緩沖器3)以內(nèi)核模式構(gòu)造存儲(chǔ)器資源列表4)創(chuàng)建單獨(dú)的命令和DMA緩沖器5)將用于所中斷的DMA緩沖器的資源帶回預(yù)先中斷位置在提供通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間的過(guò)程中,特定的協(xié)處理器設(shè)備環(huán)境中的地址分配可以獲得在那個(gè)設(shè)備環(huán)境的地址空間中的它們自己的唯一地址。該地址在該分配的持續(xù)期限里將不進(jìn)行修改。這樣,命令緩沖器就會(huì)直接訪問(wèn)那些地址,而不要求修補(bǔ)。也不需要確認(rèn)命令緩沖器以及將命令緩沖器復(fù)制到DMA緩沖器中。因?yàn)镈MA緩沖器中的存儲(chǔ)器資料可能在協(xié)處理器的虛擬地址空間中,并且那個(gè)地址空間實(shí)際上是專用于任何協(xié)處理器設(shè)備環(huán)境的,所以就不需要確認(rèn)存儲(chǔ)器資料的有效性,并且這樣就不需要隱藏DMA緩沖器中的命令緩沖器的確認(rèn)的內(nèi)容,其中這些內(nèi)容是應(yīng)用程序所不可見(jiàn)的。沒(méi)有被一個(gè)分配或一個(gè)收回分配占用的地址空間(編號(hào)或?qū)嶋H地址)可能被該硬件重定向到一個(gè)虛頁(yè)或?qū)е略L問(wèn)失敗。因?yàn)樵O(shè)備環(huán)境沒(méi)有訪問(wèn)不打算訪問(wèn)的存儲(chǔ)器,所以這就會(huì)確保內(nèi)核模式存儲(chǔ)器的安全性。通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間的一些優(yōu)點(diǎn)如下每個(gè)分配都會(huì)在分配時(shí)獲得一個(gè)協(xié)處理器可見(jiàn)的地址(或編號(hào))。那里沒(méi)有命令緩沖器;DMA緩沖器對(duì)于用戶模式驅(qū)動(dòng)器是直接可見(jiàn)的并且可以由用戶模式驅(qū)動(dòng)器來(lái)填充。DMA緩沖器可以直接指向它使用的地址分配的地址(或編號(hào))。用于頁(yè)入的資源列表可以由用戶模式驅(qū)動(dòng)器來(lái)創(chuàng)建。已經(jīng)回憶了按照?qǐng)D3所闡明的本發(fā)明的多種實(shí)施例的模型以及相應(yīng)的說(shuō)明。這個(gè)模型還能利用可中斷硬件和/或通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間來(lái)進(jìn)行進(jìn)一步的改進(jìn)。在這方面,除了通過(guò)本發(fā)明的附加的進(jìn)步來(lái)進(jìn)一步改進(jìn)之外,下面的部分描述了類似于圖3中的那些部分的原理。表面分配地址和重新分配地址在該改進(jìn)的模型中,輔助存儲(chǔ)器管理器,例如采用內(nèi)核模式的視頻存儲(chǔ)器管理器"VidMm",能夠提供一種用于協(xié)處理器設(shè)備環(huán)境的虛擬地址空間,并且能夠管理該多種協(xié)處理器設(shè)備環(huán)境中的物理存儲(chǔ)器,以便它們能夠獲得其合理的存儲(chǔ)器共享。圖9中描繪了有關(guān)該基本模型的分配方案的這種改進(jìn)的多種實(shí)施例。圖9利用術(shù)語(yǔ)說(shuō)明了本發(fā)明的一個(gè)實(shí)施例,其中該術(shù)語(yǔ)是本領(lǐng)域技術(shù)人員所熟悉的,因?yàn)樗窍鄳?yīng)于本領(lǐng)域所公認(rèn)的概念的。例如“VidMm”是一個(gè)視頻存儲(chǔ)器管理器,而“Thimkinterface”是一個(gè)形實(shí)轉(zhuǎn)換程序接口。然而,注意,盡管術(shù)語(yǔ)是用于更清楚地解釋本發(fā)明的,但不應(yīng)當(dāng)將其看作是限定本發(fā)明的意圖的表示。這樣,“VidMm”就可能是用于任何輔助存儲(chǔ)器的存儲(chǔ)器管理器,而"Thunkinterface"就可能是任何適當(dāng)?shù)慕涌?,等等。與圖9有關(guān),該改進(jìn)模型允許DMA緩沖器直接映射到應(yīng)用程序的一個(gè)地址空間中,這就使得它們?nèi)我獾刂苯佑捎脩裟J津?qū)動(dòng)器來(lái)訪問(wèn)。利用需要訪問(wèn)的(所以不要求修補(bǔ))每個(gè)存儲(chǔ)器資源的不變的虛擬地址或編號(hào),該用戶模式驅(qū)動(dòng)器將再現(xiàn)原語(yǔ)直接分組給DMA緩沖器。該用戶模式驅(qū)動(dòng)器還創(chuàng)建了一個(gè)該DMA緩沖器正在使用的存儲(chǔ)器資源列表,以便在調(diào)度DMA緩沖器之前,該輔助存儲(chǔ)器管理器能夠?qū)⑺鼈儙нM(jìn)輔助存儲(chǔ)器中。如果惡意的應(yīng)用程序修改了該資源列表,正確的資源組就不能適當(dāng)?shù)仨?yè)入了。注意,這并非必然要破壞該存儲(chǔ)器保護(hù)模型,因?yàn)椴皇撬饕行Т鎯?chǔ)器的地址空間的范圍會(huì)要求對(duì)虛擬存儲(chǔ)頁(yè)進(jìn)行索引,或者導(dǎo)致硬件失敗并且阻塞該特定協(xié)處理器設(shè)備環(huán)境的運(yùn)行。在兩者之一的情況下,破壞資源列表并不會(huì)導(dǎo)致協(xié)處理器設(shè)備資源能夠去訪問(wèn)另一個(gè)設(shè)備環(huán)境的存儲(chǔ)器。該改進(jìn)模型中,用戶模式驅(qū)動(dòng)器把DMA緩沖器提交給了內(nèi)核模式驅(qū)動(dòng)器,該內(nèi)核模式驅(qū)動(dòng)器又把該DMA緩沖器提交給了調(diào)度程序。要求該存儲(chǔ)器管理器頁(yè)入資源列表中的資源之后,該調(diào)度程序就把DMA緩沖器照原來(lái)的樣子發(fā)送給該硬件。在改進(jìn)的模型中進(jìn)行調(diào)度在改進(jìn)的模型中調(diào)度是十分類似于在基本模型中調(diào)度的。還有一種作業(yè)線程在把DMA緩沖器提交給協(xié)處理器之前就為該DMA緩沖器做好了準(zhǔn)備。然而,能夠由該作業(yè)線程在該改進(jìn)模型中實(shí)現(xiàn)的工作僅限定于頁(yè)入操作。參見(jiàn)圖10和圖11,給出了以基本模型調(diào)度和以改進(jìn)模式調(diào)度的實(shí)施例。為了更清楚,該改進(jìn)模型具有兩個(gè)調(diào)度選項(xiàng)。當(dāng)調(diào)度而非命令失敗時(shí),就能夠執(zhí)行準(zhǔn)備階段。然而,當(dāng)該改進(jìn)模型使用命令失敗時(shí),就不必要有準(zhǔn)備階段。另外,圖12(A)、12(B)提供了一種能夠?qū)崿F(xiàn)該改進(jìn)的調(diào)度模型的偽代碼的流程圖。在改進(jìn)模型中頁(yè)入在改進(jìn)模型中頁(yè)入是不同于在基本模型中頁(yè)入的。在改進(jìn)模型中,已經(jīng)知道了頁(yè)入的一個(gè)分配的地址,并且該存儲(chǔ)器管理器只是需要使其有效。為了使資源列表中的一個(gè)分配地址有效,該存儲(chǔ)器管理器需要找出物理輔助存儲(chǔ)器的范圍,該范圍是空閑的,并且要求該驅(qū)動(dòng)器將頁(yè)表或編號(hào)映射到那個(gè)范圍。如果必要的話,可以要求物理存儲(chǔ)器的范圍是連續(xù)的一組頁(yè)。如果沒(méi)有足夠的物理視頻存儲(chǔ)器使該分配地址有效,那么輔助存儲(chǔ)器管理器,在此稱作VidMm,就為收回而標(biāo)記某些當(dāng)前有效的分配地址。當(dāng)收回一個(gè)分配地址時(shí),其內(nèi)容傳送給了系統(tǒng)存儲(chǔ)器(假設(shè)它還沒(méi)在系統(tǒng)存儲(chǔ)器中),并且然后就使其虛擬地址或編號(hào)無(wú)效。虛擬地址空間本領(lǐng)域公知的或者將來(lái)要開(kāi)發(fā)的用于提供虛擬地址空間的技術(shù)可以結(jié)合本發(fā)明一起使用。為了示例可以使用地址空間的方式,此處給出了兩個(gè)使用公共虛擬地址空間技術(shù)的例子。應(yīng)當(dāng)理解,已經(jīng)有多種用來(lái)為協(xié)處理器創(chuàng)建虛擬地址空間的方式,并且本領(lǐng)域技術(shù)人員能夠從此處給出的例子中推斷出來(lái)。在這方面,此處描述了利用一個(gè)可變長(zhǎng)度平面頁(yè)表和一個(gè)多級(jí)頁(yè)表的虛擬地址空間??勺冮L(zhǎng)度平面頁(yè)表。圖13中示出了結(jié)合可變長(zhǎng)度平面頁(yè)表的本發(fā)明的使用。在該方法中,通過(guò)使用平面頁(yè)表,將協(xié)處理器的地址空間進(jìn)行了虛擬化。該虛擬地址空間可劃分為預(yù)定的存儲(chǔ)器總數(shù)的頁(yè),例如4KB。對(duì)于虛擬地址空間中的每一頁(yè),頁(yè)表都提供了其中包含標(biāo)識(shí)符,例如64-位的項(xiàng),用于規(guī)定相關(guān)物理存儲(chǔ)器的物理地址和位置(例如,加速圖形接口(AGP)、外設(shè)部件互連(PCI)或者視頻)。在一個(gè)實(shí)施例中,為了允許該協(xié)處理器頁(yè)表對(duì)系統(tǒng)存儲(chǔ)器的頁(yè)進(jìn)行索引,協(xié)處理器支持的頁(yè)不是任意的而是必須是4KB。還有在這個(gè)實(shí)施例中,該協(xié)處理器頁(yè)表必須能夠從相同的地址空間中對(duì)本地視頻存儲(chǔ)器和系統(tǒng)存儲(chǔ)器進(jìn)行尋址。該協(xié)處理器可能要求屬于單個(gè)表面的所有的頁(yè)都映射到一個(gè)單一類型的存儲(chǔ)器。例如,該協(xié)處理器可能要求屬于一個(gè)特定再現(xiàn)目標(biāo)的所有頁(yè)都映射到本地視頻存儲(chǔ)器中。然而,將表面映射到多種物理存儲(chǔ)器類型(AGP、本地視頻等)的頁(yè)表項(xiàng)都可以共存于該頁(yè)表中。對(duì)于PCI和AGP適配器,各頁(yè)表項(xiàng)的示例性實(shí)施例可能包含32位,允許全部4GB的物理地址空間對(duì)于協(xié)處理器都是可見(jiàn)的。對(duì)于利用快速PCI類型的適配器的實(shí)施例,該協(xié)處理器可以支持一個(gè)64-位的尋址周期。每個(gè)頁(yè)表項(xiàng)都可包含40位或以上位從而對(duì)存儲(chǔ)器的每千兆字節(jié)的存儲(chǔ)器進(jìn)行尋址。實(shí)現(xiàn)64位系統(tǒng)的實(shí)施例使用主板上的40位以上的物理地址線,如果相應(yīng)的視頻適配器不能對(duì)整個(gè)地址空間尋址,則該實(shí)施例可能遭受性能損失。因此,建議支持完全的64位。該平面頁(yè)表方法類似于虛擬化裝置,該虛擬化裝置是當(dāng)前現(xiàn)有的INTER8086(x86)家庭用CPU,除了沒(méi)有頁(yè)目錄之外,只有一個(gè)龐大的頁(yè)表。與有效分配地址不相關(guān)的虛擬地址可以重定向到一個(gè)虛頁(yè),從而防止惡意的DMA緩沖器強(qiáng)制該協(xié)處理器訪問(wèn)不應(yīng)該訪問(wèn)的存儲(chǔ)器。該硬件可以執(zhí)行各頁(yè)表項(xiàng)中的有效位,該有效位規(guī)定了該項(xiàng)是否有效。當(dāng)相關(guān)的協(xié)處理器設(shè)備環(huán)境當(dāng)前沒(méi)有在該協(xié)處理器上運(yùn)行時(shí),該頁(yè)表是可重定位的。當(dāng)該設(shè)備環(huán)境沒(méi)有運(yùn)行時(shí),VidMm可能將該頁(yè)表收回給系統(tǒng)存儲(chǔ)器。當(dāng)該設(shè)備環(huán)境再次準(zhǔn)備運(yùn)行時(shí),就可以將該頁(yè)表帶回給視頻存儲(chǔ)器,但它是位于一個(gè)可能不同的位置上。該驅(qū)動(dòng)器也許可以更新所保存的協(xié)處理器設(shè)備環(huán)境中的頁(yè)表的位置。在這個(gè)實(shí)施例中,所有的存儲(chǔ)器訪問(wèn)都可通過(guò)協(xié)處理器虛擬地址而發(fā)生。然而,這并不意味著本發(fā)明要求這樣的訪問(wèn)。某些元件可能是以其它方式來(lái)訪問(wèn)的。而且如果以其他方式訪問(wèn)甚至可以提供增強(qiáng)的功能性??梢圆豢紤]該虛擬地址方案的一些數(shù)據(jù)項(xiàng)是1)該頁(yè)表本身可以通過(guò)一個(gè)物理地址來(lái)索引。2)該陰極射線管(CRT)可以編程為用于相鄰存儲(chǔ)器范圍的物理地址。3)虛擬打印引擎(VPE)能夠直接執(zhí)行DMA到一個(gè)物理地址。4)重復(fù)占位可能直接從一個(gè)物理地址中進(jìn)行讀取。5)該協(xié)處理器設(shè)備環(huán)境可能通過(guò)物理地址來(lái)進(jìn)行索引。6)該初始環(huán)形緩沖器可能通過(guò)物理地址來(lái)進(jìn)行索引。注意,在設(shè)備環(huán)境轉(zhuǎn)換的過(guò)程中,協(xié)處理器能夠通過(guò)還原的設(shè)備環(huán)境重新轉(zhuǎn)換正在使用的虛擬地址??梢源_信,存儲(chǔ)器資源是置于適當(dāng)?shù)奈恢蒙系?,而不是允許該協(xié)處理器做出可能是錯(cuò)誤的假設(shè),該錯(cuò)誤的假設(shè)為那些地址在該設(shè)備環(huán)境轉(zhuǎn)換之前就對(duì)相同的物理頁(yè)進(jìn)行索引。還要注意,結(jié)合本發(fā)明的多種實(shí)施例,將有利于允許單一頁(yè)表中有多個(gè)項(xiàng)或者有利于通過(guò)多個(gè)頁(yè)表去訪問(wèn)相同的物理頁(yè)。在多個(gè)實(shí)施例中,協(xié)處理器可以實(shí)現(xiàn)一個(gè)界限寄存器,該界限寄存器給出了頁(yè)表的當(dāng)前大小。經(jīng)過(guò)頁(yè)表末端的任何存儲(chǔ)器索引都會(huì)被協(xié)處理器看作是無(wú)效訪問(wèn)并且都是這樣處理的。該頁(yè)表可以用2的冪次來(lái)擴(kuò)展并且在一個(gè)實(shí)施例中支持至少2GB的地址空間(頁(yè)表中的2MB)。如果與協(xié)處理器設(shè)備環(huán)境相關(guān)的虛擬地址空間變成片斷,一個(gè)API,例如MICROSOFTDirect3D運(yùn)行時(shí)間,能夠執(zhí)行無(wú)用單元的收集從而減少地址空間和相應(yīng)頁(yè)表的大小。將進(jìn)行高虛擬地址處的分配刪除并且重新分配到較低的地址。結(jié)合本發(fā)明利用可變長(zhǎng)度平面頁(yè)表來(lái)實(shí)現(xiàn)虛擬地址空間的優(yōu)缺點(diǎn)對(duì)于本領(lǐng)域技術(shù)人員來(lái)說(shuō)是顯而易見(jiàn)的。概括為,利用該平面頁(yè)表的一個(gè)優(yōu)點(diǎn)是只有一級(jí)向物理存儲(chǔ)器的間接尋址。另一個(gè)優(yōu)點(diǎn)是,頁(yè)入能夠用一組不相鄰的頁(yè)來(lái)解決。然而,也有缺點(diǎn)。例如,當(dāng)協(xié)處理器運(yùn)行時(shí),整個(gè)頁(yè)表通常都需要位于存儲(chǔ)器中。還有,頁(yè)表可能耗費(fèi)大量的存儲(chǔ)器。頁(yè)表可能難以定位,因?yàn)橥ǔK家蟠鎯?chǔ)器中的一組相鄰的頁(yè)。該多級(jí)頁(yè)表。圖14示出了結(jié)合多級(jí)頁(yè)表的本發(fā)明的使用。一個(gè)多級(jí)頁(yè)表通??赡苁穷愃朴诳勺冮L(zhǎng)度平面頁(yè)表的,然而,多級(jí)頁(yè)表中,虛擬地址的索引部分分散到了多級(jí)表中。例如,不同的實(shí)施例可以利用一個(gè)32-位的地址空間。在這種情況下,可以要求該硬件具有兩級(jí)間接尋址。間接尋址的第一級(jí)稱作頁(yè)面目錄而第二級(jí)稱作頁(yè)表。當(dāng)協(xié)處理器正在運(yùn)行一個(gè)特定的設(shè)備環(huán)境時(shí),只有用于那個(gè)設(shè)備環(huán)境的頁(yè)面目錄和資源列表中的分配聽(tīng)需的頁(yè)表需要處于存儲(chǔ)器中??赡芷谕峁┮环N結(jié)合本發(fā)明的多級(jí)頁(yè)表的一個(gè)優(yōu)點(diǎn)是頁(yè)入能夠用一組不相鄰的頁(yè)來(lái)解決。還有,分配地址可能把系統(tǒng)和本地視頻存儲(chǔ)器中的頁(yè)混淆,并且只有正在使用的頁(yè)面目錄和頁(yè)表需要出現(xiàn)在存儲(chǔ)器中,并且,各頁(yè)面目錄和頁(yè)表只要求一個(gè)頁(yè)面(要求沒(méi)有多級(jí)相鄰的分配)。然而,盡管有這些優(yōu)點(diǎn),但還是存在缺點(diǎn),就是對(duì)存儲(chǔ)器的訪問(wèn)要求兩次間接尋址。表面能級(jí)故障隨著通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間的增加,該改進(jìn)調(diào)度模型就適當(dāng)?shù)亓己霉ぷ?,并且通常不需要很多的CPU系統(tǒng)開(kāi)銷,尤其是當(dāng)存儲(chǔ)器壓力很小或沒(méi)有的時(shí)候。大多時(shí)候,當(dāng)DMA緩沖器可以提交給調(diào)度程序的時(shí)候,它索引的資源就已經(jīng)出現(xiàn)在了存儲(chǔ)器中,并且因此該DMA緩沖器不需要通過(guò)頁(yè)入線程來(lái)進(jìn)行任何頁(yè)入。然而,在調(diào)度方面,該模型還能通過(guò)增加保持的時(shí)間的精確性來(lái)進(jìn)一步改進(jìn)。在實(shí)現(xiàn)本發(fā)明的過(guò)程中面臨的一個(gè)問(wèn)題是,它也許不能預(yù)先知道特定的DMA緩沖器要用多長(zhǎng)時(shí)間運(yùn)行。這可能導(dǎo)致一個(gè)調(diào)度程序?yàn)橄乱粋€(gè)DMA緩沖器準(zhǔn)備一個(gè)可能不利的選擇。如果沒(méi)有其它設(shè)備環(huán)境是相同或高于當(dāng)前設(shè)備環(huán)境的優(yōu)先權(quán)的,或者那個(gè)優(yōu)先級(jí)上的所有其它的設(shè)備環(huán)境都是空的,那么該調(diào)度程序就可以從當(dāng)前設(shè)備環(huán)境中挑選下一個(gè)DMA緩沖器。否則,該調(diào)度程序就可以從下一個(gè)設(shè)備環(huán)境中挑選下一個(gè)DMA緩沖器,該下一個(gè)設(shè)備環(huán)境具有與當(dāng)前設(shè)備環(huán)境相同或比它更高的優(yōu)先權(quán)。然而,并不保證那個(gè)選擇是正確的。當(dāng)從下一個(gè)最高優(yōu)先權(quán)的設(shè)備環(huán)境中選出一個(gè)DMA緩沖器時(shí),該調(diào)度程序會(huì)假設(shè)用于當(dāng)前設(shè)備環(huán)境的DMA緩沖器將運(yùn)行比一個(gè)時(shí)間片更長(zhǎng)的時(shí)間。如果不是這種情況,那么該調(diào)度程序也許就很快向著遠(yuǎn)離那個(gè)硬件設(shè)備環(huán)境的方向轉(zhuǎn)換了。在當(dāng)前的DMA緩沖器運(yùn)行比一個(gè)時(shí)間片短的時(shí)間的情況下,該調(diào)度程序應(yīng)當(dāng)已經(jīng)從當(dāng)前設(shè)備環(huán)境中選擇了下一個(gè)DMA緩沖器(因?yàn)檫@會(huì)將協(xié)處理器的有效使用最大化)。當(dāng)存儲(chǔ)器的壓力很小或沒(méi)有的時(shí)候,通常,用于下一個(gè)DMA緩沖器的兩個(gè)可能的候選緩沖器可能已經(jīng)使其所有的資源都出現(xiàn)在了存儲(chǔ)器中,所以很可能沒(méi)有緩沖器要求頁(yè)入。在那種情況下,當(dāng)?shù)谝籇MA緩沖器的時(shí)間片結(jié)束的時(shí)候,該調(diào)度程序就會(huì)認(rèn)識(shí)到其錯(cuò)誤、立即改變其思想并且把正確的DMA緩沖器給予協(xié)處理器。然而,在存儲(chǔ)器的壓力下,該模型可能變得較為不穩(wěn)定。下一個(gè)DMA緩沖器的“調(diào)整大小”可能變成確認(rèn)平滑操作中的一個(gè)有利步驟。在存儲(chǔ)器的壓力下,碰巧是之前所描述的那種情況,用于該下一個(gè)DMA緩沖器的兩個(gè)可能的候選緩沖器中的一個(gè)就要求某種頁(yè)入并且因此會(huì)發(fā)送給預(yù)備線程。在那種情況下,通常對(duì)于調(diào)度程序在最后一分鐘內(nèi)“改變其思想”并且交換這兩個(gè)DMA緩沖器是不合理的。然而,注意,可能做出這樣的改變,并且這樣的實(shí)際操作并沒(méi)有落在本發(fā)明的說(shuō)明書(shū)之外。例如,在下一個(gè)DMA緩沖器的準(zhǔn)備完成并且其它可能的DMA緩沖器候選項(xiàng)并不要求頁(yè)入的情況下,就會(huì)交換一個(gè)DMA緩沖器。這可能包含通過(guò)輔助存儲(chǔ)器管理器用于可共享分配的某種特定的支持程序。上述可能時(shí)間保持誤差,自然而然地,不是很壞,并且能夠在隨后的時(shí)間片過(guò)程中大約錯(cuò)過(guò)的處理時(shí)間里通過(guò)給予設(shè)備環(huán)境而運(yùn)行,其中該處理時(shí)間是該設(shè)備環(huán)境。還有,在大多數(shù)情況下,DMA緩沖器包含足夠的命令來(lái)用于多個(gè)協(xié)處理器時(shí)間片的運(yùn)行,所以各設(shè)備環(huán)境都能獲得其完整的時(shí)間片。然而,在存儲(chǔ)器的壓力下,可能強(qiáng)迫輔助存儲(chǔ)器管理器將DMA緩沖器(如上所述)拆分成較小的緩沖器,從而減少各設(shè)備環(huán)境的工作組。DMA緩沖器的這種拆分減少了DMA緩沖器的大小,并且相應(yīng)地,增加了上述的量化問(wèn)題。另一個(gè)問(wèn)題可能在存儲(chǔ)器的壓力下引發(fā),這個(gè)問(wèn)題就是該模型可能會(huì)人為地制造額外的壓力,因?yàn)榭赡苡卸嘤贒MA緩沖器實(shí)際使用的存儲(chǔ)器進(jìn)行了頁(yè)入。所有那些頁(yè)入的額外的存儲(chǔ)器都將可能在下一個(gè)時(shí)間片之前被收回,并且會(huì)需要再次頁(yè)入。在頁(yè)入動(dòng)作已經(jīng)很高的時(shí)候,這會(huì)導(dǎo)致頁(yè)入動(dòng)作的增加。在基本的和改進(jìn)的模型中,該輔助存儲(chǔ)器管理器能夠通過(guò)選出期望的收回策略來(lái)查出增加頁(yè)入的問(wèn)題的地址。例如,在輕微的存儲(chǔ)器壓力下,各設(shè)備環(huán)境也許會(huì)在其工作組中具有一定數(shù)量的存儲(chǔ)器。在從其它設(shè)備環(huán)境中收回存儲(chǔ)器之前,該輔助存儲(chǔ)器管理器也許會(huì)努力地首先從當(dāng)前設(shè)備環(huán)境中收回存儲(chǔ)器,并且將其DMA緩沖器拆分從而使其適于現(xiàn)有的工作組。一旦特定設(shè)備環(huán)境的DMA緩沖器拆分成了其最小的尺寸,該輔助存儲(chǔ)器管理器就只能從另一個(gè)設(shè)備環(huán)境中收回存儲(chǔ)器了。解決這些問(wèn)題的一個(gè)優(yōu)選方法是允許協(xié)處理器所需的存儲(chǔ)器的請(qǐng)求故障。那樣,我們就能夠確認(rèn)只有協(xié)處理器所需的存儲(chǔ)器的子設(shè)備出現(xiàn)在了存儲(chǔ)器中。出于改進(jìn)模型的目的的該級(jí)故障是在表面間隔尺寸上。然而,應(yīng)當(dāng)理解,任何級(jí)的故障都可以期望結(jié)合本發(fā)明來(lái)使用。還有,注意,就頁(yè)表硬件而言,該硬件只會(huì)考慮分配的第一頁(yè)的狀態(tài),從而確定分配是否合理,因?yàn)樵撦o助存儲(chǔ)器管理器會(huì)立刻把整個(gè)分配帶到存儲(chǔ)器中。在不同的實(shí)施例中,硬件可能在以下兩種情況的一種發(fā)生的時(shí)候產(chǎn)生頁(yè)面故障1)發(fā)生了設(shè)備環(huán)境的轉(zhuǎn)換,轉(zhuǎn)換到了索引無(wú)效環(huán)形緩沖器或DMA緩沖器的設(shè)備環(huán)^Miο2)將汲取出一種原語(yǔ),并且某些所需的存儲(chǔ)器資源并未出現(xiàn)(例如頂點(diǎn)遮掩碼、頂點(diǎn)緩沖器、紋理)。注意,在第二種情況下,可能要求硬件在收回每個(gè)三角之前重新取樣其當(dāng)前的存儲(chǔ)器資源。對(duì)于輔助存儲(chǔ)器管理器,可能會(huì)在任何時(shí)刻使虛擬地址或編號(hào)無(wú)效,包括當(dāng)該存儲(chǔ)器資源正在運(yùn)行的時(shí)候。也期待該硬件可以允許所有當(dāng)前存儲(chǔ)器正在進(jìn)行的查詢。該輔助存儲(chǔ)器管理器可以使用那個(gè)信息來(lái)確定一個(gè)特定的分配什么時(shí)候會(huì)給硬件使用。該輔助存儲(chǔ)器管理器可能假設(shè)如果一個(gè)分配沒(méi)有出現(xiàn)在當(dāng)前協(xié)處理器正在使用的資源列表中,在具有其無(wú)效的虛擬地址或編號(hào)之后,那么收回那個(gè)分配就是安全的,因?yàn)樵搮f(xié)處理器不能訪問(wèn)那個(gè)分配地址。企圖這么做就會(huì)導(dǎo)致頁(yè)面故障。通過(guò)下面對(duì)一個(gè)表面能級(jí)故障模型的更詳細(xì)的解釋,提供了結(jié)合本發(fā)明的使用表面能級(jí)故障的進(jìn)一步的解釋。下面的模型是某些實(shí)施例的一個(gè)例子,并且不能當(dāng)作是對(duì)本發(fā)明結(jié)合此處所提供的調(diào)度模型的設(shè)備環(huán)境之外的其它應(yīng)用程序的表面能級(jí)故障的原理的可能的使用的限定。第一,用于存儲(chǔ)器資源的分配進(jìn)程表可能與這個(gè)文件中的通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間中所述的是相同的。詳細(xì)情況參見(jiàn)那個(gè)部分。第二,用于DMA緩沖器和資源列表的收回命令方案與這個(gè)文件中的通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間中所作的解釋也是相同的。在這個(gè)模型中,即使該圖形硬件支持表面能級(jí)故障,也需要有該資源列表。該輔助存儲(chǔ)器管理器(此處稱作“VidMm”)使用該資源列表,從而獲得有關(guān)存儲(chǔ)器地址分配的使用信息。那個(gè)使用信息允許VidMm在它需要騰出存儲(chǔ)器中的空間的時(shí)候確定用于收回的候選緩沖器。隨著表面能級(jí)故障的增加,關(guān)于資源列表沒(méi)有安全性的關(guān)系,所以它能以用戶模式來(lái)創(chuàng)建。如果惡意的應(yīng)用程序?qū)o(wú)效數(shù)據(jù)放在了資源列表中,那么會(huì)發(fā)生的最嚴(yán)重的故障就是要遭受該惡意應(yīng)用程序的執(zhí)行。VidMm可能產(chǎn)生一關(guān)于收回條件的不合理的選擇,其將導(dǎo)致用于那個(gè)應(yīng)用程序的外部頁(yè)入活動(dòng)。具有表面的命令故障的調(diào)度模型可能在許多方面不同于沒(méi)有使用表面能級(jí)故障的模型。通常,準(zhǔn)備好的列表中的處理可以直接提交給協(xié)處理器,而不需要預(yù)備階段。該調(diào)度程序會(huì)保存用于設(shè)備環(huán)境的一個(gè)專用列表和一個(gè)頁(yè)入線程,該設(shè)備環(huán)境要求解決頁(yè)面故障。已有專門(mén)的VidMm協(xié)處理器設(shè)備環(huán)境用于頁(yè)入操作。最后,鏈接提交給一個(gè)設(shè)備環(huán)境的DMA緩沖器,從而形成一個(gè)單獨(dú)的工作項(xiàng)目。在這個(gè)模型中,取消了預(yù)備階段。該調(diào)度程序可能要求協(xié)處理器從一個(gè)設(shè)備環(huán)境直接轉(zhuǎn)換到另一個(gè)設(shè)備環(huán)境,并且它可以假設(shè)所有的設(shè)備環(huán)境都準(zhǔn)備好在任意時(shí)刻運(yùn)行了。如果要轉(zhuǎn)換到的設(shè)備環(huán)境沒(méi)有將其所有的存儲(chǔ)器資源給出到存儲(chǔ)器中,該硬件就會(huì)出錯(cuò),并且該設(shè)備環(huán)境就會(huì)添加到列表上(例如,參見(jiàn)圖15的頁(yè)入列表),以便該頁(yè)入線程可以開(kāi)始致力于解決該故障。圖15示出了結(jié)合這個(gè)模型由調(diào)度程序維護(hù)的示例性處理的一個(gè)列表。參見(jiàn)圖15,當(dāng)發(fā)生故障時(shí),引發(fā)該故障的設(shè)備環(huán)境就會(huì)添加到該頁(yè)入列表中。然后,一個(gè)頁(yè)入線程就可以解決該故障。該頁(yè)入線程可能選擇最高優(yōu)先級(jí)的發(fā)生故障的設(shè)備環(huán)境,以便首先解決該故障??梢允褂靡环N定期優(yōu)先權(quán)提升來(lái)確信低優(yōu)先權(quán)設(shè)備環(huán)境將最終獲得足夠高的優(yōu)先權(quán),從而解決其故障。當(dāng)頁(yè)入作業(yè)線程正在解決故障時(shí),該調(diào)度程序可以調(diào)度更多的設(shè)備環(huán)境,這些設(shè)備環(huán)境都準(zhǔn)備好了在協(xié)處理器上運(yùn)行。當(dāng)協(xié)處理器正在工作時(shí),該頁(yè)入作業(yè)線程能夠通過(guò)要求該驅(qū)動(dòng)器從地址中映射或者非映射到分配地址來(lái)操作視頻存儲(chǔ)器。可能當(dāng)前協(xié)處理器正在使用的分配地址都將被無(wú)效掉。協(xié)處理器試圖訪問(wèn)這樣一個(gè)分配地址的下一時(shí)刻,就可能出錯(cuò)。然而,因?yàn)樵搮f(xié)處理器不可能在任意一個(gè)時(shí)間上立即出錯(cuò)(例如某些協(xié)處理器將只對(duì)三角之間的當(dāng)前分配地址的狀態(tài)重新取樣),所以在它已經(jīng)變得無(wú)效之后,可能協(xié)處理器就會(huì)需要使用用于某個(gè)時(shí)刻的分配地址。為了防止發(fā)生那種情況,即使其虛擬地址或編號(hào)已經(jīng)被無(wú)效了,VidMm也可以確信用于該分配地址的存儲(chǔ)器將保持有效直到轉(zhuǎn)換到下一設(shè)備環(huán)境。這是通過(guò)在VidMm專用的協(xié)處理器設(shè)備環(huán)境中由于頁(yè)入而將存儲(chǔ)器轉(zhuǎn)移來(lái)實(shí)現(xiàn)的。因?yàn)樵谝粋€(gè)單獨(dú)的設(shè)備環(huán)境中進(jìn)行了存儲(chǔ)器轉(zhuǎn)移,所以我們可以相信在改變存儲(chǔ)器的內(nèi)容之前將存在一個(gè)存儲(chǔ)器的轉(zhuǎn)換。對(duì)于索引系統(tǒng)存儲(chǔ)器的虛擬地址或編號(hào),在收回的過(guò)程中是不存在存儲(chǔ)器轉(zhuǎn)移的。在那種情況下,通過(guò)使其受到約束,VidMm可以確信該系統(tǒng)存儲(chǔ)器保持有效,直到該協(xié)處理器設(shè)備環(huán)境轉(zhuǎn)換到VidMm的專用設(shè)備環(huán)境。該VidMm專用的協(xié)處理器設(shè)備環(huán)境是一種常規(guī)的協(xié)處理器設(shè)備環(huán)境,VidMm利用該常規(guī)的協(xié)處理器設(shè)備環(huán)境在系統(tǒng)存儲(chǔ)器和視頻存儲(chǔ)器之間進(jìn)行存儲(chǔ)器轉(zhuǎn)移。該VidMm設(shè)備環(huán)境是一種可變優(yōu)先權(quán)設(shè)備環(huán)境,該設(shè)備環(huán)境采用頁(yè)入列表中的最高優(yōu)先權(quán)項(xiàng)的優(yōu)先權(quán)。使得所有頁(yè)入操作在單一的設(shè)備環(huán)境中連續(xù)執(zhí)行就簡(jiǎn)化了用于VidMm的同步模型。這個(gè)模型中另一個(gè)值得關(guān)注的不同點(diǎn)是為一個(gè)特定的設(shè)備環(huán)境提交的所有DMA緩沖器都能夠鏈接起來(lái)從而形成一個(gè)單任務(wù)的方式。在以前的模型中,形成工作項(xiàng)的各DMA緩沖器和各設(shè)備環(huán)境都會(huì)包含一個(gè)那些工作項(xiàng)的列表。該調(diào)度程序不是必然要調(diào)度那個(gè)設(shè)備環(huán)境;它會(huì)調(diào)度(并且開(kāi)始準(zhǔn)備用于)與一個(gè)設(shè)備環(huán)境相關(guān)的特定工作項(xiàng)。在那個(gè)工作有機(jī)會(huì)完成之前,該調(diào)度程序可能不得不選擇下一個(gè)工作項(xiàng)。各工作項(xiàng)不得不在將其提交之前做好準(zhǔn)備,從而該調(diào)度程序不得不實(shí)現(xiàn)得知該下一工作項(xiàng)是什么、哪一個(gè)總是不可能的。具有了表面能級(jí)故障,DMA緩沖器就不需要準(zhǔn)備工作了。為此,該調(diào)度程序不必把設(shè)備環(huán)境看作工作項(xiàng)的收集。相反,該調(diào)度程序真正地調(diào)度這些設(shè)備環(huán)境,并且一旦設(shè)備環(huán)境獲得了該協(xié)處理器的控制,它就會(huì)保持該協(xié)處理器的控制。可以允許某些事件暫停(halt)該協(xié)處理器的設(shè)備環(huán)境控制,例如1)該協(xié)處理器完成了當(dāng)前已經(jīng)排列好的所有的命令2)該協(xié)處理器產(chǎn)生了由一個(gè)無(wú)效存儲(chǔ)器訪問(wèn)所引起的頁(yè)面故障3)該調(diào)度程序請(qǐng)求轉(zhuǎn)換到一個(gè)不同的設(shè)備環(huán)境4)在該DMA數(shù)據(jù)流中的無(wú)效命令之后,該協(xié)處理器產(chǎn)生了一個(gè)無(wú)效操作中斷圖16提供了一種說(shuō)明按照上述方案的本發(fā)明的多種實(shí)施例的框圖。參見(jiàn)圖16,在相同的硬件環(huán)境下,從第一設(shè)備環(huán)境的插入到第二設(shè)備環(huán)境的插入中,這兩端表示級(jí)數(shù)。在左邊一端上,該調(diào)度程序要求該內(nèi)核驅(qū)動(dòng)器把一個(gè)特定的DMA緩沖器插入到協(xié)處理器設(shè)備環(huán)境#1的環(huán)中。該環(huán)可以由該驅(qū)動(dòng)器來(lái)修改,并且可以更新協(xié)處理器的尾部從而索引新的位置。協(xié)處理器設(shè)備環(huán)境#1中的DMA緩沖器的插入是在協(xié)處理器設(shè)備環(huán)境#1的專門(mén)鎖定的保護(hù)下發(fā)生的。這樣,其它線程就能把DMA緩沖器插入到其它線程設(shè)備環(huán)境的環(huán)中。在右邊一端上,該調(diào)度程序要求該內(nèi)核模式驅(qū)動(dòng)器把一個(gè)特定的DMA緩沖器插入到協(xié)處理器設(shè)備環(huán)境#2的環(huán)上。然而,該環(huán)已經(jīng)滿了,因此,線程B將被阻塞,直到環(huán)中的某個(gè)空間被釋放。應(yīng)當(dāng)注意這樣一種情況,由于是在其自己的環(huán)中插入一個(gè)新的DMA緩沖器,等待的線程B不阻塞線程A。這個(gè)模型中,各設(shè)備環(huán)境都具有其自己的DMA環(huán),該環(huán)能夠保持重定向到要運(yùn)行的DMA緩沖器的部分。在提交時(shí)間里,該調(diào)度程序可以試著把提交的DMA緩沖器添加到那個(gè)設(shè)備環(huán)境的環(huán)上。如果該環(huán)已經(jīng)滿了,那么該調(diào)度程序就會(huì)等待直到該環(huán)中有足夠的空間用于另一個(gè)提交。注意,這種等待將只是把進(jìn)一步的提交阻塞到要提交的特定的設(shè)備環(huán)境中。它并不把提交阻塞給其它設(shè)備環(huán)境。換言之,多個(gè)線程都能并行地把工作項(xiàng)添加到其自己的設(shè)備環(huán)境中。因?yàn)榭梢园研碌腄MA緩沖器添加到一個(gè)運(yùn)行設(shè)備環(huán)境的隊(duì)列里,所以該協(xié)處理器可以在產(chǎn)生一個(gè)中斷之前對(duì)該隊(duì)列的尾部進(jìn)行重新取樣,從而報(bào)告設(shè)備環(huán)境是空的。當(dāng)然,也可能在該協(xié)處理器取樣其隊(duì)列之后立即把DMA緩沖器添加到該隊(duì)列上。然而,在產(chǎn)生中斷之前就取樣該隊(duì)列的尾部會(huì)減少這種情況發(fā)生的可能性,并且增加調(diào)度的準(zhǔn)確性。當(dāng)該調(diào)度程序告知設(shè)備環(huán)境是空的時(shí),它將排列該驅(qū)動(dòng)器從而了解實(shí)際上是不是那種情況。對(duì)于該驅(qū)動(dòng)器,為了確定當(dāng)前它里面有沒(méi)有排列好的尚未處理的命令,可能要訪問(wèn)所保存的協(xié)處理器設(shè)備環(huán)境。圖17提供了一種描述這個(gè)模型的偽碼算法。如后面將要詳細(xì)描述的那樣,當(dāng)允許該內(nèi)核模式驅(qū)動(dòng)器創(chuàng)建包含優(yōu)先命令的DMA緩沖器時(shí),將引入與限定的對(duì)有特權(quán)的DMA緩沖器的概念,從而允許DMA緩沖器直接以用戶模式來(lái)創(chuàng)建而不會(huì)威脅到系統(tǒng)的安全。用這個(gè)模型表示的多種實(shí)施例可以結(jié)合限定的對(duì)有特權(quán)的存儲(chǔ)器的概念來(lái)使用,該限定的對(duì)有特權(quán)的存儲(chǔ)器將在這個(gè)文件的后面進(jìn)行描述。從現(xiàn)在起,注意,在這個(gè)模型中可能引發(fā)的一個(gè)問(wèn)題,因?yàn)?,在之前所表示的存?chǔ)器虛擬化模型中,限定的DMA緩沖器與(versus)有特權(quán)的DMA緩沖器能夠訪問(wèn)的存儲(chǔ)器之間并沒(méi)有區(qū)別;所有虛擬存儲(chǔ)器都是可存取的。這就意味著某些存儲(chǔ)器資源,象頁(yè)表或環(huán)形緩沖器,可能通過(guò)該協(xié)處理器虛擬地址空間不是恰好(appropriately)可見(jiàn)的,因?yàn)槟菢泳蜁?huì)允許一個(gè)惡意的應(yīng)用程序?qū)懙皆擁?yè)表或者該環(huán)形緩沖器上。為此,該硬件會(huì)設(shè)計(jì)成支持用于多種類型的資源的物理地址和用于其它類型的資源的虛擬地址。一種解決該問(wèn)題的不同的方法是添加優(yōu)先存儲(chǔ)器的概念。在多種實(shí)施例中,優(yōu)先存儲(chǔ)器只能從有特權(quán)的DMA緩沖器中進(jìn)行訪問(wèn),并且如果限定的DMA緩沖器試圖訪問(wèn)有特權(quán)的存儲(chǔ)器位置,那么該協(xié)處理器就會(huì)發(fā)生頁(yè)面故障。另一方面,一個(gè)有特權(quán)的DMA緩沖器能夠無(wú)區(qū)別地對(duì)有特權(quán)的存儲(chǔ)器和沒(méi)有特權(quán)的存儲(chǔ)器兩個(gè)都進(jìn)行訪問(wèn)。為了支持有特權(quán)的存儲(chǔ)器,該硬件必須具有一個(gè)裝置,從而按照通用編號(hào)原理(在基于編號(hào)虛擬化的情況下)或者通用頁(yè)面原理(在基于頁(yè)表虛擬化的情況下)規(guī)定該存儲(chǔ)器是否是有特權(quán)的。注意,為了支持有特權(quán)的存儲(chǔ)器,具有一個(gè)頁(yè)表的支持表面能級(jí)故障的協(xié)處理器不再會(huì)僅在存儲(chǔ)器資源的基地址上出錯(cuò)。該協(xié)處理器必須考慮當(dāng)前資源所覆蓋的所有的頁(yè)表項(xiàng),并且確信它們都具有正確的保護(hù)位組。只檢查存儲(chǔ)器資源的第一頁(yè)可能會(huì)允許一個(gè)惡意的應(yīng)用程序?qū)ο薅ǖ拇鎯?chǔ)器基地址之后的有特權(quán)的存儲(chǔ)器進(jìn)行存取,其中該限定的存儲(chǔ)器基地址在限定的DMA緩沖器中作了規(guī)定。運(yùn)行列表之前所示出的命令故障模型可能大量使用了中斷從而發(fā)出多個(gè)事件的信號(hào)。這些事件中的某些事件,象頁(yè)面故障,在存儲(chǔ)器壓力下發(fā)生的頻率會(huì)很高。在中斷是瞬時(shí)中斷的時(shí)間和由CPU給予協(xié)處理器一個(gè)新的任務(wù)的時(shí)間之間,該協(xié)處理器可能供應(yīng)不足。為了隱藏中斷等待時(shí)間并且保持協(xié)處理器忙著,我們引入了運(yùn)行列表的概念。簡(jiǎn)單講,運(yùn)行列表就是一個(gè)能夠由協(xié)處理器運(yùn)行而不需要CPU干預(yù)的協(xié)處理器設(shè)備環(huán)境的列表。這些設(shè)備環(huán)境可以按照所給的順序或者按照經(jīng)檢驗(yàn)更便于本發(fā)明的那些實(shí)際應(yīng)用的其它任何順序來(lái)運(yùn)行。根據(jù)用于任何廣泛變化的原因的運(yùn)行列表,該協(xié)處理器能夠從一個(gè)設(shè)備環(huán)境轉(zhuǎn)換到下一個(gè),其中這些原因能夠結(jié)合本發(fā)明得以實(shí)現(xiàn),例如1)當(dāng)前設(shè)備環(huán)境是空的,即沒(méi)有任何事情可做。2)當(dāng)前設(shè)備環(huán)境發(fā)生了頁(yè)面故障。3)當(dāng)前設(shè)備環(huán)境發(fā)生了一般的保護(hù)故障(如果協(xié)處理器支持的話)4)要求協(xié)處理器轉(zhuǎn)換到一個(gè)新的運(yùn)行列表在多種實(shí)施例中,當(dāng)協(xié)處理器從運(yùn)行列表中的一項(xiàng)轉(zhuǎn)換到下一項(xiàng)時(shí),就中斷CPU但并不阻塞,還會(huì)將設(shè)備環(huán)境轉(zhuǎn)換到該列表中的下一項(xiàng),并且開(kāi)始運(yùn)行這一項(xiàng)。該運(yùn)行列表的頭部可以是該調(diào)度程序試圖先運(yùn)行的設(shè)備環(huán)境,而該運(yùn)行列表的其它元素可以在那里部分地保持中斷等待時(shí)間過(guò)程時(shí)協(xié)處理器是忙著的。CPU—旦接收了協(xié)處理器進(jìn)行了轉(zhuǎn)換而離開(kāi)該列表的頭部的中斷信號(hào),CPU就會(huì)創(chuàng)建一個(gè)新的運(yùn)行列表并且將其發(fā)送給該協(xié)處理當(dāng)該協(xié)處理器進(jìn)行轉(zhuǎn)換而離開(kāi)該列表的頭部的時(shí)候,可以開(kāi)始執(zhí)行該運(yùn)行列表中的下一個(gè)設(shè)備環(huán)境,而它產(chǎn)生的中斷是其朝著CPU運(yùn)行。CPU將會(huì)產(chǎn)生的新的運(yùn)行列表的頭部可能與該協(xié)處理器要轉(zhuǎn)換的設(shè)備環(huán)境是不同的。在那種情況下,該協(xié)處理器將需要再次轉(zhuǎn)換,并且不可能花時(shí)間對(duì)那個(gè)設(shè)備環(huán)境做許多有用的工作。然而,CPU創(chuàng)建的新的運(yùn)行列表的頭部的設(shè)備環(huán)境可能與之前的運(yùn)行列表的第二個(gè)元素的設(shè)備環(huán)境是相同的,因?yàn)樵O(shè)備環(huán)境的優(yōu)先權(quán)不會(huì)因創(chuàng)建了最新的運(yùn)行列表而改變。在那種情況下,該協(xié)處理器就已經(jīng)提前開(kāi)始處理該正確的設(shè)備環(huán)境了。圖18中提供了一種表示該運(yùn)行列表的概念的框圖。當(dāng)一個(gè)運(yùn)行列表包含在本發(fā)明的多種實(shí)施例中時(shí),該調(diào)度程序的運(yùn)行設(shè)備環(huán)境可用當(dāng)前的運(yùn)行列表替換。引入一個(gè)第二運(yùn)行列表,稱作待處理的運(yùn)行列表,以便簡(jiǎn)化運(yùn)行列表轉(zhuǎn)換的同步。該當(dāng)前運(yùn)行列表是一種該調(diào)度程序能夠假設(shè)該硬件當(dāng)前正在運(yùn)行的設(shè)備環(huán)境的列表,而待處理的運(yùn)行列表是一種調(diào)度程序想讓該硬件從一個(gè)運(yùn)行列表變換到另一個(gè)運(yùn)行列表時(shí)使用的待處理的性運(yùn)行列表。當(dāng)調(diào)度程序想要變化到一個(gè)新的運(yùn)行列表時(shí),它就創(chuàng)建一種待處理的性運(yùn)行列表,并且要求該協(xié)處理器向它進(jìn)行轉(zhuǎn)換。一旦該調(diào)度程序接收來(lái)自該協(xié)處理器(通過(guò)一中斷)已經(jīng)開(kāi)始運(yùn)行該新的運(yùn)行列表的確認(rèn),該待處理的性運(yùn)行列表就變成該新的當(dāng)前運(yùn)行列表,并且會(huì)清空該待處理的性運(yùn)行列表。當(dāng)該待處理的性運(yùn)行列表是空的時(shí),該硬件可以運(yùn)行該當(dāng)前運(yùn)行列表中的一個(gè)設(shè)備環(huán)境或者它可以是空閑的。當(dāng)該待處理的性運(yùn)行列表不是空的時(shí),該調(diào)度程序也許就不知道該硬件當(dāng)前正在運(yùn)行的是哪個(gè)運(yùn)行列表,直到它從發(fā)生轉(zhuǎn)移的協(xié)處理器中接收到確認(rèn)。某些事件可以要求該調(diào)度程序把該運(yùn)行列表重新列為優(yōu)先。例如,一個(gè)頁(yè)面故障可能解決了使高優(yōu)先權(quán)協(xié)處理器設(shè)備環(huán)境準(zhǔn)備運(yùn)行的問(wèn)題。為了簡(jiǎn)化這種事件的同步,該調(diào)度程序可以遵循的一般規(guī)則是只有當(dāng)不存在一個(gè)之前的事件所提交的待處理的性運(yùn)行列表的時(shí)候,才會(huì)提交一個(gè)新的運(yùn)行列表(待處理的性運(yùn)行列表)。試著把一個(gè)待處理的性列表用另一個(gè)替換可能很難同步,因?yàn)樵摿斜硪呀?jīng)給予了協(xié)處理器,因此在任何時(shí)候都可能發(fā)生該轉(zhuǎn)移,并且只有在這個(gè)事實(shí)發(fā)生之后才會(huì)通知給調(diào)度程序。在后一種情況下,該運(yùn)行列表的重新列為優(yōu)先可能會(huì)委托給該設(shè)備環(huán)境轉(zhuǎn)換處理機(jī)。在將來(lái)的某個(gè)時(shí)候,可能接著要求該處理機(jī)從該待處理的性列表向運(yùn)行列表發(fā)送該轉(zhuǎn)移信號(hào),并且那時(shí),該處理機(jī)可以產(chǎn)生一個(gè)新的運(yùn)行列表,以便如果已經(jīng)改變了該優(yōu)先權(quán),則把新的運(yùn)行列表發(fā)送給該硬件。運(yùn)行列表轉(zhuǎn)換同步。在一個(gè)運(yùn)行列表模型中,當(dāng)該圖形硬件轉(zhuǎn)換設(shè)備環(huán)境時(shí),它會(huì)產(chǎn)生一個(gè)中斷。因?yàn)橹袛鄠魉秃吞幚聿皇撬矔r(shí)的,所以可能在CPU實(shí)際上已經(jīng)中斷之前就會(huì)產(chǎn)生多個(gè)中斷。如果不進(jìn)行適當(dāng)?shù)赝?,該調(diào)度程序就會(huì)被攪亂并且做出不正確的調(diào)度決定。該調(diào)度程序會(huì)把注意力放在辨別上的兩個(gè)關(guān)鍵事件是第一,當(dāng)協(xié)處理器進(jìn)行了轉(zhuǎn)換而離開(kāi)運(yùn)行列表的頭部的時(shí)候,以及第二,當(dāng)協(xié)處理器變化到該待處理的性運(yùn)行列表的時(shí)候。只采用來(lái)自各設(shè)備環(huán)境轉(zhuǎn)換上的簡(jiǎn)單的中斷的信息,在這些事件之間進(jìn)行辨別(differentiating)可能很困難。為了進(jìn)一步說(shuō)明這一點(diǎn),要考慮以下例子該協(xié)處理器當(dāng)前正在運(yùn)行的運(yùn)行列表A,其中該運(yùn)行列表A由設(shè)備環(huán)境1-3-5-2組成,并且該調(diào)度程序想要變?yōu)檫\(yùn)行列表B,其中該運(yùn)行列表B由設(shè)備環(huán)境4-1-3-2組成。下面是兩種可能發(fā)生的情形情形#1協(xié)處理器當(dāng)前正在執(zhí)行運(yùn)行列表A(1-3-5-2)。提交看關(guān)設(shè)備環(huán)境4的命令,其中,該設(shè)備環(huán)境4是空閑的并且比設(shè)備環(huán)境1的優(yōu)先權(quán)高。生成運(yùn)行列表B(4-1-3-2)并且該調(diào)度程序把運(yùn)行列表B提交給協(xié)處理器。運(yùn)行設(shè)備環(huán)境#1直到協(xié)處理器從運(yùn)行列表B中轉(zhuǎn)移到設(shè)備環(huán)境#4。協(xié)處理器產(chǎn)生一個(gè)中斷,發(fā)出轉(zhuǎn)移的信號(hào)。協(xié)處理器從設(shè)備環(huán)境#4向#1轉(zhuǎn)移,然后在中斷CPU之前轉(zhuǎn)移到#3。中斷CPU,并且調(diào)用該設(shè)備環(huán)境轉(zhuǎn)換處理機(jī)。一個(gè)驅(qū)動(dòng)器對(duì)當(dāng)前協(xié)處理器設(shè)備環(huán)境進(jìn)行取樣,該設(shè)備環(huán)境是#3。情形#2協(xié)處理器當(dāng)前正在執(zhí)行運(yùn)行列表A(1-3-5-2)。提交有關(guān)設(shè)備環(huán)境4的命令,其中,該設(shè)備環(huán)境4是空閑的并且比設(shè)備環(huán)境1的優(yōu)先權(quán)高。調(diào)度程序把運(yùn)行列表B提交給協(xié)處理器。當(dāng)調(diào)度程序正忙于創(chuàng)建運(yùn)行列表B的時(shí)候,協(xié)處理器轉(zhuǎn)移到設(shè)備環(huán)境#3。協(xié)處理器產(chǎn)生一個(gè)中斷,向設(shè)備環(huán)境#3發(fā)出轉(zhuǎn)移的信號(hào)。中斷CPU,并且調(diào)用該設(shè)備環(huán)境轉(zhuǎn)換處理機(jī)。一個(gè)驅(qū)動(dòng)器對(duì)當(dāng)前協(xié)處理器設(shè)備環(huán)境進(jìn)行取樣,該設(shè)備環(huán)境是#3。在兩種情況下,在設(shè)備環(huán)境轉(zhuǎn)換中斷的時(shí)候當(dāng)前運(yùn)行的設(shè)備環(huán)境都是#3。然而,注意,沒(méi)有附加信息的情況下,調(diào)度程序是不能辨別兩種情形的。在第一種情形中,協(xié)處理器進(jìn)行轉(zhuǎn)換而離開(kāi)了運(yùn)行列表B的頭部,并且因此調(diào)度程序就需要生成運(yùn)行列表C,還要求該協(xié)處理器變換到運(yùn)行列表C。然而,在第二種情形中,該第二運(yùn)行列表甚至還沒(méi)有啟動(dòng),并且因此調(diào)度程序只能等待。上面的例子示出了單獨(dú)的設(shè)備環(huán)境轉(zhuǎn)換中斷也許不足以完全地支持調(diào)度模型中的運(yùn)行列表。需要有一些更多的信息來(lái)辨別這兩種情形。接下來(lái)的情形詳述了某些方式,這個(gè)問(wèn)題可以沿著硬件支持的方向進(jìn)行尋址,該硬件支持在這樣的問(wèn)題的尋址中是有用的。雙元素運(yùn)行列表。這種同步方法要求協(xié)處理器支持某些附加特征。能夠結(jié)合雙元素運(yùn)行列表的實(shí)現(xiàn)得以支持的這些特征如下1)一個(gè)雙元素的運(yùn)行列表。2)能夠在各設(shè)備環(huán)境轉(zhuǎn)換時(shí)產(chǎn)生一個(gè)中斷(包括從設(shè)備環(huán)境X到X的假的設(shè)備環(huán)境轉(zhuǎn)換)。3)用于VidMm的一種方式,在任意時(shí)刻查詢當(dāng)前正在運(yùn)行的協(xié)處理器設(shè)備環(huán)境。4)中斷之前把輸出的(outgoing)的協(xié)處理器設(shè)備環(huán)境保存在存儲(chǔ)器中。5)以一種方式保存協(xié)處理器設(shè)備環(huán)境,該方式是設(shè)備環(huán)境對(duì)于CPU是可讀的,從而允許調(diào)度程序在設(shè)備環(huán)境轉(zhuǎn)換之后確定該原因。注意,盡管硬件可以用于支持以上功能,但這種特定的硬件沒(méi)必要允許調(diào)度程序辨別常規(guī)的設(shè)備環(huán)境轉(zhuǎn)換和運(yùn)行列表轉(zhuǎn)換。相反,當(dāng)構(gòu)造一個(gè)運(yùn)行列表時(shí),通過(guò)總是遵守一套簡(jiǎn)單的規(guī)則,調(diào)度程序可以辨別那兩種事件之間的區(qū)別。盡管該特定的規(guī)則可以針對(duì)本發(fā)明的不同實(shí)施例變化,但提供這種功能的示例性規(guī)則是第一,當(dāng)前運(yùn)行列表的第一設(shè)備環(huán)境不會(huì)出現(xiàn)在新的待處理的性運(yùn)行列表中,以及第二,如果當(dāng)前運(yùn)行列表的第二設(shè)備環(huán)境不是新的待處理的性運(yùn)行列表的頭部,它必然根本不在該新的待處理的性運(yùn)行列表中。下面是一種假設(shè)的表格,當(dāng)遵循這兩條示例性規(guī)則時(shí),該調(diào)度程序可以在從一個(gè)設(shè)備環(huán)境向另一個(gè)設(shè)備環(huán)境轉(zhuǎn)移的過(guò)程中做出這種假設(shè)。在以下表格中,運(yùn)行列表A是由設(shè)備環(huán)境1-2組成的;第二運(yùn)行列表B是由設(shè)備環(huán)境2-3組成的;以及第三運(yùn)行列表C是由設(shè)備環(huán)境3-4組成的。實(shí)現(xiàn)運(yùn)行列表的這種方法可能是最簡(jiǎn)單的,并且不必要求有效的附加硬件支持。然而,注意,以上表格中的這些列表在尺寸上進(jìn)行了限定(超過(guò)兩個(gè)的尺寸的擴(kuò)展是不切實(shí)際的),并且某些信息,不是關(guān)鍵性的,可能在設(shè)備環(huán)境轉(zhuǎn)換的過(guò)程中丟失。例如,該調(diào)度程序不會(huì)總是知道從A向C的轉(zhuǎn)移中設(shè)備環(huán)境#2是否曾經(jīng)運(yùn)行過(guò)。其可能已經(jīng)被執(zhí)行,導(dǎo)致一個(gè)頁(yè)面故障,但是也將其中斷隱藏,由其他環(huán)境轉(zhuǎn)換。在那種情況下,該調(diào)度程序就不可能知道它曾經(jīng)發(fā)生過(guò)故障,更不會(huì)重新調(diào)度它。調(diào)度事件的協(xié)處理器軌跡。當(dāng)硬件事件調(diào)度的某些歷史信息提供給該調(diào)度程序的時(shí)候,該運(yùn)行列表可以很容易地?cái)U(kuò)展到尺寸N。采用單一中斷的一個(gè)問(wèn)題是多個(gè)中斷可能會(huì)擠在一起,并且它也許不可能精確地確定發(fā)生了什么引起了一中斷。結(jié)合本發(fā)明的方法,依照硬件特征,這是可以尋址的。通過(guò)實(shí)現(xiàn)硬件,可以把一個(gè)設(shè)備環(huán)境轉(zhuǎn)換歷史寫(xiě)到調(diào)度程序可讀的特定的系統(tǒng)存儲(chǔ)器位置上。為了解釋本發(fā)明的這個(gè)方面,考慮以下情形1)該調(diào)度程序調(diào)用運(yùn)行列表A(1-2-3-4-5)。2)針對(duì)設(shè)備環(huán)境#1,時(shí)間量到期,并且該調(diào)度程序發(fā)送新的運(yùn)行列表B(2-3-4-5-1)。3)當(dāng)在CPU上處理該量到期時(shí),協(xié)處理器完成設(shè)備環(huán)境#1,因?yàn)樗兂闪丝盏?,并且因此轉(zhuǎn)移到設(shè)備環(huán)境#2。由于這一事件,該協(xié)處理器產(chǎn)生一設(shè)備環(huán)境轉(zhuǎn)換。4)協(xié)處理器從CPU中接收有關(guān)新的運(yùn)行列表的通知,并且因此向它轉(zhuǎn)移。由于這個(gè)事件,協(xié)處理器產(chǎn)生一個(gè)設(shè)備環(huán)境轉(zhuǎn)換中斷。5)當(dāng)處理新的運(yùn)行列表的設(shè)備環(huán)境#2中的再現(xiàn)命令時(shí),協(xié)處理器遇到一種頁(yè)面故障,并且因此轉(zhuǎn)換到設(shè)備環(huán)境#3。由于這個(gè)事件,該協(xié)處理器產(chǎn)生了一個(gè)設(shè)備環(huán)境轉(zhuǎn)換中斷。6)設(shè)備環(huán)境立刻碰到頁(yè)面故障,并且因此協(xié)處理器轉(zhuǎn)換到設(shè)備環(huán)境#4。由于這個(gè)事件,該協(xié)處理器產(chǎn)生了一個(gè)設(shè)備環(huán)境轉(zhuǎn)換中斷。7)最后,為了設(shè)備環(huán)境轉(zhuǎn)換而中斷了CPU。實(shí)際上,四個(gè)設(shè)備環(huán)境轉(zhuǎn)換都是因?yàn)橐l(fā)了初始中斷而發(fā)生的。圖19說(shuō)明了以上情形中的硬件歷史裝置的操作。為了支持這種歷史裝置,該硬件可以構(gòu)造為能夠執(zhí)行下面的任務(wù)。以示例而非限定的方式提供這些任務(wù)1)為該歷史緩沖器指定一個(gè)基地址??赡艽嬖谝粋€(gè)單獨(dú)的歷史緩沖器通用協(xié)處理器。在優(yōu)選實(shí)施例中,它可能是PCI或AGP存儲(chǔ)器之一中的系統(tǒng)存儲(chǔ)器位置。這可以由該操作系統(tǒng)列在一4KB范圍上。對(duì)于PCI快速存儲(chǔ)器,更可取的是,對(duì)這個(gè)緩沖器的訪問(wèn)可以用一個(gè)探聽(tīng)周期來(lái)實(shí)現(xiàn),以便該系統(tǒng)存儲(chǔ)器緩沖器能夠高速地緩存從而進(jìn)行更有效地CPU讀取。2)指定該歷史緩沖器的大小。該歷史緩沖器可以至少是運(yùn)行列表的大小的兩倍。這是為了確保該緩沖器中有足夠的空間,以便處理最壞的情況的情形,該情形是當(dāng)前運(yùn)行列表和待處理的性運(yùn)行列表兩個(gè)都在中斷發(fā)生之前就已經(jīng)完成了。3)指定協(xié)處理器寫(xiě)指針,該指針可以是一個(gè)把要寫(xiě)的最終事件立即傳給歷史緩沖器的地址。VidMm也許可以在任何時(shí)候查詢這個(gè)指針,包括在協(xié)處理器正在運(yùn)行的時(shí)候。在更新該指針以便確信該調(diào)度程序已經(jīng)獲取了相關(guān)數(shù)據(jù)之前,該歷史緩沖器中的數(shù)據(jù)可以適當(dāng)?shù)厮⑿麓鎯?chǔ)器。多種實(shí)施例都可以構(gòu)造該歷史緩沖器,以便它對(duì)于DMA緩沖器是不可見(jiàn)的,這些實(shí)施例都是以用戶模式來(lái)創(chuàng)建的。如果歷史緩沖器對(duì)于限定的DMA緩沖器是可見(jiàn)的,那么惡意的應(yīng)用程序就會(huì)寫(xiě)到歷史緩沖器中、破壞該調(diào)度程序并且可能導(dǎo)致系統(tǒng)崩潰或者更壞的情況。為此,這些實(shí)施例中的歷史緩沖器可能由硬件通過(guò)一個(gè)物理地址或者通過(guò)虛擬地址來(lái)訪問(wèn),該虛擬地址只對(duì)有特權(quán)的DMA緩沖器才是可見(jiàn)的。在這些實(shí)施例中,要求協(xié)處理器在歷史緩沖器的尾部進(jìn)行偏移而不需要CPU的干預(yù)。注意,根據(jù)馬上要描述的實(shí)施例的運(yùn)行列表解決不了用于協(xié)處理器的所有需求,從而由于相同的原因在相同的設(shè)備環(huán)境上會(huì)發(fā)生多次故障。對(duì)此,一個(gè)原因是該調(diào)度程序通常會(huì)創(chuàng)建一個(gè)新的運(yùn)行列表而協(xié)處理器則忙于執(zhí)行當(dāng)前的運(yùn)行列表。因?yàn)檎{(diào)度程序也許需要包括新的運(yùn)行列表中的已經(jīng)出現(xiàn)在之前的運(yùn)行列表中的設(shè)備環(huán)境,所以在其提交正構(gòu)造的運(yùn)行列表的時(shí)候和該運(yùn)行列表被提交給該協(xié)處理其的時(shí)候中間,改變重復(fù)的設(shè)備環(huán)境的狀態(tài)成為可能。限定的對(duì)有特權(quán)的DMA隨著改進(jìn)的調(diào)度模型中存儲(chǔ)器保護(hù)的引入,發(fā)送給協(xié)處理器的DMA緩沖器可以主要是由該運(yùn)行應(yīng)用程序的處理中的用戶模式驅(qū)動(dòng)器來(lái)創(chuàng)建。這些DMA緩沖器可以映射到該應(yīng)用程序的處理中,該用戶模式驅(qū)動(dòng)器能夠直接寫(xiě)至其上,并且該內(nèi)核驅(qū)動(dòng)器不能使它們等效。DMA緩沖器可以由該應(yīng)用程序亂寫(xiě)附帶地訪問(wèn)它們的虛擬地址,或者是一個(gè)惡意的應(yīng)用程序故意亂寫(xiě)的。為了允許該驅(qū)動(dòng)器模型保證安全,即不允許應(yīng)用程序訪問(wèn)它不該訪問(wèn)的資源,以用戶模式創(chuàng)建的DMA緩沖器會(huì)限定它們?cè)试S做什么。特別的,創(chuàng)建的DMA緩沖器可能以下面示例性方式限定功能性1)它們可能只包含對(duì)虛擬地址的索引,根本沒(méi)有對(duì)物理地址的索引(包括電子籬笆)。2)它們可能不允許包含會(huì)影響當(dāng)前顯示(例如CRT、任意訪問(wèn)控制(DAC)、技術(shù)文件管理系統(tǒng)(TDMS)、電視輸出口(TV-OUT)、互聯(lián)網(wǎng)2(I2C))總線的指令。3)它們可能不包含通常會(huì)影響該適配器(例如鎖相環(huán)路(PLL))的指令。4)它們可能限定動(dòng)力管理和/或配置空間。5)它們可能不允許包含會(huì)妨礙設(shè)備環(huán)境轉(zhuǎn)換的指令。正確的一組寄存器將可能從硬件向硬件變化,其中這組寄存器能夠以用戶模式創(chuàng)建的DMA緩沖器中編程。然而,不管硬件如何,寄存器都會(huì)遵循一種常用規(guī)則,也就是這樣的一個(gè)DMA緩沖器應(yīng)當(dāng)只允許利用虛擬地址訪問(wèn)資源和電子籬笆的操作。為了提高增強(qiáng)的安全性,可能要求這樣的DMA緩沖器不允許應(yīng)用程序使用該應(yīng)用程序不該訪問(wèn)的存儲(chǔ)器,否則可能以某種災(zāi)難性的并且不可還原性的方式影響該硬件。為了防止以用戶模式創(chuàng)建的DMA緩沖器訪問(wèn)某種功能,可以在協(xié)處理器中執(zhí)行多種方法。這些方法可以根據(jù)功能性的自然性和該功能性是否需要在應(yīng)用程序的協(xié)處理器設(shè)備環(huán)境流中進(jìn)行查詢而變化。某些有特權(quán)的操作通常需要在協(xié)處理器設(shè)備環(huán)境流中進(jìn)行查詢,該協(xié)處理器設(shè)備環(huán)境流包含以用戶模式(例如應(yīng)用程序再現(xiàn))創(chuàng)建的DMA緩沖器和以內(nèi)核模式(例如查詢的觸發(fā))創(chuàng)建的有特權(quán)的DMA緩沖器。不需要查詢的功能性。大多有特權(quán)的功能性都不需要在應(yīng)用程序的協(xié)處理器設(shè)備環(huán)境流中進(jìn)行查詢。例如下面的功能性就不需要查詢1)對(duì)CRT計(jì)時(shí)進(jìn)行編程。2)更新用于該DAC的查詢表(注意,不是絕對(duì)要求對(duì)DACLUT進(jìn)行編程從而作為有特權(quán)的功能性,因?yàn)槿魏螒?yīng)用程序都能再現(xiàn)為它想要的任何方式的主要的屏幕,并且對(duì)查詢表(LUT)重新編程將會(huì)不允許應(yīng)用程序給予用戶訪問(wèn),從而告知它還是不能訪問(wèn))。3)對(duì)顯示輸出(TDMS,TV-0UT,…)進(jìn)行編程4)與子設(shè)備/子監(jiān)視器(I2C,…)進(jìn)行通信5)對(duì)時(shí)鐘(PLL)進(jìn)行編程6)改變協(xié)處理器的功率狀態(tài)7)構(gòu)造該協(xié)處理器(構(gòu)造空間,基本輸入輸出系統(tǒng)bios,…)這種功能性通常需要遵循一種系統(tǒng)事件,該系統(tǒng)事件是完全獨(dú)立于應(yīng)用程序再現(xiàn)流的。(例如引導(dǎo)程序、方法變換、Pnp檢測(cè)、動(dòng)力管理。)照這樣,這種功能性就不需要在特定的應(yīng)用程序協(xié)處理器設(shè)備環(huán)境中進(jìn)行查詢。當(dāng)發(fā)生該特定的系統(tǒng)事件而沒(méi)有來(lái)自用戶模式驅(qū)動(dòng)器的任何干擾的時(shí)候,這種功能性可供內(nèi)核模式驅(qū)動(dòng)器本身使用。對(duì)于這種功能性,僅通過(guò)存儲(chǔ)器映射輸入輸出(MMIO),IHV就能夠決定使得所有底層寄存器都是可讀的。因?yàn)榧拇嫫魍ǔV皇怯成涞絻?nèi)核空間中,所以對(duì)于應(yīng)用程序或者用戶模式驅(qū)動(dòng)器,也許不能訪問(wèn)它們,并且因此,該功能性得以有效地保護(hù)。另一種方法可能是實(shí)現(xiàn)通用協(xié)處理器設(shè)備環(huán)境特權(quán)級(jí)。采用這種方法,某些設(shè)備環(huán)境就會(huì)限定它們可以做什么而其它的就不能做。在那種情形下,以用戶模式創(chuàng)建的應(yīng)用程序設(shè)備環(huán)境就可以排列成一個(gè)限定的設(shè)備環(huán)境。另一方面,該內(nèi)核模式驅(qū)動(dòng)器可能使用有特權(quán)的設(shè)備環(huán)境從而提交該有特權(quán)的功能性。需要查詢的功能性。因?yàn)橄薅四軌虿迦氲揭杂脩裟J絼?chuàng)建的DMA緩沖器中的命令,所以能夠?qū)崿F(xiàn)該改進(jìn)模型,從而要求協(xié)處理器支持限定的DMA緩沖器(這是遵守之前的條件的DMA緩沖器)和有特權(quán)的DMA緩沖器。為了允許沿著協(xié)處理器設(shè)備環(huán)境的再現(xiàn)流對(duì)有特權(quán)的功能性進(jìn)行查詢,就需要有特權(quán)的DMA緩沖器。有特權(quán)的DMA緩沖器可包含沒(méi)有特權(quán)的DMA緩沖器中找到的任何指令。本發(fā)明的多種優(yōu)選實(shí)施例都可以實(shí)現(xiàn)有特權(quán)的DMA緩沖器,至少對(duì)下面的內(nèi)容是允許的(后面部分中將作進(jìn)一步詳細(xì)的解釋)1)有特權(quán)的電子籬笆的插入2)觸發(fā)指令的插入3)“非設(shè)備環(huán)境轉(zhuǎn)換”區(qū)域的插入還有,有特權(quán)的DMA緩沖器能夠?qū)HV想要的任何硬件寄存器進(jìn)行編程,并且如果需要的話對(duì)虛擬和物理存儲(chǔ)器兩個(gè)都能進(jìn)行訪問(wèn)。有特權(quán)的DMA緩沖器也許不是以用戶模式構(gòu)造或可見(jiàn)的。只有委托的內(nèi)核部件能夠訪問(wèn)和創(chuàng)建有特權(quán)的DMA緩沖器。下面的部分表示了實(shí)現(xiàn)有特權(quán)的DMA緩沖器的三種可行的方式,并且想闡明有特權(quán)的DMA緩沖器的實(shí)現(xiàn)的概念而不是限定本發(fā)明可以實(shí)現(xiàn)的不同方式1.僅以內(nèi)核模式創(chuàng)建DMA緩沖器支持不要求任何特定的硬件支持的有特權(quán)的DMA緩沖器的一種方式是要求發(fā)送給該硬件的實(shí)際的DMA緩沖器以內(nèi)核模式來(lái)創(chuàng)建。在那種情形下,該用戶模式驅(qū)動(dòng)器會(huì)創(chuàng)建一個(gè)命令緩沖器并且將它提交給內(nèi)核模式驅(qū)動(dòng)器,其中該命令緩沖器非常類似一種DMA緩沖器。該內(nèi)核模式驅(qū)動(dòng)器會(huì)確認(rèn)這個(gè)命令緩沖器并且將這個(gè)命令緩沖器復(fù)制到只以內(nèi)核模式可見(jiàn)的DMA緩沖器中。在確認(rèn)的過(guò)程中,該內(nèi)核模式驅(qū)動(dòng)器會(huì)檢驗(yàn)不存在有特權(quán)的指令。這就類似于該確認(rèn),它是基本模型要求的但不要求對(duì)存儲(chǔ)器訪問(wèn)的確認(rèn),因?yàn)榇鎯?chǔ)器是虛擬化的。2.把有特權(quán)的命令直接插到該環(huán)中或許,最簡(jiǎn)單的支持有特權(quán)的DMA通道的硬件方法是直接把有特權(quán)的命令插入到協(xié)處理器設(shè)備環(huán)境的環(huán)中。該環(huán)本身總是一個(gè)有特權(quán)的通道,僅對(duì)內(nèi)核模式是可見(jiàn)的。這在圖20的框圖中進(jìn)行了描述。3.間接指定特權(quán)圖21中說(shuō)明了一種支持協(xié)處理器中的限定的對(duì)有特權(quán)的DMA緩沖器的不同的方法。參照那個(gè)圖,注意,該起始和結(jié)束地址都以DWORD來(lái)定位??梢灾貜?fù)利用該地址中不用的位來(lái)規(guī)定標(biāo)記。該起始地址的第一位可以規(guī)定重新定位的DMA緩沖器是一個(gè)有特權(quán)的DMA緩沖器。為了增強(qiáng)安全性,有特權(quán)的DMA緩沖器可以訪問(wèn)輔助存儲(chǔ)器中的物理地址。限定的DMA緩沖器可以訪問(wèn)協(xié)處理器設(shè)備環(huán)境虛擬地址空間中的虛擬地址。在這種方法中,間接命令中的一位可以插入到該環(huán)形緩沖器中。該位指示正在執(zhí)行的DMA緩沖器是不是一個(gè)有特權(quán)的DMA緩沖器。這就意味著該環(huán)形緩沖器本身可以由協(xié)處理器利用一個(gè)物理地址來(lái)訪問(wèn),并且在協(xié)處理器虛擬地址空間中可以是不可見(jiàn)的。允許該主要的環(huán)形緩沖器在協(xié)處理器虛擬地址空間中是可見(jiàn)的就會(huì)允許一個(gè)惡意的應(yīng)用程序?qū)懙街饕沫h(huán)形緩沖器上,并且允許它在有特權(quán)的級(jí)別上運(yùn)行命令,這就相當(dāng)于是在大多數(shù)計(jì)算環(huán)境中的安全性破壞。在這方面,有特權(quán)的DMA緩沖器會(huì)通過(guò)一個(gè)物理地址而不是象限定的DMA緩沖器那樣的虛擬地址來(lái)訪問(wèn)。DMA控制指令為了該調(diào)度程序和輔助存儲(chǔ)器管理器跟蹤任何協(xié)處理器設(shè)備環(huán)境的級(jí)數(shù)并且控制那個(gè)設(shè)備環(huán)境的DMA流中的指令的流程,該協(xié)處理器可以構(gòu)造為支持其DMA流中的以下示例性指令1)電子籬笆(限定的和有特權(quán)的兩者)2)陷阱3)能夠/不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換電子籬笆。一個(gè)電子籬笆可能是包含一塊數(shù)據(jù)(例如64位塊的數(shù)據(jù))和一個(gè)能夠插入到DMA緩沖器中的地址兩部分的指令。當(dāng)協(xié)處理器從該流中讀取指令時(shí),它會(huì)致使協(xié)處理器把有關(guān)該電子籬笆的數(shù)據(jù)塊寫(xiě)到指定的地址上。協(xié)處理器可能把電子籬笆的數(shù)據(jù)寫(xiě)到存儲(chǔ)器中之前,它必須確信來(lái)自原語(yǔ)的位與電子籬笆指令之前的元素已經(jīng)收回并且已經(jīng)適當(dāng)?shù)貙?xiě)入了存儲(chǔ)器中。注意,這并不意味著協(xié)處理器需要阻塞整個(gè)流水線。當(dāng)協(xié)處理器正在等待收回電子籬笆之前該指令的最后元素的時(shí)候,可以執(zhí)行遵循該電子籬笆指令的原語(yǔ)。當(dāng)符合以上描述的任何電子籬笆可以結(jié)合本發(fā)明來(lái)使用的時(shí)候,特別的,兩種類型的電子籬笆在此將作進(jìn)一步的描述常規(guī)電子籬笆和有特權(quán)的電子籬笆。常規(guī)電子籬笆是能夠插入到以用戶模式驅(qū)動(dòng)器建立的DMA緩沖器中的電子籬笆。因?yàn)镈MA緩沖器的內(nèi)容來(lái)自用戶模式,所以是不可信的。因此,這種DMA緩沖器中的電子籬笆就能夠訪問(wèn)那個(gè)協(xié)處理器設(shè)備環(huán)境的地址空間中的虛擬地址而不是物理地址。不用說(shuō),是通過(guò)與由該協(xié)處理訪問(wèn)的任意其他虛擬地址相同的存儲(chǔ)器確認(rèn)裝置來(lái)限制對(duì)這樣的虛擬地址的訪問(wèn)。有特權(quán)的電子籬笆是能夠只是插入到(并且只是可見(jiàn)的)以內(nèi)核模式創(chuàng)建的DMA緩沖器中。這樣的電子籬笆能夠訪問(wèn)存儲(chǔ)器中的物理地址從而增強(qiáng)系統(tǒng)的安全性。如果該電子籬笆目標(biāo)地址在協(xié)處理器設(shè)備環(huán)境的地址空間中是可見(jiàn)的,那么惡意的應(yīng)用程序就會(huì)在那個(gè)存儲(chǔ)器的地址上進(jìn)行圖形操作,這樣就不顧內(nèi)核模式代碼期望接收什么樣的內(nèi)容。解決潛在的安全問(wèn)題的另一種方法是在PTE中具有一個(gè)有特權(quán)的位來(lái)表示虛擬地址能否從沒(méi)有特權(quán)的DMA緩沖器中進(jìn)行存取。然而,以上的第一種方法看作是對(duì)早先的硬件產(chǎn)生的簡(jiǎn)化。注意,有特權(quán)的DMA緩沖器可包含常規(guī)的和有特權(quán)的電子籬笆兩者。然而,當(dāng)有特權(quán)的DMA緩沖器包含一個(gè)常規(guī)的電子籬笆時(shí),該內(nèi)核部件就知道所產(chǎn)生的DMA緩沖器可能從來(lái)都是不可見(jiàn)的,其中該DMA緩沖器是該電子籬笆插入的DMA緩沖器。為了將刷新所需的內(nèi)部緩沖器的數(shù)量減到最小,IHV可以決定支持額外類型的電子籬笆。以下類型的電子籬笆是為了此目的可以支持的電子籬笆的例子(注意,對(duì)于任何類型,都應(yīng)該是支持有特權(quán)的和沒(méi)有特權(quán)的兩者的)1)寫(xiě)電子籬笆一個(gè)寫(xiě)電子籬笆可以是之前所述的類型的電子籬笆,并且只是所需類型的電子籬笆。一個(gè)寫(xiě)電子籬笆保證所有的存儲(chǔ)器在處理電子籬笆的指令之前都已經(jīng)寫(xiě)過(guò)了,這些存儲(chǔ)器是全局可見(jiàn)的(即它們已經(jīng)刷到高速緩存器的外面,并且已經(jīng)從存儲(chǔ)器控制器處接收了收到通知)。2)讀電子籬笆讀電子籬笆是一種類似于寫(xiě)電子籬笆的更不重要的類型的電子籬笆。讀電子籬笆保證所有的存儲(chǔ)器在完成該電子籬笆之前都為再現(xiàn)操作而進(jìn)行了讀取,但某些讀取可能還沒(méi)有完成。如果支持讀電子籬笆,那么調(diào)度程序就會(huì)用它們控制非再現(xiàn)目標(biāo)位置的使用壽命。3)管道頂部電子籬笆管道頂部電子籬笆是一種非常不重要的電子籬笆。對(duì)管道頂部電子籬笆的支持是可選的。管道頂部電子籬笆只保證DMA緩沖器中的電子籬笆指令之前的最后類型由協(xié)處理器來(lái)讀取(但也不是必然要處理)。在已經(jīng)處理了那個(gè)電子籬笆之后(因?yàn)槟莻€(gè)DMA緩沖器的內(nèi)容可能不再有效了),電子籬笆該協(xié)處理器也許不能重復(fù)讀取位于管道頂部電子籬笆之前的DMA緩沖器的任何部分。如果支持,那么這種類型的電子籬笆就供該調(diào)度程序使用,從而控制DMA緩沖器的使用壽命。陷阱。一個(gè)陷阱可以在本發(fā)明的不同實(shí)施例中實(shí)現(xiàn)。陷阱可以是插入到DMA緩沖器中的一個(gè)指令,當(dāng)協(xié)處理器處理它的時(shí)候,能夠產(chǎn)生CPU的中斷。在協(xié)處理器能夠中斷CPU之前,它是可以確信來(lái)自該陷阱指令之前的原語(yǔ)的所有元素都已經(jīng)收回并且適當(dāng)?shù)貙?xiě)入了存儲(chǔ)器中(一個(gè)可以包括來(lái)自電子籬笆指令的存儲(chǔ)器寫(xiě)入操作)。注意,這并不意味著協(xié)處理器需要阻塞整個(gè)流水線。在協(xié)處理器正等待要收回陷阱之前的指令的最后元素的時(shí)候,可以執(zhí)行遵循該陷阱指令的原語(yǔ)。該陷阱指令不必是有特權(quán)的指令,并且能夠插入到任何DMA緩沖器中,包括那些由用戶模式驅(qū)動(dòng)器直接創(chuàng)建的DMA緩沖器。能夠/不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換。對(duì)于支持下三角形中斷的硬件,能夠提供一指令來(lái)使其能夠或者使其不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換。當(dāng)不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換時(shí),協(xié)處理器通常不會(huì)轉(zhuǎn)換而離開(kāi)當(dāng)前的協(xié)處理器設(shè)備環(huán)境。盡管如果CPU提供了新的運(yùn)行列表就可能要求協(xié)處理器更新其當(dāng)前運(yùn)行列表信息,但是協(xié)處理器可以推遲設(shè)備環(huán)境轉(zhuǎn)換到那個(gè)新的運(yùn)行列表,直到重新能夠進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換。該OS可以缺陷下面的規(guī)則在不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換時(shí)仍然是真的1)將只處理有特權(quán)的DMA緩沖器。2)將沒(méi)有設(shè)備環(huán)境轉(zhuǎn)換指令出現(xiàn)在該DMA流中。3)該DMA緩沖器將不運(yùn)行指令。4)沒(méi)有頁(yè)面故障發(fā)生(如果支持頁(yè)面級(jí)故障的話)。在許多計(jì)算機(jī)系統(tǒng)中,沒(méi)有能力和有能力進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換是可以指出現(xiàn)在有特權(quán)的DMA緩沖器中的有特權(quán)的指令。用于這些指令的使用情形是允許調(diào)度程序調(diào)用出現(xiàn)在屏幕(即顯示blit)上的操作而不是其要中斷的可能性。在這樣的操作中進(jìn)行中斷會(huì)導(dǎo)致在一個(gè)重要的時(shí)間周期中產(chǎn)生在該屏幕上可見(jiàn)的非自然信號(hào)。注意,如果協(xié)處理器在DMA緩沖器中遭遇不可預(yù)見(jiàn)的誤差,它就會(huì)進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換而離開(kāi)這個(gè)DMA緩沖器,盡管不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換。因?yàn)橹挥幸詢?nèi)核模式創(chuàng)建的DMA緩沖器可以包含不可中斷的部分,所以不可預(yù)見(jiàn)的誤差就可能是驅(qū)動(dòng)器程序錯(cuò)誤或者硬件程序錯(cuò)誤的結(jié)果。如果協(xié)處理器不在那些情形下進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換,那么顯示監(jiān)視器就會(huì)進(jìn)行掛起并且為了恢復(fù)系統(tǒng)而復(fù)位該協(xié)處理器。可選的控制指令。盡管調(diào)度程序能夠采用上述簡(jiǎn)單的控制指令創(chuàng)建高級(jí)的同步原語(yǔ),但該結(jié)果可以變得更加有效。在許多計(jì)算機(jī)系統(tǒng)中,協(xié)處理器設(shè)備環(huán)境都是在它能夠擁有同步目標(biāo)程序的所有權(quán)之前由CPU進(jìn)行中斷。如果正擁有同步目標(biāo)程序并且以高頻釋放,那么這就變成有問(wèn)題的了。為了具有更有效的同步原語(yǔ),調(diào)度程序可以從協(xié)處理器中接收特定的指令。尤其是,協(xié)處理器可以構(gòu)造為在適當(dāng)?shù)臅r(shí)候發(fā)出一個(gè)“等待”指令和一個(gè)“信號(hào)”指令。把一個(gè)等待指令插入到DMA緩沖器中,從而通知協(xié)處理器它可以檢查特定計(jì)數(shù)器的值。如果該計(jì)數(shù)器是非零的,則協(xié)處理器就能夠減少該計(jì)數(shù)器并且繼續(xù)運(yùn)行當(dāng)前的協(xié)處理器設(shè)備環(huán)境。如果該計(jì)數(shù)器是零,那么該協(xié)處理器就能夠在該等待指令之前復(fù)位當(dāng)前協(xié)處理器設(shè)備環(huán)境的指令指針并且轉(zhuǎn)換到該運(yùn)行列表的下一個(gè)設(shè)備環(huán)境。當(dāng)一個(gè)協(xié)處理器設(shè)備環(huán)境需要在一個(gè)等待指令上阻塞并且之后再重新調(diào)度時(shí),協(xié)處理器能夠重新執(zhí)行等待指令,因?yàn)榭赡苓€是不能滿足該等待條件。該等待指令需要只具有一個(gè)參數(shù)虛擬地址,規(guī)定要比較/減少的存儲(chǔ)器位置。該計(jì)數(shù)器可能至少是32位,并且可能是任何有效的虛擬地址。在一個(gè)優(yōu)選實(shí)施例中,該等待指令可以是不可中斷的;也就是說(shuō),如果把一個(gè)新的運(yùn)行列表給了協(xié)處理器,它就能夠在該等待指令之前或者運(yùn)行它之后轉(zhuǎn)換到該新的運(yùn)行列表。等待指令可以插入到限定的和有特權(quán)的兩種DMA緩沖器中。一個(gè)信號(hào)指令可以插入到DMA流中,從而通知協(xié)處理器它能夠更新計(jì)數(shù)器的值。然后,該協(xié)處理器可以把計(jì)數(shù)器的值加1。該協(xié)處理器在加法過(guò)程中忽略了可能發(fā)生的溢出??商鎿Q地,該協(xié)處理器能夠因該流中有錯(cuò)誤而報(bào)告溢出,從而幫助跟蹤軟件調(diào)試故障。該信號(hào)指令只需要具有一個(gè)參數(shù)應(yīng)當(dāng)被更新的計(jì)數(shù)器的虛擬地址。該計(jì)數(shù)器大小可以做得與該等待指令的計(jì)數(shù)器大小相匹配,并且在一個(gè)優(yōu)選實(shí)施例中,至少是32位。信號(hào)指令可以插入到限定的和有特權(quán)的兩種DMA緩沖器中。觸發(fā)為了允許所有的屏幕應(yīng)用程序無(wú)縫地運(yùn)行而不用在流水線中冒泡,該協(xié)處理器可能提供一種指令排隊(duì)查詢一個(gè)觸發(fā)(即,顯示的基地址的改變)。該顯示表面通常是從物理存儲(chǔ)器中連續(xù)地進(jìn)行定位并且由CRTC使用物理地址而不是虛擬地址來(lái)進(jìn)行訪問(wèn)。因此,該觸發(fā)指令能夠用于把CRTC編程為一個(gè)要顯示的新的物理地址。因?yàn)檫@是一個(gè)物理地址而非虛擬地址,所以拙劣的應(yīng)用程序就可能偷偷地把CRTC編程為顯示屬于另一個(gè)應(yīng)用程序或用戶的輔助存儲(chǔ)器的一部分(其中包含機(jī)密)。為此,一旦該目標(biāo)是確定的,通過(guò)確信它是僅由內(nèi)核模式驅(qū)動(dòng)器插入到DMA流中的有特權(quán)的指令,該觸發(fā)指令就能夠?qū)崿F(xiàn)保護(hù)大多數(shù)計(jì)算機(jī)系統(tǒng)的安全性。在結(jié)合觸發(fā)功能來(lái)使用的本發(fā)明的多種優(yōu)選實(shí)施例中,能夠支持至少兩種類型的觸發(fā)一種立即觸發(fā)和一種與顯示刷新同步的觸發(fā)。當(dāng)協(xié)處理器處理一個(gè)立即觸發(fā)時(shí),它能夠立即更新顯示的基地址,盡管這樣做可能會(huì)引起可視圖像撕裂。當(dāng)協(xié)處理器處理一個(gè)同步觸發(fā)時(shí),它能夠鎖存一個(gè)新的基地址,但會(huì)使其更新延遲直到下一個(gè)縱向的同步周期。如果一個(gè)以上的同步觸發(fā)由協(xié)處理器在縱向同步周期之間進(jìn)行處理,那么該協(xié)處理器就只會(huì)鎖存最后的一個(gè)并且忽略之前的。當(dāng)處理一個(gè)同步觸發(fā)時(shí),可以構(gòu)造多種實(shí)施例以便協(xié)處理器可以不用阻塞該圖形流水線。該OS將確信并沒(méi)有對(duì)該環(huán)形緩沖器中的任何再現(xiàn)命令進(jìn)行排隊(duì),該環(huán)緩沖器就可能會(huì)接近當(dāng)前可見(jiàn)的表面。在此要注意,按照下面將要進(jìn)一步解釋的“最佳觸發(fā)”的情況下,也可以構(gòu)造其它實(shí)施例而不需要這些要求。為了確定哪個(gè)表面是當(dāng)前可見(jiàn)的,該驅(qū)動(dòng)器也許首先得確定什么時(shí)候一個(gè)特定的排列觸發(fā)已經(jīng)發(fā)生并且把該事件通知調(diào)度程序,即在顯示基地址已經(jīng)改變了以后通知該調(diào)度程序。對(duì)于一個(gè)立即觸發(fā),當(dāng)發(fā)生觸發(fā)的時(shí)候進(jìn)行確定是很容易的,因?yàn)閺腄MA流中讀取該觸發(fā)指令可以看作是與更新顯示表面相同的事件。一個(gè)電子籬笆和一個(gè)中斷都可以插入到DMA流中的觸發(fā)指令的后面,從而通知該調(diào)度程序已經(jīng)讀取了一個(gè)特定的觸發(fā)。在該同步觸發(fā)的情況下,確定哪個(gè)表面是當(dāng)前可見(jiàn)是更困難的。協(xié)處理器將首先從DMA流中讀取該觸發(fā)指令,但之后會(huì)在下一個(gè)vsync中斷處更新該顯示表面。為了取消在那個(gè)過(guò)程中阻塞協(xié)處理器的需要,可以在該顯示表面改變變得有效的時(shí)候提供一種裝置來(lái)通知調(diào)度程序?,F(xiàn)有多種方式用來(lái)設(shè)計(jì)用于這種通知的裝置以供結(jié)合本發(fā)明時(shí)使用。圖22說(shuō)明了一種可能比較簡(jiǎn)單的方法。圖22提供了一種對(duì)協(xié)處理器查詢有關(guān)當(dāng)前顯示表面的方法。在所示實(shí)施例中,這種功能可以按照MMIO寄存器所提供的那樣來(lái)進(jìn)行構(gòu)想。圖22的系統(tǒng)設(shè)計(jì)為當(dāng)該寄存器讀取真實(shí)的顯示表面而不是最后的“鎖定的顯示表面”時(shí)將變得更加可靠。隨著協(xié)處理器處理另一個(gè)排列的觸發(fā),對(duì)最后的鎖存顯示表面進(jìn)行排列會(huì)導(dǎo)致一種競(jìng)態(tài)條件,這會(huì)導(dǎo)致屏幕上的圖像撕裂。一個(gè)觸發(fā)指令可以利用一種適當(dāng)?shù)募夹g(shù)來(lái)產(chǎn)生。用于與本發(fā)明相兼容的唯一的常用要求是所實(shí)現(xiàn)的方法應(yīng)當(dāng)確信并不去確認(rèn)一個(gè)觸發(fā)直到它是有效的。對(duì)觸發(fā)進(jìn)行排列。為了提供最高的性能,可以修改改進(jìn)的調(diào)度模型從而在擁有監(jiān)視器的應(yīng)用程序的再現(xiàn)流中對(duì)觸發(fā)操作進(jìn)行排列。當(dāng)進(jìn)行η緩沖時(shí),該調(diào)度程序可以允許DMA緩沖器重要排列的高達(dá)n-1個(gè)觸發(fā)器,并且在第η個(gè)觸發(fā)器將要插入的時(shí)候可以進(jìn)行鎖定。這就意味著在雙緩沖過(guò)程中,該調(diào)度程序可以允許該應(yīng)用程序?qū)σ粋€(gè)觸發(fā)進(jìn)行排列,并且在協(xié)處理器完成了對(duì)當(dāng)前幀的再現(xiàn)并且處理/通知給了那個(gè)觸發(fā)的時(shí)候,讓它繼續(xù)準(zhǔn)備DMA緩沖器進(jìn)行后面的幀。它還意味著到隨著DMA緩沖器準(zhǔn)備后面的幀而完成該應(yīng)用程序并且提交了第二個(gè)觸發(fā)的時(shí)候,就可能將它鎖定,直到把第一個(gè)觸發(fā)通知給協(xié)處理器。當(dāng)該調(diào)度程序使用立即觸發(fā)的時(shí)候,對(duì)觸發(fā)進(jìn)行排列的機(jī)械結(jié)構(gòu)按照以上所述進(jìn)行工作。然而,當(dāng)使用同步觸發(fā)時(shí),調(diào)度程序還會(huì)特別注意晚于觸發(fā)n-1的排列的DMA緩沖器。實(shí)際上,晚于那個(gè)觸發(fā)的DMA緩沖器通常會(huì)再現(xiàn)為當(dāng)前可見(jiàn)的表面。在大多系統(tǒng)中,這些DMA緩沖器并不進(jìn)行處理直到當(dāng)前排列的觸發(fā)的數(shù)量下降到n-2以下,這是非??扇〉?。解決這個(gè)問(wèn)題最簡(jiǎn)單的方法就是只允許n-2個(gè)觸發(fā)進(jìn)行排列而不是n-1個(gè)。然而,這種方法也就意味著在該雙緩沖的情況下我們不能排列任意的觸發(fā),所以我們可能需要在完成每一幀之后鎖定該應(yīng)用程序,直到處理該相應(yīng)的觸發(fā)為止。圖23中說(shuō)明了在這種設(shè)置中的優(yōu)選方法。如圖所示,是允許n-1個(gè)觸發(fā)的排列的。為了防止在觸發(fā)n-1排列之后的DMA緩沖器運(yùn)行,該調(diào)度程序可能累加用于那個(gè)協(xié)處理器設(shè)備環(huán)境的虛擬環(huán)形緩沖器中的那些DMA緩沖器。該調(diào)度程序可以等待,直到當(dāng)前排列的觸發(fā)的數(shù)量回落到n-2,以便將它們提交給那個(gè)協(xié)處理器設(shè)備環(huán)境的正確的環(huán)。當(dāng)一次運(yùn)行多個(gè)應(yīng)用程序時(shí),該協(xié)處理器也許不得不如圖23中所示的那樣阻塞。盡管協(xié)處理器通常會(huì)阻塞處理來(lái)自一個(gè)特定的協(xié)處理器的DMA緩沖器,但該調(diào)度程序可以調(diào)度其它的協(xié)處理器設(shè)備環(huán)境來(lái)運(yùn)行,有效地保持與該協(xié)處理器一樣忙。然而,當(dāng)運(yùn)行一個(gè)單獨(dú)的應(yīng)用程序時(shí),例如,當(dāng)玩一個(gè)全屏游戲時(shí),在那些時(shí)間間隔里該協(xié)處理器可能會(huì)阻塞。接下來(lái)的部分描述了一種裝置,該裝置是,如果支持的話,調(diào)度程序用來(lái)減少阻塞時(shí)間。最佳觸發(fā)。試著優(yōu)化全屏應(yīng)用程序,就可能將協(xié)處理器用于阻塞的時(shí)間最小化。參見(jiàn)圖23,觀察到該協(xié)處理器會(huì)阻塞至少是出于兩種原因第一,因?yàn)橥瓿闪诉@幀但系統(tǒng)正等待一個(gè)vsync來(lái)進(jìn)行觸發(fā),以及第二,因?yàn)橥瓿闪嗽撚|發(fā),但系統(tǒng)正等待一個(gè)中斷來(lái)告知CPU。為了減少出于第一種原因的阻塞,可能要把更多的緩沖器添加到觸發(fā)鏈上。從雙緩沖器到三緩沖器的轉(zhuǎn)變,將極大地減少這種阻塞。這樣做并不總是在驅(qū)動(dòng)器的控制下的,并且可能會(huì)導(dǎo)致不合理的存儲(chǔ)器消耗。為了減少出于第二種原因的阻塞,可能要添加一個(gè)協(xié)處理器裝置從而完全地消除這種阻塞的需要。該協(xié)處理器能夠提供一種等待觸發(fā)指令,該指令會(huì)阻塞該協(xié)處理器直到已經(jīng)處理了之前排列的觸發(fā)。當(dāng)支持這種指令時(shí),該調(diào)度程序可以用它來(lái)為全屏應(yīng)用程序排列觸發(fā),并且CPU不必在每個(gè)觸發(fā)之后重新啟動(dòng)DMA流。高級(jí)同步目標(biāo)程序利用之前規(guī)定的控制指令,該調(diào)度程序就能創(chuàng)建高級(jí)的同步目標(biāo)程序,例如關(guān)鍵部分和互斥。一旦滿足等待條件,通過(guò)保護(hù)DMA緩沖器的一部分不去運(yùn)行,該調(diào)度程序就能夠?qū)崿F(xiàn)這樣的同步原語(yǔ),直到它被CPU明確地重新調(diào)度。等待一個(gè)目標(biāo)程序就可以由該調(diào)度程序來(lái)實(shí)現(xiàn)來(lái)作為一個(gè)電子籬笆。邏輯上遵循該電子籬笆的DMA緩沖器可以由調(diào)度程序進(jìn)行排列,但并不提交到協(xié)處理器設(shè)備環(huán)境的環(huán)中,直到滿足該等待條件。一旦在等待一個(gè)目標(biāo)程序,那么就可以由該調(diào)度程序把一個(gè)協(xié)處理器設(shè)備環(huán)境移動(dòng)到那個(gè)特定目標(biāo)程序的等待列表上,直到它發(fā)出信號(hào)。目標(biāo)程序可以通過(guò)插入?yún)f(xié)處理器設(shè)備環(huán)境DMA流中的一個(gè)后面是中斷命令的電子籬笆來(lái)發(fā)出信號(hào)。當(dāng)接收這樣一個(gè)中斷時(shí),調(diào)度程序可以識(shí)別哪個(gè)目標(biāo)程序正在發(fā)出信號(hào),并且然后確定是否由任何等待協(xié)處理器設(shè)備環(huán)境應(yīng)當(dāng)放回準(zhǔn)備好的排列中。當(dāng)把一個(gè)協(xié)處理器設(shè)備環(huán)境放回該準(zhǔn)備好的排列中時(shí),該調(diào)度程序就插入從該環(huán)中阻止下來(lái)的該DMA緩沖器。例如,設(shè)想本發(fā)明的一個(gè)實(shí)施例,其中一個(gè)應(yīng)用程序具有一個(gè)生產(chǎn)者和消費(fèi)者之間共享的表面,并且該應(yīng)用程序需要同步訪問(wèn)這些資源,以便在再現(xiàn)的時(shí)候,消費(fèi)者總是可以使用有效的內(nèi)容。圖24說(shuō)明了一種同步這種情形的可能的方法。轉(zhuǎn)到圖24,在調(diào)度程序的一端,可以,例如,通過(guò)下面的內(nèi)核形實(shí)轉(zhuǎn)換程序,實(shí)現(xiàn)該同步,這可以通過(guò)其任意組合或與其它動(dòng)作的組合來(lái)實(shí)現(xiàn)1)CreateSynchronizationObject創(chuàng)建同步目標(biāo)程序?yàn)橥侥繕?biāo)程序創(chuàng)建一個(gè)內(nèi)核軌跡結(jié)構(gòu)。把一個(gè)編號(hào)返回給用戶模式以便可以在其后的等待/釋放/刪除調(diào)用中使用。2)DeleteSynchronizationObject刪除同步目標(biāo)程序銷毀之前創(chuàng)建的目標(biāo)程序。3)WaitOnSingleObject/ffaitOnMultipleObject等待單個(gè)目標(biāo)程序/等待多個(gè)目標(biāo)程序把一個(gè)等待同步事件插入到當(dāng)前協(xié)處理器設(shè)備環(huán)境的DMA流中。采用對(duì)正在等待的目標(biāo)程序的索引,把該事件插入到調(diào)度程序事件歷史。4)ReleaSe0bjeCt/Signa10bjeCt釋放目標(biāo)程序/向目標(biāo)程序發(fā)信號(hào)把一個(gè)信號(hào)同步事件插入到當(dāng)前協(xié)處理器設(shè)備環(huán)境(電子籬笆/中斷)的DMA流中。采用對(duì)正在釋放或發(fā)出信號(hào)的目標(biāo)程序的索引,把該事件插入到調(diào)度程序事件歷史。把圖24的說(shuō)明應(yīng)用到一個(gè)互斥上,一旦協(xié)處理器處理該DMA流中的一個(gè)同步事件,該調(diào)度程序就能執(zhí)行下面的動(dòng)作,這還可以通過(guò)其任意組合或與其它動(dòng)作的組合來(lái)實(shí)現(xiàn)1)有關(guān)等待(onawait)檢查該互斥的狀態(tài)。如果當(dāng)前不是采用互斥,則采用該互斥并且把協(xié)處理器線程放回到該調(diào)度程序的準(zhǔn)備好的列表中。如果已經(jīng)采用了該互斥,則把該協(xié)處理器線程放到用于該互斥的準(zhǔn)備好的序列中。2)有關(guān)信號(hào)(onasignal)檢查某些其它的協(xié)處理器線程是否正在等待該互斥。如果某些其它線程正在等,則把正在等的第一線程放到該列表中,并且把它放回到調(diào)度程序的準(zhǔn)備好的列表中。如果沒(méi)有線程正在等,則把該互斥放回到非采用狀態(tài)。利用這種裝置,就能創(chuàng)建該調(diào)度程序。例如,設(shè)想能夠由該調(diào)度程序創(chuàng)建的下面類型的同步原語(yǔ)互斥一次只有一個(gè)協(xié)處理器線程能夠訪問(wèn)共享資源。信號(hào)相同的時(shí)間里,特定數(shù)量的協(xié)處理器線程都能夠訪問(wèn)共享資源。通知事件一定數(shù)量的協(xié)處理器線程可能等待來(lái)自另一個(gè)協(xié)處理器線程的信號(hào)。在某些情形下,一個(gè)應(yīng)用程序可以構(gòu)造為當(dāng)協(xié)處理器完成對(duì)再現(xiàn)指令的處理時(shí)請(qǐng)求通知。為了支持這個(gè),調(diào)度程序可以允許驅(qū)動(dòng)器請(qǐng)求它正在提交的用于DMA的通知。然后,一旦協(xié)處理器完成提交DMA緩沖器,該驅(qū)動(dòng)器可以在提請(qǐng)的時(shí)間里指定一個(gè)能夠發(fā)出信號(hào)的CPU同步事件。該調(diào)度程序可以把所給的DMA緩沖器插入到所給的協(xié)處理器設(shè)備環(huán)境的環(huán)中,并且然后把一個(gè)用戶模式協(xié)處理器事件通知添加到該環(huán)(中斷后面的一個(gè)電子籬笆)上。當(dāng)協(xié)處理器事件已經(jīng)由協(xié)處理器進(jìn)行了處理時(shí),該調(diào)度程序就能發(fā)出有關(guān)的CPU同步事件的信號(hào)。調(diào)度程序事件歷史緩沖器該調(diào)度程序可以使用用于多種目的的上述同步裝置。因?yàn)橹袛嗖⒉蛔枞搮f(xié)處理器,所以CPU只需要了解通知的一部分,并且因此某些通知就能夠壓縮在一起。為了適當(dāng)?shù)仨憫?yīng)DMA緩沖器中的每個(gè)通知,調(diào)度程序會(huì)保存事件的歷史,這些事件是連同處理那些事件所需的任何參數(shù)一起插入的。簡(jiǎn)單來(lái)講,該事件歷史緩沖器可以是事件信息結(jié)構(gòu)的一個(gè)通用協(xié)處理器設(shè)備環(huán)境數(shù)組,該事件信息結(jié)構(gòu)跟蹤要求調(diào)度程序處理的并且已經(jīng)插入到那個(gè)設(shè)備環(huán)境的DMA流中的各個(gè)事件。注意,調(diào)度程序電子籬笆是調(diào)度程序用來(lái)與一個(gè)事件同步的電子籬笆。每個(gè)協(xié)處理器設(shè)備環(huán)境都可能有一種電子籬笆,并且為了保證安全性,該電子籬笆可以做成只允許通過(guò)一個(gè)有特權(quán)的指令來(lái)更新。在任何情況下,這樣一個(gè)事件都可以按照一個(gè)中斷指令后面的電子籬笆指令插入到DMA流中。在各電子籬笆中斷上,調(diào)度程序可以首先確定當(dāng)前的電子籬笆,然后通過(guò)該事件歷史緩沖器去確定發(fā)生了哪個(gè)事件。這種確定可以基于相關(guān)的電子籬笆來(lái)作出。調(diào)度程序可以著手處理該電子籬笆中斷。圖25說(shuō)明了該事件歷史緩沖器的多種實(shí)施例。任何數(shù)量的事件都可以得以支持。下面的表個(gè)描述了一些當(dāng)前支持的事件,但并不意味著是對(duì)可能支持的事件的數(shù)量或類型的限定。事件類型說(shuō)明以及參數(shù)DMA緩將這個(gè)事件插入到DMA緩沖器的尾部。當(dāng)調(diào)度程序處理這個(gè)沖器的結(jié)事件時(shí),相關(guān)的DMA緩沖器就放回到DMA緩沖器池中以用于束那個(gè)處理。參數(shù)對(duì)那個(gè)需要被釋放到該池中的DMA緩沖器的處理。等待同步當(dāng)協(xié)處理器線程需要檢查一個(gè)事件的狀態(tài)并且可能要等它的目標(biāo)程序時(shí)候,就插入這個(gè)事件。當(dāng)調(diào)度程序處理這個(gè)事件時(shí),它檢查是否已經(jīng)滿足了等待條件,并且如果是,則重新調(diào)度剛剛停止的該協(xié)處理器線程。如果不滿足該等待條件,則把該協(xié)處理器線程放在等待狀態(tài)并且添加到該同步目標(biāo)程序的等待對(duì)列上。參數(shù)等待的目標(biāo)程序的處理。信號(hào)同步當(dāng)協(xié)處理器線程需要發(fā)出一個(gè)通知目標(biāo)程序或者釋放一個(gè)同目標(biāo)程序步目標(biāo)程序的信號(hào)時(shí)插入這個(gè)事件。當(dāng)調(diào)度程序處理這個(gè)事件時(shí),它改變?cè)撃繕?biāo)程序的狀態(tài),并且可能喚醒正在等待該事件的某些協(xié)處理器線程。參數(shù)釋放的目標(biāo)程序的處理。用戶模式當(dāng)用戶模式驅(qū)動(dòng)器請(qǐng)求再現(xiàn)完成的通知時(shí)插入這個(gè)事件。當(dāng)事件通知調(diào)度程序處理這個(gè)事件時(shí),它向有關(guān)事件發(fā)出信號(hào)。參數(shù)發(fā)出信號(hào)的事件。可編程PCI縫隙當(dāng)今的協(xié)處理器公開(kāi)了非常接近于PCI規(guī)格所允許的限制的PCI縫隙。將來(lái)產(chǎn)生的協(xié)處理器將通過(guò)縫隙在主板上具有比已有的更多的輔助存儲(chǔ)器。因此,在將來(lái),我們不能假設(shè)所有的輔助存儲(chǔ)器在相同的時(shí)間上通過(guò)PCI縫隙都是可見(jiàn)的?,F(xiàn)有多種方法來(lái)使得這種限定得以解決。一種用于能夠支持通用協(xié)處理器設(shè)備環(huán)境虛擬地址空間的改進(jìn)的調(diào)度模型的優(yōu)選方法是在4KB的間隔尺寸上使用能夠重定向到輔助存儲(chǔ)器的任何位置的PCI縫隙。這在圖26中進(jìn)行了描述。如圖26中所述,該P(yáng)CI縫隙頁(yè)表可以是獨(dú)立于協(xié)處理器頁(yè)表的。當(dāng)協(xié)處理器從設(shè)備環(huán)境向設(shè)備環(huán)境進(jìn)行自身轉(zhuǎn)換的時(shí)候,可能有多個(gè)CPU過(guò)程在運(yùn)行和訪問(wèn)該P(yáng)CI縫隙的部分。用于該P(yáng)CI縫隙的頁(yè)表在所有的協(xié)處理器設(shè)備環(huán)境中是共享資源,并且能夠從輔助存儲(chǔ)器中進(jìn)行分配。該驅(qū)動(dòng)器可以提供一種映射/非映射DDI,從而允許該輔助存儲(chǔ)器管理器VidMm管理正在運(yùn)行的應(yīng)用程序中的PCI縫隙地址空間。協(xié)處理器可以利用一個(gè)物理地址來(lái)找到用于該P(yáng)CI縫隙的頁(yè)表。注意,該P(yáng)CI縫隙可以構(gòu)造為只把該地址空間重定向到本地的輔助存儲(chǔ)器。它并不需要把該地址重定向到系統(tǒng)存儲(chǔ)器,因?yàn)閂idMm總是直接映射到系統(tǒng)存儲(chǔ)器,而不通過(guò)那個(gè)縫隙。頁(yè)面能級(jí)故障當(dāng)之前所述的表面能級(jí)故障通常在大多數(shù)情況下都可以很好的運(yùn)行時(shí),就存在它可以改進(jìn)的情形。例如,利用表面能級(jí)故障,某些利用大量數(shù)據(jù)的應(yīng)用程序也許就不能一次獲得存儲(chǔ)器中的整個(gè)數(shù)據(jù)組,并且因此,就不可以很好地運(yùn)行。解決這個(gè)的一種方法是在改進(jìn)的模型中由一個(gè)頁(yè)面能級(jí)故障裝置來(lái)實(shí)現(xiàn)。采用頁(yè)面能級(jí)故障,該模塊的工作是類似于之前的部分中所描述的那樣的。主要的不同點(diǎn)是在頁(yè)面故障報(bào)告的方式和VidMm處理的方式上。盡管表面能級(jí)故障可能要求協(xié)處理器指定它做進(jìn)一步處理所需的(為了消除無(wú)限循環(huán),該無(wú)限循環(huán)中頁(yè)入一個(gè)資源就意味著要收回另一個(gè)所需的資源)資源的整個(gè)列表,頁(yè)面能級(jí)故障并不需要協(xié)處理器公開(kāi)虛擬地址的列表。對(duì)于頁(yè)面能級(jí)故障,協(xié)處理器只需要報(bào)告發(fā)生故障的虛擬地址。VidMm能夠找出這個(gè)地址是哪個(gè)位置的一部分,并且決定是否只有這個(gè)特定的頁(yè)面需要駐留或者是否要求某種預(yù)取。當(dāng)單獨(dú)的元素要求多個(gè)頁(yè)面時(shí),可能會(huì)對(duì)那個(gè)單獨(dú)的元素產(chǎn)生多個(gè)故障。還可能是,當(dāng)帶進(jìn)另一個(gè)頁(yè)面時(shí),那個(gè)元素所需的頁(yè)面會(huì)被收回。然而,只要正在工作的那組應(yīng)用程序充分地大于一個(gè)元素所需的最大數(shù)量的頁(yè)面,通過(guò)頁(yè)面故障循環(huán)的可能性就很小。最后,應(yīng)當(dāng)可以理解,在此所述的多種技術(shù)都可以用硬件或軟件或,適當(dāng)?shù)?,兩者的結(jié)合來(lái)實(shí)現(xiàn)。因此,本發(fā)明的方法和裝置或者其某些方面或部分都可以采用體現(xiàn)在有形介質(zhì)上的程序代碼(即指令)的形式,其中,當(dāng)把程序代碼裝入一個(gè)計(jì)算機(jī)之類的機(jī)器中并且由該機(jī)器來(lái)運(yùn)行時(shí),該機(jī)器就變成一個(gè)用于實(shí)現(xiàn)本發(fā)明的裝置。在可編程計(jì)算機(jī)上運(yùn)行程序代碼的情況下,該計(jì)算設(shè)備通常包括一個(gè)處理器、一個(gè)處理器可讀的存儲(chǔ)介質(zhì)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備??梢詫?shí)現(xiàn)或利用本發(fā)明的用戶接口技術(shù)的一個(gè)或多個(gè)程序,例如通過(guò)處理API的數(shù)據(jù)的使用、可重復(fù)使用控制等,都能用面向高級(jí)程序或目標(biāo)程序的編程語(yǔ)言來(lái)實(shí)現(xiàn)從而與計(jì)算機(jī)系統(tǒng)進(jìn)行通信。然而,如果需要的話,這些程序都可能是用匯編語(yǔ)言或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)的。在任何情況下,這些語(yǔ)言都可以是一種編譯或解釋語(yǔ)言,并且是與硬件實(shí)現(xiàn)相結(jié)合的。盡管示例性實(shí)施例涉及把本發(fā)明用于單機(jī)計(jì)算機(jī)系統(tǒng)的設(shè)備環(huán)境中,但本發(fā)明并不限于此,而是還可以在任何計(jì)算機(jī)環(huán)境中得以實(shí)現(xiàn),例如網(wǎng)絡(luò)或者分布式計(jì)算機(jī)環(huán)境。再進(jìn)一步,本發(fā)明可以在多個(gè)處理芯片或設(shè)備中或者在多個(gè)處理芯片或設(shè)備上面實(shí)現(xiàn),并且存儲(chǔ)可以類似于多個(gè)設(shè)備上的作用。這樣的設(shè)備可能包括個(gè)人計(jì)算機(jī)、網(wǎng)絡(luò)服務(wù)器、手提式設(shè)備、超級(jí)計(jì)算機(jī)或者集成到其它汽車或飛機(jī)之類的系統(tǒng)中的計(jì)算機(jī)。因此,本發(fā)明不應(yīng)該限于任何單一的實(shí)施例,而相反的應(yīng)該按照附加的權(quán)利要求解釋其寬度和范圍。權(quán)利要求一種用于調(diào)度任務(wù)用于協(xié)處理器中處理的方法,包括產(chǎn)生運(yùn)行列表,所述運(yùn)行列表包括由協(xié)處理器處理的任務(wù)的列表,其中,所述運(yùn)行列表是由中央處理單元CPU產(chǎn)生的;把所述運(yùn)行列表傳送給一調(diào)度程序過(guò)程,其中,所述調(diào)度程序過(guò)程準(zhǔn)備所述運(yùn)行列表上的所述任務(wù)用于由協(xié)處理器處理;以及由所述協(xié)處理器按照所述運(yùn)行列表所指示的順序處理所述任務(wù),其中,如果在處理了所述任務(wù)中的一個(gè)任務(wù)時(shí)引發(fā)一切換事件,則所述協(xié)處理器就立即切換到所述運(yùn)行列表上的下一個(gè)任務(wù)。2.如權(quán)利要求1所述的方法,其特征在于,所述協(xié)處理器是圖形處理單元(GPU)。3.如權(quán)利要求1所述的方法,其特征在于,切換事件包括以下至少之一完成處理之前提交的任務(wù)、在處理一任務(wù)的過(guò)程中的一個(gè)頁(yè)面故障、在處理一個(gè)任務(wù)的過(guò)程中的一個(gè)常規(guī)的保護(hù)故障、由CPU提出的切換到一個(gè)新的運(yùn)行列表的請(qǐng)求。4.如權(quán)利要求1所述的方法,其特征在于,還包括當(dāng)所述協(xié)處理器從所述運(yùn)行列表中的一個(gè)任務(wù)切換到所述運(yùn)行列表中的下一個(gè)任務(wù)時(shí),向所述CPU發(fā)出中斷信號(hào),其中,當(dāng)所述CPU接收到所述中斷信號(hào)時(shí),所述CPU就為所述協(xié)處理器創(chuàng)建一個(gè)新的運(yùn)行列表。5.如權(quán)利要求1所述的方法,其特征在于,還包括由所述調(diào)度程序過(guò)程產(chǎn)生第二運(yùn)行列表,借此,所述調(diào)度程序過(guò)程就能夠發(fā)起要由所述協(xié)處理器處理的任務(wù)的順序中的改變。6.如權(quán)利要求5所述的方法,其特征在于,還包括禁止第一運(yùn)行列表中的第一任務(wù)出現(xiàn)在所述第二運(yùn)行列表中。7.如權(quán)利要求5所述的方法,其特征在于,還包括禁止第一運(yùn)行列表中的第二任務(wù)出現(xiàn)在所述第二運(yùn)行列表中,除非所述第二任務(wù)是所述第二運(yùn)行列表中的第一任務(wù)。8.如權(quán)利要求1所述的方法,其特征在于,還包括將有關(guān)協(xié)處理器從任務(wù)向任務(wù)切換的歷史的信息保存在由所述調(diào)度程序可讀的一指定的系統(tǒng)存儲(chǔ)器位置中。9.如權(quán)利要求8所述的方法,其特征在于,由所述調(diào)度程序可讀的所述系統(tǒng)存儲(chǔ)器位置是僅可用于單協(xié)處理器的歷史緩沖器。10.如權(quán)利要求8所述的方法,其特征在于,所述歷史緩沖器包括足夠的存儲(chǔ)器以保存存儲(chǔ)所述運(yùn)行列表所需的至少兩倍的信息量。11.如權(quán)利要求8所述的方法,其特征在于,還包括指定協(xié)處理器寫(xiě)指針,所述協(xié)處理器寫(xiě)指針指示所述歷史緩沖器中的所述協(xié)處理器能夠?qū)懶碌男畔⒌奈恢谩?2.一種用于調(diào)度任務(wù)用于協(xié)處理器中處理的計(jì)算設(shè)備,包括產(chǎn)生一個(gè)運(yùn)行列表的裝置,該所述運(yùn)行列表包括一個(gè)由協(xié)處理器處理的任務(wù)的列表,其中,該所述運(yùn)行列表是由一個(gè)中央處理單元(CPU)產(chǎn)生的;把該所述運(yùn)行列表傳送給一個(gè)調(diào)度程序過(guò)程的裝置,其中,該所述調(diào)度程序過(guò)程準(zhǔn)備所述運(yùn)行列表上的所述任務(wù)用于為按照由協(xié)處理器處理的運(yùn)行列表上的任務(wù)做準(zhǔn)備;以及由該所述協(xié)處理器按照該所述運(yùn)行列表所指示的順序處理這些所述任務(wù)的裝置,其中,如果在處理這些了所述任務(wù)中的一個(gè)任務(wù)時(shí)引發(fā)一個(gè)轉(zhuǎn)換切換事件,則該所述協(xié)處理器就立即轉(zhuǎn)換切換到該所述運(yùn)行列表上的下一個(gè)任務(wù)。13.—種由結(jié)合協(xié)處理器使用的調(diào)度程序機(jī)制執(zhí)行的方法,所述方法實(shí)現(xiàn)高級(jí)的同步對(duì)象,所述方法包括產(chǎn)生一等待指令,所述等待指令包括電子籬笆,其中電子籬笆是包含數(shù)據(jù)塊和地址兩者的插入到DMA流中的指令,從而當(dāng)協(xié)處理器讀取所述地址時(shí),會(huì)使協(xié)處理器把與所述電子籬笆相關(guān)聯(lián)的所述數(shù)據(jù)塊寫(xiě)到一指定的位置上;以及保護(hù)DMA緩沖器的一部分不執(zhí)行,直到DMA緩沖器的所述部分由CPU重新調(diào)度為止,其中所述CPU將在所述等待指令被處理之后重新調(diào)度DMA緩沖器的一部分。14.如權(quán)利要求13所述的方法,其特征在于,還包括不把邏輯上跟隨在所述電子籬笆之后的一個(gè)或多個(gè)DMA緩沖器提交到協(xié)處理器環(huán)境的環(huán)中,直到一等待條件被滿足為止。15.如權(quán)利要求13所述的方法,其特征在于,還包括把協(xié)處理器環(huán)境移動(dòng)到用于一對(duì)象的等待列表上,直到向該對(duì)象發(fā)出信號(hào)為止,其中,向?qū)ο蟀l(fā)出信號(hào)包括在協(xié)處理器環(huán)境DMA流中的后跟一中斷命令的電子籬笆。16.一種由協(xié)處理器執(zhí)行的用于支持用于應(yīng)用程序的圖形的無(wú)縫顯示的方法,包括將對(duì)應(yīng)于第一顯示表面的數(shù)據(jù)連續(xù)地分配到一協(xié)處理器可讀的存儲(chǔ)器位置中,其中第一基地址由一顯示設(shè)備使用來(lái)標(biāo)識(shí)對(duì)應(yīng)于第一顯示表面的所述數(shù)據(jù)的一位置;將對(duì)應(yīng)于第二顯示表面的數(shù)據(jù)連續(xù)地分配到一協(xié)處理器可讀的存儲(chǔ)器位置中;以及產(chǎn)生重新分配所述第一基地址的觸發(fā)指令,以便所述顯示設(shè)備改為標(biāo)識(shí)第二基地址的位置,其中所述第二基地址涉及對(duì)應(yīng)于第二顯示表面的所述數(shù)據(jù),并且其中,所述觸發(fā)指令由協(xié)處理器產(chǎn)生。17.如權(quán)利要求16所述的方法,其特征在于,還包括處理所述觸發(fā)指令,其中所述觸發(fā)指令立即重新指定所述第一基地址。18.如權(quán)利要求16所述的方法,其特征在于,還包括處理所述觸發(fā)指令,其中所述觸發(fā)指令在一后續(xù)的顯示同步周期出現(xiàn)時(shí)重新指定所述第一基地址。19.如權(quán)利要求16所述的方法,其特征在于,所述協(xié)處理器是GPU。全文摘要用于將協(xié)處理器的“資源缺乏”最小化以及用于有效地調(diào)度協(xié)處理器中的處理的技術(shù),從而獲得更高的效率和能力。提供了一種運(yùn)行列表,允許協(xié)處理器從一個(gè)任務(wù)向下一個(gè)轉(zhuǎn)換,而不用等待CPU干預(yù)。一種稱作“表面故障”的方法允許協(xié)處理器在一個(gè)大的任務(wù)開(kāi)始的地方發(fā)生故障,而不是在該任務(wù)的中間的某個(gè)地方發(fā)生故障??梢詫MA控制指令即“電子籬笆”、“陷阱”以及“能夠/不能進(jìn)行設(shè)備環(huán)境轉(zhuǎn)換”插入到處理流中,從而使協(xié)處理器執(zhí)行增強(qiáng)協(xié)處理器的效率和能力的任務(wù)。這些指令還能用于創(chuàng)建高級(jí)同步目標(biāo)程序。最后,描述了一種“觸發(fā)”技術(shù),可以把用于顯示的基本索引從一個(gè)位置轉(zhuǎn)換到另一個(gè),由此改變整個(gè)顯示表面。文檔編號(hào)G06T1/20GK101840355SQ201010157518公開(kāi)日2010年9月22日申請(qǐng)日期2004年2月13日優(yōu)先權(quán)日2003年2月18日發(fā)明者A·B·高薩里亞,S·普羅諾弗斯特申請(qǐng)人:微軟公司