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

用于適配器函數(shù)的轉(zhuǎn)換格式的運行時確定的制作方法

文檔序號:6352171閱讀:104來源:國知局
專利名稱:用于適配器函數(shù)的轉(zhuǎn)換格式的運行時確定的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及訪問計算環(huán)境中的系統(tǒng)存儲器,特別是涉及有利于提供可用于訪問系統(tǒng)存儲器的地址。
背景技術(shù)
可通過讀取和寫入請求訪問系統(tǒng)存儲器。這些請求可來自計算環(huán)境的各種部件,包括中央處理單元以及適配器。各請求包含被用于訪問系統(tǒng)存儲器的地址。但是,在一些情況下,該地址不與系統(tǒng)存儲器中的物理位置具有一一對應(yīng)關(guān)系。因此,執(zhí)行地址轉(zhuǎn)換。地址轉(zhuǎn)換被用于將以不能在訪問系統(tǒng)存儲器時直接使用的形式提供的地址轉(zhuǎn)換成可直接在訪問系統(tǒng)存儲器中的物理位置時使用的另一形式。例如,包含于由中央處理單元提供的請求中的虛擬地址被轉(zhuǎn)換成系統(tǒng)存儲器中的真實或絕對地址。作為另一例子,在 來自適配器的請求中提供的外圍組件互連(PCI)地址可被轉(zhuǎn)換成系統(tǒng)存儲器中的絕對地址。在Biran 等人于 2007 年6 月 14 日提交的題為 “MemoryOperations in aVirtualized System”的美國公開No. 2007/0136554A1中描述了用于在主機服務(wù)器上的多個操作系統(tǒng)實例之間共享輸入/輸出適配器的計算機實現(xiàn)的方法、裝置和系統(tǒng)。虛擬存儲器被分配并與操作系統(tǒng)實例相關(guān)。虛擬存儲器被轉(zhuǎn)換成一個或多個真實地址,其中,一個或多個真實地址不需要進一步的轉(zhuǎn)換。輸入/輸出適配器被暴露于一個或多個真實地址。操作系統(tǒng)實例具有用于訪問與操作系統(tǒng)實例相關(guān)的虛擬存儲器的一個或多個真實地址??赏ㄟ^輸入/輸出適配器或通過操作系統(tǒng)實例執(zhí)行地址轉(zhuǎn)換和保護。在Moertl 等人在 2008 年 4 月 17 日公開的題為 “Apparatus andMethod forCommunicating With a Memory Registration EnabledAdapter Using Cached AddressTranslations”的美國公開No. 2008/0091915A1中,提供用于與諸如InfiniBand 主機信道適配器的啟用存儲器注冊的適配器通信的裝置和方法。通過該裝置和方法,可通過用于初始化根綜合體的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換條目的設(shè)備驅(qū)動器調(diào)用設(shè)備驅(qū)動器服務(wù)。設(shè)備驅(qū)動器數(shù)據(jù)緩沖數(shù)據(jù)結(jié)構(gòu)的地址和注冊修改器可通過設(shè)備驅(qū)動器被傳遞到設(shè)備驅(qū)動器服務(wù)。設(shè)備驅(qū)動器服務(wù)可產(chǎn)生與根綜合體相關(guān)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)條目和在適配器的MR地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)中的存儲器注冊(Memory Registration, MR)地址轉(zhuǎn)換條目。然后,MR地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)可與1/0操作一起使用,以繞過與根綜合體相關(guān)的地址轉(zhuǎn)換數(shù)據(jù)結(jié)構(gòu)。在Arndt 等人于 2009 年2 月 17 日發(fā)布的題為 “Method, Systemand ProgramProduct for Differentiating Between Virtual Hosts onBus Transactions andAssociating Allowable Memory Access for anlnput/Output Adapter that SupportsVirtualization"的美國專利No. 7,493,425中描述了允許多系統(tǒng)圖像虛擬服務(wù)器內(nèi)的系統(tǒng)圖像保持與其它系統(tǒng)圖像隔離,同時在不需要通過由LPAR管理器信任的部件分析和驗證每個1/0操作的情況下直接將其相關(guān)系統(tǒng)存儲器的一部分或全部暴露于共享的PCI適配器的方法、系統(tǒng)和計算機程序產(chǎn)品。

發(fā)明內(nèi)容
通過提供根據(jù)權(quán)利要求I的用于有利于存儲器訪問的方法和相應(yīng)的系統(tǒng)和計算機程序產(chǎn)品,克服現(xiàn)有技術(shù)的缺點并提供附加的優(yōu)點。


在本說明書結(jié)尾時在權(quán)利要求書中特別指出了并作為示例明確聲明了本發(fā)明的一個或多個方面。通過下面結(jié)合附圖對本發(fā)明進行的詳細說明,可以更好地理解本發(fā)明的前述和其他目標(biāo)、特點和優(yōu)點,其中
圖I示出加入并使用本發(fā)明的一個或多個方面的計算環(huán)境的一個實施例;圖2示出根據(jù)本發(fā)明的一個方面的圖I的系統(tǒng)存儲器和I/O集線器的更多細節(jié)的一個實施例;圖3A示出根據(jù)本發(fā)明的一個方面的注冊適配器的DMA (直接存儲器訪問)地址空間的邏輯的概要的一個實施例;圖3B示出根據(jù)本發(fā)明的一個方面的選擇轉(zhuǎn)換格式(translationformat)的邏輯的一個例子;圖3C示出根據(jù)本發(fā)明的一個方面的注冊用于適配器的DMA地址空間的各種細節(jié)的一個實施例;圖4示出根據(jù)本發(fā)明的一個方面的處理DMA操作的邏輯的一個實施例;圖5A示出在使用整個地址以索引到地址轉(zhuǎn)換表中以轉(zhuǎn)換地址并訪問頁時使用的各層轉(zhuǎn)換的一個例子;圖5B示出據(jù)本發(fā)明的一個方面的當(dāng)在索引到地址轉(zhuǎn)換表中時忽略地址的一部分時使用的各層轉(zhuǎn)換的一個例子;圖5C示出根據(jù)本發(fā)明的一個或多個方面的可用的各種CPU DAT兼容格式的例子;圖示出根據(jù)本發(fā)明的一個或多個方面的可用的各種I/O擴展地址轉(zhuǎn)換格式的例子;圖6A示出根據(jù)本發(fā)明的一個方面的所使用的修改PCI函數(shù)控制指令的一個實施例;圖6B示出根據(jù)本發(fā)明的一個方面的由圖6A的修改PCI函數(shù)控制指令使用的字段的一個實施例;圖6C示出根據(jù)本發(fā)明的一個方面的由圖6A的修改PCI函數(shù)控制指令使用的另一字段的一個實施例;圖6D示出根據(jù)本發(fā)明的一個方面的所使用的函數(shù)信息塊(FIB)的內(nèi)容的一個實施例;圖7示出根據(jù)本發(fā)明的一個方面的修改PCI函數(shù)控制指令的邏輯的概要的一個實施例;圖8示出根據(jù)本發(fā)明的一個方面的與可由修改PCI函數(shù)控制指令規(guī)定的寄存器(register) I/O地址轉(zhuǎn)換參數(shù)操作相關(guān)的邏輯的一個實施例;
圖9示出根據(jù)本發(fā)明的一個方面的與可由修改PCI函數(shù)控制指令規(guī)定的非寄存器(unregister) I/O地址轉(zhuǎn)換參數(shù)操作相關(guān)的邏輯的一個實施例;圖10示出加入本發(fā)明的一個或多個方面的計算機程序產(chǎn)品的一個實施例;圖11示出加入并使用本發(fā)明的一個或多個方面的主計算機系統(tǒng)的一個實施例;圖12示出加入并使用本發(fā)明的一個或多個方面的計算機系統(tǒng)的另一例子;圖13示出包含加入并使用本發(fā)明的一個或多個方面的計算機網(wǎng)絡(luò)的計算機系統(tǒng)的另一例子;圖14示出加入并使用本發(fā)明的一個或多個方面的計算機系統(tǒng)的各種要素的一個實施例; 圖15A示出加入并使用本發(fā)明的一個或多個方面的圖14的計算機系統(tǒng)的執(zhí)行單元的一個實施例;圖15B示出加入并使用本發(fā)明的一個或多個方面的圖14的計算機系統(tǒng)的分支單元的一個實施例;圖15C示出加入并使用本發(fā)明的一個或多個方面的圖14的計算機系統(tǒng)的加載/存儲單元的一個實施例;和圖16示出加入并使用本發(fā)明的一個或多個方面的仿真主計算機系統(tǒng)的一個實施例。
具體實施例方式根據(jù)本發(fā)明的一個方面,提供通過啟用在運行時(例如,地址轉(zhuǎn)換時間)確定已經(jīng)預(yù)注冊了哪種轉(zhuǎn)換格式用于提供可用于直接訪問系統(tǒng)存儲器的地址來有利于存儲器訪問的能力。在一個例子中,通過適配器的函數(shù)(這里,稱為輸入/輸出(I/o)地址)提供初始地址,并且使用為函數(shù)注冊的轉(zhuǎn)換格式以提供基于初始提供的地址的可用于訪問系統(tǒng)存儲器的地址。作為例子,轉(zhuǎn)換格式可表示要使用的轉(zhuǎn)換表的類型、不獲取轉(zhuǎn)換表或者可以繞過轉(zhuǎn)換。參照圖I描述加入和使用本發(fā)明的一個或多個方面的計算環(huán)境的一個實施例。在一個例子中,計算環(huán)境 100 是由 International BusinessMachines Corporation 提供的Systemz 服務(wù)器。Systemz 基于由 International Business Machines Corporation 提供的 z/ArcMtectlire 。在題為 “Z/Architecture Principles of Operation”,IBM 公開 No. SA22-7832-07,2009 年 2 月的TBM 出版物中描述了關(guān)于 z/ Architecture 的細節(jié)。iBlVl* 、System z 和 z/Architecture 是 International Business MachinesCorporation, Armonk, New York的注冊商標(biāo)。這里便用的其它名稱可以是InternationalBusinessMachines Corporation或其它公司的注冊商標(biāo)、商標(biāo)或產(chǎn)品名稱。在一個例子中,計算環(huán)境100包含通過存儲器控制器106與系統(tǒng)存儲器104(也稱為主存儲器)耦合的一個或多個中央處理單元(CPU)102。為了訪問系統(tǒng)存儲器104,中央處理單元102發(fā)出包含用于訪問系統(tǒng)存儲器的地址的讀取或?qū)懭胝埱?。包含于請求中的地址一般不可直接用于訪問系統(tǒng)存儲器,因此,它被轉(zhuǎn)換為可直接用于訪問系統(tǒng)存儲器的地址。地址是通過轉(zhuǎn)換機構(gòu)(XLATE) 108被轉(zhuǎn)換。例如,地址通過使用例如動態(tài)地址轉(zhuǎn)換(DAT)從虛擬地址被轉(zhuǎn)換到真實或絕對地址。
通過存儲器控制器106接收包含轉(zhuǎn)換地址的請求。在一個例子中,存儲器控制器106包含硬件,并被用于仲裁對于系統(tǒng)存儲器的訪問并保持存儲器的一致性。對于從CPU102接收的請求以及對于從一個或多個適配器110接收的請求,執(zhí)行該仲裁。與中央處理單元類似,適配器向系統(tǒng)存儲器104發(fā)出請求以獲得對于系統(tǒng)存儲器的訪問。在一個例子中,適配器110是包含一個或多個PCI函數(shù)的外圍組件互連(PCI)或快速PCI (PCIe)適配器。PCI函數(shù)發(fā)出需要訪問系統(tǒng)存儲器的請求。請求通過一個或多個交換機(例如,PCIe交換機)114被路由到輸入/輸出集線器112 (例如,PCI集線器)。在一個例子中,輸入/輸出集線器包括包含一個或多個狀態(tài)機的硬件。如這里使用的那樣,術(shù)語適配器包含任意類型的適配器(例如,存儲適配器、網(wǎng)絡(luò)適配器、處理適配器、PCI適配器、加密適配器、其它類型的輸入/輸出適配器等)。在一個實施例中,適配器包含一個適配器函數(shù)(adapter function)。但是,在其它實施例中,適配器可包含多個適配器函數(shù)。不管適配器包含一個適配器函數(shù)還是多個適配器函數(shù),本發(fā)明的一個或多個方面都是適用的。并且,在這里給出的例子中,除非另外指示,否則適配器可與適配器函數(shù)(例如,PCI函數(shù))互換使用。 輸入/輸出集線器包含例如從交換機接收請求的根綜合體116。請求包含需要被轉(zhuǎn)換的輸入/輸出地址,因此,根綜合體向地址轉(zhuǎn)換和保護單元118提供地址。如后面進一步詳細描述的那樣,該單元為例如用于在必要時將I/O地址轉(zhuǎn)換成可直接用于訪問系統(tǒng)存儲器104的地址的硬件單元。從適配器發(fā)起的請求,包含地址(如果不需要轉(zhuǎn)換,那么為轉(zhuǎn)換后的或初始的地址),通過例如I/O到存儲器總線120被提供給存儲器控制器106。存儲器控制器執(zhí)行其仲裁,并且在適當(dāng)?shù)臅r間將具有地址的請求轉(zhuǎn)送到系統(tǒng)存儲器。參照圖2描述關(guān)于系統(tǒng)存儲器和輸入/輸出集線器的其它細節(jié)。在本實施例中,沒有示出存儲器控制器。但是,I/o集線器可直接或通過存儲器控制器與系統(tǒng)存儲器耦合。在一個例子中,系統(tǒng)存儲器104包含一個或多個地址空間200。地址空間是可被分配給計算環(huán)境的特定部件(諸如特定適配器)的系統(tǒng)存儲器的特定部分。在一個例子中,可通過由適配器發(fā)起的直接存儲器訪問(DMA)訪問地址空間,因此,地址空間在這里的例子中指的是DMA地址空間。但是,在其它例子中,不使用直接存儲器訪問來訪問地址空間。此外,在一個例子中,系統(tǒng)存儲器104包含用于將地址從不能直接用于訪問系統(tǒng)存儲器的地址轉(zhuǎn)換成可直接使用的地址的地址轉(zhuǎn)換表202。在一個實施例中,存在被分配給DMA地址空間的一個或多個地址轉(zhuǎn)換表,并且基于例如給其分配的地址空間的大小、地址轉(zhuǎn)換表自身的大小和/或要被訪問的頁(或存儲器的其它單元)的大小配置這一個或多個地址轉(zhuǎn)換表。在一個例子中,存在地址轉(zhuǎn)換表的層級結(jié)構(gòu)。例如,如圖2所示,存在IOAT指針218 (后面描述)指向的第一級表202a (例如,段表)和第一級表206a的條目指向的較低的第二級表202b (例如,頁表)。接收地址204的一個或多個位被用于索引到表202a以定位表示特定的較低級表202b的特定條目206a。然后,使用地址204的一個或多個其它位以定位該表中的特定條目206b。在本例子中,該條目提供用于定位正確的頁的地址,并且地址204中的附加位被用于定位頁中的特定位置208以執(zhí)行數(shù)據(jù)傳送。S卩,條目206b中的地址和接收的PCI地址204的選定位被用于提供可直接用于訪問系統(tǒng)存儲器的地址。例如,直接可用的地址由條目206b中的地址的高階位(例如,在4k頁例子中,為位63:12)和來自接收的PCI地址的選定的低階位(例如,對于4k頁,為位11:1)的級聯(lián)形成。在一個例子中,是操作系統(tǒng)向特定的適配器分配DMA地址空間。該分配是通過注冊處理執(zhí)行的,這導(dǎo)致用于該適配器的設(shè)備表條目210的初始化(通過例如可信軟件)。設(shè)備表條目位于位于I/o集線器112中的設(shè)備表211中。例如,設(shè)備表211位于I/O集線器的地址轉(zhuǎn)換和保護單元內(nèi)。在一個例子中,設(shè)備表條目(DTE) 210包含諸如以下的大量字段格式212 :該字段包含表不各種信息的多個位,該信息包含例如地址轉(zhuǎn)換表的上級表的地址轉(zhuǎn)換格式。地址轉(zhuǎn)換格式表示表的級(在以上的例子中,為第一級表)以及在提供可直接用于訪問系統(tǒng)存儲器的地址時使用的選定地址轉(zhuǎn)換格式(也稱為轉(zhuǎn)換格式)(例 如,CPU DAT兼容、I/O擴展地址、繞過、不獲取等);頁大小213:該字段表示要被訪問的頁(或存儲器的其它單元)的大?。籔CI基礎(chǔ)地址214和PCI極限216 :這些值提供用于限定DMA地址空間并驗證接收的地址(例如,PCI地址)有效的范圍;IOAT (輸入/輸出地址轉(zhuǎn)換)指針218 :該字段包含指向用于DMA地址空間的地址轉(zhuǎn)換表的最高級的指針。在其它實施例中,DTE可包含更多、更少或不同的信息。在一個實施例中,通過使用位于由與適配器相關(guān)的PCI函數(shù)220(和/或通過地址中的一部分)發(fā)出的請求中的請求方標(biāo)識符(RID),定位被用于特定轉(zhuǎn)換中的設(shè)備表條目。在請求以及用于訪問系統(tǒng)存儲器的I/O地址(例如,64位PCIe地址)中包含請求方ID (例如,規(guī)定例如總線編號、設(shè)備編號和函數(shù)編號的16位值)。該請求,包含RID和I/O地址,通過例如用于提供索引值的交換機114被提供給例如內(nèi)容可尋址存儲器(CAM)230。例如,CAM包含多個條目,每個條目與到設(shè)備表中的索引對應(yīng)。各CAM條目包含RID的值。如果例如接收到的RID匹配包含于CAM中的條目中的值,那么使用相應(yīng)的設(shè)備表索引以定位設(shè)備表條目。即,使用CAM的輸出以索引到設(shè)備表211中以定位設(shè)備表條目210。如果不存在匹配,那么接收到的信息包被舍棄,使得不執(zhí)行對于系統(tǒng)存儲器的訪問。(在其它實施例中,不需要CAM或其它查找并且使用RID作為索引)。隨后,使用設(shè)備表條目內(nèi)的字段,以確保地址的有效性和地址轉(zhuǎn)換表的配置。例如,通過I/O集線器的硬件(例如,地址轉(zhuǎn)換和保護單元)檢查請求中的界內(nèi)地址,以確保它處于由存儲于設(shè)備表條目中的PCI基礎(chǔ)地址214和PCI極限216限定的邊界內(nèi),其中該設(shè)備表條目通過使用提供地址的請求的RID來定位。這確保地址處于事先注冊的并且為該地址轉(zhuǎn)換表有效配置的范圍內(nèi)。在一個實施例中,為了獲得系統(tǒng)存儲器地址(即,直接可用于訪問系統(tǒng)存儲器的地址),首先,執(zhí)行注冊處理。該注冊處理注冊特定的地址空間,并因此通過諸如特定適配器函數(shù)的特定請求方注冊相關(guān)的地址轉(zhuǎn)換表。參照圖3A描述了該注冊處理的概要的一個例子。參照圖3A,首先,在步驟300中,在與系統(tǒng)存儲器耦合的中央處理單元中的一個內(nèi)執(zhí)行的操作系統(tǒng)確定適配器要訪問的地址空間的大小和位置。在一個例子中,地址空間的大小由通過操作系統(tǒng)設(shè)定的PCI基礎(chǔ)地址(base address)和PCI極限(limit)來確定。操作系統(tǒng)通過使用一個或多個準(zhǔn)則確定基礎(chǔ)和極限。例如,如果操作系統(tǒng)希望使PCI地址直接映射到CPU虛擬地址,那么這樣設(shè)定基礎(chǔ)和極限。在另一例子中,如果希望適配器和/或操作系統(tǒng)圖像之間的附加隔離,那么選擇被使用的地址以提供非重疊和不相交的地址空間。位置也由操作系統(tǒng)規(guī)定,并且該位置基于例如適配器的特性。此外,作為注冊處理的一部分,在步驟302中,確定要為適配器函數(shù)注冊哪個地址轉(zhuǎn)換格式。即,確定要使用哪個格式來提供可直接在訪問系統(tǒng)存儲器時使用的適配器函數(shù)的地址。根據(jù)本發(fā)明的一個方面,多個地址轉(zhuǎn)換格式是可用的,并且從這多個格式,操作系統(tǒng)選擇一個格式用于適配器函數(shù)。該選擇基于例如地址空間的配置、適配器類型等。各種可能的格式包含a)繞過地址轉(zhuǎn)換的繞過格式。當(dāng)正在為其執(zhí)行注冊的適配器是可信的適配器時,可以使用該格式。如果例如適配器的硬件設(shè)計足夠健壯并且得到保護使得地址不能被破壞,則適配器被視為是可信的適配器。例如,提供其自身的轉(zhuǎn)換和保護機制的內(nèi)部開發(fā)的適配器或者由可信的固件管理的適配器可被視為可信的適配器。 如這里使用的那樣,固件包含例如處理器的微代碼、毫代碼和/或宏代碼。它包含例如在高級機器代碼的實現(xiàn)中使用的硬件級指令和/或數(shù)據(jù)結(jié)構(gòu)。在一個實施例中,它包含例如專有代碼,該專有代碼一般作為包含可信軟件的微代碼或下層硬件特有的微代碼被傳輸并控制對于系統(tǒng)硬件的操作系統(tǒng)訪問。通過例如System z 上的I/O適配器的固有附件,使用I/O地址轉(zhuǎn)換(Ι0ΑΤ)以通過適配器提供系統(tǒng)存儲器的DMA訪問的保護和隔離。但是,存在不需要額外水平的保護的適配器類別,包含以上描述的那些。因此,對于這些適配器,可以選擇繞過格式;b)不獲取格式,其中在不獲取任何轉(zhuǎn)換表的情況下包含于來自適配器的初始請求中的地址是可用的。當(dāng)存儲器是鄰近的、頁大小是已知的以及地址用于不需要獲取來自系統(tǒng)存儲器的任何轉(zhuǎn)換表的受約束區(qū)域(例如,4k或IM頁)時,可以選擇該格式。從IOAT指針的地址導(dǎo)出可用于訪問系統(tǒng)存儲器的地址(即,選擇不獲取格式時作為結(jié)果得到的地址)。例如,對于4k頁大小,PCI地址的低階位(例如,位11:0)與IOAT指針的上部52位級聯(lián),以獲得可用于訪問系統(tǒng)存儲器的作為結(jié)果得到的地址;c) CPU DAT兼容格式,其中用于轉(zhuǎn)換I/O地址的轉(zhuǎn)換表與用于CPU DAT轉(zhuǎn)換的轉(zhuǎn)換表兼容。即,要使用與已用于CPU動態(tài)地址轉(zhuǎn)換的地址轉(zhuǎn)換表類似的和兼容的地址轉(zhuǎn)換表。這便于使用熟悉使用這些類型的表的那些操作系統(tǒng);使得能夠在CPU與I/O適配器之間共享表;并向某些操作系統(tǒng)(例如,Z/VM )提供其可分頁訪客端的DMA空間的管理效率。如后面參照圖5C進一步詳細描述的那樣,存在各種可用的CPU DAT兼容格式。d)對于I/O地址轉(zhuǎn)換使用擴展地址轉(zhuǎn)換表的I/O擴展地址轉(zhuǎn)換格式。通過該格式,地址轉(zhuǎn)換表專用于I/o操作,并且會在大小上比一般在CPU地址轉(zhuǎn)換中使用的大小要大。例如,可存在IM或甚至更大的頁表和/或其它轉(zhuǎn)換表。此外,不同級的轉(zhuǎn)換表一包含頁表一的大小可相互不同,并且它們可與頁本身不同。增加常規(guī)的大小減少總線事務(wù)并且有助于改善I/O轉(zhuǎn)換高速緩存。頁表和其它轉(zhuǎn)換表的大小以及頁的大小將確定需要多少級的轉(zhuǎn)換。在后面參照圖進一步詳細描述不同的I/O擴展地址轉(zhuǎn)換格式的例子。參照圖3B描述由操作系統(tǒng)執(zhí)行的用來從對于正在為其執(zhí)行注冊的適配器函數(shù)使用的多個可用的地址轉(zhuǎn)換格式中選擇地址轉(zhuǎn)換格式的處理的一個實施例。在一個例子中,為了進行這種選擇,操作系統(tǒng)考慮其內(nèi)部結(jié)構(gòu)、它想如何尋址存儲器、適配器的類型等。參照圖3B,首先,在本例子中,在查詢310中,確定正在為其執(zhí)行注冊的適配器是否是可信的適配器。通過例如檢查數(shù)據(jù)結(jié)構(gòu)中的指示(例如,被存儲于存儲器中)進行這種確定。如果操作系統(tǒng)決定適配器是可信的適配器,那么,在步驟312中,進一步確定是否繞過轉(zhuǎn)換。例如,操作系統(tǒng)基于例如存儲的指示符確定是否可接受繞過。如果操作系統(tǒng)決定轉(zhuǎn)換要被繞過,那么在步驟313中選擇繞過格式,并且由請求方提供的地址可直接被用于訪問系統(tǒng)存儲器。返回到查詢310,但是,如果適配器不是可信的適配器,或者如果在查詢312中不選擇繞過,那么,在查詢314中,進一步確定是否選擇不獲取格式。對于這種選擇,操作系統(tǒng)考慮例如存儲器是否是鄰近的以及頁(或存儲器的其它單元)的大小。如果該配置允許不獲取格式,那么,假定已通過任何有效性檢查,則在步驟316中選擇不獲取格式。因此,直接從IOAT指針的地址導(dǎo)出PCI請求的作為結(jié)果得到的地址。
返回到查詢314,如果不選擇不獲取格式,那么,在查詢318中,進一步確定請求是否要使用CPU DAT兼容地址轉(zhuǎn)換表。再次,操作系統(tǒng)在決定它是否希望CPU DAT兼容格式時考慮其結(jié)構(gòu)和可尋址性。如果它是希望的格式并且假定已通過任何有效性檢查,那么在步驟320中選擇CPU DAT兼容格式。特別地,在本例子中,從以下描述的一個或多個可用的格式中選擇一個CPU DAT兼容格式。但是,如果CPU DAT兼容性不被選擇,那么在查詢322中確定是否希望I/O擴展地址轉(zhuǎn)換格式。即,作為例子,基于要使用的結(jié)構(gòu)和存儲器尋址對其再做一次決定。如果希望I/o擴展地址轉(zhuǎn)換格式,假定已通過任何有效性檢查,那么在步驟324中選擇I/O擴展地址轉(zhuǎn)換格式。特別地,在本例子中,如下面描述的那樣,從一個或多個可用的格式中選擇一個I/O擴展地址轉(zhuǎn)換格式。但是,如果對于所有查詢回答都為否,那么,在步驟326中通過代表請求方的操作系統(tǒng)選擇特定的格式。例如,可以選擇缺省格式。該缺省格式可以是CPU DAT兼容格式或I/O擴展地址轉(zhuǎn)換格式或甚至另一格式,諸如剛剛為I/O設(shè)置但與CPU DAT格式表更緊密相關(guān)的地址轉(zhuǎn)換表。存在許多可能性。此外,雖然在本例子中圖3B的查詢具有特定的次序,但是,在其它例子中,它們可以具有不同的次序。返回圖3A,隨后,假定需要地址轉(zhuǎn)換表,在步驟304中,產(chǎn)生一個或多個地址轉(zhuǎn)換表以覆蓋該DMA地址空間。在一個例子中,該產(chǎn)生包含構(gòu)建該表并在表條目內(nèi)放置適當(dāng)?shù)牡刂?。作為例子,轉(zhuǎn)換表中的一個是具有512個64位條目的4k頁表,并且每一條目包含與所分配的地址空間兼容的4k頁地址。 然后,如參照圖3C進一步詳細描述的那樣,在步驟306中,為適配器注冊DMA地址空間。在本例子中,假定每個適配器存在一個PCI函數(shù),并因此每個適配器存在一個請求方ID。例如,響應(yīng)于操作系統(tǒng)請求,通過與系統(tǒng)存儲器耦合的中央處理單元執(zhí)行該邏輯。參照圖3C,首先,在一個實施例中,在步驟350中,選擇要與適配器的請求方ID對應(yīng)的可用的設(shè)備表條目。即,請求方ID將被用于定位設(shè)備表條目。另外,在步驟352中,PCI基礎(chǔ)地址和PCI極限被存儲于設(shè)備表條目中。并且,在步驟354中,最高級地址轉(zhuǎn)換表的格式被存儲于設(shè)備表條目的格式字段中。例如,格式字段包含多個位,并且,這些位中的一個或多個表示最高級表的格式和選定地址轉(zhuǎn)換格式(例如,段級、CPU DAT兼容)。在又一實施例中,一個或多個位表示最高級,并且一個或多個其它位表示所確定的轉(zhuǎn)換格式(例如,繞過、不獲取、特定的CPU DAT兼容格式、特定的I/O擴展地址轉(zhuǎn)換格式等)。另外,在步驟356中,用于指向最高級地址轉(zhuǎn)換表(或者,在不獲取的情況下,指向頁)的輸入/輸出地址轉(zhuǎn)換(Ι0ΑΤ)指針,如果有的話,被存儲于設(shè)備表條目中。這完成了注冊處理。響應(yīng)于執(zhí)行了注冊,DMA地址空間和相應(yīng)的地址轉(zhuǎn)換表,如果有的話,準(zhǔn)備好以供使用,并且設(shè)備表條目準(zhǔn)備好以供使用。參照圖4描述了關(guān)于處理由諸如適配器函數(shù)的請求方發(fā)出以訪問系統(tǒng)存儲器的請求的細節(jié)。由I/O集線器執(zhí)行以下描述的處理。在一個例子中,它是執(zhí)行邏輯的I/O集線器的地址轉(zhuǎn)換和保護單元。在一個實施例中,首先,在步驟400中,在輸入/輸出集線器上接收DMA請求。例如,PCI函數(shù)發(fā)出通過例如PCI交換機轉(zhuǎn)送給PCI集線器的請求。在步驟402中,通過使用請求中的請求方ID,定位適當(dāng)?shù)脑O(shè)備表條目。然后,在查詢404中,確定設(shè)備表條目是否有 效。在一個例子中,通過檢查條目自身中的有效位,來確定有效性。例如,響應(yīng)于操作系統(tǒng)執(zhí)行啟用函數(shù)請求,設(shè)定該位。如果被啟用,那么該位被設(shè)為例如I (即,有效);否則,它保持為零(即,無效)。在另一例子中,可以在完成注冊處理時設(shè)定該位。如果設(shè)備表條目無效,那么在步驟405中給出錯誤。否則,在查詢406中確定在請求中提供的PCI地址是否小于存儲于設(shè)備表條目中的PCI基礎(chǔ)地址。如果是,那么,在步驟407中,地址處于有效范圍外并且提供錯誤。但是,如果PCI地址大于等于基礎(chǔ)地址,那么,在查詢408中,進一步確定PCI地址是否大于設(shè)備表條目中的PCI極限值。如果PCI地址大于極限,那么,在步驟409中,由于地址在有效范圍外,因此再一次給出錯誤。但是,如果地址處于有效范圍內(nèi),那么處理繼續(xù)。在一個例子中,在查詢410中,確定在設(shè)備表條目中規(guī)定的地址轉(zhuǎn)換格式是否表示繞過轉(zhuǎn)換。如果是,那么地址在I/o總線上被直接轉(zhuǎn)送到存儲器控制器以在沒有轉(zhuǎn)換條目的任何獲取的情況下訪問存儲器。在步驟426中,I/O集線器繼續(xù)處理以啟用地址上的數(shù)據(jù)的獲取/存儲。返回查詢410,如果格式不表示繞過,那么,在查詢412中,確定格式是否表示在不需要地址轉(zhuǎn)換表的任何獲取的情況下基于IOAT指針直接訪問存儲器的能力。如果表示不獲取,那么在步驟414中,從IOAT指針導(dǎo)出作為結(jié)果得到的地址并且不需要從系統(tǒng)存儲器獲取地址轉(zhuǎn)換表。作為結(jié)果得到的地址被發(fā)送到存儲器控制器并被用于定位頁和頁中的特定條目。例如,如果頁大小為4k,那么使用位11:0作為相對于IOAT指針的偏移。在步驟426中,I/O集線器繼續(xù)處理以啟用該頁條目上的數(shù)據(jù)的獲取/存儲。返回到查詢412,另一方面,如果需要使用轉(zhuǎn)換表,那么,在步驟416中,使用在設(shè)備表條目中提供的格式以確定轉(zhuǎn)換表的類型(例如,CPU DAT兼容或I/O擴展地址轉(zhuǎn)換),并確定要被用于地址轉(zhuǎn)換的地址中的PCI地址位。例如,如果格式表示具有后面描述的4k頁和4k地址轉(zhuǎn)換表的I/O擴展地址轉(zhuǎn)換格式,并且上級表是具有4k頁的第一級表,那么地址的位29:21被用于索引到第一級表;位20:12被用于索引到頁表;并且位11:0被用于索引到頁。使用的位依賴于需要多少位以索引到給定大小的頁或表。例如,對于利用字節(jié)級尋址的4k頁,使用12位以尋址4096字節(jié);并且對于具有512個分別為8字節(jié)的條目的4k頁,使用9位以尋址512條目,等等。然后,在步驟418中,PCI集線器獲取適當(dāng)?shù)牡刂忿D(zhuǎn)換表條目。例如,首先,通過使用設(shè)備表條目的IOAT指針,定位最高級轉(zhuǎn)換表。然后,使用地址的位(用于有效性而不是轉(zhuǎn)換的高階位之后的那些位;例如,在以上的例子中,為位29:21)以定位該表內(nèi)的特定條目。在查詢420中,基于例如在設(shè)備表條目中提供的格式,確定定位的地址轉(zhuǎn)換條目是否具有正確的格式。例如,將設(shè)備表條目中的格式與在地址轉(zhuǎn)換條目中指示的格式相比較。如果相同,則設(shè)備表條目中的格式是有效的。如果不是,那么在步驟422中,指示錯誤;否則,在查詢424中,處理繼續(xù)確定它是否是要被處理的最后的表。即,確定是否存在獲得真實或絕對地址所需要的其它地址轉(zhuǎn)換表或者是否已定位了最低級表條目?;谒峁┑母袷胶鸵烟幚淼谋淼拇笮∵M行該確定。如果它不是最后的表,那么處理繼續(xù)步驟418。否貝U,在步驟426,I/O集線器繼續(xù)處理以啟用轉(zhuǎn)換后的地址上的數(shù)據(jù)的獲取或存儲。例如,I/O集線器將基于初始地址和選定轉(zhuǎn)換格式所確定的確定地址轉(zhuǎn)送到存儲器控制器(或直接轉(zhuǎn)送到存儲器),該存儲器控制器(或存儲器)使用它以從/向DMA存儲器獲取和/或存儲數(shù) 據(jù)。參照圖5A 描述關(guān)于轉(zhuǎn)換表和不同轉(zhuǎn)換格式的使用的其它細節(jié)。在一個例子中,如參照圖5A 5B所示的那樣,通過例如忽略轉(zhuǎn)換期間地址的高階位并僅使用低階位以遍歷轉(zhuǎn)換表,來減少轉(zhuǎn)換層級的數(shù)量并因此減少執(zhí)行轉(zhuǎn)換所需要的獲取的數(shù)量。高階位和低階位的指定基于例如向適配器分配的DMA地址空間的大小。在后面的例子中進一步示出部分地址相對于完全地址的使用。首先參照圖5A,示出在地址轉(zhuǎn)換/存儲器訪問中使用整個地址的例子。通過該現(xiàn)有技術(shù),需要六級轉(zhuǎn)換表,包含頁表。由IOAT指針指向最高級表的開始(例如,在本例子中,為第5級表),然后使用PCI地址的位以定位表中的條目。每一轉(zhuǎn)換表條目指向低級轉(zhuǎn)換表或頁的開始(例如,第5級表中的條目指向第4級表的開始,等等)。在本例子中,DMA地址空間(DMAAS)的大小為6M,并且,每個表為最多具有512個8字節(jié)條目的4k字節(jié)(除了基于地址大小而僅支持128個條目的第5級表以外)。地址為例如64位FFFF C0000009 C600。IOAT指針指向第5級表的開始,并且使用PCI地址的位63:57以索引到第5級表以定位第4級表的開始;使用PCI地址的位56:48以索引到第4級表以定位第3級表的開始;使用位47:39以索引到第3級表以定位第2級表的開始;使用位38:30以索引到第2級表以定位第I級表的開始;使用位29:21以索引到第I級表以定位頁表的開始;使用位20:12以索引到頁表以定位頁的開始;并且使用位11:0以定位4k頁中的條目。因此,在本例子中,將所有的地址位用于轉(zhuǎn)換/訪問。這與圖5B中的例子相反,在圖5B中,地址空間具有相同的大小(例如,6M)并且地址是相同的,但是轉(zhuǎn)換技術(shù)在轉(zhuǎn)換期間忽略地址位中的一些。在本例子中,對于轉(zhuǎn)換忽略地址的位63:30。IOAT指針指向第I級表的開始,并且使用PCI地址的位29:21以索引到第I級表以定位頁面的開始;使用位20:12以索引到適當(dāng)?shù)捻摫硪远ㄎ豁摰拈_始;并且使用位11:0以索引到4k頁。如所示的那樣,第I級表500包含三個條目502,每個條目提供到三個頁表504中的一個的地址。需要的頁表的數(shù)量以及隨之而來的其它級表的數(shù)量依賴于例如DMA地址空間的大小、轉(zhuǎn)換表的大小和/或頁的大小。在本例子中,DMA地址空間為6M,并且每個頁表為4k,從而具有最多512條目。因此,每個頁表可最多映射到存儲器的2M(4kX512條目)。因此,對于6M地址空間需要三個頁表。第I級表能夠保持三個條目,每個用于不同頁表,因此,在本例子中,不需要其它級的地址轉(zhuǎn)換表。另外,如上所述,可對地址轉(zhuǎn)換使用地址轉(zhuǎn)換表的不同格式,并且在格式內(nèi)可存在變化。例如,可存在各種CPU DAT兼容格式,參照圖5C描述其例子。如所示的那樣,作為例子,一個CPU DAT兼容格式是4k頁CPU DAT兼容格式550,而另一個是IM頁CPU DAT兼容格式552。所示的位的數(shù)量是用于索引到頁或表(或定位該頁或表中的條目)的地址位的數(shù)量。例如,使用PCI地址的12位554作為到4k頁556中的字節(jié)偏移;使用8位558作為到頁表560中的索引;使用11位562作為到段表564中的索引,等等。位于指定的地址轉(zhuǎn)換表下面的是由地址轉(zhuǎn)換表支持的地址空間的最大大小。例如,頁表560支持IM DMA地址空間;段表564支持2G DMA地址空間,等等。在該圖以及圖中,K =千字節(jié)(kilobyte),M =兆字節(jié)(megabyte), G =千兆字節(jié)(gigabyte), T =太字節(jié)(terabyte), P =千太字節(jié)(petabyte), E(exabyte)。如所示的那樣,隨著頁的大小增加,轉(zhuǎn)換表的級數(shù)減少。例如,對于4k頁556,需要 頁表,但是對于IM頁則不需要它。其它的例子和變更是可能的。在圖中示出了 I/O擴展地址轉(zhuǎn)換格式的各種例子。例如,示出以下格式具有4k頁570的4k地址轉(zhuǎn)換表;具有4k頁572的IM地址轉(zhuǎn)換表;和具有IM頁574的IM地址轉(zhuǎn)換表。與CPU DAT兼容格式同樣,列出的位的數(shù)量是用于定位特定表中的條目的那些位。例如,在附圖標(biāo)記576上,12位是到4k頁中的偏移。類似地,在附圖標(biāo)記578上,9位被用于索引到I/O頁表中。該I/O頁表允許具有2M大小的DMA地址空間。存在許多其它例子。在一個特定實現(xiàn)中,為了執(zhí)行DMA地址空間向適配器的注冊,使用被稱為修改PCI函數(shù)控制(MPFC)指令的指令。例如,操作系統(tǒng)確定它希望使用哪個地址轉(zhuǎn)換格式,構(gòu)建用于該格式的地址轉(zhuǎn)換表,然后發(fā)出MPFC指令,該MPFC指令包含該格式作為指令的操作數(shù)。在一個例子中,在函數(shù)信息塊(后面描述)——其是指令的操作數(shù)——中包含指令的格式和其它操作數(shù)。函數(shù)信息塊然后被用于更新DTE,并且在一個實施例中,任選地更新包含適配器的操作參數(shù)的函數(shù)表條目(FTE)。參照圖6A 9描述與該指令,特別是注冊處理,相關(guān)的細節(jié)的一個實施例。參照圖6A,修改PCI函數(shù)控制指令600包含例如,指示修改PCI函數(shù)控制指令的op代碼602 ;規(guī)定包含關(guān)于適配器函數(shù)的各種信息的位置的第一字段604,其中正在為適配器函數(shù)建立操作參數(shù);和規(guī)定從中獲取PCI函數(shù)信息塊(FIB)的位置的第二字段606。以下進一步描述由字段I和2指定的位置的內(nèi)容。在一個實施例中,字段I指定包含各種信息的通用寄存器。如圖6B所示,寄存器的內(nèi)容包含例如,識別正在代表其執(zhí)行修改指令的適配器函數(shù)的句柄的函數(shù)句柄610 ;指示在與由函數(shù)句柄指定的適配器函數(shù)相關(guān)的系統(tǒng)存儲器中的地址空間的地址空間612 ;規(guī)定要為適配器函數(shù)執(zhí)行的操作的操作控制614 ;和當(dāng)以預(yù)定代碼完成指令時提供關(guān)于指令的狀態(tài)的狀態(tài)616。在一個實施例中,函數(shù)句柄包含例如指示是否啟用句柄的啟用指示符、識別適配器函數(shù)的函數(shù)編號(其是靜態(tài)標(biāo)識符并可被用于索引到函數(shù)表中),和規(guī)定該函數(shù)句柄的特定實例的實例編號。對于每個適配器函數(shù)存在一個函數(shù)句柄,并且該函數(shù)句柄被用于在函數(shù)表中定位函數(shù)表條目(FTE)。每個函數(shù)表條目包含操作參數(shù)和/或與其適配器函數(shù)相關(guān)的其它信息。作為一個例子,函數(shù)表條目包含實例編號該字段表示與函數(shù)表條目相關(guān)的適配器函數(shù)句柄的特定實例;設(shè)備表條目(DTE)索引I…η :存在一個或多個設(shè)備表索引,并且每個索引是進入設(shè)備表中以定位設(shè)備表條目(DTE)的索引。每個適配器函數(shù)存在一個或多個設(shè)備表條目,并且每個條目包含與其適配器函數(shù)相關(guān)的信息,該信息包含被用于處理適配器函數(shù)的請求(例如,DMA請求、MSI請求)的信息和涉及與適配器函數(shù)相關(guān)的請求(例如,PCI指令)的信息。每個設(shè)備表條目與分配給適配器函數(shù)的系統(tǒng)存儲器內(nèi)的一個地址空間相關(guān)。適配器函數(shù)可在分配給適配器函數(shù)的系統(tǒng)存儲器內(nèi)具有一個或多個地址空間。繁忙指示符該字段指示適配器函數(shù)是否繁忙;永久錯誤狀態(tài)指示符該字段指示適配器函數(shù)是否處在永久錯誤狀態(tài);
恢復(fù)已啟動指示符該字段指示對于適配器函數(shù)是否已經(jīng)啟動了恢復(fù);允許指示符該字段指示嘗試控制適配器函數(shù)的操作系統(tǒng)是否具有這樣做的授權(quán);啟用指示符該字段指示適配器函數(shù)是否被啟用(例如,I=啟用,O =禁用);請求方標(biāo)識符(RID):這是適配器函數(shù)的標(biāo)識符,并且包含例如總線編號、設(shè)備編號和函數(shù)編號。在一個例子中,該字段被用于訪問適配器函數(shù)的配置空間。(適配器的存儲器可被定義為包含例如配置空間、I/o空間和/或一個或多個存儲器空間的地址空間。)在一個例子中,可通過規(guī)定操作系統(tǒng)(或其它配置)向適配器函數(shù)發(fā)出的指令中的配置空間,來訪問配置空間。在指令中規(guī)定的是進入配置空間的偏移和用于定位包含RID的適當(dāng)函數(shù)表條目的函數(shù)句柄。固件接收指令并確定它用于配置空間。因此,它使用RID以產(chǎn)生給I/O集線器的請求,并且I/O集線器產(chǎn)生用于訪問適配器的請求。適配器函數(shù)的位置基于RID,并且偏移規(guī)定進入適配器函數(shù)的配置空間中的偏移。基礎(chǔ)地址寄存器(BAR) (I η):該字段包含表示為BARtl BARn的多個無符號整數(shù),其與原始規(guī)定的適配器函數(shù)相關(guān),并且其值也被存儲于與適配器函數(shù)相關(guān)的基礎(chǔ)地址寄存器中。每個BAR規(guī)定適配器函數(shù)內(nèi)的存儲器空間或I/O空間的開始地址,并且還指示地址空間的類型,即,作為例子,它是64或32位存儲器空間,還是32位I/O空間。在一個例子中,它被用于訪問適配器函數(shù)的存儲器空間和/或I/O空間。例如,將與在指令中指定的地址空間相關(guān)的基礎(chǔ)地址寄存器中的值與在指令中提供的用于訪問適配器函數(shù)的偏移相加,以獲得用于訪問適配器函數(shù)的地址。在指令中提供的地址空間標(biāo)識符識別要被訪問的適配器函數(shù)內(nèi)的地址空間以及要被使用的相應(yīng)BAR。Size (大小)1…η :該字段包含稱為SIZEtl SIZEn的多個無符號整數(shù)。非零時的Size字段的值代表每個地址空間的大小,其中每個條目對應(yīng)于與前面描述的BAR。以下描述關(guān)于BAR和Size的其它細節(jié)。I.當(dāng)對于適配器函數(shù)不實現(xiàn)BAR時,BAR字段及其相應(yīng)的大小字段均被存儲為零。2.當(dāng)BAR字段代表I/O地址空間或32位存儲器地址空間時,相應(yīng)的大小字段是非零的并且代表地址空間的大小。3.當(dāng)BAR字段代表64位存儲器地址空間時,
a. BARn字段代表最低有效地址位。b.下一連續(xù)的BARn+1字段代表最高有效地址位。c.相應(yīng)的SIZEn字段是非零的并且代表地址空間的大小。d.相應(yīng)的SIZEn+1字段是無意義的并且被存儲為零。內(nèi)部路由信息該信息被用于執(zhí)行到適配器的特定路由。作為例子,它包含例如節(jié)點、處理器芯片和集線器尋址信息。狀態(tài)指示它提供例如對于加載/存儲操作是否被阻止或者適配器是否處于錯誤狀態(tài)的指示以及其它指示。 在一個例子中,基于由固件執(zhí)行的監(jiān)視,設(shè)定繁忙指示符、永久錯誤狀態(tài)指示符和恢復(fù)已啟動指示符。此外,例如基于策略來設(shè)定允許指示符;并且,BAR信息基于由處理器(例如,處理器的固件)在總線測量(bus walk)期間發(fā)現(xiàn)的配置信息。可基于配置、初始化和/或事件設(shè)定其它字段。在其它實施例中,函數(shù)表條目可包含更多、更少或不同的信息。所包含的信息可依賴于由適配器函數(shù)支持或者對適配器函數(shù)啟用的操作。參照圖6C,在一個例子中,字段2指定PCI函數(shù)信息塊(FIB)的邏輯地址620,其包含關(guān)于相關(guān)的適配器函數(shù)的信息。函數(shù)信息塊被用于更新與適配器函數(shù)相關(guān)的設(shè)備表條目和/或函數(shù)表條目(或其它位置)。信息在適配器的初始化和/或配置期間被存儲于FIB中,和/或響應(yīng)于特定事件而被存儲。參照圖6D描述了關(guān)于函數(shù)信息塊(FIB)的其它細節(jié)。在一個實施例中,函數(shù)信息塊650包含以下字段格式651 :該字段規(guī)定FIB的格式。截取控制652 :該字段被用于指示通過可分頁模式訪客端對特定指令的訪客端執(zhí)行是否導(dǎo)致指令截??;錯誤指示654:該字段包含用于直接存儲器訪問和適配器中斷的錯誤狀態(tài)指示。當(dāng)該位被設(shè)定(例如,I)時,在執(zhí)行直接存儲器訪問或?qū)τ谶m配器函數(shù)的適配器中斷的同時已經(jīng)檢測到一個或多個錯誤。加載/存儲被阻止656 :該字段指示加載/存儲操作是否被阻止;PCI函數(shù)有效658 :該字段包含對于適配器函數(shù)的啟用控制。當(dāng)該位被設(shè)定(例如,I)時,適配器函數(shù)被視為對于I/O操作被啟用;地址空間已注冊660 :該字段包含用于適配器函數(shù)的直接存儲器訪問啟用控制。當(dāng)該字段被設(shè)定(例如,I)時,直接存儲器訪問被啟用。頁大小661 :該字段表示要由DMA存儲器訪問訪問的存儲器的頁或其它單元的大小;PCI基礎(chǔ)地址(PBA) 662 :該字段是在分配給適配器函數(shù)的系統(tǒng)存儲器中的地址空間的基礎(chǔ)地址。它代表允許適配器函數(shù)用于對規(guī)定的DMA地址空間進行直接存儲器訪問的最低虛擬地址;PCI地址極限(PAL) 664 :該字段代表允許適配器函數(shù)在規(guī)定的DMA地址空間內(nèi)訪問的最高虛擬地址;輸入/輸出地址轉(zhuǎn)換指針(IOAT) 666 :輸入/輸出地址轉(zhuǎn)換指針指定由PCI虛擬地址轉(zhuǎn)換使用的任何轉(zhuǎn)換表中的第一個,或者它可直接指定作為轉(zhuǎn)換的結(jié)果的存儲幀的絕對地址;中斷子類(ISC) 668 :該字段包含用于給出對于適配器函數(shù)的適配器中斷的中斷子類;中斷的數(shù)量(N0I)670 :該字段指定適配器函數(shù)接受的不同中斷代碼的數(shù)量。該字段還限定由適配器中斷位矢量地址字段和適配器中斷位矢量偏移字段指定的適配器中斷位矢量的大小,該大小以位為單位;適配器中斷位矢量地址(AIBV) 672 :該字段規(guī)定適配器函數(shù)的適配器中斷位矢量的地址。在中斷處理中使用該矢量;適配器中斷位矢量偏移674 :該字段規(guī)定適配器函數(shù)的第一適配器中斷位矢量位的偏移;適配器中斷概要位地址(AISB) 676 :該字段提供指定適配器中斷概要位(其在中 斷處理中任選地被使用)的地址;適配器中斷概要位偏移678 :該字段提供到適配器中斷概要位矢量中的偏移;函數(shù)測量塊(FMB)地址680 :該字段提供用于收集關(guān)于適配器函數(shù)的測量的函數(shù)測量塊的地址;函數(shù)測量塊密鑰682 :該字段包含用于訪問函數(shù)測量塊的訪問密鑰;概要位通知控制684 :該字段指示是否存在正在使用的概要位矢量;指令授權(quán)令牌686 :該字段被用于確定可分頁存儲模式訪客端是否被授權(quán)以在沒有主機干涉的情況下執(zhí)行PCI指令。在一個例子中,在z/ Afehiteetui*e 中,在解釋的第2級上,通過開始解釋執(zhí)行(Start Interpretive Execution, SIE)指令解釋性地執(zhí)行可分頁訪客端。例如,邏輯分區(qū)(LPAR)管理程序執(zhí)行SIE指令以在物理的固定存儲器中開始進行邏輯分區(qū)。如果z/VM 是該邏輯分區(qū)中的操作系統(tǒng),那么它發(fā)出SIE指令以在其V = V (虛擬)存儲裝置中執(zhí)行其訪客端(虛擬)機。因此,LPAR管理程序使用第I級SIE,并且z/ VM 管理程序使用第2級 SIE ;以及地址轉(zhuǎn)換格式687 :該字段指示要在轉(zhuǎn)換中使用的最高級轉(zhuǎn)換表的地址轉(zhuǎn)換的選定格式(例如,最高級表(例如,段表,第3區(qū)域等)的指示和選定格式(例如,CPU DAT兼容、I/O擴展地址轉(zhuǎn)換格式、繞過格式、不獲取格式)的指示)。在修改PCI函數(shù)控制指令中指定的函數(shù)信息塊被用于修改與在指令中指定的適配器函數(shù)相關(guān)的選定設(shè)備表條目、函數(shù)表條目和/或其它固件控制。通過修改設(shè)備表條目、函數(shù)表條目和/或其它固件控制,為適配器提供某些服務(wù)。這些服務(wù)包含例如適配器中斷、地址轉(zhuǎn)換、復(fù)位錯誤狀態(tài)、復(fù)位加載/存儲被阻止、設(shè)定函數(shù)測量參數(shù)和設(shè)定截取控制。參照圖7描述了與修改PCI函數(shù)控制指令相關(guān)的邏輯的一個實施例。在一個例子中,指令由操作系統(tǒng)(或其它配置)發(fā)出,并且由執(zhí)行操作系統(tǒng)的處理器(例如,固件)執(zhí)行。在這里的例子中,指令和適配器函數(shù)是基于PCI的。但是,在其它例子中,可以使用不同的適配器架構(gòu)和相應(yīng)的指令。在一個例子中,操作系統(tǒng)向指令提供以下操作數(shù)(例如,在由指令指定的一個或多個寄存器中)=PCI函數(shù)句柄、DMA地址空間標(biāo)識符、操作控制和函數(shù)信息塊的地址。
參照圖7,首先,在查詢700中,確定是否安裝允許修改PCI函數(shù)控制指令的工具(facility)。通過例如檢查存儲于例如控制塊中的指示符進行該確定。如果不安裝該工具,那么在步驟702中,提供異常狀態(tài)。否則,在查詢704中,確定是否由可分頁存儲模式訪客端(或其它訪客端)發(fā)出指令。如果是,那么在步驟706中,主機操作系統(tǒng)將模仿該訪客端的操作。否則,在查詢708中,確定是否對準(zhǔn)操作數(shù)中的一個或多個。例如,確定函數(shù)信息塊的地址是否處于雙字邊界上。在一個例子中,這是任選的。如果不對準(zhǔn)操作數(shù),那么在步驟710中,提供異常狀態(tài)。否則,在查詢712中,確定是否可訪問函數(shù)信息塊。如果不可以,那么在步驟714中,提供異常狀態(tài)。否則,在查詢716中,確定是否啟用在修改PCI函數(shù)控制指令的操作數(shù)中提供的句柄。在一個例子中,通過檢查句柄中的啟用指示符進行該確定。如果句柄不被啟用,那么在步驟718中,提供異常狀態(tài)。如果句柄被啟用,那么在步驟720中,使用句柄以定位函數(shù)表條目。即,使用句柄的至少一部分作為進入函數(shù)表中的索引,以定位與要為其建立操作參數(shù)的適配器函數(shù)對應(yīng) 的函數(shù)表條目。在查詢722中,確定是否找到函數(shù)表條目。如果沒有,那么在步驟724中,提供異常狀態(tài)。否則,如果發(fā)出指令的配置是訪客端,那么在查詢726中,確定函數(shù)是否被配置為供訪客端使用。如果它沒有被授權(quán)用于這種用途,那么在步驟728中,提供異常狀態(tài)。如果被指定,那么在該配置不是訪客端或者可以檢查其它授權(quán)的情況下,該查詢可被忽略。在查詢730中,確定是否啟用函數(shù)。在一個例子中,通過檢查函數(shù)表條目中的啟用指示符進行該確定。如果它沒被啟用,那么在步驟732中,提供異常狀態(tài)。如果函數(shù)被啟用,那么在查詢734中,確定恢復(fù)是否是有效的。如果如函數(shù)表條目中的恢復(fù)指示符所確定的那樣恢復(fù)是有效的,那么在步驟736中,提供異常狀態(tài)。但是,如果恢復(fù)不是有效的,那么,在查詢738中,進一步確定函數(shù)是否繁忙。通過檢查函數(shù)表條目中的繁忙指示符進行該確定。如果函數(shù)繁忙,那么在步驟740中,提供繁忙狀態(tài)。通過繁忙狀態(tài),可重新嘗試而不是丟掉該指令。如果函數(shù)不繁忙,那么,在查詢742中,進一步確定函數(shù)信息塊格式是否有效。例如,檢查FIB的格式字段以確定該格式是否被系統(tǒng)支持。如果它無效,那么在步驟744中,提供異常狀態(tài)。如果函數(shù)信息塊格式有效,那么,在查詢746中,進一步確定在指令的操作數(shù)中規(guī)定的操作控制是否有效。即,該操作控制是否為為該指令規(guī)定的操作控制中的一個。如果它無效,那么在步驟748中,提供異常狀態(tài)。但是,如果操作控制有效,那么處理繼續(xù)以規(guī)定的特定操作控制??梢?guī)定的一個操作控制是在控制適配器的地址轉(zhuǎn)換時使用的寄存器I/O地址轉(zhuǎn)換參數(shù)操作。通過該操作,在來自FIB的適當(dāng)參數(shù)(其是指令的操作數(shù))的DTE、FTE和/或其它位置中設(shè)定與I/o地址轉(zhuǎn)換相關(guān)的PCI函數(shù)參數(shù)。這些參數(shù)包含例如作為該操作的操作數(shù)的以下項=PCI基礎(chǔ)地址、PCI地址極限(也稱為PCI極限或極限)、地址轉(zhuǎn)換格式、頁大小和I/O地址轉(zhuǎn)換指針。還存在隱含的操作數(shù),包含存儲于執(zhí)行指令的處理器可訪問的位置中的開始DMA地址(SDMA )和結(jié)束DMA地址(EDMA )。參照圖8描述建立用于I/O地址轉(zhuǎn)換的操作參數(shù)的邏輯的一個實施例。首先,在查詢800中,確定FIB中的PCI基礎(chǔ)地址是否大于FIB中的PCI極限。如果基礎(chǔ)地址和極限的比較指示基礎(chǔ)地址大于極限,那么在步驟802中,識別異常狀態(tài)。但是,如果基礎(chǔ)地址小于等于極限,那么在查詢804中,進一步確定地址轉(zhuǎn)換格式和頁大小是否有效。如果它們無效,那么在步驟806中,提供異常狀態(tài)。但是,如果它們有效,那么,在查詢808中,進一步確定地址空間的大小(基于基礎(chǔ)地址和極限)是否超過轉(zhuǎn)換能力。在一個例子中,基于上級表的格式,地址空間的大小與可能的最大地址轉(zhuǎn)換能力相比較。例如,如果上級表是DAT兼容段表,那么最大轉(zhuǎn)換能力是2G字節(jié)。如果地址空間的大小超過轉(zhuǎn)換能力,那么在步驟810中,提供異常狀態(tài)。否則,在查詢812中,進一步確定基礎(chǔ)地址是否小于開始DMA地址。如果是,那么在步驟814中,提供異常狀態(tài)。否則,在查詢816中,另外確定地址極限是否大于結(jié)束DMA地址。如果是,那么在步驟818中,提供異常狀態(tài)。在一個例子中,開始DMA地址和結(jié)束DMA地址基于系統(tǒng)范圍的策略。然后,在查詢820中,確定在需要的情況下是否有足夠的資源可用于執(zhí)行I/O地址 轉(zhuǎn)換。如果沒有,那么在步驟822中,提供異常狀態(tài)。否則,在查詢824中,進一步確定是否已在FTE和DTE中已注冊了 I/O地址轉(zhuǎn)換參數(shù)進行。通過檢查FTE/DTE中的參數(shù)的值來進行該確定。例如,如果FTE/DTE中的值為零或另一限定值,那么不執(zhí)行注冊。為了定位FTE,使用在指令中提供的句柄,并且,為了定位DTE,那么使用FTE中的器件索引。如果已經(jīng)為了地址轉(zhuǎn)換而注冊了適配器函數(shù),那么在步驟826中,提供異常狀態(tài)。如果沒有,那么在查詢828中,確定規(guī)定的DMA地址空間是否有效(B卩,它是否是已啟用DTE的地址空間)。如果不是,那么在步驟830中,提供異常狀態(tài)。如果所有的檢查都是成功的,那么在步驟832中,在設(shè)備表條目中并且任選地,在相應(yīng)的函數(shù)表條目(或其它指定位置)中放置轉(zhuǎn)換參數(shù)。例如,與I/O地址轉(zhuǎn)換相關(guān)的PCI函數(shù)參數(shù)從函數(shù)信息塊被復(fù)制,并且被放置于DTE/FTE中。這些參數(shù)包含例如PCI基礎(chǔ)地址、PCI地址極限、轉(zhuǎn)換格式、頁大小和I/O地址轉(zhuǎn)換指針。該操作啟用對于規(guī)定的DMA地址空間的DMA訪問。這啟用用于適配器函數(shù)的I/O地址轉(zhuǎn)換??捎尚薷腜CI函數(shù)控制指令規(guī)定的另一操作控制是非寄存器I/O地址轉(zhuǎn)換參數(shù)操作,其例子參照圖9描述。通過該操作,與I/O地址轉(zhuǎn)換相關(guān)的函數(shù)參數(shù)被復(fù)位為零。該操作禁用對于規(guī)定的DMA地址空間的DMA訪問,并且導(dǎo)致該DMA地址空間的I/O轉(zhuǎn)換后備緩沖器條目被清除,它禁用地址轉(zhuǎn)換。參照圖9,在一個實施例中,在查詢900中,確定是否不注冊I/O地址轉(zhuǎn)換參數(shù)。在一個例子中,通過檢查FTE或DTE中的適當(dāng)參數(shù)的值進行該確定。如果這些字段為零或一些規(guī)定的值,那么它們不被注冊。因此,在步驟902中,提供異常狀態(tài)。如果它們被注冊,那么在查詢904中,確定DMA地址空間是否有效。如果它無效,那么在步驟906中,提供異常狀態(tài)。如果DMA地址空間有效,那么,在步驟908中,清除設(shè)備表條目中的轉(zhuǎn)換參數(shù),并任選地清除相應(yīng)的函數(shù)表條目中的轉(zhuǎn)換參數(shù)。以上詳細描述了用于使各種轉(zhuǎn)換格式可用于并能夠在運行時確定要對于特定函數(shù)(例如,PCI函數(shù))使用來自各種轉(zhuǎn)換格式的哪種轉(zhuǎn)換格式的能力。對于用于該函數(shù)的設(shè)備表條目中的函數(shù),預(yù)注冊所確定的轉(zhuǎn)換格式。然后,在請求的處理中,如果需要的話,基于預(yù)注冊的轉(zhuǎn)換格式,由地址轉(zhuǎn)換單元轉(zhuǎn)換在請求中提供的地址。在此描述的實施例中,適配器是PCI適配器。如在此使用的,PCI指根據(jù)由外圍組件互連特別興趣組(PCI-SIG) (www. pcisig. com/home)定義的基于PCI的規(guī)范而實現(xiàn)的任何適配器,包括但不限于PCI或PCIe。在一個特定例子中,快速外圍組件互連(PCIe)是組件級互連標(biāo)準(zhǔn),其定義了用于I/O適配器和主機系統(tǒng)之間的事務(wù)的雙向通信協(xié)議。根據(jù)用于PCIe總線上的傳輸?shù)腜CIe標(biāo)準(zhǔn),PCIe通信被封裝在包中。源于I/O適配器且止于主機系統(tǒng)的事務(wù)被稱為上行事務(wù)。源于主機系統(tǒng)且止于I/O適配器的事務(wù)被稱為下行事務(wù)。PCIe拓撲基于成對(例如,一個上行鏈路,一個下行鏈路)的點對點單向鏈路以形成PCIe總線。PCIe標(biāo)準(zhǔn)由PCI-SIG維護并公布。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本發(fā)明可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該計算機可讀介質(zhì)中包含計算機可讀的程序代碼??梢圆捎靡粋€或多個計算機可讀的介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計 算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用?,F(xiàn)在參考圖10,在一個例子中,計算機程序產(chǎn)品1000包括,例如,一個或多個計算機可讀存儲介質(zhì)1002,在其上存儲有計算機可讀的程序代碼裝置或邏輯1004,以提供并方便本發(fā)明的一個或多個方面。體現(xiàn)在計算機可讀介質(zhì)上的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,所述介質(zhì)包括但不限于無線、有線、光纜、RF等,或上述的任意合適的組合??梢砸砸环N或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計語言一諸如”C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。本文中將參照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個 用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。除了上述,本發(fā)明的一個或多個方面可由服務(wù)提供商提供、許諾(offer)、部署、管理、服務(wù)等,該服務(wù)提供商提供用戶環(huán)境的管理。例如,服務(wù)提供商可創(chuàng)建、維持、支持等計算機代碼和/或計算機基礎(chǔ)設(shè)施,其為一個或多個用戶執(zhí)行本發(fā)明的一個或多個方面。反過來,服務(wù)提供商可例如根據(jù)預(yù)訂和/或費用協(xié)議從用戶接受付費。額外地或可替換地,月艮務(wù)提供商可從向一個或多個第三方銷售廣告內(nèi)容接受付費。在本發(fā)明的一個方面,可部署用于執(zhí)行本發(fā)明的一個或多個方面的應(yīng)用。作為一個例子,部署應(yīng)用包括提供計算機基礎(chǔ)設(shè)施,其可操作以執(zhí)行本發(fā)明的一個或多個方面。作為本發(fā)明的又一個方面,可部署計算基礎(chǔ)設(shè)施,其包括將計算機可讀代碼集成到計算機系統(tǒng),其中與計算系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。作為本發(fā)明的再一個方面,可提供用于集成計算基礎(chǔ)設(shè)施包括將計算機可讀碼集成到計算機系統(tǒng)的過程。計算機系統(tǒng)包括計算機可讀介質(zhì),其中計算機介質(zhì)包括本發(fā)明的一個或多個方面。與計算機系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。盡管以上描述了各種實施例,這些僅是例子。例如,其他體系結(jié)構(gòu)的計算環(huán)境可包含并使用本發(fā)明的一個或多個方面。作為例子,除了 Systemz 服務(wù)器之外的服務(wù)器,諸如由國際商業(yè)機器公司提供的PowerSystems服務(wù)器或其他服務(wù)器,或其他公司的服務(wù)器,可包括、使用和/或受益于本發(fā)明的一個或多個方面。而且,盡管在此示出的例子中,適配器和PCI集線器被認為是服務(wù)器的一部分,在其他實施例中,它們不是必須被認為是服務(wù)器的一部分,而是可被簡單地認為是耦合到計算環(huán)境的系統(tǒng)存儲器和/或其他組件。計算環(huán)境不需要是服務(wù)器。而且,盡管描述了轉(zhuǎn)換表,可使用任何數(shù)據(jù)結(jié)構(gòu),且術(shù)語表將包括所有這樣的數(shù)據(jù)結(jié)構(gòu)。而且,盡管適配器是基于PCI的,可與其他適配器或其他I/O組件一起使用本發(fā)明的一個或多個方面。適配器和PCI適配器僅僅是例子。而且,可使用其他大小的地址空間、地址表,而不脫離本發(fā)明的主旨。進一步地,可使用本發(fā)明的一個或多個方面轉(zhuǎn)換其他類型的地址。更進一步地,可使用其它類型的轉(zhuǎn)換格式。而且,DTE可具有更多、更少或不同的信息。許多其他變化是可能的。而且,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為例子,可使用適于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng),其包括至少兩個通過系統(tǒng)總線直接或間接耦合到存儲元件的處理器。存儲器元件包括,例如,在程序代碼的實際執(zhí)行期間使用的本地存儲器、大容量存儲器以及高速緩沖存儲器,其提供至少一些程序代碼的臨時存儲,以便減少在執(zhí)行期間必須從大容量存儲器取回代碼的次數(shù)。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點設(shè)備、DASD、磁帶、⑶、DVD、拇指驅(qū)動器(thumb drive)以及其他的存儲介質(zhì)等)可直接或通過介于其間的I/O控制器被耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可被耦合到系統(tǒng)以使得數(shù)據(jù)處理系統(tǒng)能夠通過介于其間的私有或公共網(wǎng)絡(luò)而耦合到其他的數(shù)據(jù)處理系統(tǒng)或遠程打印機或存儲設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅是一些可獲得的網(wǎng)絡(luò)適配器類型。
參考圖11,其描述了實施本發(fā)明的一個或多個方面的主機計算機系統(tǒng)5000的代表性組件。代表性主機計算機5000包括與計算機存儲器(即,中央存儲器)5002通信的一個或多個CPU 5001,以及到存儲介質(zhì)設(shè)備5011和網(wǎng)絡(luò)5010的I/O接口,以用于與其他計算機或SAN等通信。CPU5001符合具有架構(gòu)指令集和架構(gòu)功能的架構(gòu)。CPU 5001可具有動態(tài)地址轉(zhuǎn)換(DAT)5003,其用于將程序地址(虛擬地址)轉(zhuǎn)變?yōu)榇鎯ζ鞯恼鎸嵉刂?。DAT典型地包括用于高速緩存轉(zhuǎn)換的轉(zhuǎn)換后備緩沖器(TLB)5007,這樣稍后對計算機存儲器5002塊的訪問不需要地址轉(zhuǎn)換的延遲。典型地,高速緩存5009被使用在計算機存儲器5002和處理器5001之間。高速緩存5009可以是分層的,具有可被多于一個的CPU獲得的大高速緩存,以及大高速緩存和每個CPU之間的較小、較快(較低級)的高速緩存。在一些實施方式中,較低級的高速緩存被拆分以為指令獲取和數(shù)據(jù)訪問提供單獨的低級高速緩存。在一個實施例中,由指令獲取單元5004經(jīng)由高速緩存5009從存儲器5002獲取指令。指令在指令解碼單元5006中被解碼,且(在一些實施例中與其他指令一起)被發(fā)送到一個或多個指令執(zhí)行單元5008。典型地,使用若干執(zhí)行單元5008,例如算術(shù)執(zhí)行單元、浮點執(zhí)行單元和分支指令執(zhí)行單元。指令被執(zhí)行單元執(zhí)行,如需要,從指令指定的寄存器或存儲器訪問操作數(shù)。如果將從存儲器5002訪問(加載或存儲)操作數(shù),加載/存儲單元5005典型地在被執(zhí)行的指令的控制下處理該訪問。指令可在硬件電路或內(nèi)部微代碼(固件)中或其組合中被執(zhí)行。需注意的是,計算機系統(tǒng)包括本地(或主)存儲器中的信息,以及尋址、保護以及引用和改變記錄。尋址的一些方面包括地址格式、地址空間的概念、地址的各種類型和其中一種類型的地址被轉(zhuǎn)換為另一種類型的地址的方式。一些主存儲器包括永久分配的存儲位置。主存儲器向系統(tǒng)提供直接可被尋址的快速訪問的數(shù)據(jù)存儲。數(shù)據(jù)和程序在可被處理之前都將(從輸入設(shè)備)被加載到主存儲器。主存儲器可包括一個或多個更小、更快速訪問的緩沖存儲器,有時候被稱為高速緩存。高速緩存典型地與CPU或I/O處理器物理地關(guān)聯(lián)。物理結(jié)構(gòu)以及不同存儲介質(zhì)的使用的效果,除了在性能上,通常不會被程序觀察到??删S護用于指令和數(shù)據(jù)操作數(shù)的單獨的高速緩存。高速緩存中的信息可被維護為相鄰的字節(jié),所述字節(jié)位于被稱為高速緩存塊或高速緩存線(或簡稱為線)的整數(shù)界限上。模型可提供EXTRACT CACHEATTRIBUTE (提取高速緩存屬性)指令,其返回高速緩存線的字節(jié)大小。模型也可提供PREFETCH DATA (預(yù)取數(shù)據(jù))和PREFETCH DATARELATIVE LONG (預(yù)取較長數(shù)據(jù))指令,其實現(xiàn)存儲到數(shù)據(jù)或指令高速緩存中的預(yù)取,或數(shù)據(jù)從高速緩存的釋放。存儲器被視為位的長水平串。對于大部分操作來說,以從左到右的順序進行對存儲器的訪問。位串被細分為八個位的單位。八位單位被稱為字節(jié),其是所有信息格式的基本構(gòu)件。存儲器中的每個字節(jié)位置由唯一的非負整數(shù)標(biāo)識,該非負整數(shù)是該字節(jié)位置的地址,或簡稱為字節(jié)地址。相鄰的字節(jié)位置具有連續(xù)的地址,在左邊從O開始且以從左到右的順序進行。地址是無符號二進制整數(shù),且是24、31或64位。信息一次一個字節(jié)或一組字節(jié)地在存儲器和CPU或通道子系統(tǒng)之間傳遞。除非另有指定,例如在z/'Architeeture 中,存儲器中的一組字節(jié)由該組的最左邊的字節(jié)尋址。組中的字節(jié)的數(shù)量可由將被執(zhí)行的操作暗示或顯式地指定。當(dāng)在CPU操作中使用時,一組字節(jié)被稱為字段。在字節(jié)的每個組內(nèi),例如在z/A1Thiteetui*e 中,位以從左到右的順序被編號。在z/ Architecture*^中,最左邊的位有時候被稱為“聞階”位且最右邊的位被稱為“低階”位。但是,位數(shù)不是存儲器地址。僅字節(jié)可被尋址。為了操作存儲器中的字節(jié)的 單個位,訪問整個字節(jié)。字節(jié)上的位從左到右被編號為O到7 (例如在z/'Architeeture 中)。對于24位地址,地址中的位被編號為8-31或40-63,對于31位地址,編號為1_31或33-63,對于64位地址,編號為0-63。在多個字節(jié)的任何其他的固定長度的格式中,構(gòu)成格式的位從O開始被連續(xù)編號。為了錯誤檢測,且優(yōu)選地為了校正,一個或多個校驗位可與每一個字節(jié)或一組字節(jié)一起被傳遞。這樣的校驗位由機器自動生成且不能被程序直接控制。存儲容量以字節(jié)的數(shù)量來表示。當(dāng)存儲器操作數(shù)字段的長度由指令的操作碼暗示時,字段被稱為具有固定長度,其可以是一個、兩個、四個、八個或十六個字節(jié)??蔀槟承┲噶畎凳靖蟮淖侄?。當(dāng)存儲器操作數(shù)字段的長度沒有被暗示,而是被顯式地表示時,該字段被稱為具有可變長度??勺冮L度的操作數(shù)可以一個字節(jié)的增量(或者對于一些指令,以兩個字節(jié)倍數(shù)或其他倍數(shù))在長度上可變。當(dāng)信息被放在存儲器中時,僅替換被包括在指定的字段中的那些字節(jié)位置的內(nèi)容,即使到存儲器的物理路徑的寬度可能大于正被存儲的字段的長度。某些信息單元位于存儲器中的整數(shù)界限上。對于信息單元,當(dāng)其存儲器地址是以字節(jié)表示的單元長度的倍數(shù)時,界限被稱為是整數(shù)的。特殊的名稱被給予整數(shù)界限上的2、
4、8和16字節(jié)的字段。半字是兩字節(jié)邊界上的一組兩個連續(xù)的字節(jié),且是指令的基本構(gòu)件。字是四字節(jié)邊界上的一組四個連續(xù)的字節(jié)。雙字是八字節(jié)邊界上一組八個連續(xù)的字節(jié)。四倍長字(quadword)是16字節(jié)邊界上的一組16個連續(xù)的字節(jié)。當(dāng)存儲器地址指定半字、字、雙字和四倍長字時,地址的二進制表示分別包括一個、兩個、三個或四個最右邊的零位。指令將位于二字節(jié)整數(shù)邊界上。大多數(shù)指令的存儲器操作數(shù)不具有界限對準(zhǔn)要求。在為指令和數(shù)據(jù)操作數(shù)實現(xiàn)單獨的高速緩存的設(shè)備上,如果程序在高速緩存線中存儲且指令被隨后從該高速緩存線獲取,可經(jīng)歷顯著的延遲,不管該存儲是否改變隨后被獲取的指令。在一個實施例中,本發(fā)明可被軟件(有時候被稱為許可的內(nèi)部代碼、固件、微代碼、毫代碼、微微代碼(pico-code)等,其任何一個都將符合本發(fā)明)實施。參考圖11,體現(xiàn)本發(fā)明的軟件程序代碼可典型地由主系統(tǒng)5000的處理器5001從長期存儲介質(zhì)設(shè)備5011(諸如CD-ROM驅(qū)動器、磁帶驅(qū)動或硬盤驅(qū)動器)訪問。軟件程序代碼可體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟磁盤、硬盤驅(qū)動或CD-ROM)中的任何一個上。代碼可在這樣的介質(zhì)上被分發(fā),或可從一個計算機系統(tǒng)的計算機存儲器5002或存儲設(shè)備通過網(wǎng)絡(luò)5010被分發(fā)給其他計算機系統(tǒng)的用戶,以由這樣的其他系統(tǒng)的用戶使用。軟件程序代碼包括操作系統(tǒng),其控制各種計算機組件和一個或多個應(yīng)用程序的功能和交互。程序代碼通??蓮拇鎯橘|(zhì)設(shè)備5011調(diào)頁到相對更高速的計算機存儲器5002,在此它對于處理器5001是可用的。用于在存儲器中、物理介質(zhì)上體現(xiàn)軟件程序代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是熟知的,且不會在此被進一步討論。當(dāng)程序代碼被創(chuàng)建并存儲在有形介質(zhì)(包括但不限于電子存儲模塊(RAM)、閃存、光盤(⑶)、DVD、磁帶等)上時,其經(jīng)常被稱為“計算機程序產(chǎn)品”。計算機程序產(chǎn)品介質(zhì)典型地可由優(yōu)選地位于計算機系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。圖12示出了可在其中實施本發(fā)明的代表性工作站或服務(wù)器硬件系統(tǒng)。圖12的系統(tǒng)5020包括代表性基本計算機系統(tǒng)(base computersystem) 5021,諸如個人計算機、工作站或服務(wù)器,包括可選的外圍設(shè)備。根據(jù)已知技術(shù),基本計算機系統(tǒng)5021包括一個或多個處理器5026以及被用于連接并使能處理器5026和系統(tǒng)5021的其他組件之間的通信的總線??偩€將處理器5026連接到存儲器5025以及可包括例如硬盤驅(qū)動器(例如,包括磁介質(zhì)、 ⑶、DVD和閃存中的任何一個)或磁帶驅(qū)動器的長期存儲器5027。系統(tǒng)5021也可包括用戶接口適配器,其經(jīng)由總線將微處理器5026連接到一個或多個接口設(shè)備,諸如鍵盤5024、鼠標(biāo)5023、打印機/掃描儀5030和/或其他接口設(shè)備,其可以是任何用戶接口設(shè)備,諸如觸摸敏感屏、數(shù)字化輸入墊(digitized entry pad)等??偩€也可經(jīng)由顯示適配器將諸如IXD屏幕或監(jiān)視器的顯示設(shè)備5022連接到微處理器5026。系統(tǒng)5021可通過能與網(wǎng)絡(luò)5029通信5028的網(wǎng)絡(luò)適配器與其他計算機或計算機網(wǎng)絡(luò)通信。示例性網(wǎng)絡(luò)適配器是通信通道、令牌環(huán)網(wǎng)、以太網(wǎng)或調(diào)制解調(diào)器?;蛘?,系統(tǒng)5021可使用諸如⑶ro (蜂窩數(shù)字分組數(shù)據(jù))卡的無線接口來通信。系統(tǒng)5021可與局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)中的這樣的其他計算機關(guān)聯(lián),或系統(tǒng)5021可以是與另一個計算機的客戶機/服務(wù)器安排中的客戶機等。所有這些配置以及合適的通信硬件和軟件在本領(lǐng)域中是已知的。圖13示出了其中可實施本發(fā)明的數(shù)據(jù)處理網(wǎng)絡(luò)5040。數(shù)據(jù)處理網(wǎng)絡(luò)5040可包括多個單獨的網(wǎng)絡(luò),諸如無線網(wǎng)和有線網(wǎng),其每個可包括多個單獨的工作站5041、5042、5043、5044。此外,本領(lǐng)域技術(shù)人員將理解,可包括一個或多個LAN,其中LAN可包括多個耦合到主處理機的智能工作站。仍然參考圖13,網(wǎng)絡(luò)也可包括大型計算機或服務(wù)器,諸如網(wǎng)關(guān)計算機(客戶機服務(wù)器5046)或應(yīng)用服務(wù)器(遠程服務(wù)器5048,其可訪問數(shù)據(jù)儲存庫,且也可直接從工作站5045被訪問)。網(wǎng)關(guān)計算機5046用作到每個單獨網(wǎng)絡(luò)的進入點。當(dāng)將一個聯(lián)網(wǎng)協(xié)議連接到另一個時,需要網(wǎng)關(guān)。網(wǎng)關(guān)5046可通過通信鏈路優(yōu)選地耦合到另一個網(wǎng)絡(luò)(例如因特網(wǎng)5047)。也可使用通信鏈路將網(wǎng)關(guān)5046直接耦合到一個或多個工作站5041、5042、5043、5044??梢岳每蓮膰H商業(yè)機器公司獲得的IBMeServerTMSystemz 服務(wù)器來實現(xiàn)網(wǎng)關(guān)計算機。同時參考圖12和13,可體現(xiàn)本發(fā)明的軟件編程代碼可被系統(tǒng)5020的處理器5026從諸如CD-ROM驅(qū)動器或硬盤驅(qū)動器的長期存儲介質(zhì)5027訪問。軟件編程代碼可被體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟盤、硬盤驅(qū)動器或CD-ROM)中的任一個上。代碼可在這樣的介質(zhì)上被分發(fā),或從一個計算機系統(tǒng)的存儲器或存儲設(shè)備通過網(wǎng)絡(luò)被分發(fā)到其他計算機系統(tǒng)的用戶5050、5051,以供這樣的其他系統(tǒng)的用戶使用。或者,編程代碼可體現(xiàn)在存儲器5025中,且由處理器5026使用處理器總線訪問。這樣的編程代碼包括操作系統(tǒng),其控制各種計算機組件和一個或多個應(yīng)用程序5032的功能和交互。程序代碼通常從存儲介質(zhì)5027調(diào)頁到高速存儲器5025,在此它可用于由處理器5026進行處理。用于在存儲器中、在物理介質(zhì)上體現(xiàn)軟件編程代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是公知的,不會在此進一步討論。程序代碼,當(dāng)其被創(chuàng)建且在有形介質(zhì)(包括但不限于電子存儲模塊(RAM)、閃存、光盤(⑶)、DVD、磁帶等)上存儲時,通常被稱為“計算機程序產(chǎn)品”。計算機程序產(chǎn)品介質(zhì)典型地可以被優(yōu)選地位于計算機系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。最容易被處理器使用的高速緩存(通常比處理器的其他高速緩存更快更小)是最低級(LI或級別I)高速緩存,且主存儲(主存儲器)是最高級高速緩存(如果有三個級別的話是L3)。最低級高速緩存經(jīng)常被分為保持將被執(zhí)行的機器指令的指令緩存(I-高速緩存),和保持數(shù)據(jù)操作數(shù)的數(shù)據(jù)高速緩存(D-高速緩存)。 參考圖14,為處理器5026示出了示例性處理器實施例。典型地,使用一個或多個級別的高速緩存5053來緩沖存儲器塊,以便改善處理器性能。高速緩存5053是高速緩沖器,其保持很可能被使用的存儲器數(shù)據(jù)的高速緩存線。典型的高速緩存線是64、128或256字節(jié)的存儲器數(shù)據(jù)。通常使用單獨的高速緩存以用于緩存指令而不是緩存數(shù)據(jù)。高速緩存一致性(存儲器和高速緩存中的線的副本的同步)通常由本領(lǐng)域中熟知的各種“窺探”算法提供。處理器系統(tǒng)的主存儲器5025通常被稱為高速緩存。在具有4個級別的高速緩存5053的處理器系統(tǒng)中,主存儲器5025有時候被稱為級別5 (L5)高速緩存,因為它典型地更快,且僅保持可被計算機系統(tǒng)使用的非易失性存儲器(DASD、磁帶等)的一部分。主存儲器5025 可“高速緩存”由操作系統(tǒng)向主存儲器5025調(diào)頁入或從其調(diào)頁出的數(shù)據(jù)頁。程序計數(shù)器(指令計數(shù)器)5061保持跟蹤將被執(zhí)行的當(dāng)前指令的地址。z/ Ai*ehiteetui*e 處理器中的程序計數(shù)器是64位的,且可被截短為31或24位以支持先前的尋址界限。程序計數(shù)器典型地體現(xiàn)在計算機的PSW (程序狀態(tài)字)中,這樣它可在上下文轉(zhuǎn)換中持續(xù)。因此,具有程序計數(shù)器值的進行中的程序可被例如操作系統(tǒng)中斷(從程序環(huán)境到操作系統(tǒng)環(huán)境的上下文轉(zhuǎn)換)。當(dāng)程序不活動時,程序的PSW維持程序計數(shù)器值,且在操作系統(tǒng)執(zhí)行時,操作系統(tǒng)的(PSW中的)程序計數(shù)器被使用。典型地,程序計數(shù)器以等于當(dāng)前指令的字節(jié)數(shù)的量增量。RISC (精簡指令集計算)指令典型地是固定長度,而CISC (復(fù)雜指令集計算)指令典型地是可變長度。IBMz/ Asrehiteetu丨 的指令是具有長度為2、4或6字節(jié)的CISC指令。程序計數(shù)器5061被例如上下文轉(zhuǎn)換操作或分支指令的分支采取操作修改。在上下文轉(zhuǎn)換操作中,當(dāng)前的程序計數(shù)器值與關(guān)于正被執(zhí)行的程序的其他狀態(tài)信息(諸如條件碼)一起被保存在程序狀態(tài)字中,且新程序計數(shù)器值被載入并指向?qū)⒈粓?zhí)行的新程序模塊的指令。執(zhí)行分支采取操作,以通過將分支指令的結(jié)果加載到程序計數(shù)器5061中而允許程序進行決定或在程序內(nèi)循環(huán)。典型地,使用指令獲取單元5055代表處理器5026獲取指令。獲取單元可獲取“下一序列指令”、分支采取指令的目標(biāo)指令或上下文轉(zhuǎn)換后的程序的第一指令?,F(xiàn)在的指令獲取單元通常使用預(yù)取技術(shù)基于被預(yù)取的指令將被使用的可能性來推測性地預(yù)取指令。例如,獲取單元可獲取16字節(jié)的指令,其包括下一順序指令以及進一步的順序指令的額外字節(jié)。獲取的指令隨后被處理器5026執(zhí)行。在一實施例中,獲取的指令被傳遞給獲取單元的分派單元5056。分派單元解碼指令并將關(guān)于解碼的指令的信息轉(zhuǎn)送給合適的單元5057、5058、5060。執(zhí)行單元5057將典型地從指令獲取單元5055接收關(guān)于解碼的算術(shù)指令的信息,并將根據(jù)指令的操作碼對操作數(shù)執(zhí)行算術(shù)操作。優(yōu)選地從存儲器5025、架構(gòu)寄存器5059或從正被執(zhí)行的指令的立即字段(immediate field)向執(zhí)行單元5057提供操作數(shù)。執(zhí)行的結(jié)果,當(dāng)被存儲時,被存儲在存儲器5025、寄存器5059或其他機器硬件(諸如控制寄存器、PSW寄存器等)中。處理器5026典型地具有一個或多個用于執(zhí)行指令的功能的單元5057、5058、5060。參考圖15A,執(zhí)行單元5057可通過接口邏輯5071與架構(gòu)通用寄存器5059、解碼/分 派單元5056、加載存儲單元5060和其他5065處理器單元通信。執(zhí)行單元5057可使用幾個寄存器電路5067、5068、5069來保持算術(shù)邏輯單元(ALU) 5066將操作的信息。ALU執(zhí)行諸如加減乘除的算術(shù)操作,以及諸如和、或以及異或(X0R)、旋轉(zhuǎn)和移位的邏輯運算。優(yōu)選地,ALU支持依賴于設(shè)計的專門操作。其他電路可提供其他架構(gòu)工具5072,例如包括條件碼和恢復(fù)支持邏輯。典型地,ALU操作的結(jié)果被保持在輸出寄存電路5070中,該輸出寄存器電路可將結(jié)果轉(zhuǎn)送到多種其他處理功能。有許多處理器單元安排,本說明書僅旨在提供對一個實施例的代表性理解。例如,ADD指令將在具有算術(shù)和邏輯功能的執(zhí)行單元5057中被執(zhí)行,而例如浮點指令將在具有專用浮點能力的浮點執(zhí)行中被執(zhí)行。優(yōu)選地,執(zhí)行單元通過在操作數(shù)上執(zhí)行操作碼定義的功能在由指令標(biāo)識的操作數(shù)上操作。例如,ADD指令可被執(zhí)行單元5057在由指令的寄存器字段標(biāo)識的兩個寄存器5059中發(fā)現(xiàn)的操作數(shù)上執(zhí)行。執(zhí)行單元5057對兩個操作數(shù)執(zhí)行算術(shù)加法,并在第三操作數(shù)中存儲結(jié)果,其中第三操作數(shù)可以是第三寄存器或兩個源寄存器中的一個。執(zhí)行單元優(yōu)選地利用算術(shù)邏輯單元(ALU) 5066,其能執(zhí)行多種邏輯功能,諸如移位、旋轉(zhuǎn)、和、或、異或,以及多種代數(shù)函數(shù),包括加減乘除中的任何一個。有些ALU 5066被設(shè)計為用于標(biāo)量運算,有些用于浮點。根據(jù)架構(gòu),數(shù)據(jù)可以是大端(big endien)(其中最低有效字節(jié)位于最高字節(jié)地址)或小端(littleendien)(其中最低有效字節(jié)位于最低字節(jié)地址)。IBM ζ/ 丨xhitecture 是大端。根據(jù)架構(gòu),帶符號字段可以是符號和幅度、I的補碼或2的補碼。2的補碼數(shù)是有利的,其在于ALU不需要設(shè)計減法能力,因為不管是2的補碼中的負值還是正值,都僅要求ALU中的加法。數(shù)字通常以速記描述,其中12位的字段定義了 4096字節(jié)塊的地址,且通常被描述為例如4Kbyte (千字節(jié))塊。參考圖15B,用于執(zhí)行分支指令的分支指令信息典型地被發(fā)送到分支單元5058,該分支單元經(jīng)常使用諸如分支歷史表5082的分支預(yù)測算法,在其他條件運算完成前預(yù)測分支結(jié)果。在條件運算完成前,當(dāng)前分支指令的目標(biāo)將被獲取并推測性地執(zhí)行。當(dāng)條件運算完成時,基于條件運算的條件和推測的結(jié)果,推測性執(zhí)行的分支指令或被完成或被丟棄。典型的分支指令可測試條件碼,以及如果條件碼滿足分支指令的分支要求,分支到目標(biāo)地址,分支地址可基于若干數(shù)被計算,所述數(shù)包括例如在寄存器字段或是指令的立即字段中找到的數(shù)。分支單元5058可利用具有多個輸入寄存器電路5075、5076、5077和一個輸出寄存器電路5080的ALU 5074。分支單元5058可與例如通用寄存器5059、解碼分派單元5056或其他電路5073通信。一組指令的執(zhí)行可由于多個原因中斷,所述原因包括例如由操作系統(tǒng)發(fā)起的上下文轉(zhuǎn)換、引起上下文轉(zhuǎn)換的程序異?;蝈e誤、引起上下文轉(zhuǎn)換的I/o中斷信號或多個程序(在多線程環(huán)境中)的多線程活動。優(yōu)選地,上下文轉(zhuǎn)換動作保存關(guān)于當(dāng)前執(zhí)行的程序的狀態(tài)信息,且隨后加載關(guān)于正被調(diào)用的另一個程序的狀態(tài)信息。狀態(tài)信息可被存儲在例如硬件寄存器或存儲器中。狀態(tài)信息優(yōu)選地包括指向?qū)⒈粓?zhí)行的下一個指令的程序計數(shù)器值、條件碼、存儲器轉(zhuǎn)換信息和架構(gòu)寄存器內(nèi)容。上下文轉(zhuǎn)換活動可被硬件電路、應(yīng)用程序、操作系統(tǒng)程序或固件代碼(微代碼、微微代碼或許可內(nèi)部碼(LIC))單獨地或其組合實現(xiàn)。處理器根據(jù)指令定義的方法而訪問操作數(shù)。指令可使用指令的一部分的值提供立即操作數(shù),可提供一個或多個寄存器字段,其顯式地指向通用寄存器或?qū)S眉拇嫫?例如浮點寄存器)。指令可利用由操作碼字段確定的暗示的寄存器作為操作數(shù)。指令可利用用于操作數(shù)的存儲器位置。可由寄存器、立即字段或寄存器和立即字段的組合提供操作數(shù)的存儲器位置,如由z/ Architeeture 長位移工具(facility)所例不的,其中該指令定義了基 寄存器、索引寄存器和立即字段(位移字段),它們加到一起,以提供例如存儲器中的操作數(shù)的地址。除非另外指明,此處的位置典型地意味著主存儲器(主存儲設(shè)備)中的位置。參考圖15C,處理器使用加載/存儲單元5060訪問存儲器。加載/存儲單元5060可以通過獲取存儲器5053中的目標(biāo)操作數(shù)的地址并將操作數(shù)加載到寄存器5059或其他存儲器5053位置中,來執(zhí)行加載操作,或可以通過獲取存儲器5053中的目標(biāo)操作數(shù)的地址并將從寄存器5059或另一個存儲器5053位置獲得的數(shù)據(jù)存儲在存儲器5053中的目標(biāo)操作數(shù)位置,來執(zhí)行存儲操作。加載/存儲單元5060可以是推測性的,且可以以相對于指令順序來說無序的順序訪問存儲器,但是加載/存儲單元5060將向程序維持指令按順序執(zhí)行的外觀。加載/存儲單元5060可與通用寄存器5059、解密/分派單元5056、高速緩存/存儲器接口 5053或其他元件5083通信,且包括各種寄存器電路、ALU 5085和控制邏輯5090以計算存儲器地址并提供流水線順序以使操作保持次序。一些操作可不按順序,但加載/存儲單元提供功能以使不按順序執(zhí)行的操作對程序看起來如已按順序執(zhí)行一樣,如本領(lǐng)域所熟知的。優(yōu)選地,應(yīng)用程序“看到的”地址通常被稱為虛擬地址。虛擬地址有時候被稱為“邏輯地址”和“有效地址”。這些虛擬地址之所以虛擬,在于它們由多種動態(tài)地址轉(zhuǎn)換(DAT)技術(shù)中的一種重定向到物理存儲器位置,所述動態(tài)地址轉(zhuǎn)換技術(shù)包括但不限于簡單地給用偏移值給虛擬地址加前綴、經(jīng)由一個或多個轉(zhuǎn)換表轉(zhuǎn)換虛擬地址,所述轉(zhuǎn)換表優(yōu)選地包括至少一個段表和一個頁表(單獨地或組合地),優(yōu)選地,段表具有指向頁表的項。在z/Airhiteetm*e 中,提供轉(zhuǎn)換分級結(jié)構(gòu),包括區(qū)域第一表、區(qū)域第二表、區(qū)域第三表、段表和可選的頁表。地址轉(zhuǎn)換的性能通常通過利用轉(zhuǎn)換后備緩沖器(TLB)被改善,該轉(zhuǎn)換后備緩沖器包括將虛擬地址映射到相關(guān)的物理存儲位置的項。當(dāng)DAT使用轉(zhuǎn)換表轉(zhuǎn)換虛擬地址時,創(chuàng)建項。于是,虛擬地址的隨后使用可利用快的TLB的項,而不是慢的順序轉(zhuǎn)換表訪問。TLB內(nèi)容可由包括LRU (最少最近使用)的多個替換算法來管理。在處理器是多處理器系統(tǒng)的處理器的情況下,每個處理器具有保持共享資源的責(zé)任,所述共享資源諸如I/O、高速緩存、TLB和存儲器,它們互鎖以實現(xiàn)一致性。典型地,“窺探”技術(shù)將被用于維持高速緩存一致性。在窺探環(huán)境中,每個高速緩存線可被標(biāo)記為正處于共享狀態(tài)、獨占狀態(tài)、改變狀態(tài)、無效狀態(tài)等中的一個,以便有助于共享。I/O單元5054 (圖14)向處理器提供用于附加到例如包括磁帶、盤、打印機、顯示器和網(wǎng)絡(luò)的外圍設(shè)備的裝置。I/o單元通常由軟件驅(qū)動器向計算機程序呈現(xiàn)。在諸如來自IBM 的Systemz 的大型計算機中,通道適配器和開放系統(tǒng)適配器是提供操作系統(tǒng)和外圍設(shè)備之間的通信的大型計算機的I/O單元。而且,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為例子,環(huán)境可包括仿真器(例如,軟件或其他仿真機制),其中特定架構(gòu)(包括例如指令執(zhí)行、諸如地址轉(zhuǎn)換的架構(gòu)功能、以及架構(gòu)寄存器)或其子集被仿真(例如,在具有處理器和存儲器的本機計算機系統(tǒng)中)。在這樣的環(huán)境中,仿真器的一個或多個仿真功能可實施本發(fā)明的一個或多個方面,即使執(zhí)行仿真器的計算機可具有與正被仿真的能力不同的架構(gòu)。作為一個例子,在仿真模式中,解碼正被仿真的特定指令或操作,且建立合適的仿真功能以實施單個指令或操作。在仿真環(huán)境中,主計算機包括例如存儲器以存儲指令和數(shù)據(jù);指令獲取單元以從 存儲器獲取指令,且可選地,提供用于獲取的指令的本地緩沖;指令解碼單元以接收獲取的指令并確定已被獲取的指令的類型;以及指令執(zhí)行單元以執(zhí)行該指令。執(zhí)行可包括將數(shù)據(jù)從存儲器加載到寄存器;從寄存器將數(shù)據(jù)存儲回存儲器;或執(zhí)行如由解碼單元確定的某些類型的算術(shù)或邏輯運算。在一個例子中,每個單元在軟件中實現(xiàn)。例如,被所述單元執(zhí)行的操作被實現(xiàn)為仿真器軟件中的一個或多個子例程。 更具體地,在大型計算機中,程序員(通常是如今的“C”程序員)一般通過編譯器應(yīng)用使用架構(gòu)機器指令。存儲在存儲介質(zhì)中的這些指令可以在ZAAirhiteetureeIBiVle服務(wù)器中本機地執(zhí)行,或在執(zhí)行其他架構(gòu)的機器中執(zhí)行。它們可在現(xiàn)有的和未來的丨大型計算機服務(wù)器以及 ΒΜ 的其他機器(例如,Power Systems服務(wù)器和Systemχ 服務(wù)器)中被仿真。它們可在使用由IBM 、Intel 、AMD 等制造的硬件的各種機器上運行Linux的機器中被執(zhí)行。除了在z AlThitecture 下的該硬件上執(zhí)行,Linux也可被用于這樣的機器,其使用由 Hercules (見 www. hercules-390· org/)或 FSI (FundamentalSoftware, Inc)(見www. funsoft. com/)(其中一般地執(zhí)行是處于仿真模式中)提供的仿真。在仿真模式中,仿真軟件由本機處理器執(zhí)行以仿真被仿真處理器的架構(gòu)。本機處理器典型地執(zhí)行仿真軟件,其包括固件或本機操作系統(tǒng),以執(zhí)行被仿真處理器的仿真程序。仿真軟件負責(zé)獲取并執(zhí)行被仿真處理器架構(gòu)的指令。仿真軟件維護仿真的程序計數(shù)器以保持跟蹤指令界限。仿真軟件可一次獲取一個或多個仿真的機器指令,并將所述一個或多個仿真的機器指令轉(zhuǎn)換為對應(yīng)的本機機器指令組,以由本機處理器執(zhí)行。這些轉(zhuǎn)換的指令可被高速緩存,這樣可完成更快的轉(zhuǎn)換。仿真軟件將維持被仿真的處理器架構(gòu)的架構(gòu)規(guī)則以保證為被仿真處理器編寫的操作系統(tǒng)和應(yīng)用正確操作。而且,仿真軟件將提供由被仿真的處理器架構(gòu)確定的資源,包括但不限于控制寄存器、通用寄存器、浮點寄存器、例如包括段表和頁表的動態(tài)地址轉(zhuǎn)換功能、中斷機制、上下文轉(zhuǎn)換機制、日中時間(TOD)時鐘和到1/0子系統(tǒng)的架構(gòu)接口,這樣被設(shè)計為在被仿真處理器上運行的操作系統(tǒng)或應(yīng)用程序可在具有仿真軟件的本機處理器上運行。解碼正被仿真的特定指令,且調(diào)用子例程以執(zhí)行該單個指令的功能。仿真被仿真處理器的功能的仿真軟件功能例如在“C”子例程或驅(qū)動器中實現(xiàn),或由提供用于特定硬件的驅(qū)動器的其他方法實現(xiàn),如本領(lǐng)域技術(shù)人員在理解優(yōu)選實施例的描述后將理解的。包括但不限于 Beausoleil 等人的標(biāo)題為 “Multiprocessor for Hardware Emulation”的美國專利證書號5,551,013 ;以及Scalzi等人的標(biāo)題為“Preprocessing of StoredTargetRoutines for Emulating Incompatible Instructions on a Target Processor,,的美國專利證書號6,009, 261 ;以及Davidian等人的標(biāo)題為“DecodingGuest Instructionto Directly Access Emulation Routines that Emulatethe Guest Instructions,,的美國專利證書號,5, 574, 873 ;以及 Gorishek 等人的標(biāo)題為 “Symmetrical MultiprocessingBus and Chipset Used forCoprocessor Support Allowing Non-Native Code to Run ina System”的美國專利證書號6,308, 255 ;以及Lethin等人的標(biāo)題為“DynamicOptimizingObject Code Translator for Architecture Emulation andDynamic Optimizing ObjectCode Translation Method”的美國專利證書號6,463,582,;以及Eric Traut的標(biāo)題為“Method for Emulating GuestInstructions on a Host Computer Through DynamicRecompilation ofHost Instructions”的美國專利證書號5,790, 825 ;以及許多其他專利的各種軟件和硬件仿真專利示出各種已知的方式來實現(xiàn)針對可為本領(lǐng)域技術(shù)人員獲得的目標(biāo)機器對為不同機器進行架構(gòu)設(shè)計的指令格式的仿真。 在圖16中,提供了仿真主計算機系統(tǒng)5092的例子,其仿真主架構(gòu)的主計算機系統(tǒng)5000’。在仿真主計算機系統(tǒng)5092中,主處理器(CPU) 5091是仿真主處理器(或虛擬主處理器),并包括具有與主計算機5000’的處理器5091不同的本機指令集架構(gòu)的仿真處理器5093。仿真主計算機系統(tǒng)5092具有可被仿真處理器5093訪問的存儲器5094。在示例性實施例中,存儲器5094被分區(qū)為主計算機存儲器5096部分和仿真例程5097部分。根據(jù)主計算機架構(gòu),主計算機存儲器5096對于仿真主計算機5092的程序來說是可用的。仿真處理器5093執(zhí)行與被仿真處理器5091不同架構(gòu)的架構(gòu)指令集的本機指令(即來自仿真程序處理器5097的本機指令),且可通過使用從順序和訪問/解碼例程獲得的一個或多個指令從主計算機存儲器5096中的程序訪問用于執(zhí)行的主機指令,所述順序和訪問/解碼例程可解碼訪問的主機指令,以確定用于仿真被訪問的主機指令的功能的本機指令執(zhí)行例程。被定義用于主計算機系統(tǒng)5000’架構(gòu)的其他工具可被架構(gòu)工具例程仿真,所述架構(gòu)工具例程包括諸如通用寄存器、控制寄存器、動態(tài)地址轉(zhuǎn)換和1/0子系統(tǒng)支持和處理器高速緩存等工具。仿真例程也可利用在仿真處理器5093中可獲得的功能(諸如通用寄存器和虛擬地址的動態(tài)轉(zhuǎn)換)以改善仿真例程的性能。也可提供專用硬件和卸載引擎以輔助處理器5093來仿真主計算機5000’的功能。在此使用的術(shù)語僅是為了描述特定實施例,且不旨在限制本發(fā)明。如在此使用的,單數(shù)形式“一”、“一個”和“該”也旨在包括復(fù)數(shù)形式,除非上下文另外清楚地指明。還將理解,當(dāng)在說明書中使用時,術(shù)語“包括”和/或“包含”指明存在所述的特征、整體、步驟、操作、元件和/或組件,但不排除存在或附加一個或多個其他特征、整體、步驟、操作、元件和/或組件。所附權(quán)利要求書中的所有裝置或步驟加功能元件的相應(yīng)結(jié)構(gòu)、材料、操作以及等價物,如有的話,旨在包括用于結(jié)合如特別要求保護的其他所要求保護的元件來執(zhí)行所述功能的任何結(jié)構(gòu)、材料或操作。呈現(xiàn)本發(fā)明的說明是為了示出和描述的作用,但不是窮盡性的或?qū)⒈景l(fā)明限制于所公開的形式。許多修改和變化對本領(lǐng)域普通技術(shù)人員來說是明顯的,且不脫離本發(fā)明的范圍和主旨。選擇和描述實施例是為了最佳地解釋本發(fā)明的原理和實際應(yīng)用,并使得本領(lǐng)域普通技術(shù)人員能針對適于考慮的特定用途的具有各種修改的各種實施例理解本發(fā)明?!?br> 權(quán)利要求
1.一種有利于存儲器訪問的方法,包括步驟 響應(yīng)于執(zhí)行修改PCI函數(shù)控制(MPFC)指令,設(shè)定通過句柄與適配器相關(guān)的轉(zhuǎn)換格式,所述MPFC指令規(guī)定用于定位適配器的句柄、用于定位一個或多個轉(zhuǎn)換表的指針和用于選擇多個可用的轉(zhuǎn)換格式中的轉(zhuǎn)換格式的格式; 響應(yīng)于從適配器接收到請求,在運行時獲得要在提供可用于訪問存儲器的地址時使用的轉(zhuǎn)換格式的指示,為適配器預(yù)注冊所述轉(zhuǎn)換格式,所述請求具有要在提供可用于訪問存儲器的地址時使用的初始地址; 基于所獲得的轉(zhuǎn)換格式和初始地址,確定可用于訪問存儲器的直接存儲器訪問(DMA)地址,所述初始地址是由適配器產(chǎn)生的;和 在DMA地址存儲或獲取適配器數(shù)據(jù)。
2.根據(jù)權(quán)利要求I的方法,其中,所述多個可用的轉(zhuǎn)換格式包含以下格式中的一個或多個選定中央處理單元動態(tài)地址轉(zhuǎn)換(CPUDAT)兼容格式、使用一個或多個擴展地址轉(zhuǎn)換表的選定輸入/輸出(I/O)擴展地址轉(zhuǎn)換格式、繞過地址轉(zhuǎn)換的繞過格式或不獲取地址轉(zhuǎn)換表的不獲取格式。
3.根據(jù)權(quán)利要求2的方法,其中,所述獲得獲得轉(zhuǎn)換格式是繞過格式的指示,并且響應(yīng)于轉(zhuǎn)換格式是繞過格式,所述確定確定可用于訪問存儲器的地址是初始地址。
4.根據(jù)權(quán)利要求3的方法,其中,基于適配器是可信適配器來選擇繞過格式。
5.根據(jù)權(quán)利要求2的方法,其中,所述獲得獲得轉(zhuǎn)換格式是不獲取格式的指示,并且所述確定通過使用初始地址和指向要在確定地址時使用的最高級地址轉(zhuǎn)換表的指針,確定可用于訪問存儲器的地址。
6.根據(jù)權(quán)利要求2的方法,其中,所述獲得獲得轉(zhuǎn)換格式是選定的CPUDAT兼容格式的指示,并且所述確定通過使用初始地址和一個或多個CPU DAT兼容轉(zhuǎn)換表來確定地址。
7.根據(jù)權(quán)利要求6的方法,其中,CPUDAT兼容格式包含4k CPUDAT兼容格式或IM CPUDAT兼容格式中的一個。
8.根據(jù)權(quán)利要求2的方法,其中,所述獲得獲得轉(zhuǎn)換格式是選定I/O擴展地址轉(zhuǎn)換格式的指示,并且所述確定通過使用初始地址和一個或多個I/O轉(zhuǎn)換表來確定地址。
9.根據(jù)權(quán)利要求8的方法,其中,選定I/O擴展地址轉(zhuǎn)換格式包含具有4k頁格式的4k地址轉(zhuǎn)換表、具有4k頁格式的IM地址轉(zhuǎn)換表或具有IM頁格式的IM地址轉(zhuǎn)換表中的一個。
10.根據(jù)權(quán)利要求I的方法,其中,所述獲得包含檢查與適配器相關(guān)的設(shè)備表條目中的格式指示符,以獲得要使用的轉(zhuǎn)換格式的指示。
11.根據(jù)權(quán)利要求I的方法,其中,所述設(shè)定包含 在與適配器相關(guān)的設(shè)備表條目中指示選定的轉(zhuǎn)換格式。
12.根據(jù)權(quán)利要求I的方法,其中,為適配器注冊的轉(zhuǎn)換格式與為另一適配器注冊的另一轉(zhuǎn)換格式不同。
13.—種系統(tǒng),包括適于實施根據(jù)任一在前方法權(quán)利要求所述的方法的所有步驟的裝置。
14.一種計算機程序,包括特別適于在所述計算機程序在數(shù)據(jù)處理設(shè)備上被執(zhí)行時實施根據(jù)任一在前方法權(quán)利要求所述的方法的步驟的指令。
全文摘要
本公開涉及用于適配器函數(shù)的轉(zhuǎn)換格式的運行時確定。各種地址轉(zhuǎn)換格式可用于獲得在訪問系統(tǒng)存儲器時供諸如適配器函數(shù)的請求方使用的系統(tǒng)存儲器地址。由給定的請求方使用的特定的地址轉(zhuǎn)換格式在與該請求方相關(guān)的設(shè)備表條目中被預(yù)注冊。
文檔編號G06F12/10GK102947808SQ201080066950
公開日2013年2月27日 申請日期2010年11月8日 優(yōu)先權(quán)日2010年6月23日
發(fā)明者D·克拉多克, T·格雷格, D·格雷納爾, E·N·萊斯, D·W·施密特 申請人:國際商業(yè)機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
肥西县| 杭锦后旗| 广丰县| 神木县| 晋中市| 同心县| 恩平市| 乐安县| 来安县| 安岳县| 屯留县| 叙永县| 康乐县| 蓬安县| 丹东市| 安平县| 周至县| 克什克腾旗| 新巴尔虎右旗| 专栏| 博兴县| 白城市| 三亚市| 松滋市| 红原县| 灵武市| 应城市| 日照市| 女性| 嘉禾县| 沂南县| 广平县| 平度市| 黄山市| 卢氏县| 永嘉县| 青河县| 开封市| 吉安市| 金华市| 宽甸|