專利名稱:對(duì)適配器的地址空間的訪客端訪問的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及計(jì)算環(huán)境的輸入/輸出處理,具體而言,涉及與計(jì)算環(huán)境的適配器的相關(guān)聯(lián)的虛擬處理。
背景技術(shù):
計(jì)算環(huán)境可包括一種或多種類型的輸入/輸出設(shè)備,包括各種類型的適配器。一種類型的適配器是外圍組件互連(PCI)或快速外圍組件互連(PCIe)適配器。此適配器包括在適配器和適配器被附接到的系統(tǒng)之間傳遞數(shù)據(jù)所使用的一個(gè)或多 個(gè)地址空間。PCI規(guī)范可從網(wǎng)址 www. pcisig. com/home 獲得。在某些系統(tǒng)中,耦合到適配器的中央處理單元(CPU)的地址空間的一部分被映射到適配器的地址空間,允許訪問存儲(chǔ)器的CPU指令直接操縱適配器的地址空間中的數(shù)據(jù)。地址空間的這種映射有時(shí)稱為存儲(chǔ)器映射的I/o。在2008 年 3 月 4 日頒發(fā)給 Madukkarumukumana 等人的標(biāo)題為“Fault Processingfor Direct Memory Access Address Translation” 的美國專利 No. 7,340,582 中,本發(fā)明的實(shí)施例是處理直接存儲(chǔ)器訪問地址轉(zhuǎn)換中的故障的技術(shù)。寄存器集存儲(chǔ)用于對(duì)由1/0設(shè)備所請(qǐng)求的輸入/輸出(I/o)事務(wù)所生成的故障的故障處理的全局控制或狀態(tài)信息。地址轉(zhuǎn)換結(jié)構(gòu)將訪客端(guest)物理地址轉(zhuǎn)換為主機(jī)物理地址。訪客端物理地址對(duì)應(yīng)于1/0事務(wù),并被映射到域。地址轉(zhuǎn)換結(jié)構(gòu)具有至少與域相關(guān)聯(lián)的條目以及用于故障處理的域特定的控制信息。在2008 年 10 月 28 日頒發(fā)給 Schoinas 等人的標(biāo)題為 “AddressTranslationfor Input/Output Devices Using HierarchicalTranslation Tables,,的美國專利No. 7,444,493中,本發(fā)明的實(shí)施例是執(zhí)行地址轉(zhuǎn)換的技術(shù)。表結(jié)構(gòu)通過指定訪客端物理地址的輸入/輸出(I/o)事務(wù)的源標(biāo)識(shí)符索引,并被1/0設(shè)備請(qǐng)求將1/0設(shè)備映射到分配給I/o設(shè)備的域。地址轉(zhuǎn)換結(jié)構(gòu)將訪客端物理地址轉(zhuǎn)換為對(duì)應(yīng)于1/0事務(wù)的主機(jī)物理地址。2009 年 11 月 3 日頒發(fā)給 Kjos 等人的標(biāo)題為 “PartiallyVirtualizing an 1/0Device for Use By Virtual Machines” 的美國專利 No. 7,613,847 描述了一種計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)包括物理計(jì)算機(jī),以及可在物理計(jì)算機(jī)上執(zhí)行并被配置成創(chuàng)建適于控制物理計(jì)算機(jī)的至少一個(gè)訪客端操作系統(tǒng)的仿真的虛M機(jī)監(jiān)視器。該計(jì)算機(jī)系統(tǒng)還包括可在物理計(jì)算機(jī)上執(zhí)行的主機(jī),所述主機(jī)代表虛擬機(jī)監(jiān)視器以及至少一個(gè)訪客端操作系統(tǒng)管理耦合到物理計(jì)算機(jī)的物理資源。主機(jī)適于虛擬化外圍組件互連(PCI)配置地址空間,從而至少一個(gè)訪客端操作系統(tǒng)直接并且在不存在1/0仿真的情況下控制PCI輸入/輸出(1/0)設(shè)備。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,向在主機(jī)上執(zhí)行的訪客端操作系統(tǒng)提供對(duì)適配器的地址空間的直接訪問而沒有主機(jī)的干涉。
通過提供用于在計(jì)算環(huán)境中提供對(duì)適配器的訪問的計(jì)算機(jī)程序產(chǎn)品,克服了現(xiàn)有技術(shù)的缺點(diǎn)并提供了另外的優(yōu)點(diǎn)。計(jì)算機(jī)程序產(chǎn)品包括可以由處理電路讀取的并存儲(chǔ)由處理電路執(zhí)行以便執(zhí)行方法的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。該方法包括,例如,執(zhí)行包括訪問適配器的請(qǐng)求的訪客端指令;確定所述訪客端指令是否被允許直接訪問所述適配器;響應(yīng)于被允許,所述執(zhí)行直接地訪問所述適配器的一個(gè)或多個(gè)地址空間而沒有主機(jī)干預(yù);以及,響應(yīng)于不被允許,所述執(zhí)行導(dǎo)致對(duì)主機(jī)操作系統(tǒng)的攔截。此處描述并要求保護(hù)涉及本發(fā)明的一個(gè)或多個(gè)方面的方法和系統(tǒng)。通過本發(fā)明的技術(shù)來實(shí)現(xiàn)其他特點(diǎn)和優(yōu)點(diǎn)。此處將詳細(xì)描述本發(fā)明的其他實(shí)施例和方面,它們被視為所要求保護(hù)的發(fā)明的一部分。
現(xiàn)在將參考各個(gè)附圖,只作為示例,對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行描述,其中 圖IA描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算環(huán)境的一個(gè)實(shí)施例;圖IB描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的設(shè)備表項(xiàng)目的一個(gè)示例;圖IC描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的中央處理綜合體(complex)的一個(gè)實(shí)施例;圖2描繪了根據(jù)本發(fā)明的一個(gè)方面的適配器函數(shù)(adapterfunction)的地址空間的一個(gè)示例;圖3A描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的函數(shù)表項(xiàng)目的一個(gè)示例;圖3B描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的函數(shù)句柄的一個(gè)實(shí)施例;圖4A描繪了根據(jù)本發(fā)明的一個(gè)方面的從適配器函數(shù)讀取數(shù)據(jù)的PCI Load (PCI加載)指令的一個(gè)示例;圖4B描繪了根據(jù)本發(fā)明的一個(gè)方面的向適配器函數(shù)寫入數(shù)據(jù)的PCI Store (PCI存儲(chǔ))操作的一個(gè)實(shí)施例;圖4C描繪了根據(jù)本發(fā)明的一個(gè)方面的向適配器函數(shù)寫入數(shù)據(jù)的Store Block (存儲(chǔ)塊)操作的一個(gè)實(shí)施例;圖5描繪了根據(jù)本發(fā)明的一個(gè)方面的為允許對(duì)適配器函數(shù)的地址空間進(jìn)行訪客端直接訪問的由主機(jī)執(zhí)行的初始化的一個(gè)實(shí)施例;圖6描繪了根據(jù)本發(fā)明的一個(gè)方面的代表訪客端執(zhí)行的授權(quán)處理的一個(gè)實(shí)施例;圖7A描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的Call LogicalProcessor (調(diào)用邏輯處理器)指令的一個(gè)實(shí)施例;圖7B描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖7A的調(diào)用邏輯處理器指令所使用的請(qǐng)求塊的一個(gè)實(shí)施例;圖7C描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖7A的調(diào)用邏輯處理器指令所提供的響應(yīng)塊的一個(gè)實(shí)施例;圖8描繪了根據(jù)本發(fā)明的一個(gè)方面的啟用PCI函數(shù)的邏輯的一個(gè)實(shí)施例;圖9A描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的Modify PCIFunction Controls(修改PCI函數(shù)控制)指令的一個(gè)實(shí)施例;圖9B描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖9A的修改PCI函數(shù)控制指令所使用的字段的一個(gè)實(shí)施例;圖9C描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖9A的修改PCI函數(shù)控制指令所使用的另一字段的一個(gè)實(shí)施例;圖9D描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的函數(shù)信息塊(FIB,F(xiàn)unctionInformation Block)的內(nèi)容的一個(gè)實(shí)施例;圖IOA描繪了根據(jù)本發(fā)明的一個(gè)方面的修改PCI函數(shù)控制指令的邏輯的概述的一個(gè)實(shí)施例;圖IOB描繪了根據(jù)本發(fā)明的一個(gè)方面的可以由修改PCI函數(shù)控制指令指定的設(shè)置攔截控制操作的一個(gè)實(shí)施例;圖IlA描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的PCI加載指令的一個(gè)實(shí)施例;
圖IlB描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖IlA的PCI加載指令所使用的字段的一個(gè)實(shí)施例;圖IlC描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖IlA的PCI加載指令所使用的另一字段的一個(gè)實(shí)施例;圖12A-12B描繪了根據(jù)本發(fā)明的一個(gè)方面的執(zhí)行PCI加載操作的邏輯的一個(gè)實(shí)施例;圖13A描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的PCI Store (PCI存儲(chǔ))指令的一個(gè)實(shí)施例;圖13B描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖13A的PCI存儲(chǔ)指令所使用的字段的一個(gè)實(shí)施例;圖13C描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖13A的PCI存儲(chǔ)指令所使用的另一字段的一個(gè)實(shí)施例;圖14A-14B描繪了根據(jù)本發(fā)明的一個(gè)方面的執(zhí)行PCI存儲(chǔ)操作的邏輯的一個(gè)實(shí)施例;圖15A描繪了根據(jù)本發(fā)明的一個(gè)方面所使用的PCI Store Block (PCI存儲(chǔ)塊)指令的一個(gè)實(shí)施例;圖15B描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖15A的PCI存儲(chǔ)塊指令所使用的字段的一個(gè)實(shí)施例;圖15C描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖15A的PCI存儲(chǔ)塊指令所使用的另一字段的一個(gè)實(shí)施例;圖I 描繪了根據(jù)本發(fā)明的一個(gè)方面的由圖15A的PCI存儲(chǔ)塊指令所使用的再一個(gè)字段的一個(gè)實(shí)施例;圖16A-16B描繪了根據(jù)本發(fā)明的一個(gè)方面的執(zhí)行PCI存儲(chǔ)塊操作的邏輯的一個(gè)實(shí)施例;圖17描述了包括本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)程序產(chǎn)品的一個(gè)實(shí)施例;圖18描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的主機(jī)計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例;圖19描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的另一個(gè)示例;圖20描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的包括計(jì)算機(jī)網(wǎng)絡(luò)的計(jì)算機(jī)系統(tǒng)的的另一不例;圖21描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的各種元件的一個(gè)實(shí)施例;圖22A描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的圖21的計(jì)算機(jī)系統(tǒng)的執(zhí)行單元的一個(gè)實(shí)施例;圖22B描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的圖21的計(jì)算機(jī)系統(tǒng)的分支單元的一個(gè)實(shí)施例;圖22C描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的圖21的計(jì)算機(jī)系統(tǒng)的加載/存儲(chǔ)單元的一個(gè)實(shí)施例;以及圖23描繪了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的仿真的主機(jī)計(jì)算機(jī)系統(tǒng)的一個(gè)實(shí)施例。
具體實(shí)施例方式在一個(gè)實(shí)施例中,提供了授權(quán)能力,該能力允許執(zhí)行訪客端操作系統(tǒng)的主機(jī)(例如,主機(jī)操作系統(tǒng))授予訪客端直接訪問適配器的地址空間而無需主機(jī)干涉的許可。如此處所使用的,術(shù)語“適配器”包括任何類型的適配器(例如,存儲(chǔ)器適配器、網(wǎng)絡(luò)適配器、處理適配器、PCI適配器、密碼適配器、其他類型的輸入/輸出適配器等等)。在一個(gè)實(shí)施例中,適配器包括一個(gè)適配器函數(shù)。然而,在其他實(shí)施例中,適配器可包括多個(gè)適配器函數(shù)。無論適配器包括一個(gè)適配器函數(shù)還是多個(gè)適配器函數(shù),本發(fā)明的一個(gè)或多個(gè)方面都適用。此外,在此處所呈現(xiàn)的示例中,適配器與適配器函數(shù)(例如,PCI函數(shù))可互換地使用,除非另作說明。參考圖IA描述了包括并使用本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算環(huán)境的一個(gè)實(shí)施例。在一個(gè)示例中,計(jì)算環(huán)境100是由IBM公司所提供的Systemz 服務(wù)器。Systemz*基于由 IBM 公司所提供的Z/Arehiteciure 。在標(biāo)題為“z/Architecture Principles ofOperation” (IBM Publication No. SA22-7832-07,2009 年 2 月)的fBM 出版物中描述
了關(guān)于z/Architecture 的細(xì)節(jié)。IBM 、System z 和z/Architecture 是位于紐約
Armonk的IBM公司的注冊(cè)商標(biāo)。此處所使用的其他名稱可以是IBM公司或其他公司的注冊(cè)商標(biāo)、商標(biāo)或產(chǎn)品名稱。在一個(gè)示例中,計(jì)算環(huán)境100包括通過存儲(chǔ)器控制器106耦合到系統(tǒng)存儲(chǔ)器104(也叫做主存儲(chǔ)器)的一個(gè)或多個(gè)中央處理單元(CPU)102。為訪問系統(tǒng)存儲(chǔ)器104,中央處理單元102發(fā)出包括用來訪問系統(tǒng)存儲(chǔ)器的地址的讀取或?qū)懭胝?qǐng)求。請(qǐng)求中所包括的地址通常不直接可被用來訪問系統(tǒng)存儲(chǔ)器,因此,它被轉(zhuǎn)換為在訪問系統(tǒng)存儲(chǔ)器時(shí)可直接使用的地址。地址是通過轉(zhuǎn)換機(jī)制(XLATE) 108轉(zhuǎn)換的。例如,地址使用例如動(dòng)態(tài)地址轉(zhuǎn)換(DAT)被從虛擬地址轉(zhuǎn)換為實(shí)的或絕對(duì)地址。包括地址(經(jīng)過轉(zhuǎn)換的,在必要時(shí))的請(qǐng)求由存儲(chǔ)器控制器106接收。在一個(gè)示例中,存儲(chǔ)器控制器106包括硬件并被用來仲裁對(duì)系統(tǒng)存儲(chǔ)器的訪問,以及維護(hù)存儲(chǔ)器的一致性。此仲裁是對(duì)于從CPU 102接收到的請(qǐng)求以及對(duì)于從一個(gè)或多個(gè)適配器110接收到的請(qǐng)求執(zhí)行的。類似于中央處理單元,適配器向系統(tǒng)存儲(chǔ)器104發(fā)出訪問系統(tǒng)存儲(chǔ)器的請(qǐng)求。在一個(gè)示例中,適配器110是包括一個(gè)或多個(gè)PCI函數(shù)的外圍組件互連(PCI)或快速PCI (PCIe)適配器。PCI函數(shù)發(fā)出請(qǐng)求,該請(qǐng)求通過一個(gè)或多個(gè)交換機(jī)(例如,PCIe交換機(jī))114,被路由到輸入/輸出集線器112 (例如,PCI集線器)。在一個(gè)示例中,輸入/輸出集線器包括硬件(包括一個(gè)或多個(gè)狀態(tài)機(jī)),并通過I/O到存儲(chǔ)器總線120耦合到存儲(chǔ)器控制器106。輸入/輸出集線器包括例如接收來自交換機(jī)的請(qǐng)求的根綜合體(root complex)116。請(qǐng)求包括輸入/輸出地址,該地址被提供到地址轉(zhuǎn)換和保護(hù)單元118,該單元118訪問用于該請(qǐng)求的信息。作為示例,請(qǐng)求可包括用來執(zhí)行直接存儲(chǔ)器訪問(DMA)操作或請(qǐng)求消息中斷(MSI)的輸入/輸出地址。地址轉(zhuǎn)換和保護(hù)單元118訪問用于DMA或MSI請(qǐng)求的信息。作為特定示例,對(duì)于DMA操作,可以獲取信息以轉(zhuǎn)換地址。然后,經(jīng)過轉(zhuǎn)換的地址被轉(zhuǎn)發(fā)到存儲(chǔ)器控制器以訪問系統(tǒng)存儲(chǔ)器。在一個(gè)示例中,如參考圖IB所描述的,用于由適配器所發(fā)出的DMA或MSI請(qǐng)求的信息是從位于I/o集線器(例如,在地址轉(zhuǎn)換和保護(hù)單元)中的設(shè)備表132的設(shè)備表?xiàng)l目(DTE)130獲得的。設(shè)備表?xiàng)l目包括適配器的信息,每一適配器都具有至少一個(gè)與其相關(guān)聯(lián) 的設(shè)備表?xiàng)l目。例如,分配給適配器的每個(gè)地址空間(在系統(tǒng)存儲(chǔ)器中)有一個(gè)設(shè)備表?xiàng)l目。DTE中的信息可以取決于被提供到適配器的服務(wù)(例如,地址轉(zhuǎn)換、中斷等等)。對(duì)于從適配器(例如,PCI函數(shù)138)發(fā)出的請(qǐng)求,使用請(qǐng)求中所提供的請(qǐng)求者ID來定位設(shè)備表?xiàng)l目?,F(xiàn)在參考圖1C,在計(jì)算環(huán)境的又一實(shí)施例中,作為中央處理單元102中的一個(gè)或多個(gè)的補(bǔ)充或代替,中央處理綜合體耦合到存儲(chǔ)器控制器106。在此特定示例中,中央處理綜合體150提供虛擬機(jī)支持。中央處理綜合體150包括例如一個(gè)或多個(gè)虛擬機(jī)152、一個(gè)或多個(gè)中央處理器154,以及至少一個(gè)管理程序156,下面將對(duì)它們中的每一個(gè)進(jìn)行描述。對(duì)中央處理綜合體的虛擬機(jī)支持提供操作大量的虛擬機(jī)的能力,每一虛擬機(jī)都能夠托管諸如z/Linux之類的訪客端操作系統(tǒng)158。每一虛擬機(jī)152都能夠充當(dāng)單獨(dú)的系統(tǒng)。即,每一虛擬機(jī)都可以獨(dú)立地重置、托管訪客端操作系統(tǒng),并與不同的程序一起操作。在虛擬機(jī)中運(yùn)行的操作系統(tǒng)或應(yīng)用程序看起來好像可以訪問完全并完整的系統(tǒng),但實(shí)際上只有系統(tǒng)的一部分可用。在此特定示例中,虛擬機(jī)的模型是V=V模型,其中,虛擬機(jī)的存儲(chǔ)器被虛擬存儲(chǔ)器備份(back),代替實(shí)際存儲(chǔ)器。每一虛擬機(jī)都具有虛擬線性存儲(chǔ)器空間。物理資源被諸如VM管理程序之類的管理程序156擁有,共享的物理資源根據(jù)需要被管理程序分派到訪客端操作系統(tǒng),以滿足它們的處理需求。此V=V虛擬機(jī)模型假設(shè),訪客端操作系統(tǒng)和物理共享機(jī)器資源之間的交互被VM管理程序控制,因?yàn)榇罅康脑L客端通常將管理程序從簡單地分區(qū)并將硬件資源分配到配置的訪客端中排除。在標(biāo)題為“z/VM:Running GuestOperatingSystems” (IBM Publication No. SC24-5997-02, 2001 年 10 月)的 IBM 出版物中進(jìn)一步描述了 V=V模型的一個(gè)或多個(gè)方面。中央處理器154是可分配到虛擬機(jī)的物理處理器資源。例如,虛擬機(jī)152包括一個(gè)或多個(gè)邏輯處理器,每一個(gè)邏輯處理器都表示可以被動(dòng)態(tài)地分配給虛擬機(jī)的物理處理器資源154的全部或一些。虛擬機(jī)152是由管理程序156管理的。作為示例,管理程序可以在運(yùn)行于處理器154上的固件中實(shí)現(xiàn),或者也可以是在機(jī)器上執(zhí)行的主機(jī)操作系統(tǒng)的一部分。在一個(gè)示例中,管理程序156是諸如由位于紐約Armonk的IBM公司所提供的Z/VM 之類的 VM 管理程序。在標(biāo)題為 “z/VM:General Information Manual” (IBM PublicationNo. GC24-5991-05, 2003年5月)的IBM出版物中描述了z I VM 的一個(gè)實(shí)施例。如此處所使用的,固件包括例如處理器的微代碼、毫代碼和/或宏碼。它包括例如較高級(jí)別的機(jī)器代碼的實(shí)現(xiàn)中所使用的硬件級(jí)別指令和/或數(shù)據(jù)結(jié)構(gòu)。在一個(gè)實(shí)施例中,它包括例如通常作為微代碼提供的專有代碼,其包括底層硬件特定的可信軟件或微代碼并控制操作系統(tǒng)對(duì)系統(tǒng)硬件的訪問。如上文所描述的,適配器可以向處理器發(fā)出請(qǐng)求各種操作的請(qǐng)求,諸如直接存儲(chǔ)器訪問、消息信號(hào)通知中斷等等。進(jìn)一步地,處理器可以向適配器發(fā)出請(qǐng)求。例如,返回到圖1B,處理器102可以發(fā)出訪問適配器函數(shù)138的請(qǐng)求。請(qǐng)求從處理器通過I/O集線器112和一個(gè)或多個(gè)交換機(jī)114被路由到適配器函數(shù)。在此實(shí)施例中,未示出存儲(chǔ)器控制器。然而,I/O集線器可以直接或通過存儲(chǔ)器控制器耦合到處理器。作為示例,在處理器內(nèi)執(zhí)行的操作系統(tǒng)140向適配器函數(shù)發(fā)出請(qǐng)求特定操作的指令。在此示例中,由操作系統(tǒng)所發(fā)出的指令是I/o基礎(chǔ)結(jié)構(gòu)所特定的。S卩,由于I/O基礎(chǔ)結(jié)構(gòu)基于PCI或PCIe (此處這兩者都被稱為PCI,除非另作說明),因此指令是PCI指令。示 例 PCI 指令包括 PCI Load (PCI 加載)、PCI Store (PCI 存儲(chǔ))和 PCI StoreBlock (PCI 存儲(chǔ)塊),僅舉幾個(gè)例子。雖然在此示例中I/O基礎(chǔ)結(jié)構(gòu)和指令基于PCI,但是在其他實(shí)施例中,也可以使用其他基礎(chǔ)結(jié)構(gòu)和對(duì)應(yīng)的指令。在一個(gè)特定示例中,指令被指向適配器函數(shù)的地址空間內(nèi)的特定位置。例如,如圖2所示,適配器函數(shù)138包括被定義為多個(gè)地址空間的存儲(chǔ)器200,例如包括配置空間202(例如,PCI函數(shù)的PCI配置空間);1/0空間204 (例如,PCI I/O空間);以及一個(gè)或多個(gè)存儲(chǔ)器空間206 (例如,PCI存儲(chǔ)器空間)。在一個(gè)實(shí)施例中,這些地址空間被映射到只有通過固件才可尋址的存儲(chǔ)器。如此,這些空間的抽象被呈現(xiàn)給操作系統(tǒng)并可由PCI指令訪問。指令被定向到特定地址空間和該地址空間內(nèi)的特定位置。這確保了發(fā)出指令的配置(例如,操作系統(tǒng)、LPAR、處理器、訪客端等等)被授權(quán)訪問適配器函數(shù)。在其他實(shí)施例中,可以提供更多,更少或不同的地址空間。為促進(jìn)對(duì)指令的處理,使用存儲(chǔ)在一個(gè)或多個(gè)數(shù)據(jù)結(jié)構(gòu)中的信息。包括關(guān)于適配器的信息的一個(gè)這樣的數(shù)據(jù)結(jié)構(gòu)是存儲(chǔ)在例如安全存儲(chǔ)器中的函數(shù)表300。如圖3A所示,在一個(gè)示例中,函數(shù)表300包括一個(gè)或多個(gè)函數(shù)表?xiàng)l目(FTE) 302。在一個(gè)示例中,每個(gè)適配器函數(shù)有一個(gè)函數(shù)表?xiàng)l目。每一函數(shù)表?xiàng)l目302都包括在與其適配器函數(shù)相關(guān)聯(lián)的處理中要使用的信息。在一個(gè)示例中,函數(shù)表?xiàng)l目302包括,例如實(shí)例編號(hào)308 :此字段指出與函數(shù)表?xiàng)l目相關(guān)聯(lián)的PCI函數(shù)句柄的特定實(shí)例;設(shè)備表?xiàng)l目(DTE)索引I... η 310 :可以有一個(gè)或多個(gè)設(shè)備表索引,而每一索引都是定位設(shè)備表?xiàng)l目(DTE)的設(shè)備表的索引。每個(gè)適配器函數(shù)有一個(gè)或多個(gè)設(shè)備表?xiàng)l目,且每一條目都包括與其適配器函數(shù)相關(guān)聯(lián)的信息,包括用于處理適配器函數(shù)的請(qǐng)求(例如,DMA請(qǐng)求、MSI請(qǐng)求)的信息,以及涉及到適配器函數(shù)的請(qǐng)求的信息(例如,PCI指令)。每一設(shè)備表?xiàng)l目都與分配給適配器函數(shù)的系統(tǒng)存儲(chǔ)器內(nèi)的一個(gè)地址空間相關(guān)聯(lián)。適配器函數(shù)可以在分配給適配器函數(shù)的系統(tǒng)存儲(chǔ)器內(nèi)具有一個(gè)或多個(gè)地址空間。繁忙指示符312 :此字段指出適配器函數(shù)是否繁忙;永久錯(cuò)誤狀態(tài)指示符314 :此字段指出適配器函數(shù)是否處于永久錯(cuò)誤狀態(tài);恢復(fù)已啟動(dòng)指示符316 :此字段指出是否對(duì)于適配器函數(shù)已經(jīng)啟動(dòng)恢復(fù);
權(quán)限指示符318 :此字段指出試圖啟用適配器函數(shù)的操作系統(tǒng)是否具有權(quán)限這樣做;啟用指示符320:此字段指出適配器函數(shù)是否啟用(例如,1=啟用,0=禁用);請(qǐng)求者標(biāo)識(shí)符(RID) 322 :這是適配器函數(shù)的標(biāo)識(shí)符,并可包括例如總線編號(hào)、設(shè)備編號(hào)和函數(shù)編號(hào)。此字段被例如用于訪問適配器函數(shù)的配置空間。例如,配置空間可以通過在由操作系統(tǒng)(或其他配置)向適配器函數(shù)所發(fā)出的指令中指定配置空間來被訪問。在指令中指定了到配置空間的偏移,以及用來定位包括RID的適當(dāng)?shù)暮瘮?shù)表?xiàng)l目的函數(shù)句柄。固件接收指令并確定它是針對(duì)配置空間的。因此,它使用RID來生成到I/O集線器的請(qǐng)求,以及I/O集線器創(chuàng)建訪問適配器的請(qǐng)求。適配器函數(shù)的位置基于RID,以及偏移指定到適配器函數(shù)的配置空間的偏移?;刂芳拇嫫?BAR)(1到n)324 :此字段包括多個(gè)無符號(hào)整數(shù),表示為BAR0_BARn, 它們與最初指定的適配器函數(shù)相關(guān)聯(lián),其值也被存儲(chǔ)在與適配器函數(shù)相關(guān)聯(lián)的基地址寄存器中。每一 BAR都指定適配器函數(shù)內(nèi)的存儲(chǔ)器空間或I/O空間的起始地址,還指出地址空間的類型,即,它是64位還是32位存儲(chǔ)器空間,或32位I/O空間,作為示例;在一個(gè)示例中,它用于對(duì)適配器函數(shù)的存儲(chǔ)器空間和/或I/O空間的訪問。例如,訪問適配器函數(shù)的指令中所提供的偏移和與在指令中指定的地址空間相關(guān)聯(lián)的基地址寄存器中的值相加,以獲取被用來訪問適配器函數(shù)的地址。指令中所提供的地址空間標(biāo)識(shí)符標(biāo)識(shí)要被訪問的適配器函數(shù)內(nèi)的地址空間以及要使用的對(duì)應(yīng)的BAR ;大小I. ... η 326 :此字段包括多個(gè)無符號(hào)整數(shù),表示為SIZEO-SIZEn。Size(大小)字段的值,當(dāng)是非零時(shí),表示每一地址空間的大小,每一條目都對(duì)應(yīng)于前面所描述的BAR。下面將描述關(guān)于BAR和Size的進(jìn)一步的細(xì)節(jié)。I.當(dāng)BAR對(duì)于適配器函數(shù)沒有實(shí)現(xiàn)時(shí),BAR字段以及其對(duì)應(yīng)的大小字段兩者都被保存為零。2.當(dāng)BAR字段表示I/O地址空間或者32比特存儲(chǔ)器地址空間時(shí),對(duì)應(yīng)的大小字段是非零的,并表示地址空間的大小。3.當(dāng)BAR字段表示64比特存儲(chǔ)器地址空間時(shí),a. BARn字段表示最低有效地址比特。b.下一連續(xù)的BARn+Ι字段表示最高有效地址比特。c.對(duì)應(yīng)的SIZEn字段是非零的,并表示地址空間的大小。d.對(duì)應(yīng)的SIZEn+Ι字段不是有意義的,并被保存為零。內(nèi)部路由信息328 :此信息被用來執(zhí)行到適配器的特定路由。它包括例如節(jié)點(diǎn)、處理器芯片、以及集線器尋址信息,作為示例。狀態(tài)指示符330 :這提供加載/存儲(chǔ)操作是否被阻止的指示,以及其他指示。在一個(gè)示例中,繁忙指示符、永久錯(cuò)誤狀態(tài)指示符、以及恢復(fù)已啟動(dòng)指示符是基于由固件所執(zhí)行的監(jiān)視而設(shè)置的。進(jìn)一步地,權(quán)限指示符例如基于策略來設(shè)置。BAR信息基于在由處理器(例如,處理器的固件)進(jìn)行的總線測(cè)量(bus walk)過程中發(fā)現(xiàn)的配置信息。其他字段可以基于配置、初始化和/或事件而設(shè)置。在其他實(shí)施例中,函數(shù)表?xiàng)l目可包括更多、更少或不同的信息。所包括的信息可以取決于由適配器函數(shù)所支持的或?qū)τ谶m配器函數(shù)啟用的操作。為定位包括一個(gè)或多個(gè)條目的函數(shù)表中的函數(shù)表?xiàng)l目,在一個(gè)實(shí)施例中,使用函數(shù)句柄。例如,函數(shù)句柄的一個(gè)或多個(gè)比特被用作函數(shù)表的索引以定位特定的函數(shù)表?xiàng)l目。參考圖3B,描述了關(guān)于函數(shù)句柄的更多細(xì)節(jié)。在一個(gè)示例中,函數(shù)句柄350包括指出是否啟用了 PCI函數(shù)句柄的啟用指示符352 ;標(biāo)識(shí)函數(shù)的PCI函數(shù)編號(hào)354 (這是靜態(tài)標(biāo)識(shí)符,在一個(gè)實(shí)施例中,是對(duì)函數(shù)表的索引);以及指出此函數(shù)句柄的特定實(shí)例的實(shí)例編號(hào)356。例如,每當(dāng)啟用函數(shù)句柄時(shí),實(shí)例編號(hào)會(huì)遞增以提供新實(shí)例編號(hào)。在一個(gè)實(shí)施例中,適配器函數(shù)被系統(tǒng)固件初始化,并被分配給操作系統(tǒng)或其他配置(如此處所使用的,操作系統(tǒng)包括設(shè)備驅(qū)動(dòng)程序)。隨后,操作系統(tǒng)初始化每一分配的函數(shù)以便可以使用它。例如,操作系統(tǒng)首先確定哪些適配器函數(shù)被分配給配置。在一個(gè)示例中,操作系統(tǒng)發(fā)出進(jìn)行此判斷的列表PCI函數(shù)(list PCI function)命令。此命令返回分配給操作系統(tǒng)的適配器函數(shù)的函數(shù)句柄的列表。作為示例,從函數(shù)表中檢索此信息。具體而言, 在初始化時(shí)間,或在適配器熱插拔之后,固件執(zhí)行總線測(cè)量以確定適配器的位置并確定其基本特點(diǎn)。此信息由固件存儲(chǔ)到每一個(gè)適配器的函數(shù)表?xiàng)l目中。然后,通過列表命令來檢索它。對(duì)于由列表命令返回的每一個(gè)函數(shù)句柄,操作系統(tǒng)確定由句柄指定的函數(shù)的特定特征。在一個(gè)示例中,這是通過發(fā)出從函數(shù)表?xiàng)l目中獲取此信息的查詢PCI函數(shù)(queryPCI function)命令來完成的。在另一個(gè)示例中,還通過例如查詢函數(shù)組(query functiongroup)命令,來獲取對(duì)一組適配器函數(shù)通用的特征。即,基于給定系統(tǒng)I/O基礎(chǔ)結(jié)構(gòu)和固件和I/O集線器的能力的組信息可以存儲(chǔ)在函數(shù)表?xiàng)l目(或其他位置),并通過查詢組命令來檢索。對(duì)于操作系統(tǒng)希望使用的每一個(gè)適配器函數(shù),操作系統(tǒng)啟用適配器函數(shù),并獲取該函數(shù)的已啟用的句柄。在一個(gè)示例中,使用調(diào)用邏輯處理器(CLP)的設(shè)置PCI函數(shù)(setPCI function)命令來執(zhí)行啟用。啟用包括例如執(zhí)行一個(gè)或多個(gè)有效性檢查(例如,對(duì)函數(shù)句柄,函數(shù)表?xiàng)l目等等),并響應(yīng)于通過有效性檢查,在與適配器函數(shù)相關(guān)聯(lián)的函數(shù)表?xiàng)l目、設(shè)備表?xiàng)l目和函數(shù)句柄中設(shè)置啟用指示符。在啟用函數(shù)之后,在適配器函數(shù)特定的設(shè)備表?xiàng)l目和/或函數(shù)表?xiàng)l目中設(shè)置各種操作參數(shù)。在一個(gè)示例中,使用修改PCI函數(shù)控制(Modify PCI Function Control)指令來設(shè)置這些參數(shù)。具體而言,在一個(gè)示例中,將信息從函數(shù)信息塊復(fù)制到與函數(shù)相關(guān)聯(lián)的設(shè)備表?xiàng)l目和/或函數(shù)表?xiàng)l目中。例如,使用在修改PCI函數(shù)控制指令中指定的函數(shù)信息塊來修改與在指令中指定的適配器函數(shù)相關(guān)聯(lián)的選擇的設(shè)備表?xiàng)l目和/或函數(shù)表?xiàng)l目。函數(shù)信息塊的被用來修改設(shè)備表?xiàng)l目和/或函數(shù)表?xiàng)l目的參數(shù)取決于在指令中所提供的操作控制。作為示例,操作控制可以指定注冊(cè)/取消注冊(cè)適配器中斷、注冊(cè)/取消注冊(cè)地址轉(zhuǎn)換、復(fù)位錯(cuò)誤狀態(tài)、復(fù)位加載/存儲(chǔ)塊、設(shè)置PCI函數(shù)測(cè)量參數(shù)以及設(shè)置攔截控制。在啟用適配器函數(shù)之后,如上文所描述的,可以使用一個(gè)或多個(gè)指令來給操作系統(tǒng)提供配置適配器函數(shù)、控制適配器函數(shù)(啟動(dòng)I/o操作)、以及讀取其狀態(tài)的能力。這些指令包括例如PCI加載指令、PCI存儲(chǔ)指令、以及PCI存儲(chǔ)塊指令。這些指令按如下方式與適配器函數(shù)的配置、I/o以及存儲(chǔ)器空間進(jìn)行交互如圖4A所示,PCI加載指令400可使例如在CPU 401上執(zhí)行的操作系統(tǒng)將例如PCI函數(shù)的配置空間402、I/O空間404或存儲(chǔ)器空間406的多達(dá)8字節(jié)的內(nèi)容讀取到通用寄存器410中。例如,在PCI加載指令的執(zhí)行過程中,執(zhí)行若干個(gè)有效性檢查。如果這些檢查成功,那么繼續(xù)從適配器函數(shù)的指定的地址空間中的計(jì)算出的位置獲取數(shù)據(jù),并響應(yīng)加載請(qǐng)求返回?cái)?shù)據(jù)。如果指定的地址空間是配置空間,則使用RID來生成用來獲取數(shù)據(jù)的配置讀取請(qǐng)求。然而,如果它是I/O或存儲(chǔ)器空間,則將從函數(shù)表?xiàng)l目獲得的BAR起始地址添加到指令中所提供的偏移中,以計(jì)算出數(shù)據(jù)地址,該數(shù)據(jù)地址用于被轉(zhuǎn)發(fā)到適配器函數(shù)的DMA讀取請(qǐng)求數(shù)據(jù)包中,以獲取數(shù)據(jù)。
如圖4B所示,PCI存儲(chǔ)指令414可使例如操作系統(tǒng)從通用寄存器416寫入(B卩,改變)例如PCI函數(shù)的配置空間402、I/O空間404或存儲(chǔ)器空間406的多達(dá)8字節(jié)的內(nèi)容。例如,在PCI存儲(chǔ)指令的執(zhí)行過程中,執(zhí)行若干個(gè)有效性檢查。如果成功,在繼續(xù)將數(shù)據(jù)存儲(chǔ)在適配器函數(shù)的地址空間中的指定的位置。如果將在其中存儲(chǔ)數(shù)據(jù)的位置是配置空間,那么使用從函數(shù)表?xiàng)l目獲得的請(qǐng)求者ID來生成向適配器函數(shù)的配置寫入請(qǐng)求。然而,如果將向I/O地址空間或存儲(chǔ)器空間存儲(chǔ),那么將從函數(shù)表?xiàng)l目獲得的BAR起始地址添加到指令中所提供的偏移中,以計(jì)算出數(shù)據(jù)地址,該數(shù)據(jù)地址包括在向適配器函數(shù)的DMA寫入請(qǐng)求數(shù)據(jù)包中。然后,數(shù)據(jù)被存儲(chǔ)在指定的位置。如圖4C所示,PCI存儲(chǔ)塊指令可使例如操作系統(tǒng)從主存儲(chǔ)器420寫入(B卩,改變)例如PCI函數(shù)的存儲(chǔ)器空間406的32、64、128或256字節(jié)。根據(jù)本發(fā)明的一個(gè)方面,適配器函數(shù)將對(duì)于在主機(jī)(也叫做,主程序或主機(jī)操作系統(tǒng))上執(zhí)行的訪客端(例如,可分頁的存儲(chǔ)模式訪客端;即,V=V訪客端)被虛擬化。在一個(gè)示例中,在;z / Architecture 中,在解釋的級(jí)別 2,通過 start Interpretive Execution(SIE,開始解釋執(zhí)行)指令來解釋性地執(zhí)行可分頁的訪客端。例如,邏輯分區(qū)(LPAR)管理程序執(zhí)行SIE指令來開始在物理的固定存儲(chǔ)器中進(jìn)行邏輯分區(qū)。如果z / VM 是該邏輯分區(qū)中的操作系統(tǒng),則它發(fā)出在其V=V (虛擬)存儲(chǔ)器中執(zhí)行其訪客端(虛擬)機(jī)器的SIE指令。因此,LPAR管理程序使用級(jí)別I SIE,而Z/VM 管理程序使用級(jí)別2 SIE0為虛擬化訪客端,主機(jī)授權(quán)訪客端獨(dú)家使用分配給主機(jī)的適配器函數(shù)。授權(quán)可以保證成功地解釋各種指令,包括PCI加載指令、PCI存儲(chǔ)指令以及PCI存儲(chǔ)塊指令。S卩,當(dāng)這些指令是由訪客端所發(fā)出的而沒有錯(cuò)誤或異常時(shí),則它們?cè)跊]有主機(jī)干涉的情況下執(zhí)行。如此,對(duì)于這些指令,消除了由主機(jī)所產(chǎn)生的解釋性執(zhí)行進(jìn)入和退出開銷、和指令仿真開銷。下面將描述此授權(quán)機(jī)制。參考圖5和6描述了與授權(quán)訪客端訪問適配器函數(shù)相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。具體而言,圖5描繪了由主機(jī)代表訪客端(例如,訪客端處理器)執(zhí)行的初始化的一個(gè)實(shí)施例,而圖6描繪了響應(yīng)于訪客端(例如,訪客端處理器)執(zhí)行指令而執(zhí)行的授權(quán)檢查的一個(gè)實(shí)施例。在此實(shí)施例中,指令是專門針對(duì)PCI函數(shù)實(shí)現(xiàn)的PCI指令。在其他實(shí)施例中,可以使用對(duì)于其他架構(gòu)的其他指令。參考圖5,一開始,主機(jī)分配一個(gè)或多個(gè)適配器函數(shù),供訪客端專門使用,步驟500。例如,分配給主機(jī)的適配器函數(shù)中的一個(gè)或多個(gè)通過例如指出哪些適配器函數(shù)與訪客端相關(guān)聯(lián)的分配表,或通過作出這些關(guān)聯(lián)的命令等等,被分配給訪客端。主機(jī)希望PCI加載、PCI存儲(chǔ)和PCI存儲(chǔ)塊指令,作為示例,被為訪客端解釋。如此,如下面所描述的,主機(jī)代表訪客端為分配給訪客端的每一個(gè)函數(shù)執(zhí)行某些初始化操作。其他不是性能關(guān)鍵的并控制適配器的配置的指令(例如,修改PCI函數(shù)控制)通??梢员恢鳈C(jī)攔截。對(duì)于分配的適配器函數(shù),步驟502,主機(jī)通過將授權(quán)令牌與適配器函數(shù)相關(guān)聯(lián),來授權(quán)訪客端解釋PCI指令,步驟504。授權(quán)令牌是訪客端的唯一令牌。在一個(gè)特定示例中,它是訪客端中斷狀態(tài)區(qū)域(GISA)的指定,在指令執(zhí)行過程中被用來判斷訪客端是否被允許對(duì)適配器進(jìn)行訪問。在此實(shí)施例中,GISA指定是唯一令牌,因?yàn)槊總€(gè)訪客端有一個(gè)GISA,不管有多少虛擬CPU (狀態(tài)描述)包括訪客端。GISA指定(例如,32位值)被包括在每一狀態(tài)描述中,該狀態(tài)描述可被主機(jī)訪問,而不被訪客端訪問。雖然在一個(gè)示例中,GISA指定被用作令牌,但是在另一示例中,可以使用任何唯一值。在一個(gè)示例中,響應(yīng)于訪客端執(zhí)行攔截到主機(jī)的Call LogicalProcessor(CLP,調(diào)用邏輯處理器)的set PCI function (設(shè)置PCI函數(shù))命令,執(zhí)行授權(quán)令牌的關(guān)聯(lián)。授權(quán)令 牌的關(guān)聯(lián)是通過主機(jī)代表訪客端執(zhí)行設(shè)置PCI函數(shù)命令并指定訪客端的GISA指定作為授權(quán)令牌來完成的。在指令的執(zhí)行過程中,GISA指定被從命令請(qǐng)求塊復(fù)制,并放在與被分配的適配器函數(shù)相關(guān)聯(lián)的函數(shù)表?xiàng)l目中。下面將更全面地對(duì)此進(jìn)行描述。進(jìn)一步地,主機(jī)允許訪客端為適配器函數(shù)解釋指令,步驟506。例如,主機(jī)確保適配器函數(shù)的函數(shù)表?xiàng)l目中的攔截控制指示符被設(shè)置為零。在一個(gè)示例中,可以使用修改PCI函數(shù)控制指令來設(shè)置此控制,下面將進(jìn)一步對(duì)此進(jìn)行描述。此后,如果有更多函數(shù)待分配,查詢508,那么處理返回到步驟502。否則,主機(jī)允許訪客端解釋與訪客端相關(guān)聯(lián)的所有適配器函數(shù)的指令,步驟510。在一個(gè)示例中,這是通過設(shè)置解釋指示符來執(zhí)行的。此指示符存儲(chǔ)在例如訪客端的狀態(tài)描述中。在初始化之后并響應(yīng)于訪客端執(zhí)行諸如PCI加載、PCI存儲(chǔ)或PCI存儲(chǔ)塊指令之類的指令,如果某些檢查有效,則指令被解釋,包括確保解釋工具(facility)(稱為PCI加載/存儲(chǔ)解釋)安裝在主機(jī)配置中。這是通過在例如控制塊中設(shè)置的指示符來確定的。下面將參考圖6來描述進(jìn)一步的有效性檢查。在一個(gè)實(shí)施例中,響應(yīng)于訪客端(例如,訪客端處理器)執(zhí)行PCI指令中的一個(gè)指令并假設(shè)工具被安裝,步驟602,就訪客端是否被允許進(jìn)行PCI加載/存儲(chǔ)解釋作出判斷,查詢604。具體而言,例如在控制塊中提供控制以使主機(jī)對(duì)于分配給訪客端的所有PCI函數(shù),啟用和禁用對(duì)PCI指令的解釋。如果設(shè)置了控制(例如,設(shè)置為I ),則訪客端被允許執(zhí)行PCI加載/存儲(chǔ)解釋。如果未設(shè)置控制,那么訪客端不被允許。主機(jī)可以動(dòng)態(tài)地將此指示符從設(shè)置變?yōu)閺?fù)位,當(dāng)需要時(shí),干涉指令的執(zhí)行。進(jìn)一步地,就對(duì)于PCI加載/存儲(chǔ)解釋是否啟用適配器函數(shù)作出另一判斷,查詢606。例如,提供控制以使主機(jī)通過PCI函數(shù)基在PCI函數(shù)上啟用和禁用對(duì)PCI指令的解釋。在一個(gè)示例中,此控制是函數(shù)表?xiàng)l目中的攔截控制指示符,其值是從函數(shù)信息塊獲得的(在一個(gè)示例中,作為修改PCI函數(shù)控制指令的操作數(shù)提供的)。如果在一個(gè)示例中,此指示符被設(shè)置為例如I,那么就訪客端是否被授權(quán)為此適配器函數(shù)發(fā)出PCI加載、PCI存儲(chǔ)、以及PCI存儲(chǔ)塊指令作出進(jìn)一步的判斷,查詢608。在一個(gè)示例中,為確定訪客端是否被授權(quán)對(duì)于指定的適配器函數(shù)發(fā)出PCI加載、PCI存儲(chǔ)或PCI存儲(chǔ)塊指令,使用授權(quán)令牌。例如,將執(zhí)行訪客端的狀態(tài)描述的授權(quán)令牌的值與當(dāng)主機(jī)允許并授權(quán)訪客端(例如,通過CLP指令的設(shè)置PCI函數(shù)命令)時(shí)指定的FTE中的授權(quán)令牌進(jìn)行比較。如果訪客端被授權(quán),那么就由指令操作數(shù)(由訪客端執(zhí)行的PCI指令的)所指定的PCI函數(shù)句柄是否是啟用作出進(jìn)一步的判斷,查詢610。在一個(gè)示例中,此判斷是通過檢查句柄中的啟用位來作出的。如果啟用了函數(shù)句柄,那么訪客端可以執(zhí)行PCI指令,無需主機(jī)干涉。然而,如果有任何一個(gè)有效性檢查失敗的話,那么就發(fā)生對(duì)主機(jī)的攔截,步驟612。即,在主機(jī)干涉下,執(zhí)行指令。此處描述了 CLP設(shè)置PCI函數(shù)命令的進(jìn)一步的細(xì)節(jié)。為了使用PCI函數(shù),它將被啟用。例如,愿意使用PCI函數(shù)的操作系統(tǒng)執(zhí)行查詢,以確定它有資格使用的一個(gè)或多個(gè)函數(shù)(基于I/O配置),并選定這些函數(shù)中的一個(gè)來啟用。在一個(gè)示例中,使用調(diào)用邏輯處理器指令的設(shè)置PCI函數(shù)命令來啟用函數(shù)。圖7A中描繪了此指令的一個(gè)實(shí)施例。如圖所示,在一個(gè)示例中,調(diào)用邏輯處理器指令700包括指出它是調(diào)用邏輯處理器指令的操作代碼702 ;以及命令704的指示。在一個(gè)示例中,此指示是描述要執(zhí)行的命令的請(qǐng)求塊的地址。圖7B中描繪了這樣的請(qǐng)求塊的一個(gè)實(shí)施例。
如圖7B所示,在一個(gè)示例中,請(qǐng)求塊720包括若干個(gè)參數(shù),諸如例如指出請(qǐng)求塊的長度的長度字段722 ;指出設(shè)置PCI函數(shù)命令的命令字段724 ;PCI函數(shù)句柄726,這是被提供到啟用或者禁用函數(shù)的句柄;被用來指定啟用或者禁用操作的操作代碼728 ;指出要與特定PCI函數(shù)相關(guān)聯(lián)的被請(qǐng)求的數(shù)量的地址空間的DMA地址空間(DMAAS)的數(shù)量730 ;以及用來授權(quán)訪客端的訪客端授權(quán)令牌732。在其他實(shí)施例中,可以包括更多、更少或不同的信息。例如,在其中指令由可分頁的存儲(chǔ)模式訪客端的主機(jī)所發(fā)出的虛擬環(huán)境中,提供了訪客端標(biāo)識(shí)。其他變化也是可以的。響應(yīng)于發(fā)出并處理調(diào)用邏輯處理器指令,返回響應(yīng)塊,響應(yīng)塊中所包括的信息取決于要執(zhí)行的操作。圖7C中描繪了響應(yīng)塊的一個(gè)實(shí)施例。在一個(gè)示例中,響應(yīng)塊750包括指出響應(yīng)塊的長度的長度字段752 ;指出命令的狀態(tài)的響應(yīng)代碼754 ;以及標(biāo)識(shí)PCI函數(shù)的PCI函數(shù)句柄756。響應(yīng)于啟用命令,PCI函數(shù)句柄是PCI函數(shù)的已啟用的句柄。進(jìn)一步地,一旦完成禁用操作,PCI函數(shù)句柄是可以是在將來被啟用函數(shù)啟用的通用句柄。參考圖8描述了啟用PCI函數(shù)的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,響應(yīng)于發(fā)出調(diào)用邏輯處理器指令啟動(dòng)此邏輯,其中,命令被設(shè)置為設(shè)置PCI函數(shù)命令,以及操作代碼被設(shè)置為啟用函數(shù)。此邏輯是通過例如處理器響應(yīng)于操作系統(tǒng)或被授權(quán)執(zhí)行此邏輯的操作系統(tǒng)的設(shè)備驅(qū)動(dòng)程序發(fā)出指令來執(zhí)行的。在其他實(shí)施例中,該邏輯可以在不使用調(diào)用邏輯處理器指令的情況下執(zhí)行。參考圖8,一開始,就在調(diào)用邏輯處理器指令的請(qǐng)求塊中所提供的句柄是否是有效句柄作出判斷,查詢800。即,句柄是否指向函數(shù)表中的有效條目或它是否在有效條目的范圍外面(例如,句柄的函數(shù)編號(hào)部分是否指定安裝的函數(shù))。如果句柄未知,那么提供對(duì)應(yīng)的響應(yīng)代碼,指出句柄未被識(shí)別。然而,如果句柄已知,那么就是否啟用句柄作出進(jìn)一步的查詢,查詢804。此判斷是通過檢查PCI函數(shù)句柄中的啟用指示符來作出的。如果設(shè)置了句柄已啟用的指示,那么返回指出這一點(diǎn)的響應(yīng)代碼,步驟806。然而,如果句柄已知但是沒有啟用(S卩,對(duì)啟用有效),那么就被請(qǐng)求的待分配到PCI函數(shù)的地址空間的數(shù)量是否大于最大值作出進(jìn)一步的判斷,查詢808。為作出此判斷,將如在請(qǐng)求塊中所指定的DMA地址空間的數(shù)量與最大值(在一個(gè)示例中,是基于策略提供的)進(jìn)行比較。如果地址空間的數(shù)量大于最大值,那么提供響應(yīng)代碼,指出DMA地址空間的無效值,步驟810。否則,就是否有被請(qǐng)求數(shù)量的地址空間可用作出判斷,查詢812。此判斷是通過對(duì)是否有可用于被請(qǐng)求數(shù)量的地址空間的設(shè)備表?xiàng)l目進(jìn)行檢查作出的。如果沒有被請(qǐng)求數(shù)量的地址空間可用,那么返回指出沒有足夠資源的響應(yīng)代碼,步驟814。否則,處理繼續(xù)以啟用PCI函數(shù)。使用所提供的句柄來定位函數(shù)表?xiàng)l目,步驟816。例如,句柄的一個(gè)或多個(gè)指定的比特被用作函數(shù)表的索引以定位特定的函數(shù)表?xiàng)l目。響應(yīng)于定位適當(dāng)?shù)暮瘮?shù)表?xiàng)l目,就是否啟用了函數(shù)作出判斷,查詢818。此判斷是通過檢查函數(shù)表?xiàng)l目中的啟用指示符來作出的。如果函數(shù)已經(jīng)啟用(即,指示符被設(shè)置為1),那么返回指出PCI函數(shù)已經(jīng)處于被請(qǐng)求的狀態(tài)的響應(yīng)代碼,步驟820。如果函數(shù)還沒有啟用,那么處理繼續(xù)判斷函數(shù)是否處于永久錯(cuò)誤狀態(tài),查詢822。如果函數(shù)表?xiàng)l目中的永久錯(cuò)誤狀態(tài)指示符指出它處于永久錯(cuò)誤狀態(tài),那么返回指出這一點(diǎn) 的響應(yīng)代碼,步驟824。然而,如果函數(shù)不處于永久錯(cuò)誤狀態(tài),則就是否對(duì)于函數(shù)啟動(dòng)錯(cuò)誤恢復(fù)作出判斷,查詢826。如果設(shè)置了函數(shù)表?xiàng)l目中的恢復(fù)已啟動(dòng)指示符,那么提供指出恢復(fù)已啟動(dòng)的響應(yīng)代碼,步驟828。否則,就PCI函數(shù)是否繁忙作出進(jìn)一步的查詢,查詢830。再次,如果對(duì)函數(shù)表?xiàng)l目中的繁忙指示符的檢查指出PCI函數(shù)繁忙,那么提供這樣的指示,步驟832。然而,如果PCI函數(shù)不處于永久錯(cuò)誤狀態(tài),沒有啟動(dòng)恢復(fù)并且它也不繁忙,那么就操作系統(tǒng)是否被允許啟用此PCI函數(shù)作出進(jìn)一步的查詢,步驟834。如果基于函數(shù)表?xiàng)l目的權(quán)限指示符它不被準(zhǔn)許,那么提供指出未經(jīng)授權(quán)的動(dòng)作的響應(yīng)代碼,步驟836。然而,如果所有測(cè)試都成功地通過,那么就是否有DTE對(duì)此PCI函數(shù)可用作出判斷,查詢838。作為示例,對(duì)DTE可用的判斷可以基于當(dāng)前在I/O集線器中沒有啟用的DTE。另外,可以應(yīng)用策略,以進(jìn)一步限制對(duì)給定操作系統(tǒng)或邏輯分區(qū)可用的DTE的數(shù)量??梢苑峙淇梢员贿m配器訪問的任何可用的DTE。如果沒有可用的DTE,那么返回指出被請(qǐng)求的DTE中的一個(gè)或多個(gè)不可用的響應(yīng)代碼,步驟840。如果有DTE可用,那么分配并啟用對(duì)應(yīng)于被請(qǐng)求的地址空間的數(shù)量的數(shù)量的DTE,步驟842。在一個(gè)示例中,啟用包括在每一要被啟用的DTE中設(shè)置啟用指示符。進(jìn)一步地,啟用包括,在此示例中,設(shè)置按內(nèi)容尋址的存儲(chǔ)器(CAM),以提供到每一 DTE的索引。例如,對(duì)于每一個(gè)DTE,CAM中的條目被加載了索引,且CAM促進(jìn)對(duì)DTE的定位。進(jìn)一步地,將DTE與函數(shù)表?xiàng)l目相關(guān)聯(lián),步驟844。這包括例如在函數(shù)表?xiàng)l目中包括每一 DTE索引的實(shí)例。然后,通過在函數(shù)表?xiàng)l目中設(shè)置啟用指示符,來將函數(shù)標(biāo)記為已啟用,步驟846。此外,還設(shè)置句柄中的啟用比特,并更新實(shí)例編號(hào),步驟848。然后,返回此啟用的句柄,步驟850,允許使用PCI適配器。例如,響應(yīng)于啟用函數(shù),可以執(zhí)行對(duì)于地址轉(zhuǎn)換和中斷的注冊(cè),可以通過PCI函數(shù)來執(zhí)行DMA操作,和/或可以向函數(shù)發(fā)出加載、存儲(chǔ)和存儲(chǔ)塊指令。如上文所指出的,在啟用函數(shù)之后,通過修改PCI函數(shù)控制指令,在DTE和/或FTE中設(shè)置各種操作參數(shù)。參考圖9A-9D描述了修改PCI函數(shù)控制指令的一個(gè)示例。參考圖9A,修改PCI函數(shù)控制指令900包括例如指出修改PCI函數(shù)控制指令的操作碼902 ;指定包括關(guān)于為其正在建立操作參數(shù)的適配器函數(shù)的各種信息的位置的第一字段904 ;以及指定從其中獲取PCI函數(shù)信息塊(FIB)的位置的第二字段906。下面將進(jìn)一步地描述通過字段I和2指定的位置的內(nèi)容。在一個(gè)實(shí)施例中,字段I指定包括各種信息的通用寄存器。如圖9B所示,寄存器的內(nèi)容包括例如標(biāo)識(shí)代表其執(zhí)行修改指令的適配器函數(shù)的句柄的函數(shù)句柄910 ;指定與由函數(shù)句柄指定的適配器函數(shù)相關(guān)聯(lián)的系統(tǒng)存儲(chǔ)器中的地址空間的地址空間912 ;指定要對(duì)于適配器函數(shù)執(zhí)行的操作的操作控制914 ;以及當(dāng)指令以預(yù)定義的代碼完成時(shí)提供關(guān)于指令的狀態(tài)的狀態(tài)916。在一個(gè)示例中,如圖9C所示,字段2指定包括關(guān)于相關(guān)聯(lián)的適配器函數(shù)的信息的PCI函數(shù)信息塊(FIB)的邏輯地址920。根據(jù)本發(fā)明的一個(gè)方面,使用函數(shù)信息塊來更新與適配器函數(shù)相關(guān)聯(lián)的設(shè)備表?xiàng)l目和/或函數(shù)表?xiàng)l目(或其他位置)。在初始化過程中和/或在適配器的配置過程中和/或響應(yīng)于特定事件,在FIB中存儲(chǔ)信息。參考圖9D描述了關(guān)于函數(shù)信息塊的進(jìn)一步的細(xì)節(jié)。在一個(gè)實(shí)施例中,函數(shù)信息塊 950包括下列字段格式951 :此字段指定FIB的格式。攔截控制952 :此字段被用來指出由可分頁的模式訪客端對(duì)特定指令的訪客端執(zhí)行是否導(dǎo)致指令攔截;錯(cuò)誤指示954 :此字段包括直接存儲(chǔ)器訪問和適配器中斷的錯(cuò)誤狀態(tài)指示。當(dāng)設(shè)置了比特(例如,I)時(shí),當(dāng)對(duì)于適配器函數(shù)執(zhí)行直接存儲(chǔ)器訪問或適配器中斷時(shí),檢測(cè)到一個(gè)或多個(gè)錯(cuò)誤;加載/存儲(chǔ)被阻止956 :此字段指出加載/存儲(chǔ)操作是否被阻止;PCI函數(shù)有效958 :此字段包括對(duì)于適配器函數(shù)的啟用控制。當(dāng)比特被設(shè)置(例如,I)時(shí),適配器函數(shù)被視為對(duì)于I/o操作已啟用;地址空間已注冊(cè)960 :此字段包括對(duì)于適配器函數(shù)的直接存儲(chǔ)器訪問啟用控制。當(dāng)字段被設(shè)置(例如,I)時(shí),直接存儲(chǔ)器訪問被啟用;頁面大小961 :此字段指出通過DMA存儲(chǔ)器訪問而訪問的頁面或存儲(chǔ)器的其他單元的大?。籔CI基本地址(PBA) 962 :此字段是分配給適配器函數(shù)的系統(tǒng)存儲(chǔ)器中的地址空間的基本地址。它表示適配器函數(shù)被允許用于對(duì)指定的DMA地址空間的直接存儲(chǔ)器訪問的最低虛擬地址;PCI地址限制(PAL) 964 :此字段表示適配器函數(shù)被允許在指定的DMA地址空間內(nèi)訪問的最高虛擬地址;輸入/輸出地址轉(zhuǎn)換指針(IOAT) 966 :輸入/輸出地址轉(zhuǎn)換指針指定PCI虛擬地址轉(zhuǎn)換所使用的任何轉(zhuǎn)換表中的第一個(gè),或者它可以直接指定存儲(chǔ)器的幀的絕對(duì)地址,這是轉(zhuǎn)換的結(jié)果;中斷子類(ISC) 968 :此字段包括用來對(duì)于適配器函數(shù)呈現(xiàn)適配器中斷的中斷子類;中斷數(shù)量(NOI) 970 :此字段指定對(duì)于適配器函數(shù)接受的不同的中斷代碼的數(shù)量。此字段也定義由適配器中斷比特矢量地址以及適配器中斷比特矢量偏移字段所指定的適配器中斷比特矢量的以比特為單位的大??;適配器中斷比特矢量地址(AIBV) 972 :此字段指定適配器函數(shù)的適配器中斷比特矢量的地址。此矢量用于中斷處理中;適配器中斷比特矢量偏移974 :此字段指定適配器函數(shù)的第一適配器中斷比特矢量比特的偏移;適配器中斷概要比特地址(AISB) 976 :此字段提供指定可任選地用于中斷處理中的適配器中斷概要比特的地址;適配器中斷概要比特偏移978 :此字段提供到適配器中斷概要比特矢量的偏移;函數(shù)測(cè)量塊(FMB)地址980 :此字段提供用來收集關(guān)于適配器函數(shù)的測(cè)量的函數(shù)測(cè)量塊的地址;函數(shù)測(cè)量塊密鑰982 :此字段包括訪問函數(shù)測(cè)量塊的訪問密鑰; 概要比特通知控制984 :此字段指出是否有正在使用的概要比特矢量;指令授權(quán)令牌986 :此字段被用來確定可分頁的存儲(chǔ)模式訪客端(例如,V=V訪客端)是否被授權(quán)執(zhí)行PCI指令而沒有主機(jī)干涉;以及地址轉(zhuǎn)換格式987 :此字段指出要用于轉(zhuǎn)換中的最高級(jí)別轉(zhuǎn)換表的地址轉(zhuǎn)換的選擇的格式(例如,段表、區(qū)域第三等等)。在配置、初始化、和/或特定事件的出現(xiàn)過程中獲取函數(shù)信息塊中的信息。根據(jù)本發(fā)明的一個(gè)方面,使用修改PCI函數(shù)控制指令中所指定的函數(shù)信息塊,來修改選擇的設(shè)備表?xiàng)l目、函數(shù)表?xiàng)l目和/或與在指令中所指定的適配器函數(shù)相關(guān)聯(lián)的其他固件控制。通過修改設(shè)備表?xiàng)l目,函數(shù)表?xiàng)l目和/或其他固件控制,為適配器提供了某些服務(wù)。這些服務(wù)包括例如適配器中斷;地址轉(zhuǎn)換;復(fù)位錯(cuò)誤狀態(tài);復(fù)位加載/存儲(chǔ)被阻止;設(shè)置函數(shù)測(cè)量參數(shù);以及設(shè)置攔截控制。參考圖IOA描述了與修改PCI函數(shù)控制指令相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,指令由操作系統(tǒng)(或其他配置)發(fā)出并由執(zhí)行操作系統(tǒng)的處理器(例如,固件)來執(zhí)行。在此處的示例中,指令和適配器函數(shù)是基于PCI的。然而,在其他示例中,可以使用不同的適配器架構(gòu)和對(duì)應(yīng)的指令。在一個(gè)示例中,操作系統(tǒng)向指令提供下列操作數(shù)(例如,在由指令指定的一個(gè)或多個(gè)寄存器中)=PCI函數(shù)句柄;DMA地址空間標(biāo)識(shí)符;操作控制;以及函數(shù)信息塊的地址。參考圖10A,一開始,就是否安裝了允許修改PCI函數(shù)控制指令的工具作出判斷,查詢1000。此判斷是通過例如檢查存儲(chǔ)在例如控制塊中的指示符來作出的。如果工具沒有安裝,則提供異常狀態(tài),步驟1002。否則,就可分頁的存儲(chǔ)模式訪客端(或其他訪客端)是否發(fā)出了指令作出判斷,查詢1004。如果是,則主機(jī)操作系統(tǒng)將仿真該訪客端的操作,步驟1006。例如,主機(jī)將攔截并判斷是否對(duì)于此訪客端將允許攔截控制。此判斷是通過檢查FTE來作出的。如果攔截被授權(quán),則主機(jī)將代表訪客端重新發(fā)出修改PCI函數(shù)控制指令。否則,提供異常狀態(tài)。否則,就操作數(shù)中的一個(gè)或多個(gè)是否對(duì)齊作出判斷,查詢1008。例如,就函數(shù)信息塊的地址是否位于雙字邊界作出判斷。在一示例中,這是可選的。如果操作數(shù)沒有對(duì)齊,則提供異常狀態(tài),步驟1010。否則,就函數(shù)信息塊是否是可訪問的作出判斷,查詢1012。如果不,則提供異常狀態(tài),步驟1014。否則,就修改PCI函數(shù)控制指令的操作數(shù)中所提供的句柄是否啟用作出判斷,查詢1016。在一個(gè)示例中,此判斷是通過檢查句柄中的啟用指示符來作出的。如果句柄沒有啟用,則提供異常狀態(tài),步驟1018。
如果句柄已啟用,則使用句柄來定位函數(shù)表?xiàng)l目,步驟1020。即,句柄的至少一部分被用作函數(shù)表的定位對(duì)應(yīng)于將為其建立操作參數(shù)的適配器函數(shù)的函數(shù)表?xiàng)l目的索引。就是否找到函數(shù)表?xiàng)l目作出判斷,查詢1022。如果不,則提供異常狀態(tài),步驟1024。否則,如果發(fā)出指令的配置是訪客端,查詢1026,那么提供異常狀態(tài)(例如,對(duì)主機(jī)的攔截),步驟1028。如果配置不是訪客端,則可以忽略此查詢,或者也可以檢查其他授權(quán),如果指定的話。然后,就是否啟用函數(shù)作出判斷,查詢1030。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的啟用指示符來作出的。如果還沒有啟用,則提供異常狀態(tài),步驟1032。如果函數(shù)已啟用,則就恢復(fù)是否有效作出判斷,查詢1034。如果如由函數(shù)表?xiàng)l目中的恢復(fù)指示符確定的,恢復(fù)是有效,則提供異常狀態(tài),1036。然而,如果恢復(fù)不是有效的,則就函數(shù)是否繁忙作出進(jìn)一步的判斷,1038。此判斷是通過檢查函數(shù)表?xiàng)l目中的繁忙指示符來作出的。如果函數(shù)繁忙,則提供繁忙狀態(tài),步驟1040。在繁忙狀態(tài)下,可以重試指令,而不 是丟棄。如果函數(shù)不繁忙,則就函數(shù)信息塊格式是否有效作出進(jìn)一步的判斷,查詢1042。例如,檢查FIB的格式字段,以確定此格式是否被系統(tǒng)支持。如果無效,則提供異常狀態(tài),步驟1044。如果函數(shù)信息塊格式有效,則就在指令的操作數(shù)中指定的操作控制是否有效作出進(jìn)一步的判斷,查詢1046。即,操作控制是否是為此指令指定的操作控制中的一個(gè)。如果無效,則提供異常狀態(tài),步驟1048。然而,如果操作控制有效,則處理繼續(xù)指定特定操作控制??梢杂尚薷腜CI函數(shù)控制指令的操作控制指定的一個(gè)操作是用于控制來自適配器的中斷的設(shè)置攔截控制操作。利用此操作,從函數(shù)信息塊的中斷控制字段來設(shè)置相對(duì)于中斷控制的PCI函數(shù)參數(shù)。當(dāng)由可分頁的存儲(chǔ)模式訪客端發(fā)出時(shí),此操作控制被視為預(yù)留的。參考圖IOB描述了設(shè)置攔截控制操作的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,操作數(shù)是來自函數(shù)信息塊的攔截控制。響應(yīng)于指定此操作,函數(shù)表?xiàng)l目中的攔截控制被設(shè)置為來自函數(shù)信息塊的攔截控制,步驟1060。在初始化之后,訪客端可以執(zhí)行PCI加載、PCI存儲(chǔ)、以及PCI存儲(chǔ)塊指令,下面將描述其中的每一個(gè)指令。首先參考圖11A,描繪了 PCI加載指令的一個(gè)實(shí)施例。如圖所示,PCI加載指令1100包括例如指出PCI加載指令的操作碼1102 ;指定將加載從適配器函數(shù)獲取的數(shù)據(jù)的位置的第一字段1104 ;以及指定包括關(guān)于將從其中加載數(shù)據(jù)的適配器函數(shù)的各種信息的位置的第二字段1106。下面將進(jìn)一步地描述通過字段I和2指定的位置的內(nèi)容。在一個(gè)示例中,字段I指定通用寄存器,并如圖IIB中所描繪的,該寄存器的內(nèi)容1104包括從指令中所指定的適配器函數(shù)的位置加載的一個(gè)或多個(gè)字節(jié)的相鄰范圍。在一個(gè)示例中,數(shù)據(jù)被加載到寄存器的最右邊的字節(jié)位置。在一個(gè)實(shí)施例中,字段2指定包括各種信息的一對(duì)通用寄存器。如圖IlB所示,寄存器的內(nèi)容包括例如已啟用的句柄1110 :此字段是將從其中加載數(shù)據(jù)的適配器函數(shù)的已啟用的函數(shù)句柄;地址空間1112 :此字段是將從其中加載數(shù)據(jù)的適配器函數(shù)內(nèi)的地址空間;
地址空間內(nèi)的偏移1114 :此字段是將從其中加載數(shù)據(jù)的指定的地址空間內(nèi)的偏移;長度字段1116 :此字段指定加載操作的長度(例如,要被加載的字節(jié)的數(shù)量);以及狀態(tài)字段1118 :此字段提供當(dāng)指令以預(yù)定義的條件碼完成時(shí)適用的狀態(tài)碼。在一個(gè)實(shí)施例中,從適配器函數(shù)加載的字節(jié)將被包含在適配器函數(shù)的指定的PCI地址空間中的整數(shù)界限內(nèi)。當(dāng)?shù)刂房臻g字段指定存儲(chǔ)器地址空間時(shí),整數(shù)界限大小是例如雙字。當(dāng)?shù)刂房臻g字段指定I/O地址空間或配置地址空間時(shí),整數(shù)界限大小是例如一個(gè)字。參考圖12A-12B描述了與PCI加載指令相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,指令由操作系統(tǒng)(或其他配置)發(fā)出并由執(zhí)行操作系統(tǒng)的處理器(例如,固件)來執(zhí)行。在此處的示例中,指令和適配器函數(shù)是基于PCI的。然而,在其他示例中,可以使用不同的適配器架構(gòu)和對(duì)應(yīng)的指令。 為發(fā)出指令,操作系統(tǒng)向指令提供下列操作數(shù)(例如,在由指令所指定的一個(gè)或多個(gè)寄存器中)=PCI函數(shù)句柄、PCI地址空間(PCIAS)、PCI地址空間中的偏移、以及要被加載的數(shù)據(jù)的長度。在成功地完成PCI加載指令之后,數(shù)據(jù)被加載到由指令所指定的位置(例如,寄存器)。參考圖12A,一開始,就是否安裝了允許PCI加載指令的工具(facility)作出判斷,查詢1200。此判斷是通過例如檢查存儲(chǔ)在例如控制塊中的指示符來作出的。如果工具沒有安裝,則提供異常狀態(tài),步驟1202。否則,如果訪客端正在發(fā)出此指令,則就訪客端是否被允許加載/存儲(chǔ)解釋作出判斷。這是通過檢查訪客端的狀態(tài)描述中的加載/存儲(chǔ)解釋控制來確定的。如果它不被允許,則提供異常狀態(tài)。否則,就操作數(shù)是否對(duì)齊作出判斷,查詢1204。例如,如果某些操作數(shù)需要處于偶數(shù)/奇數(shù)寄存器對(duì)中,則就是否滿足這些要求作出判斷。如果操作數(shù)沒有對(duì)齊,則提供異常狀態(tài),步驟1206。否則,如果安裝了工具并且操作數(shù)對(duì)齊,則就PCI加載指令的操作數(shù)中所提供的句柄是否被啟用作出判斷,查詢1208。在一個(gè)示例中,此判斷是通過檢查句柄中的啟用指示符來作出的。如果句柄沒有啟用,則提供異常狀態(tài),步驟1210。如果句柄已啟用,則使用句柄來定位函數(shù)表?xiàng)l目,步驟1212。即,句柄的至少一部分被用作函數(shù)表的定位對(duì)應(yīng)于將從其加載數(shù)據(jù)的適配器函數(shù)的函數(shù)表?xiàng)l目的索引。此后,就指令是否是由訪客端所發(fā)出的作出判斷,查詢1213。如果是,則就是否設(shè)置了攔截控制(例如,設(shè)置為I)作出進(jìn)一步的判斷,查詢1215。此判斷是通過檢查FTE中的攔截控制來作出的。如果已設(shè)置,則提供異常狀態(tài),步驟1217。否則,就函數(shù)是否被配置成供訪客端使用作出判斷,查詢1214。如果未被授權(quán),則提供異常狀態(tài),步驟1216。如果配置不是訪客端,則可以忽略此查詢,或者也可以檢查其他授權(quán),如果指定的話。此后,或者如果指令不是由訪客端所發(fā)出的,就函數(shù)是否啟用作出判斷,查詢1218。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的啟用指示符來作出的。如果還沒有啟用,則提供異常狀態(tài),步驟1220。如果函數(shù)已啟用,則就地址空間是否有效作出判斷,查詢1222。例如,指定的地址空間是否是適配器函數(shù)的指定的地址空間,并且是適合于此指令的地址空間。如果地址空間無效,則提供異常狀態(tài),步驟1224。否則,就加載/存儲(chǔ)是否被阻止作出判斷,查詢1226。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的狀態(tài)指示符來作出的。如果加載/存儲(chǔ)被阻止,則提供異常狀態(tài),步驟1228。然而,如果加載/存儲(chǔ)不被阻止,則就恢復(fù)是否有效作出判斷,查詢1230。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的恢復(fù)已啟動(dòng)指示符來作出的。如果恢復(fù)有效,則提供異常狀態(tài),步驟1232。否則,就函數(shù)是否繁忙作出判斷,查詢1234。此判斷是通過檢查函數(shù)表?xiàng)l目中的繁忙指示符來作出的。如果函數(shù)繁忙,則提供繁忙狀態(tài),步驟1236。在繁忙狀態(tài)下,可以重試指令,而不是丟棄。如果函數(shù)不繁忙,則就指令中所指定的偏移是否有效作出進(jìn)一步的判斷,查詢1238。即,偏移是否與基內(nèi)的操作長度以及地址空間的長度相結(jié)合,如函數(shù)表?xiàng)l目中所指定的。如果不,則提供異常狀態(tài),步驟1240。然而,如果偏移有效,則就長度是否有效作出判斷,查詢1242。即,取決于地址空間類型、地址空間內(nèi)的偏移、以及整數(shù)界限大小,長度是否有效。如果不,則提供異常狀態(tài),步驟1244。否則,處理對(duì)加載指令繼續(xù)。(在一個(gè)實(shí)施例·中,固件執(zhí)行上面的檢查。)繼續(xù)圖12B,由固件就加載是否是針對(duì)適配器函數(shù)的配置地址空間作出判斷,查詢1250。即,基于適配器函數(shù)的存儲(chǔ)器的配置,指令中所提供的指定的地址空間是否是配置空間。如果是,則固件執(zhí)行各種處理以向耦合到適配器函數(shù)的集線器提供請(qǐng)求;然后,集線器將請(qǐng)求路由到函數(shù),步驟1252。例如,固件從指令操作數(shù)中所提供的函數(shù)句柄所指向的函數(shù)表?xiàng)l目獲取請(qǐng)求者ID0進(jìn)一步地,固件基于函數(shù)表?xiàng)l目中的信息(例如,內(nèi)部路由信息)來確定接收此請(qǐng)求的集線器。即,環(huán)境可具有一個(gè)或多個(gè)集線器,固件確定耦合到適配器函數(shù)的集線器。然后,它將請(qǐng)求轉(zhuǎn)發(fā)到集線器。集線器生成配置讀取請(qǐng)求數(shù)據(jù)包,該數(shù)據(jù)包在PCI總線上流出到由函數(shù)表?xiàng)l目中的RID所標(biāo)識(shí)的適配器函數(shù)。配置讀取請(qǐng)求包括被用來獲取數(shù)據(jù)的RID和偏移(即,數(shù)據(jù)地址),如下面所描述的。返回到查詢1250,如果指定的地址空間不是配置空間,那么固件再次執(zhí)行各種處理以向集線器提供請(qǐng)求,步驟1254。固件使用句柄來選定函數(shù)表?xiàng)l目,并從該條目獲取定位適當(dāng)?shù)募€器的信息。它還計(jì)算要在加載操作中使用的數(shù)據(jù)地址。此地址是通過將從函數(shù)表?xiàng)l目獲得的BAR起始地址(BAR是與指令中所提供的地址空間標(biāo)識(shí)符相關(guān)聯(lián)的)與指令中所提供的偏移相加來計(jì)算出的。此計(jì)算出的數(shù)據(jù)地址被提供到集線器。然后,集線器獲取該地址,并將它包括在諸如DMA讀取請(qǐng)求數(shù)據(jù)包之類的請(qǐng)求數(shù)據(jù)包中,該數(shù)據(jù)包通過PCI總線流出到適配器函數(shù)中。響應(yīng)于通過步驟1252或者步驟1254接收到請(qǐng)求,適配器函數(shù)從指定的位置(SP,在數(shù)據(jù)地址處)獲取所請(qǐng)求的數(shù)據(jù),并在針對(duì)該請(qǐng)求的響應(yīng)中返回該數(shù)據(jù),步驟1256。響應(yīng)被從適配器函數(shù)轉(zhuǎn)發(fā)到I/O集線器。響應(yīng)于接收到響應(yīng),集線器將響應(yīng)轉(zhuǎn)發(fā)到啟動(dòng)處理器。然后,啟動(dòng)處理器從響應(yīng)數(shù)據(jù)包獲取數(shù)據(jù),并將它加載到指令中指定的位置(例如,字段I 404)。PCI加載操作以成功的指示來結(jié)束(例如,設(shè)置條件碼零)。除從適配器函數(shù)檢索數(shù)據(jù)并將它存儲(chǔ)在指定的位置的加載指令之外,可以執(zhí)行的另一指令是存儲(chǔ)指令。存儲(chǔ)指令將數(shù)據(jù)存儲(chǔ)在適配器函數(shù)中的指定位置。參考圖13A描述了 PCI存儲(chǔ)指令的一個(gè)實(shí)施例。如圖所示,PCI存儲(chǔ)指令1300包括,例如指出PCI存儲(chǔ)指令的操作碼1302 ;指定包括要在適配器函數(shù)中存儲(chǔ)的數(shù)據(jù)的位置的第一字段1304 ;以及指定包括關(guān)于將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的各種信息的位置的第二字段1306。下面將進(jìn)一步地描述通過字段I和2指定的位置的內(nèi)容。在一個(gè)示例中,字段I指定通用寄存器,并如圖13B中所描繪的,該寄存器的內(nèi)容1304包括要被存儲(chǔ)到適配器函數(shù)的指定位置的數(shù)據(jù)的一個(gè)或多個(gè)字節(jié)的相鄰范圍。在一個(gè)示例中,寄存器的最右邊的字節(jié)位置中的數(shù)據(jù)被存儲(chǔ)。在一個(gè)實(shí)施例中,字段 2指定包括各種信息的一對(duì)通用寄存器。如圖13B所示,寄存器的內(nèi)容包括例如已啟用的句柄1310 :此字段是將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的已啟用的函數(shù)句柄;地址空間1312 :此字段標(biāo)識(shí)將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)內(nèi)的地址空間;地址空間內(nèi)的偏移1314 :此字段指定將向其中存儲(chǔ)數(shù)據(jù)的指定的地址空間內(nèi)的偏移;長度字段1316 :此字段指定存儲(chǔ)操作的長度(例如,要被存儲(chǔ)的字節(jié)的數(shù)量);以及狀態(tài)字段1318 :此字段提供當(dāng)指令以預(yù)定義的條件碼完成時(shí)適用的狀態(tài)碼。參考圖14A-14B描述了與PCI存儲(chǔ)指令相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,指令由操作系統(tǒng)發(fā)出并由執(zhí)行操作系統(tǒng)的處理器(例如,固件)來執(zhí)行。為發(fā)出指令,操作系統(tǒng)向指令提供下列操作數(shù)(例如,在由指令所指定的一個(gè)或多個(gè)寄存器中)=PCI函數(shù)句柄、PCI地址空間(PCIAS)、PCI地址空間中的偏移、以及要被存儲(chǔ)的數(shù)據(jù)的長度、以及指向要被存儲(chǔ)的數(shù)據(jù)的指針。在成功地完成PCI存儲(chǔ)指令之后,數(shù)據(jù)被存儲(chǔ)到由指令所指定的位置。參考圖14A,一開始,就是否安裝了允許PCI存儲(chǔ)指令的工具作出判斷,查詢1400。此判斷是通過例如檢查存儲(chǔ)在例如控制塊中的指示符來作出的。如果工具沒有安裝,則提供異常狀態(tài),步驟1402。否則,如果訪客端正在發(fā)出此指令,則就訪客端是否被允許加載/存儲(chǔ)解釋作出判斷。這是通過檢查訪客端的狀態(tài)描述中的加載/存儲(chǔ)解釋控制來確定的。如果它不被允許,則提供異常狀態(tài)。否則,就操作數(shù)是否對(duì)齊作出判斷,查詢1404。例如,如果某些操作數(shù)需要處于偶數(shù)/奇數(shù)寄存器對(duì)中,則就是否滿足這些要求作出判斷。如果操作數(shù)沒有對(duì)齊,則提供異常狀態(tài),步驟1406。否則,如果安裝了工具并且操作數(shù)對(duì)齊,則就PCI存儲(chǔ)指令的操作數(shù)中所提供的句柄是否被啟用作出判斷,查詢1408。在一個(gè)示例中,此判斷是通過檢查句柄中的啟用指示符來作出的。如果句柄沒有啟用,則提供異常狀態(tài),步驟1410。如果句柄已啟用,則使用句柄來定位函數(shù)表?xiàng)l目,步驟1412。即,句柄的至少一部分被用作函數(shù)表的定位對(duì)應(yīng)于將在其存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的函數(shù)表?xiàng)l目的索引。此后,就指令是否是由訪客端所發(fā)出的作出判斷,查詢1413。如果是,則就是否設(shè)置了攔截控制(例如,設(shè)置為I)作出進(jìn)一步的判斷,查詢1415。此判斷是通過檢查FTE中的攔截控制來作出的。如果已設(shè)置,則提供異常狀態(tài),步驟1417。否則,就函數(shù)是否被配置成供訪客端使用作出判斷,查詢1414。如果未被授權(quán),則提供異常狀態(tài),步驟1416。如果配置不是訪客端,則可以忽略此查詢,或者也可以檢查其他授權(quán),如果指定的話。此后,或者如果指令不是由訪客端所發(fā)出的,則就函數(shù)是否啟用作出判斷,查詢1418。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的啟用指示符來作出的。如果還沒有啟用,則提供異常狀態(tài),步驟1420。
如果函數(shù)已啟用,則就地址空間是否有效作出判斷,查詢1422。例如,指定的地址空間是否是適配器函數(shù)的指定的地址空間,并且是適合于此指令的地址空間。如果地址空間無效,則提供異常狀態(tài),步驟1424。否則,就加載/存儲(chǔ)是否被阻止作出判斷,查詢1426。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的狀態(tài)指示符來作出的。如果加載/存儲(chǔ)被阻止,則提供異常狀態(tài),步驟1428。然而,如果加載/存儲(chǔ)不被阻止,則就恢復(fù)是否有效作出判斷,查詢1430。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的恢復(fù)已啟動(dòng)指示符來作出的。如果恢復(fù)有效,則提供異常狀態(tài),步驟1432。否則,就函數(shù)是否繁忙作出判斷,查詢1434。此判斷是通過檢查函數(shù)表?xiàng)l目中的繁忙指示符來作出的。如果函數(shù)繁忙,則提供繁忙狀態(tài),步驟1436。在繁忙狀態(tài)下,可以重試指令,而不是丟棄。如果函數(shù)不繁忙,則就指令中所指定的偏移是否有效作出進(jìn)一步的判斷,查詢1438。即,偏移是否與基內(nèi)的操作的長度以及地址空間的長度相結(jié)合,如函數(shù) 表?xiàng)l目中所指定的。如果不,則提供異常狀態(tài),步驟1440。然而,如果偏移有效,則就長度是否有效作出判斷,查詢1442。即,取決于地址空間類型、地址空間內(nèi)的偏移、以及整數(shù)界限大小,長度是否有效。如果不,則提供異常狀態(tài),步驟1444。否則,處理對(duì)存儲(chǔ)指令繼續(xù)。(在一個(gè)實(shí)施例中,固件執(zhí)行以上檢查。)繼續(xù)圖14B,由固件就存儲(chǔ)是否是針對(duì)適配器函數(shù)的配置地址空間作出判斷,查詢1450。即,基于適配器函數(shù)的存儲(chǔ)器的配置,指令中所提供的指定地址空間是否是配置空間。如果是,則固件執(zhí)行各種處理以向耦合到適配器函數(shù)的集線器提供請(qǐng)求;然后,集線器將請(qǐng)求路由到函數(shù),步驟1452。例如,固件從指令操作數(shù)中所提供的函數(shù)句柄所指向的函數(shù)表?xiàng)l目獲取請(qǐng)求者ID0進(jìn)一步地,固件基于函數(shù)表?xiàng)l目中的信息(例如,內(nèi)部路由信息)來確定接收此請(qǐng)求的集線器。即,環(huán)境可具有一個(gè)或多個(gè)集線器,以及固件確定耦合到適配器函數(shù)的集線器。然后,它將請(qǐng)求轉(zhuǎn)發(fā)到集線器。集線器生成配置寫入請(qǐng)求數(shù)據(jù)包,該數(shù)據(jù)包在PCI總線上流出到由函數(shù)表?xiàng)l目中的RID所標(biāo)識(shí)的適配器函數(shù)。配置寫入請(qǐng)求包括被用來存儲(chǔ)數(shù)據(jù)的RID和偏移(即,數(shù)據(jù)地址),如下面所描述的。返回到查詢1450,如果指定的地址空間不是配置空間,那么固件再次執(zhí)行各種處理以向集線器提供請(qǐng)求,步驟1454。固件使用句柄來選定函數(shù)表?xiàng)l目,并從該條目獲取定位適當(dāng)?shù)募€器的信息。它還計(jì)算要在存儲(chǔ)操作中使用的數(shù)據(jù)地址。此地址是通過將從函數(shù)表?xiàng)l目獲得的BAR起始地址與指令中所提供的偏移相加來計(jì)算出的。此計(jì)算出的數(shù)據(jù)地址被提供到集線器。然后,集線器獲取該地址,并將它包括在諸如DMA寫入請(qǐng)求數(shù)據(jù)包之類的請(qǐng)求數(shù)據(jù)包中,該數(shù)據(jù)包通過PCI總線流出到適配器函數(shù)。響應(yīng)于通過步驟1452或者步驟1454接收到請(qǐng)求,適配器函數(shù)將所請(qǐng)求的數(shù)據(jù)存儲(chǔ)在指定位置(即,在數(shù)據(jù)地址處),步驟1456。PCI存儲(chǔ)操作以成功的指示來結(jié)束(例如,設(shè)置條件碼零)。除通常加載或存儲(chǔ)最大(例如,8字節(jié))的加載和存儲(chǔ)指令之外,可以執(zhí)行的另一指令是存儲(chǔ)塊指令。存儲(chǔ)塊指令在適配器函數(shù)中的指定位置存儲(chǔ)更大塊的數(shù)據(jù)(例如,16、32、64、128或256字節(jié));塊大小不一定在大小方面僅限于2的乘冪。在一個(gè)示例中,指定的位置處于適配器函數(shù)的存儲(chǔ)器空間(不是I/O或配置空間)。
參考圖15A描述了 PCI存儲(chǔ)塊指令的一個(gè)實(shí)施例。如圖所示,PCI存儲(chǔ)塊指令1500包括,例如,指出PCI存儲(chǔ)塊指令的操作碼1502 ;指定包括關(guān)于將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的各種信息的位置的第一字段1504 ;指定包括將向其中存儲(chǔ)數(shù)據(jù)的指定地址空間內(nèi)的偏移的位置的第二字段1506 ;以及指定包括要被存儲(chǔ)在適配器函數(shù)中的數(shù)據(jù)的系統(tǒng)存儲(chǔ)器地址的位置的第三字段1508。下面將進(jìn)一步地描述通過字段1、2以及3指定的位置的內(nèi)容。在一個(gè)實(shí)施例中,字段I指定包括各種信息的通用寄存器。如圖15B所示,寄存器的內(nèi)容包括例如啟用的句柄1510:此字段是將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的已啟用的函數(shù)句柄;地址空間1512 :此字段指出將向其中存儲(chǔ)數(shù)據(jù)的適配器函數(shù)內(nèi)的地址空間;長度字段1514 :此字段指定存儲(chǔ)操作的長度(例如,要被存儲(chǔ)的字節(jié)的數(shù)量);以及 狀態(tài)字段1516 :此字段提供當(dāng)指令以預(yù)定義的條件碼完成時(shí)適用的狀態(tài)碼。在一個(gè)示例中,字段2指定通用寄存器,如在圖15C中所描繪的,寄存器的內(nèi)容包括指定將向其中存儲(chǔ)數(shù)據(jù)的指定的地址空間內(nèi)的偏移的值(例如,64比特?zé)o符號(hào)整數(shù))。在一個(gè)示例中,字段3,如圖15中所描繪的,包括要被存儲(chǔ)在適配器函數(shù)中的系統(tǒng)存儲(chǔ)器中的第一字節(jié)數(shù)據(jù)的邏輯地址1522。參考圖16A-16B描述了與PCI存儲(chǔ)塊指令相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。在一個(gè)示例中,指令由操作系統(tǒng)發(fā)出并由執(zhí)行操作系統(tǒng)的處理器(例如,固件)來執(zhí)行。為發(fā)出指令,操作系統(tǒng)向指令提供下列操作數(shù)(例如,在由指令所指定的一個(gè)或多個(gè)寄存器中)=PCI函數(shù)句柄、PCI地址空間(PCIAS)、PCI地址空間中的偏移、以及要被存儲(chǔ)的數(shù)據(jù)的長度、以及指向要被存儲(chǔ)的數(shù)據(jù)的指針。指針操作數(shù)可以包括寄存器以及簽名的或未簽名的位移。在成功地完成PCI存儲(chǔ)塊指令之后,數(shù)據(jù)被存儲(chǔ)到由指令所指定的適配器中的位置。參考圖16A,一開始,就是否安裝了允許PCI存儲(chǔ)塊指令的工具作出判斷,查詢1600。此判斷是通過例如檢查存儲(chǔ)在例如控制塊中的指示符來作出的。如果工具沒有安裝,則提供異常狀態(tài),步驟1602。否則,如果訪客端正在發(fā)出此指令,則就訪客端是否被允許加載/存儲(chǔ)解釋作出判斷。這是通過檢查訪客端的狀態(tài)描述中的加載/存儲(chǔ)解釋控制來確定的。如果它不被允許,則提供異常狀態(tài)。否則,如果安裝了工具,則就PCI存儲(chǔ)塊指令的操作數(shù)中所提供的句柄是否被啟用作出判斷,查詢1604。在一個(gè)示例中,此判斷是通過檢查句柄中的啟用指示符來作出的。如果句柄沒有啟用,則提供異常狀態(tài),步驟1606。如果句柄已啟用,則使用句柄來定位函數(shù)表?xiàng)l目,步驟1612。即,句柄的至少一部分被用作函數(shù)表的定位對(duì)應(yīng)于將在其存儲(chǔ)數(shù)據(jù)的適配器函數(shù)的函數(shù)表?xiàng)l目的索引。此后,就指令是否是由訪客端所發(fā)出的作出判斷,查詢1613。如果是,則就是否設(shè)置了攔截控制(例如,設(shè)置為I)作出進(jìn)一步的判斷,查詢1615。此判斷是通過檢查FTE中的攔截控制來作出的。如果已設(shè)置,則提供異常狀態(tài),步驟1617。否則,就函數(shù)是否被配置成供訪客端使用作出判斷,查詢1614。如果未被授權(quán),則提供異常狀態(tài),步驟1616。如果配置不是訪客端,則可以忽略此查詢,或者也可以檢查其他授權(quán),如果指定的話。然后,或者如果指令不是由訪客端所發(fā)出的,就函數(shù)是否啟用作出判斷,查詢1618。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的啟用指示符來作出的。如果還沒有啟用,則提供異常狀態(tài),步驟1620。如果函數(shù)已啟用,則就地址空間是否有效作出判斷,查詢1622。例如,指定的地址空間是否是適配器函數(shù)的指定地址空間,并且是適合于此指令的地址空間(即,存儲(chǔ)器空間)。如果地址空間無效,則提供異常狀態(tài),步驟1624。否則,就加載/存儲(chǔ)是否被阻止作出判斷,查詢1626。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的狀態(tài)指示符來作出的。如果加載/存儲(chǔ)被阻止,則提供異常狀態(tài),步驟1628。然而,如果加載/存儲(chǔ)不被阻止,則就恢復(fù)是否有效作出判斷,查詢1630。在一個(gè)示例中,此判斷是通過檢查函數(shù)表?xiàng)l目中的恢復(fù)已啟動(dòng)指示符來作出的。如果恢復(fù)有效,則提供異常狀態(tài),步驟1632。否則,就函數(shù)是否繁忙作出判斷,查詢1634。此判斷是通過檢查函數(shù)表?xiàng)l目中的繁忙指示符來作出的。如果函數(shù)繁忙,則提供繁忙狀態(tài),步驟1636。在繁忙狀態(tài)下,可以重試指令,而不是丟棄。如果函數(shù)不繁忙,則就指令中所指定的偏移是否有效作出進(jìn)一步的判斷,查詢 1638。即,偏移是否與基內(nèi)的操作的長度以及地址空間的長度相結(jié)合,如函數(shù)表?xiàng)l目中所指定的。如果不,則提供異常狀態(tài),步驟1640。然而,如果偏移有效,則就長度是否有效作出判斷,查詢1642。即,取決于地址空間類型、地址空間內(nèi)的偏移、以及整數(shù)界限大小,長度是否有效。如果不,則提供異常狀態(tài),步驟1644。否則,處理對(duì)存儲(chǔ)塊指令繼續(xù)。(在一個(gè)實(shí)施例中,固件執(zhí)行以上的檢查。)繼續(xù)圖16B,由固件就包括要被存儲(chǔ)的數(shù)據(jù)的存儲(chǔ)器是否是可訪問作出判斷,查詢1650。如果不,則提供異常狀態(tài),步驟1652。如果是,則固件執(zhí)行各種處理以向耦合到適配器函數(shù)的集線器提供請(qǐng)求;然后,集線器將請(qǐng)求路由到函數(shù),步驟1654。例如,固件使用句柄來選定函數(shù)表?xiàng)l目,并從該條目獲取定位適當(dāng)?shù)募€器的信息。它還計(jì)算要在存儲(chǔ)塊操作中使用的數(shù)據(jù)地址。此地址是通過將從函數(shù)表?xiàng)l目獲得的BAR起始地址(BAR是由地址空間標(biāo)識(shí)符所標(biāo)識(shí)的)與指令中所提供的偏移相加來計(jì)算出的。此計(jì)算出的數(shù)據(jù)地址被提供到集線器。另外,由指令中所提供的地址所引用的數(shù)據(jù)是從系統(tǒng)存儲(chǔ)器獲取的,并提供到I/O集線器。然后,集線器獲取該地址和數(shù)據(jù),并將它包括在諸如DMA寫入請(qǐng)求數(shù)據(jù)包之類的請(qǐng)求數(shù)據(jù)包中,該數(shù)據(jù)包通過PCI總線流出到適配器函數(shù)中。響應(yīng)于接收到請(qǐng)求,適配器函數(shù)將所請(qǐng)求的數(shù)據(jù)存儲(chǔ)在指定位置(即,在數(shù)據(jù)地址處),步驟1656。PCI存儲(chǔ)塊操作以成功的指示來結(jié)束(例如,設(shè)置條件碼零)。上文詳細(xì)描述了允許執(zhí)行訪客端的主機(jī)授予訪客端直接訪問適配器的地址空間而無需主機(jī)干涉的許可的授權(quán)能力。這些地址空間不被映射到由操作系統(tǒng)(訪客端或主機(jī))看到的存儲(chǔ)器空間。相反,它們被提取(即,通過特定PCI指令,使得它們可用)。當(dāng)訪客端在解釋性的執(zhí)行下執(zhí)行時(shí),分配給訪客端的適配器函數(shù)被訪客端“擁有”,因此,可以通過訪客端指令(例如,PCI加載和PCI存儲(chǔ)函數(shù))的執(zhí)行直接被操縱,當(dāng)被授權(quán)時(shí),無需主機(jī)干涉。進(jìn)一步地,當(dāng)訪客端在解釋性的執(zhí)行下執(zhí)行時(shí),訪客端指令存儲(chǔ)器和操作數(shù)地址被視為邏輯地址,以及編址存儲(chǔ)器可以通過訪客端指令(例如,當(dāng)授權(quán)時(shí),PCI存儲(chǔ)塊)的執(zhí)行被直接操縱而無需主機(jī)干涉。在一個(gè)示例中,訪客端處于管理程序狀態(tài)以執(zhí)行指令。解釋控制在訪客端和函數(shù)級(jí)別給予主機(jī)對(duì)PCI指令解釋的控制??梢杂蟹抡娴?即,設(shè)備的軟件表示)和專用設(shè)備(即,硬件設(shè)備)的混合。對(duì)于仿真設(shè)備,沒有攔截控制。訪客端PCI加載/存儲(chǔ)指令將攔截到主機(jī);而主機(jī)將維護(hù)FTE和DTE的一個(gè)版本以維護(hù)狀態(tài),以使得它看到訪客端,好像設(shè)備存在那樣。此外,如果主機(jī)判斷它希望干涉,那么它可以動(dòng)態(tài)地這樣做,(包括在指令執(zhí)行過程中)。在此描述的實(shí)施例中,適配器是PCI適配器。如在此使用的,PCI指根據(jù)由外圍組件互連特別興趣組(PCI-SIG)定義的基于PCI的規(guī)范而實(shí)現(xiàn)的任何適配器,包括但不限于PCI或PCIe。在一個(gè)特定例子中,快速外圍組件互連(PCIe)是組件級(jí)互連標(biāo)準(zhǔn),其定義了用于I/O適配器和主機(jī)系統(tǒng)之間的事務(wù)的雙向通信協(xié)議。根據(jù)用于PCIe總線上的傳輸?shù)腜CIe標(biāo)準(zhǔn),PCIe通信被封裝在包中。源于I/O適配器且止于主機(jī)系統(tǒng)的事務(wù)被稱為上行事務(wù)。源于主機(jī)系統(tǒng)且止于I/O適配器的事務(wù)被稱為下行事務(wù)。PCIe拓?fù)浠诔蓪?duì)(例如,一個(gè)上行鏈路,一個(gè)下行鏈路)的點(diǎn)對(duì)點(diǎn)單向鏈路以形成PCIe總線。PCIe標(biāo)準(zhǔn)由PCI-SIG維護(hù)并公布,如在以上背景技術(shù)中指出的。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本發(fā)明可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。 因此,本公開可以具體實(shí)現(xiàn)為以下形式,即可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明還可以實(shí)現(xiàn)為在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼。可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀的介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(CD-ROM)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用?,F(xiàn)在參考圖17,在一個(gè)例子中,計(jì)算機(jī)程序產(chǎn)品1700包括,例如,一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)1702,在其上存儲(chǔ)有計(jì)算機(jī)可讀的程序代碼裝置或邏輯1704,以提供并方便本發(fā)明的一個(gè)或多個(gè)方面。體現(xiàn)在計(jì)算機(jī)可讀介質(zhì)上的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,所述介質(zhì)包括但不限于無線、有線、光纜、RF等,或上述的任意合適的組合??梢砸砸环N或多種程序設(shè)計(jì)語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計(jì)語言一諸如”C ”語言或類似的程序設(shè)計(jì)語言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。本文中將參照本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,這些計(jì)算機(jī)程序指令通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。也可以把這些計(jì)算機(jī)程序指令存儲(chǔ)在能使得計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計(jì)算機(jī)可讀介質(zhì)中,這樣,存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出一個(gè)包括實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。也可以把計(jì)算機(jī)程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)或其它可編程裝置上執(zhí)行的指令能夠提供實(shí)現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。 附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。除了上述,本發(fā)明的一個(gè)或多個(gè)方面可由服務(wù)提供商提供、許諾(offer)、部署、管理、服務(wù)等,該服務(wù)提供商提供用戶環(huán)境的管理。例如,服務(wù)提供商可創(chuàng)建、維持、支持等計(jì)算機(jī)代碼和/或計(jì)算機(jī)基礎(chǔ)設(shè)施,其為一個(gè)或多個(gè)用戶執(zhí)行本發(fā)明的一個(gè)或多個(gè)方面。反過來,服務(wù)提供商可例如根據(jù)預(yù)訂和/或費(fèi)用協(xié)議從用戶接受付費(fèi)。額外地或可替換地,月艮務(wù)提供商可從向一個(gè)或多個(gè)第三方銷售廣告內(nèi)容接受付費(fèi)。在本發(fā)明的一個(gè)方面,可部署用于執(zhí)行本發(fā)明的一個(gè)或多個(gè)方面的應(yīng)用。作為一個(gè)例子,部署應(yīng)用包括提供計(jì)算機(jī)基礎(chǔ)設(shè)施,其可操作以執(zhí)行本發(fā)明的一個(gè)或多個(gè)方面。作為本發(fā)明的又一個(gè)方面,可部署計(jì)算基礎(chǔ)設(shè)施,其包括將計(jì)算機(jī)可讀代碼集成到計(jì)算機(jī)系統(tǒng),其中與計(jì)算系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個(gè)或多個(gè)方面。作為本發(fā)明的再一個(gè)方面,可提供用于集成計(jì)算基礎(chǔ)設(shè)施包括將計(jì)算機(jī)可讀碼集成到計(jì)算機(jī)系統(tǒng)的過程。計(jì)算機(jī)系統(tǒng)包括計(jì)算機(jī)可讀介質(zhì),其中計(jì)算機(jī)介質(zhì)包括本發(fā)明的一個(gè)或多個(gè)方面。與計(jì)算機(jī)系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個(gè)或多個(gè)方面。盡管以上描述了各種實(shí)施例,這些僅是例子。例如,其他體系結(jié)構(gòu)的計(jì)算環(huán)境可包含并使用本發(fā)明的一個(gè)或多個(gè)方面。作為例子,除了 System z 服務(wù)器之外的服務(wù)器,諸如由國際商業(yè)機(jī)器公司提供的PowerSystems服務(wù)器或其他服務(wù)器,或其他公司的服務(wù)器,可包括、使用和/或受益于本發(fā)明的一個(gè)或多個(gè)方面。而且,盡管在此示出的例子中,適配器和PCI集線器被認(rèn)為是服務(wù)器的一部分,在其他實(shí)施例中,它們不是必須被認(rèn)為是服務(wù)器的一部分,而是可被簡單地認(rèn)為是耦合到計(jì)算環(huán)境的系統(tǒng)存儲(chǔ)器和/或其他組件。計(jì)算環(huán)境不需要是服務(wù)器。而且,盡管描述了轉(zhuǎn)換表,可使用任何數(shù)據(jù)結(jié)構(gòu),且術(shù)語表將包括所有這樣的數(shù)據(jù)結(jié)構(gòu)。而且,盡管適配器是基于PCI的,可與其他適配器或其他I/o組件一起使用本發(fā)明的一個(gè)或多個(gè)方面。適配器和PCI適配器僅僅是例子。而且,DTE、FTE、FIB和/或其它結(jié)構(gòu)可包括更多、更少或不同的數(shù)據(jù)。許多其他變化是可能的。而且,其他類型的計(jì)算環(huán)境可受益于本發(fā)明的一個(gè)或多個(gè)方面。作為例子,可使用適于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng),其包括至少兩個(gè)通過系統(tǒng)總線直接或間接耦合到存儲(chǔ)元件的處理器。存儲(chǔ)器元件包括,例如,在程序代碼的實(shí)際執(zhí)行期間使用的本地存儲(chǔ)器、大容量存儲(chǔ)器以及高速緩沖存儲(chǔ)器,其提供至少一些程序代碼的臨時(shí)存儲(chǔ),以便減少在執(zhí)行期間必須從大容量存儲(chǔ)器取回代碼的次數(shù)。輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點(diǎn)設(shè)備、DASD、磁帶、⑶、DVD、拇指驅(qū)動(dòng)器(thumb drive)以及其他的存儲(chǔ)介質(zhì)等)可直接或通過介于其間的I/O控 制器被耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可被耦合到系統(tǒng)以使得數(shù)據(jù)處理系統(tǒng)能夠通過介于其間的私有或公共網(wǎng)絡(luò)而耦合到其他的數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅是一些可獲得的網(wǎng)絡(luò)適配器類型。參考圖18,其描述了實(shí)施本發(fā)明的一個(gè)或多個(gè)方面的主機(jī)計(jì)算機(jī)系統(tǒng)5000的代表性組件。代表性主機(jī)計(jì)算機(jī)5000包括與計(jì)算機(jī)存儲(chǔ)器(即,中央存儲(chǔ)器)5002通信的一個(gè)或多個(gè)CPU 5001,以及到存儲(chǔ)介質(zhì)設(shè)備5011和網(wǎng)絡(luò)5010的I/O接口,以用于與其他計(jì)算機(jī)或SAN等通信。CPU5001符合具有架構(gòu)指令集和架構(gòu)功能的架構(gòu)。CPU 5001可具有動(dòng)態(tài)地址轉(zhuǎn)換(DAT)5003,其用于將程序地址(虛擬地址)轉(zhuǎn)變?yōu)榇鎯?chǔ)器的真實(shí)地址。DAT典型地包括用于高速緩存轉(zhuǎn)換的轉(zhuǎn)換后備緩沖器(TLB)5007,這樣稍后對(duì)計(jì)算機(jī)存儲(chǔ)器5002塊的訪問不需要地址轉(zhuǎn)換的延遲。典型地,高速緩存5009被使用在計(jì)算機(jī)存儲(chǔ)器5002和處理器5001之間。高速緩存5009可以是分層的,具有可被多于一個(gè)的CPU獲得的大高速緩存,以及大高速緩存和每個(gè)CPU之間的較小、較快(較低級(jí))的高速緩存。在一些實(shí)施方式中,較低級(jí)的高速緩存被拆分以為指令獲取和數(shù)據(jù)訪問提供單獨(dú)的低級(jí)高速緩存。在一個(gè)實(shí)施例中,由指令獲取單元5004經(jīng)由高速緩存5009從存儲(chǔ)器5002獲取指令。指令在指令解碼單元5006中被解碼,且(在一些實(shí)施例中與其他指令一起)被發(fā)送到一個(gè)或多個(gè)指令執(zhí)行單元5008。典型地,使用若干執(zhí)行單元5008,例如算術(shù)執(zhí)行單元、浮點(diǎn)執(zhí)行單元和分支指令執(zhí)行單元。指令被執(zhí)行單元執(zhí)行,如需要,從指令指定的寄存器或存儲(chǔ)器訪問操作數(shù)。如果將從存儲(chǔ)器5002訪問(加載或存儲(chǔ))操作數(shù),加載/存儲(chǔ)單元5005典型地在被執(zhí)行的指令的控制下處理該訪問。指令可在硬件電路或內(nèi)部微代碼(固件)中或其組合中被執(zhí)行。需注意的是,計(jì)算機(jī)系統(tǒng)包括本地(或主)存儲(chǔ)器中的信息,以及尋址、保護(hù)以及引用和改變記錄。尋址的一些方面包括地址格式、地址空間的概念、地址的各種類型和其中一種類型的地址被轉(zhuǎn)換為另一種類型的地址的方式。一些主存儲(chǔ)器包括永久分配的存儲(chǔ)位置。主存儲(chǔ)器向系統(tǒng)提供直接可被尋址的快速訪問的數(shù)據(jù)存儲(chǔ)。數(shù)據(jù)和程序在可被處理之前都將(從輸入設(shè)備)被加載到主存儲(chǔ)器。主存儲(chǔ)器可包括一個(gè)或多個(gè)更小、更快速訪問的緩沖存儲(chǔ)器,有時(shí)候被稱為高速緩存。高速緩存典型地與CPU或I/O處理器物理地關(guān)聯(lián)。物理結(jié)構(gòu)以及不同存儲(chǔ)介質(zhì)的使用的效果,除了在性能上,通常不會(huì)被程序觀察到。
可維護(hù)用于指令和數(shù)據(jù)操作數(shù)的單獨(dú)的高速緩存。高速緩存中的信息可被維護(hù)為相鄰的字節(jié),所述字節(jié)位于被稱為高速緩存塊或高速緩存線(或簡稱為線)的整數(shù)界限上。模型可提供EXTRACT CACHEATTRIBUTE (提取高速緩存屬性)指令,其返回高速緩存線的字節(jié)大小。模型也可提供PREFETCH DATA (預(yù)取數(shù)據(jù))和PREFETCH DATARELATIVE LONG (預(yù)取較長數(shù)據(jù))指令,其實(shí)現(xiàn)存儲(chǔ)到數(shù)據(jù)或指令高速緩存中的預(yù)取,或數(shù)據(jù)從高速緩存的釋放。存儲(chǔ)器被視為位的長水平串。對(duì)于大部分操作來說,以從左到右的順序進(jìn)行對(duì)存儲(chǔ)器的訪問。位串被細(xì)分為八個(gè)位的單位。八位單位被稱為字節(jié),其是所有信息格式的基本構(gòu)件。存儲(chǔ)器中的每個(gè)字節(jié)位置由唯一的非負(fù)整數(shù)標(biāo)識(shí),該非負(fù)整數(shù)是該字節(jié)位置的地址,或簡稱為字節(jié)地址。相鄰的字節(jié)位置具有連續(xù)的地址,在左邊從O開始且以從左到右的順序進(jìn)行。地址是無符號(hào)二進(jìn)制整數(shù),且是24、31或64位。信息一次一個(gè)字節(jié)或一組字節(jié)地在存儲(chǔ)器和CPU或通道子系統(tǒng)之間傳遞。除非另有指定,例如在ZZArehiteGtufeis^,存儲(chǔ)器中的一組字節(jié)由該組的最左邊的字節(jié)尋址。組中的字節(jié)的數(shù)量可由將被執(zhí)行的操作暗示或顯式地指定。當(dāng)在CPU操作中使用時(shí),一組字 節(jié)被稱為字段。在字節(jié)的每個(gè)組內(nèi),例如在z/Airhiteeture 中,位以從左到右的順序被編號(hào)。在;z/Architeetui*e 中,最左邊的位有時(shí)候被稱為“高階”位且最右邊的位被稱為“低階”位。但是,位數(shù)不是存儲(chǔ)器地址。僅字節(jié)可被尋址。為了操作存儲(chǔ)器中的字節(jié)的單個(gè)位,訪問整個(gè)字節(jié)。字節(jié)上的位從左到右被編號(hào)為O到7 (例如在ZMrehiteeturets中)。對(duì)于24位地址,地址中的位被編號(hào)為8-31或40-63,對(duì)于31位地址,編號(hào)為1_31或33-63,對(duì)于64位地址,編號(hào)為0-63。在多個(gè)字節(jié)的任何其他的固定長度的格式中,構(gòu)成格式的位從O開始被連續(xù)編號(hào)。為了錯(cuò)誤檢測(cè),且優(yōu)選地為了校正,一個(gè)或多個(gè)校驗(yàn)位可與每一個(gè)字節(jié)或一組字節(jié)一起被傳遞。這樣的校驗(yàn)位由機(jī)器自動(dòng)生成且不能被程序直接控制。存儲(chǔ)容量以字節(jié)的數(shù)量來表示。當(dāng)存儲(chǔ)器操作數(shù)字段的長度由指令的操作碼暗示時(shí),字段被稱為具有固定長度,其可以是一個(gè)、兩個(gè)、四個(gè)、八個(gè)或十六個(gè)字節(jié)??蔀槟承┲噶畎凳靖蟮淖侄?。當(dāng)存儲(chǔ)器操作數(shù)字段的長度沒有被暗示,而是被顯式地表示時(shí),該字段被稱為具有可變長度??勺冮L度的操作數(shù)可以一個(gè)字節(jié)的增量(或者對(duì)于一些指令,以兩個(gè)字節(jié)倍數(shù)或其他倍數(shù))在長度上可變。當(dāng)信息被放在存儲(chǔ)器中時(shí),僅替換被包括在指定的字段中的那些字節(jié)位置的內(nèi)容,即使到存儲(chǔ)器的物理路徑的寬度可能大于正被存儲(chǔ)的字段的長度。某些信息單元位于存儲(chǔ)器中的整數(shù)界限上。對(duì)于信息單元,當(dāng)其存儲(chǔ)器地址是以字節(jié)表示的單元長度的倍數(shù)時(shí),界限被稱為是整數(shù)的。特殊的名稱被給予整數(shù)界限上的2、4、8和16字節(jié)的字段。半字是兩字節(jié)邊界上的一組兩個(gè)連續(xù)的字節(jié),且是指令的基本構(gòu)件。字是四字節(jié)邊界上的一組四個(gè)連續(xù)的字節(jié)。雙字是八字節(jié)邊界上一組八個(gè)連續(xù)的字節(jié)。四倍長字(quadword)是16字節(jié)邊界上的一組16個(gè)連續(xù)的字節(jié)。當(dāng)存儲(chǔ)器地址指定半字、字、雙字和四倍長字時(shí),地址的二進(jìn)制表示分別包括一個(gè)、兩個(gè)、三個(gè)或四個(gè)最右邊的零位。指令將位于二字節(jié)整數(shù)邊界上。大多數(shù)指令的存儲(chǔ)器操作數(shù)不具有界限對(duì)準(zhǔn)要求。在為指令和數(shù)據(jù)操作數(shù)實(shí)現(xiàn)單獨(dú)的高速緩存的設(shè)備上,如果程序在高速緩存線中存儲(chǔ)且指令被隨后從該高速緩存線獲取,可經(jīng)歷顯著的延遲,不管該存儲(chǔ)是否改變隨后被獲取的指令。在一個(gè)實(shí)施例中,本發(fā)明可被軟件(有時(shí)候被稱為許可的內(nèi)部代碼、固件、微代碼、毫代碼、微微代碼(pico-code)等,其任何一個(gè)都將符合本發(fā)明)實(shí)施。參考圖18,體現(xiàn)本發(fā)明的軟件程序代碼可典型地由主系統(tǒng)5000的處理器5001從長期存儲(chǔ)介質(zhì)設(shè)備5011(諸如CD-ROM驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)或硬盤驅(qū)動(dòng)器)訪問。軟件程序代碼可體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟磁盤、硬盤驅(qū)動(dòng)或CD-ROM)中的任何一個(gè)上。代碼可在這樣的介質(zhì)上被分發(fā),或可從一個(gè)計(jì)算機(jī)系統(tǒng)的計(jì)算機(jī)存儲(chǔ)器5002或存儲(chǔ)設(shè)備通過網(wǎng)絡(luò)5010被分發(fā)給其他計(jì)算機(jī)系統(tǒng)的用戶,以由這樣的其他系統(tǒng)的用戶使用。軟件程序代碼包括操作系統(tǒng),其控制各種計(jì)算機(jī)組件和一個(gè)或多個(gè)應(yīng)用程序的功能和交互。程序代碼通??蓮拇鎯?chǔ)介質(zhì)設(shè)備5011調(diào)頁到相對(duì)更高速的計(jì)算機(jī)存儲(chǔ)器5002,在此它對(duì)于處理器5001是可用的。用于在存儲(chǔ)器中、物理介質(zhì)上體現(xiàn)軟件程序代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是熟知的,且不會(huì)在此被進(jìn)一步討論。當(dāng)程序代碼被創(chuàng)建并存儲(chǔ)在有形介質(zhì)(包括但不限于電子存儲(chǔ)模塊(RAM)、閃存、光盤(⑶)、DVD、磁帶等)上時(shí),其經(jīng)常被稱為“計(jì)算機(jī)程序產(chǎn)品”。計(jì)算機(jī)程序產(chǎn)品介質(zhì)典型地可由優(yōu)選地位于計(jì)算機(jī)系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。圖19示出了可在其中實(shí)施本發(fā)明的代表性工作站或服務(wù)器硬件系統(tǒng)。圖19的系統(tǒng)5020包括代表性基本計(jì)算機(jī)系統(tǒng)(base computersystem) 5021,諸如個(gè)人計(jì)算機(jī)、工作 站或服務(wù)器,包括可選的外圍設(shè)備。根據(jù)已知技術(shù),基本計(jì)算機(jī)系統(tǒng)5021包括一個(gè)或多個(gè)處理器5026以及被用于連接并使能處理器5026和系統(tǒng)5021的其他組件之間的通信的總線??偩€將處理器5026連接到存儲(chǔ)器5025以及可包括例如硬盤驅(qū)動(dòng)器(例如,包括磁介質(zhì)、⑶、DVD和閃存中的任何一個(gè))或磁帶驅(qū)動(dòng)器的長期存儲(chǔ)器5027。系統(tǒng)5021也可包括用戶接口適配器,其經(jīng)由總線將微處理器5026連接到一個(gè)或多個(gè)接口設(shè)備,諸如鍵盤5024、鼠標(biāo)5023、打印機(jī)/掃描儀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ò)適配器與其他計(jì)算機(jī)或計(jì)算機(jī)網(wǎng)絡(luò)通信。示例性網(wǎng)絡(luò)適配器是通信通道、令牌環(huán)網(wǎng)、以太網(wǎng)或調(diào)制解調(diào)器?;蛘撸到y(tǒng)5021可使用諸如⑶ro (蜂窩數(shù)字分組數(shù)據(jù))卡的無線接口來通信。系統(tǒng)5021可與局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)中的這樣的其他計(jì)算機(jī)關(guān)聯(lián),或系統(tǒng)5021可以是與另一個(gè)計(jì)算機(jī)的客戶機(jī)/服務(wù)器安排中的客戶機(jī)等。所有這些配置以及合適的通信硬件和軟件在本領(lǐng)域中是已知的。圖20示出了其中可實(shí)施本發(fā)明的數(shù)據(jù)處理網(wǎng)絡(luò)5040。數(shù)據(jù)處理網(wǎng)絡(luò)5040可包括多個(gè)單獨(dú)的網(wǎng)絡(luò),諸如無線網(wǎng)和有線網(wǎng),其每個(gè)可包括多個(gè)單獨(dú)的工作站5041、5042、5043、5044。此外,本領(lǐng)域技術(shù)人員將理解,可包括一個(gè)或多個(gè)LAN,其中LAN可包括多個(gè)耦合到主處理機(jī)的智能工作站。仍然參考圖20,網(wǎng)絡(luò)也可包括大型計(jì)算機(jī)或服務(wù)器,諸如網(wǎng)關(guān)計(jì)算機(jī)(客戶機(jī)服務(wù)器5046)或應(yīng)用服務(wù)器(遠(yuǎn)程服務(wù)器5048,其可訪問數(shù)據(jù)儲(chǔ)存庫,且也可直接從工作站5045被訪問)。網(wǎng)關(guān)計(jì)算機(jī)5046用作到每個(gè)單獨(dú)網(wǎng)絡(luò)的進(jìn)入點(diǎn)。當(dāng)將一個(gè)聯(lián)網(wǎng)協(xié)議連接到另一個(gè)時(shí),需要網(wǎng)關(guān)。網(wǎng)關(guān)5046可通過通信鏈路優(yōu)選地耦合到另一個(gè)網(wǎng)絡(luò)(例如因特網(wǎng)5047)。也可使用通信鏈路將網(wǎng)關(guān)5046直接耦合到一個(gè)或多個(gè)工作站5041、5042、5043、5044??梢岳每蓮膰H商業(yè)機(jī)器公司獲得的IBMeServerTMSystem服務(wù)器來實(shí)現(xiàn)網(wǎng)關(guān)計(jì)算機(jī)。同時(shí)參考圖19和20,可體現(xiàn)本發(fā)明的軟件編程代碼可被系統(tǒng)5020的處理器5026從諸如CD-ROM驅(qū)動(dòng)器或硬盤驅(qū)動(dòng)器的長期存儲(chǔ)介質(zhì)5027訪問。軟件編程代碼可被體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟盤、硬盤驅(qū)動(dòng)器或CD-ROM)中的任一個(gè)上。代碼可在這樣的介質(zhì)上被分發(fā),或從一個(gè)計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器或存儲(chǔ)設(shè)備通過網(wǎng)絡(luò)被分發(fā)到其他計(jì)算機(jī)系統(tǒng)的用戶5050、5051,以供這樣的其他系統(tǒng)的用戶使用?;蛘?,編程代碼可體現(xiàn)在存儲(chǔ)器5025中,且由處理器5026使用處理器總線訪問。這樣的編程代碼包括操作系統(tǒng),其控制各種計(jì)算機(jī)組件和一個(gè)或多個(gè)應(yīng)用程序5032的功能和交互。程序代碼通常從存儲(chǔ)介質(zhì)5027調(diào)頁到高速存儲(chǔ)器5025,在此它可用于由處理器5026進(jìn)行處理。用于在存儲(chǔ)器中、在物理介質(zhì)上體現(xiàn)軟件編程代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是公知的,不會(huì)在此進(jìn)一步討論。程序代碼,當(dāng)其被創(chuàng)建且在有形介質(zhì)(包括但不限于電子存儲(chǔ)模塊(RAM)、閃存、光盤(⑶)、DVD、磁帶等)上存儲(chǔ)時(shí),通常被稱為“計(jì)算機(jī)程序產(chǎn)品”。計(jì)算機(jī)程序產(chǎn)品介質(zhì)典型地可以被優(yōu)選地位于計(jì)算機(jī)系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。最容易被處理器使用的高速緩存(通常比處理器的其他高速緩存更快更小)是最 低級(jí)(LI或級(jí)別I)高速緩存,且主存儲(chǔ)(主存儲(chǔ)器)是最高級(jí)高速緩存(如果有三個(gè)級(jí)別的話是L3)。最低級(jí)高速緩存經(jīng)常被分為保持將被執(zhí)行的機(jī)器指令的指令緩存(I-高速緩存),和保持?jǐn)?shù)據(jù)操作數(shù)的數(shù)據(jù)高速緩存(D-高速緩存)。參考圖21,為處理器5026示出了示例性處理器實(shí)施例。典型地,使用一個(gè)或多個(gè)級(jí)別的高速緩存5053來緩沖存儲(chǔ)器塊,以便改善處理器性能。高速緩存5053是高速緩沖器,其保持很可能被使用的存儲(chǔ)器數(shù)據(jù)的高速緩存線。典型的高速緩存線是64、128或256字節(jié)的存儲(chǔ)器數(shù)據(jù)。通常使用單獨(dú)的高速緩存以用于緩存指令而不是緩存數(shù)據(jù)。高速緩存一致性(存儲(chǔ)器和高速緩存中的線的副本的同步)通常由本領(lǐng)域中熟知的各種“窺探”算法提供。處理器系統(tǒng)的主存儲(chǔ)器5025通常被稱為高速緩存。在具有4個(gè)級(jí)別的高速緩存5053的處理器系統(tǒng)中,主存儲(chǔ)器5025有時(shí)候被稱為級(jí)別5 (L5)高速緩存,因?yàn)樗湫偷馗?,且僅保持可被計(jì)算機(jī)系統(tǒng)使用的非易失性存儲(chǔ)器(DASD、磁帶等)的一部分。主存儲(chǔ)器5025可“高速緩存”由操作系統(tǒng)向主存儲(chǔ)器5025調(diào)頁入或從其調(diào)頁出的數(shù)據(jù)頁。程序計(jì)數(shù)器(指令計(jì)數(shù)器)5061保持跟蹤將被執(zhí)行的當(dāng)前指令的地址。z/AirhiteetuTe 處理器中的程序計(jì)數(shù)器是64位的,且可被截短為31或24位以支持先iu的尋址界限。程序計(jì)數(shù)器典型地體現(xiàn)在計(jì)算機(jī)的PSW (程序狀態(tài)字)中,這樣它可在上下文轉(zhuǎn)換中持續(xù)。因此,具有程序計(jì)數(shù)器值的進(jìn)行中的程序可被例如操作系統(tǒng)中斷(從程序環(huán)境到操作系統(tǒng)環(huán)境的上下文轉(zhuǎn)換)。當(dāng)程序不活動(dòng)時(shí),程序的PSW維持程序計(jì)數(shù)器值,且在操作系統(tǒng)執(zhí)行時(shí),操作系統(tǒng)的(PSW中的)程序計(jì)數(shù)器被使用。典型地,程序計(jì)數(shù)器以等于當(dāng)前指令的字節(jié)數(shù)的量增量。RISC (精簡指令集計(jì)算)指令典型地是固定長度,而CISC (復(fù)雜指令集計(jì)算)指令典型地是可變長度。IBIVlz/Anrhitectiife 的指令是具有長度為2、4或6字節(jié)的CISC指令。程序計(jì)數(shù)器5061被例如上下文轉(zhuǎn)換操作或分支指令的分支采取操作修改。在上下文轉(zhuǎn)換操作中,當(dāng)前的程序計(jì)數(shù)器值與關(guān)于正被執(zhí)行的程序的其他狀態(tài)信息(諸如條件碼)一起被保存在程序狀態(tài)字中,且新程序計(jì)數(shù)器值被載入并指向?qū)⒈粓?zhí)行的新程序模塊的指令。執(zhí)行分支采取操作,以通過將分支指令的結(jié)果加載到程序計(jì)數(shù)器5061中而允許程序進(jìn)行決定或在程序內(nèi)循環(huán)。典型地,使用指令獲取單元5055代表處理器5026獲取指令。獲取單元可獲取“下一序列指令”、分支采取指令的目標(biāo)指令或上下文轉(zhuǎn)換后的程序的第一指令。現(xiàn)在的指令獲取單元通常使用預(yù)取技術(shù)基于被預(yù)取的指令將被使用的可能性來推測(cè)性地預(yù)取指令。例如,獲取單元可獲取16字節(jié)的指令,其包括下一順序指令以及進(jìn)一步的順序指令的額外字節(jié)。獲取的指令隨后被處理器5026執(zhí)行。在一實(shí)施例中,獲取的指令被傳遞給獲取單元的分派單元5056。分派單元解碼指令并將關(guān)于解碼的指令的信息轉(zhuǎn)送給合適的單元5057、5058、5060。執(zhí)行單元5057將典型地從指令獲取單元5055接收關(guān)于解碼的算術(shù)指令的信息,并將根據(jù)指令的操作碼對(duì)操作數(shù)執(zhí)行算術(shù)操作。優(yōu)選地從存儲(chǔ)器5025、架構(gòu)寄存器5059或從正被執(zhí)行的指令的立即字段(immediate field)向執(zhí)行單元5057提供操作數(shù)。執(zhí)行的結(jié)果,當(dāng)被存儲(chǔ)時(shí),被存儲(chǔ)在存儲(chǔ)器5025、寄存器5059或其他機(jī)器硬件(諸如控制寄存器、PSW寄存器等)中。處理器5026典型地具有一個(gè)或多個(gè)用于執(zhí)行指令的功能的單元5057、5058、5060。參考圖22A,執(zhí)行單元5057可通過接口邏輯5071與架構(gòu)通用寄存器5059、解碼/分 寄存器電路5067、5068、5069來保持算術(shù)邏輯單元(ALU) 5066將操作的信息。ALU執(zhí)行諸如加減乘除的算術(shù)操作,以及諸如和、或以及異或(X0R)、旋轉(zhuǎn)和移位的邏輯運(yùn)算。優(yōu)選地,ALU支持依賴于設(shè)計(jì)的專門操作。其他電路可提供其他架構(gòu)工具5072,例如包括條件碼和恢復(fù)支持邏輯。典型地,ALU操作的結(jié)果被保持在輸出寄存電路5070中,該輸出寄存器電路可將結(jié)果轉(zhuǎn)送到多種其他處理功能。有許多處理器單元安排,本說明書僅旨在提供對(duì)一個(gè)實(shí)施例的代表性理解。例如,ADD指令將在具有算術(shù)和邏輯功能的執(zhí)行單元5057中被執(zhí)行,而例如浮點(diǎn)指令將在具有專用浮點(diǎn)能力的浮點(diǎn)執(zhí)行中被執(zhí)行。優(yōu)選地,執(zhí)行單元通過在操作數(shù)上執(zhí)行操作碼定義的功能在由指令標(biāo)識(shí)的操作數(shù)上操作。例如,ADD指令可被執(zhí)行單元5057在由指令的寄存器字段標(biāo)識(shí)的兩個(gè)寄存器5059中發(fā)現(xiàn)的操作數(shù)上執(zhí)行。執(zhí)行單元5057對(duì)兩個(gè)操作數(shù)執(zhí)行算術(shù)加法,并在第三操作數(shù)中存儲(chǔ)結(jié)果,其中第三操作數(shù)可以是第三寄存器或兩個(gè)源寄存器中的一個(gè)。執(zhí)行單元優(yōu)選地利用算術(shù)邏輯單元(ALU) 5066,其能執(zhí)行多種邏輯功能,諸如移位、旋轉(zhuǎn)、和、或、異或,以及多種代數(shù)函數(shù),包括加減乘除中的任何一個(gè)。有些ALU 5066被設(shè)計(jì)為用于標(biāo)量運(yùn)算,有些用于浮點(diǎn)。根據(jù)架構(gòu),數(shù)據(jù)可以是大端(big endien)(其中最低有效字節(jié)位于最高字節(jié)地址)或小端(littleendien)(其中最低有效字節(jié)位于最低字節(jié)地址)。IBM z/Architecture 是大端。根據(jù)架構(gòu),帶符號(hào)字段可以是符號(hào)和幅度、I的補(bǔ)碼或2的補(bǔ)碼。2的補(bǔ)碼數(shù)是有利的,其在于ALU不需要設(shè)計(jì)減法能力,因?yàn)椴还苁?的補(bǔ)碼中的負(fù)值還是正值,都僅要求ALU中的加法。數(shù)字通常以速記描述,其中12位的字段定義了 4096字節(jié)塊的地址,且通常被描述為例如4Kbyte (千字節(jié))塊。參考圖22B,用于執(zhí)行分支指令的分支指令信息典型地被發(fā)送到分支單元5058,該分支單元經(jīng)常使用諸如分支歷史表5082的分支預(yù)測(cè)算法,在其他條件運(yùn)算完成前預(yù)測(cè)分支結(jié)果。在條件運(yùn)算完成前,當(dāng)前分支指令的目標(biāo)將被獲取并推測(cè)性地執(zhí)行。當(dāng)條件運(yùn)算完成時(shí),基于條件運(yùn)算的條件和推測(cè)的結(jié)果,推測(cè)性執(zhí)行的分支指令或被完成或被丟棄。典型的分支指令可測(cè)試條件碼,以及如果條件碼滿足分支指令的分支要求,分支到目標(biāo)地址,分支地址可基于若干數(shù)被計(jì)算,所述數(shù)包括例如在寄存器字段或是指令的立即字段中找到的數(shù)。分支單元5058可利用具有多個(gè)輸入寄存器電路5075、5076、5077和一個(gè)輸出寄存器電路5080的ALU 5074。分支單元5058可與例如通用寄存器5059、解碼分派單元5056或其他電路5073通信?!M指令的執(zhí)行可由于多個(gè)原因中斷,所述原因包括例如由操作系統(tǒng)發(fā)起的上下文轉(zhuǎn)換、引起上下文轉(zhuǎn)換的程序異?;蝈e(cuò)誤、引起上下文轉(zhuǎn)換的I/O中斷信號(hào)或多個(gè)程序(在多線程環(huán)境中)的多線程活動(dòng)。優(yōu)選地,上下文轉(zhuǎn)換動(dòng)作保存關(guān)于當(dāng)前執(zhí)行的程序的狀態(tài)信息,且隨后加載關(guān)于正被調(diào)用的另一個(gè) 程序的狀態(tài)信息。狀態(tài)信息可被存儲(chǔ)在例如硬件寄存器或存儲(chǔ)器中。狀態(tài)信息優(yōu)選地包括指向?qū)⒈粓?zhí)行的下一個(gè)指令的程序計(jì)數(shù)器值、條件碼、存儲(chǔ)器轉(zhuǎn)換信息和架構(gòu)寄存器內(nèi)容。上下文轉(zhuǎn)換活動(dòng)可被硬件電路、應(yīng)用程序、操作系統(tǒng)程序或固件代碼(微代碼、微微代碼或許可內(nèi)部碼(LIC))單獨(dú)地或其組合實(shí)現(xiàn)。處理器根據(jù)指令定義的方法而訪問操作數(shù)。指令可使用指令的一部分的值提供立即操作數(shù),可提供一個(gè)或多個(gè)寄存器字段,其顯式地指向通用寄存器或?qū)S眉拇嫫?例如浮點(diǎn)寄存器)。指令可利用由操作碼字段確定的暗示的寄存器作為操作數(shù)。指令可利用用于操作數(shù)的存儲(chǔ)器位置。可由寄存器、立即字段或寄存器和立即字段的組合提供操作數(shù)的存儲(chǔ)器位置,如由z/Architeetufe 長位移工具(facility)所例示的,其中該指令定義了基寄存器、索引寄存器和立即字段(位移字段),它們加到一起,以提供例如存儲(chǔ)器中的操作數(shù)的地址。除非另外指明,此處的位置典型地意味著主存儲(chǔ)器(主存儲(chǔ)設(shè)備)中的位置。參考圖22C,處理器使用加載/存儲(chǔ)單元5060訪問存儲(chǔ)器。加載/存儲(chǔ)單元5060可以通過獲取存儲(chǔ)器5053中的目標(biāo)操作數(shù)的地址并將操作數(shù)加載到寄存器5059或其他存儲(chǔ)器5053位置中,來執(zhí)行加載操作,或可以通過獲取存儲(chǔ)器5053中的目標(biāo)操作數(shù)的地址并將從寄存器5059或另一個(gè)存儲(chǔ)器5053位置獲得的數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器5053中的目標(biāo)操作數(shù)位置,來執(zhí)行存儲(chǔ)操作。加載/存儲(chǔ)單元5060可以是推測(cè)性的,且可以以相對(duì)于指令順序來說無序的順序訪問存儲(chǔ)器,但是加載/存儲(chǔ)單元5060將向程序維持指令按順序執(zhí)行的外觀。加載/存儲(chǔ)單元5060可與通用寄存器5059、解密/分派單元5056、高速緩存/存儲(chǔ)器接口 5053或其他元件5083通信,且包括各種寄存器電路、ALU 5085和控制邏輯5090以計(jì)算存儲(chǔ)器地址并提供流水線順序以使操作保持次序。一些操作可不按順序,但加載/存儲(chǔ)單元提供功能以使不按順序執(zhí)行的操作對(duì)程序看起來如已按順序執(zhí)行一樣,如本領(lǐng)域所熟知的。優(yōu)選地,應(yīng)用程序“看到的”地址通常被稱為虛擬地址。虛擬地址有時(shí)候被稱為“邏輯地址”和“有效地址”。這些虛擬地址之所以虛擬,在于它們由多種動(dòng)態(tài)地址轉(zhuǎn)換(DAT)技術(shù)中的一種重定向到物理存儲(chǔ)器位置,所述動(dòng)態(tài)地址轉(zhuǎn)換技術(shù)包括但不限于簡單地給用偏移值給虛擬地址加前綴、經(jīng)由一個(gè)或多個(gè)轉(zhuǎn)換表轉(zhuǎn)換虛擬地址,所述轉(zhuǎn)換表優(yōu)選地包括至少一個(gè)段表和一個(gè)頁表(單獨(dú)地或組合地),優(yōu)選地,段表具有指向頁表的項(xiàng)。在z/Airhiteeture 中,提供轉(zhuǎn)換分級(jí)結(jié)構(gòu),包括區(qū)域第一表、區(qū)域第二表、區(qū)域第三表、段表和可選的頁表。地址轉(zhuǎn)換的性能通常通過利用轉(zhuǎn)換后備緩沖器(TLB)被改善,該轉(zhuǎn)換后備緩沖器包括將虛擬地址映射到相關(guān)的物理存儲(chǔ)位置的項(xiàng)。當(dāng)DAT使用轉(zhuǎn)換表轉(zhuǎn)換虛擬地址時(shí),創(chuàng)建項(xiàng)。于是,虛擬地址的隨后使用可利用快的TLB的項(xiàng),而不是慢的順序轉(zhuǎn)換表訪問。TLB內(nèi)容可由包括LRU (最少最近使用)的多個(gè)替換算法來管理。
在處理器是多處理器系統(tǒng)的處理器的情況下,每個(gè)處理器具有保持共享資源的責(zé)任,所述共享資源諸如I/O、高速緩存、TLB和存儲(chǔ)器,它們互鎖以實(shí)現(xiàn)一致性。典型地,“窺探”技術(shù)將被用于維持高速緩存一致性。在窺探環(huán)境中,每個(gè)高速緩存線可被標(biāo)記為正處于共享狀態(tài)、獨(dú)占狀態(tài)、改變狀態(tài)、無效狀態(tài)等中的一個(gè),以便有助于共享。I/O單元5054(圖21)向處理器提供用于附加到例如包括磁帶、盤、打印機(jī)、顯示器和網(wǎng)絡(luò)的外圍設(shè)備的裝置。I/o單元通常由軟件驅(qū)動(dòng)器向計(jì)算機(jī)程序呈現(xiàn)。在諸如來自I 的System z 的大型計(jì)算機(jī)中,通道適配器和開放系統(tǒng)適配器是提供操作系統(tǒng)和外圍設(shè)備之間的通信的大型計(jì)算機(jī)的I/o單元。 而且,其他類型的計(jì)算環(huán)境可受益于本發(fā)明的一個(gè)或多個(gè)方面。作為例子,環(huán)境可包括仿真器(例如,軟件或其他仿真機(jī)制),其中特定架構(gòu)(包括例如指令執(zhí)行、諸如地址轉(zhuǎn)換的架構(gòu)功能、以及架構(gòu)寄存器)或其子集被仿真(例如,在具有處理器和存儲(chǔ)器的本機(jī)計(jì)算機(jī)系統(tǒng)中)。在這樣的環(huán)境中,仿真器的一個(gè)或多個(gè)仿真功能可實(shí)施本發(fā)明的一個(gè)或多個(gè)方面,即使執(zhí)行仿真器的計(jì)算機(jī)可具有與正被仿真的能力不同的架構(gòu)。作為一個(gè)例子,在仿真模式中,解碼正被仿真的特定指令或操作,且建立合適的仿真功能以實(shí)施單個(gè)指令或操作。在仿真環(huán)境中,主計(jì)算機(jī)包括例如存儲(chǔ)器以存儲(chǔ)指令和數(shù)據(jù);指令獲取單元以從存儲(chǔ)器獲取指令,且可選地,提供用于獲取的指令的本地緩沖;指令解碼單元以接收獲取的指令并確定已被獲取的指令的類型;以及指令執(zhí)行單元以執(zhí)行該指令。執(zhí)行可包括將數(shù)據(jù)從存儲(chǔ)器加載到寄存器;從寄存器將數(shù)據(jù)存儲(chǔ)回存儲(chǔ)器;或執(zhí)行如由解碼單元確定的某些類型的算術(shù)或邏輯運(yùn)算。在一個(gè)例子中,每個(gè)單元在軟件中實(shí)現(xiàn)。例如,被所述單元執(zhí)行的操作被實(shí)現(xiàn)為仿真器軟件中的一個(gè)或多個(gè)子例程。更具體地,在大型計(jì)算機(jī)中,程序員(通常是如今的“C”程序員)一般通過編譯器應(yīng)用使用架構(gòu)機(jī)器指令。存儲(chǔ)在存儲(chǔ)介質(zhì)中的這些指令可以在z/Airhiteeture 丨BM 服務(wù)器中本機(jī)地執(zhí)行,或在執(zhí)行其他架構(gòu)的機(jī)器中執(zhí)行。它們可在現(xiàn)有的和未來的丨大型計(jì)算機(jī)服務(wù)器以&TBM 的其他機(jī)器(例如,Power Systems服務(wù)器和System x 服務(wù)器)中被仿真。它們可在使用由IBIVP、丨ntel 、AMDTM等制造的硬件的各種機(jī)器上運(yùn)行Linux的機(jī)器中被執(zhí)行。除了在Z/—Architecture 下的該硬件上執(zhí)行,Linux也可被用于這樣的機(jī)器,其使用由Hercules或FSI (FundamentalSoftware, Inc)(其中一般地執(zhí)行是處于仿真模式中)提供的仿真。在仿真模式中,仿真軟件由本機(jī)處理器執(zhí)行以仿真被仿真處理器的架構(gòu)。關(guān)于上沭參考的仿真器產(chǎn)品的信息可以分別從網(wǎng)址www. hercules-390. org和www. funsoft. com 獲得。本機(jī)處理器典型地執(zhí)行仿真軟件,其包括固件或本機(jī)操作系統(tǒng),以執(zhí)行被仿真處理器的仿真程序。仿真軟件負(fù)責(zé)獲取并執(zhí)行被仿真處理器架構(gòu)的指令。仿真軟件維護(hù)仿真的程序計(jì)數(shù)器以保持跟蹤指令界限。仿真軟件可一次獲取一個(gè)或多個(gè)仿真的機(jī)器指令,并將所述一個(gè)或多個(gè)仿真的機(jī)器指令轉(zhuǎn)換為對(duì)應(yīng)的本機(jī)機(jī)器指令組,以由本機(jī)處理器執(zhí)行。這些轉(zhuǎn)換的指令可被高速緩存,這樣可完成更快的轉(zhuǎn)換。仿真軟件將維持被仿真的處理器架構(gòu)的架構(gòu)規(guī)則以保證為被仿真處理器編寫的操作系統(tǒng)和應(yīng)用正確操作。而且,仿真軟件將提供由被仿真的處理器架構(gòu)確定的資源,包括但不限于控制寄存器、通用寄存器、浮點(diǎn)寄存器、例如包括段表和頁表的動(dòng)態(tài)地址轉(zhuǎn)換功能、中斷機(jī)制、上下文轉(zhuǎn)換機(jī)制、日中時(shí)間(TOD)時(shí)鐘和到I/O子系統(tǒng)的架構(gòu)接口,這樣被設(shè)計(jì)為在被仿真處理器上運(yùn)行的操作系統(tǒng)或應(yīng)用程序可在具有仿真軟件的本機(jī)處理器上運(yùn)行。解碼正被仿真的特定指令,且調(diào)用子例程以執(zhí)行該單個(gè)指令的功能。仿真被仿真處理器的功能的仿真軟件功能例如在“C”子例程或驅(qū)動(dòng)器中實(shí)現(xiàn),或由提供用于特定硬件的驅(qū)動(dòng)器的其他方法實(shí)現(xiàn),如本領(lǐng)域技術(shù)人員在理解優(yōu)選實(shí)施例的描述后將理解的。包括但不限于 Beausoleil 等人的標(biāo)題為 “Multiprocessor for Hardware Emulation”的美國專利證書號(hào)5,551,013 ;以及Scalzi等人的標(biāo)題為“Preprocessing of StoredTargetRoutines for Emulating Incompatible Instructions on a Target Processor,,的美國專利證書號(hào)6,009, 261 ;以及Davidian等人的標(biāo)題為“DecodingGuest Instructionto Directly Access Emulation Routines that Emulatethe Guest Instructions,,的美國專利證書號(hào),5, 574, 873 ;以及 Gorishek 等人的標(biāo)題為 “Symmetrical MultiprocessingBus and Chipset Used forCoprocessor Support Allowing Non-Native Code to Run ina System”的美國專利證書號(hào)6,308, 255 ;以及Lethin等人的標(biāo)題為“DynamicOptimizingObject Code Translator for Architecture Emulation andDynamic Optimizing Object Code Translation Method”的美國專利證書號(hào)6,463,582,;以及Eric Traut的標(biāo)題為“Method for Emulating GuestInstructions on a Host Computer Through DynamicRecompilation ofHost Instructions”的美國專利證書號(hào)5,790,825 ;以及許多其他專利的各種軟件和硬件仿真專利示出各種已知的方式來實(shí)現(xiàn)針對(duì)可為本領(lǐng)域技術(shù)人員獲得的目標(biāo)機(jī)器對(duì)為不同機(jī)器進(jìn)行架構(gòu)設(shè)計(jì)的指令格式的仿真。在圖16中,提供了仿真主計(jì)算機(jī)系統(tǒng)5092的例子,其仿真主架構(gòu)的主計(jì)算機(jī)系統(tǒng)5000’。在仿真主計(jì)算機(jī)系統(tǒng)5092中,主處理器(CPU) 5091是仿真主處理器(或虛擬主處理器),并包括具有與主計(jì)算機(jī)5000’的處理器5091不同的本機(jī)指令集架構(gòu)的仿真處理器5093。仿真主計(jì)算機(jī)系統(tǒng)5092具有可被仿真處理器5093訪問的存儲(chǔ)器5094。在示例性實(shí)施例中,存儲(chǔ)器5094被分區(qū)為主計(jì)算機(jī)存儲(chǔ)器5096部分和仿真例程5097部分。根據(jù)主計(jì)算機(jī)架構(gòu),主計(jì)算機(jī)存儲(chǔ)器5096對(duì)于仿真主計(jì)算機(jī)5092的程序來說是可用的。仿真處理器5093執(zhí)行與被仿真處理器5091不同架構(gòu)的架構(gòu)指令集的本機(jī)指令(即來自仿真程序處理器5097的本機(jī)指令),且可通過使用從順序和訪問/解碼例程獲得的一個(gè)或多個(gè)指令從主計(jì)算機(jī)存儲(chǔ)器5096中的程序訪問用于執(zhí)行的主機(jī)指令,所述順序和訪問/解碼例程可解碼訪問的主機(jī)指令,以確定用于仿真被訪問的主機(jī)指令的功能的本機(jī)指令執(zhí)行例程。被定義用于主計(jì)算機(jī)系統(tǒng)5000’架構(gòu)的其他工具可被架構(gòu)工具例程仿真,所述架構(gòu)工具例程包括諸如通用寄存器、控制寄存器、動(dòng)態(tài)地址轉(zhuǎn)換和1/0子系統(tǒng)支持和處理器高速緩存等工具。仿真例程也可利用在仿真處理器5093中可獲得的功能(諸如通用寄存器和虛擬地址的動(dòng)態(tài)轉(zhuǎn)換)以改善仿真例程的性能。也可提供專用硬件和卸載引擎以輔助處理器5093來仿真主計(jì)算機(jī)5000’的功能。在此使用的術(shù)語僅是為了描述特定實(shí)施例,且不旨在限制本發(fā)明。如在此使用的,單數(shù)形式“一”、“一個(gè)”和“該”也旨在包括復(fù)數(shù)形式,除非上下文另外清楚地指明。還將理解,當(dāng)在說明書中使用時(shí),術(shù)語“包括”和/或“包含”指明存在所述的特征、整體、步驟、操作、元件和/或組件,但不排除存在或附加一個(gè)或多個(gè)其他特征、整體、步驟、操作、元件和/或組件。
所附權(quán)利要求書中的所有裝置或步驟加功能元件的相應(yīng)結(jié)構(gòu)、材料、操作以及等價(jià)物,如有的話,旨在包括用于結(jié)合如特別要求保護(hù)的其他所要求保護(hù)的元件來執(zhí)行所述功能的任何結(jié)構(gòu)、材料或操作。呈現(xiàn)本發(fā)明的說明是為了示出和描述的作用,但不是窮盡性的或?qū)⒈景l(fā)明限制于所公開的形式。許多修改和變化對(duì)本領(lǐng)域普通技術(shù)人員來說是明顯的,且不脫離本發(fā)明的范圍。選擇和描述實(shí)施例是為了最佳地解釋本發(fā)明的原理和實(shí)際應(yīng)
用,并使得本領(lǐng)域普通技術(shù)人員能針對(duì)適于考慮的特定用途的具有各種修改的各種實(shí)施例理解本發(fā)明。
權(quán)利要求
1.一種在計(jì)算環(huán)境中提供對(duì)適配器的訪問的方法,包括下列步驟 可以由處理電路讀取的并存儲(chǔ)由所述處理電路執(zhí)行以便執(zhí)行包括下列步驟的方法的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì); 執(zhí)行包括訪問適配器的請(qǐng)求的訪客端指令; 確定所述訪客端指令是否被允許直接訪問所述適配器; 響應(yīng)于被允許,所述執(zhí)行直接地訪問所述適配器的一個(gè)或多個(gè)地址空間而沒有主機(jī)干預(yù);以及 響應(yīng)于不被允許,所述執(zhí)行導(dǎo)致對(duì)主機(jī)操作系統(tǒng)的攔截。
2.如權(quán)利要求I所述的方法,其中,所述確定包括確定執(zhí)行所述訪客端指令的訪客端處理器是否被授權(quán)訪問所述適配器。
3.如權(quán)利要求2所述的方法,其中,所述確定所述訪客端處理器是否被授權(quán)使用授權(quán)令牌來進(jìn)行判斷。
4.如權(quán)利要求3所述的方法,其中,所述確定所述訪客端處理器是否被授權(quán)包括將存儲(chǔ)在指定位置中的授權(quán)令牌和與訪客端處理器相關(guān)聯(lián)的授權(quán)令牌進(jìn)行比較,其中相等表示授權(quán)。
5.如權(quán)利要求2所述的方法,其中,所述確定所述訪客端指令是否被允許還包括 確定所述訪客端處理器是否被啟用供適配器訪問解釋; 確定所述適配器是否被啟用供適配器訪問解釋;以及 確定與所述適配器相關(guān)聯(lián)的并在所述請(qǐng)求中指定的函數(shù)句柄是否被啟用,其中,響應(yīng)于所述訪客端處理器被授權(quán)、所述訪客端處理器被啟用供適配器訪問解釋、所述適配器被啟用供適配器訪問解釋、以及所述函數(shù)句柄被啟用,所述訪客端處理器被允許訪問。
6.如權(quán)利要求I所述的方法,其中,所述執(zhí)行直接訪問所述適配器的地址空間,所述訪問包括讀取或?qū)懭氩僮鳌?br>
7.如權(quán)利要求I所述的方法,其中,所述方法還包括 由所述主機(jī)確定,它希望干涉所述訪客端指令的執(zhí)行;以及 響應(yīng)于所述主機(jī)確定它希望干涉,由所述主機(jī)攔截所述訪客端指令的執(zhí)行。
8.如權(quán)利要求I所述的方法,其中,所述方法還包括由所述主機(jī)代表執(zhí)行所述訪客端指令的訪客端處理器執(zhí)行一個(gè)或多個(gè)動(dòng)作,以允許所述訪客端指令直接訪問所述適配器。
9.如權(quán)利要求8所述的方法,其中,所述一個(gè)或多個(gè)動(dòng)作包括 授權(quán)所述訪客端處理器解釋一個(gè)或多個(gè)特定特許指令;以及 允許所述訪客端處理器解釋一個(gè)或多個(gè)特定特許指令。
10.一種包括存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)程序代碼的計(jì)算機(jī)程序,當(dāng)被加載到計(jì)算機(jī)系統(tǒng)并在其上執(zhí)行時(shí),使所述計(jì)算機(jī)系統(tǒng)執(zhí)行根據(jù)權(quán)利要求I到9中任一權(quán)利要求所述的方法的所有步驟。
11.一種在計(jì)算環(huán)境中提供對(duì)適配器的訪問的計(jì)算機(jī)系統(tǒng),所述計(jì)算機(jī)系統(tǒng)包括 存儲(chǔ)器;以及 與所述存儲(chǔ)器進(jìn)行通信的處理器; 用于執(zhí)行包括訪問適配器的請(qǐng)求的訪客端指令的執(zhí)行器; 用于確定所述訪客端指令是否被允許直接訪問所述適配器的確定器;所述執(zhí)行器,響應(yīng)于被允許,用于直接地訪問所述適配器的一個(gè)或多個(gè)地址空間而沒有主機(jī)干預(yù);以及 所述執(zhí)行器,響應(yīng)于不被允許,用于導(dǎo)致對(duì)主機(jī)操作系統(tǒng)的攔截。
12.—種在計(jì)算環(huán)境中提供對(duì)適配器的訪問的計(jì)算機(jī)系統(tǒng),所述計(jì)算機(jī)系統(tǒng)包括 存儲(chǔ)器;以及 與所述存儲(chǔ)器進(jìn)行通信的處理器,其中所述計(jì)算機(jī)系統(tǒng)被配置成執(zhí)行方法,所述方法包括 執(zhí)行包括訪問適配器的請(qǐng)求的訪客端指令; 確定所述訪客端指令是否被允許直接訪問所述適配器; 響應(yīng)于被允許,所述執(zhí)行直接地訪問所述適配器的一個(gè)或多個(gè)地址空間而沒有主機(jī)干預(yù);以及 響應(yīng)于不被允許,所述執(zhí)行導(dǎo)致對(duì)主機(jī)操作系統(tǒng)的攔截。
13.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述確定包括確定執(zhí)行所述訪客端指令的訪客端處理器是否被授權(quán)訪問所述適配器。
14.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述確定所述訪客端處理器是否被授權(quán)使用授權(quán)令牌來進(jìn)行判斷。
15.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述確定所述訪客端指令是否被允許還包括 確定所述訪客端處理器是否被啟用供適配器訪問解釋; 確定所述適配器是否被啟用供適配器訪問解釋;以及 確定與所述適配器相關(guān)聯(lián)的并在所述請(qǐng)求中指定的函數(shù)句柄是否被啟用,其中,響應(yīng)于所述訪客端處理器被授權(quán)、所述訪客端處理器被啟用供適配器訪問解釋、所述適配器被啟用供適配器訪問解釋、以及所述函數(shù)句柄被啟用,所述訪客端處理器被允許訪問。
16.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述執(zhí)行直接訪問所述適配器的地址空間,所述訪問包括讀取或?qū)懭氩僮鳌?br>
17.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述方法還包括 由所述主機(jī)確定,它希望干涉所述訪客端指令的執(zhí)行;以及 響應(yīng)于所述主機(jī)確定它希望干涉,由所述主機(jī)攔截所述訪客端指令的執(zhí)行。
18.如權(quán)利要求12所述的計(jì)算機(jī)系統(tǒng),其中,所述方法還包括由所述主機(jī)代表執(zhí)行所述訪客端指令的訪客端處理器執(zhí)行一個(gè)或多個(gè)動(dòng)作,以允許所述訪客端指令直接訪問所述適配器。
19.一種在計(jì)算環(huán)境中提供對(duì)適配器的訪問的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括 可以由處理電路讀取的并存儲(chǔ)由所述處理電路執(zhí)行以便執(zhí)行根據(jù)權(quán)利要求I到9中任一權(quán)利要求所述的方法的指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
全文摘要
本發(fā)明涉及對(duì)適配器的地址空間的訪客端訪問。授權(quán)機(jī)制允許執(zhí)行訪客端操作系統(tǒng)的主機(jī)授予訪客端直接訪問適配器函數(shù)的地址空間而無需主機(jī)干涉的許可。此訪問通過基于適配器函數(shù)的架構(gòu)實(shí)現(xiàn)的指令。主機(jī)還具有干涉指令的執(zhí)行的能力,如果需要的話。
文檔編號(hào)G06F9/46GK102906702SQ201080066948
公開日2013年1月30日 申請(qǐng)日期2010年11月8日 優(yōu)先權(quán)日2010年6月23日
發(fā)明者G·希特曼三世, D·克拉多克, M·法雷爾, T·格雷格, D·格雷納爾, D·奧西塞克 申請(qǐng)人:國際商業(yè)機(jī)器公司