專利名稱:促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸?shù)姆椒ê拖到y(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及輸入/輸出(I/O)處理,具體地說,涉及促進對可分頁客戶的I/O操作請求的解釋。
背景技術(shù):
高效的輸入/輸出(I/O)處理是一種不斷增加的挑戰(zhàn),并且正朝著提高效率不斷地大步前進。作為一個例子,為了獲得明顯高于以前所允許的帶寬,已經(jīng)由國際商業(yè)機器公司設(shè)計出一種被稱為排隊直接輸入/輸出(QDIO)的增強的輸入/輸出體系結(jié)構(gòu)。該體系結(jié)構(gòu)被用于各種系統(tǒng)和產(chǎn)品,包括由國際商業(yè)機器公司所提供的zSeries系統(tǒng)(例如,z900)和z/VM操作系統(tǒng)產(chǎn)品。這些系統(tǒng)和產(chǎn)品被增強以便允許多個操作系統(tǒng)映像在主機(例如,z/VM)控制下運行,以使用TCP/IP通信適配器和光纖通道協(xié)議(FCP)適配器來執(zhí)行排隊直接I/O操作。
當(dāng)前,由在可分頁模式虛擬機中執(zhí)行的客戶操作系統(tǒng)使用QDIO體系結(jié)構(gòu)需要主機的大量開銷。例如,主機需要創(chuàng)建并維護影子QDIO數(shù)據(jù)隊列,該隊列對針對客戶操作系統(tǒng)(其創(chuàng)建用于訪問連接到QDIO適配器的網(wǎng)絡(luò)或I/O設(shè)備的QDIO隊列)采取的QDIO操作進行鏡像。由于主機虛擬化客戶操作系統(tǒng)實際存儲器地址并透明地在客戶虛擬機(每個所述操作系統(tǒng)在其中執(zhí)行)之間共享系統(tǒng)的實際存儲器頁的固有方式,造成存在這種QDIO建立影子(shadowing)/鏡像要求。
具體地說,客戶操作系統(tǒng)使用用于QDIO隊列的虛擬化的實際存儲器。然而,適配器只訪問主機實際存儲器位置,而不是虛擬化的客戶實際存儲器位置。這是因為適配器不象中央處理單元那樣具有動態(tài)地址轉(zhuǎn)換機制。因此,由客戶操作系統(tǒng)用于QDIO隊列的虛擬化的實際存儲器被主機透明地映射到實際或物理存儲器中的不同存儲器頁中。因此,系統(tǒng)管理程序必須執(zhí)行各種操作以便允許客戶操作系統(tǒng)使用QDIO適配器。
首先,它必須通過在主機實際存儲器中創(chuàng)建客戶QDIO隊列的影子拷貝,來將客戶實際存儲器中由客戶操作系統(tǒng)創(chuàng)建的QDIO隊列進行鏡像。這些影子隊列由主機透明地創(chuàng)建并維護,并且依次由客戶隱式地使用以訪問QDIO適配器。只有影子隊列被連接到QDIO適配器,并且只有QDIO影子隊列中包含的主機實際存儲器I/O數(shù)據(jù)區(qū)域地址被實際地用于向/從適配器和主存儲器傳送數(shù)據(jù)。
進而,主機必須使每個客戶創(chuàng)建的QDIO隊列與其相應(yīng)的主機創(chuàng)建的影子QDIO隊列(由QDIO適配器使用以執(zhí)行客戶操作系統(tǒng)指定的QDIO操作)保持同步。具體地說,客戶實際存儲器中的客戶QDIO隊列中的所有QDIO狀態(tài)信息必須與主機實際存儲器中的相應(yīng)主機影子QDIO隊列中的狀態(tài)信息保持同步;并且客戶QDIO隊列中的操作系統(tǒng)指定的客戶實際存儲器I/O數(shù)據(jù)區(qū)域地址必須由主機分配相應(yīng)的主機實際存儲器數(shù)據(jù)區(qū)域,然后在由適配器使用的主機創(chuàng)建的影子隊列中必須指定這些數(shù)據(jù)區(qū)域地址。
這種建立影子并維持同步的處理將要求每次客戶操作系統(tǒng)執(zhí)行QDIO操作時,主機都獲得對中央處理器的控制。進而,與每次客戶執(zhí)行QDIO操作時從/向客戶操作系統(tǒng)和主機傳送控制相關(guān)聯(lián)的處理周期顯著地增大了QDIO處理所需的總體處理器開銷(超過了當(dāng)操作系統(tǒng)在本機環(huán)境中執(zhí)行時所需的開銷)。與本機執(zhí)行相比較,在運行作為可分頁客戶的工作負(fù)荷所需的總的處理周期中,這種額外處理開銷能夠造成幾乎40%的增加。
基于上述情況,需要一種增強輸入/輸出處理的能力。例如,需要一種減小與執(zhí)行諸如QDIO操作之類的I/O操作關(guān)聯(lián)的主機處理開銷的能力。
發(fā)明內(nèi)容
通過提供一種促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸?shù)姆椒?,克服了現(xiàn)有技術(shù)的缺陷并提供了其他優(yōu)點。所述方法包括,例如,由所述可分頁模式虛擬環(huán)境的處理器獲得將被用在數(shù)據(jù)傳輸中的緩沖區(qū)的指示,所述緩沖區(qū)與在所述可分頁模式虛擬環(huán)境的可分頁模式虛擬機中運行的客戶程序相關(guān)聯(lián);以及由所述處理器執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理以便啟動數(shù)據(jù)傳輸,所述執(zhí)行沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
在本發(fā)明的進一個方面中,提供了一種促進可分頁模式虛擬環(huán)境中的輸入/輸出(I/O)操作的處理的方法。所述方法包括,例如,由所述可分頁模式虛擬環(huán)境的處理器處理運行在所述可分頁模式虛擬環(huán)境的虛擬機中的客戶程序的I/O操作,其中所述處理沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
此處還描述并要求保護對應(yīng)于上述方法的系統(tǒng)和計算機程序產(chǎn)品。
通過本發(fā)明的技術(shù)實現(xiàn)了其他特征和優(yōu)點。此處詳細(xì)描述了本發(fā)明的其他實施例和方面,并且它們被看作所要求保護的發(fā)明的一部分。
在本說明書結(jié)尾處的權(quán)利要求書中特別指出并明確要求了被看作本發(fā)明的主題。通過以下結(jié)合附圖的詳細(xì)說明,本發(fā)明的上述和其他目標(biāo)、特性和優(yōu)點是顯而易見的,這些附圖是圖1a給出了包含并使用本發(fā)明的一個和多個方面的計算環(huán)境的一個實施例;圖1b給出了根據(jù)本發(fā)明的一個方面的圖1a的I/O子系統(tǒng)的進一步的細(xì)節(jié);圖2a-2b給出了根據(jù)本發(fā)明的一個方面的與客戶配置相關(guān)聯(lián)的邏輯的一個實施例;圖3a給出了根據(jù)本發(fā)明的一個方面的用于存儲通道子系統(tǒng)特征命令的請求塊的一個例子;圖3b給出了根據(jù)本發(fā)明的一個方面的用于存儲通道子系統(tǒng)特征命令的響應(yīng)塊的一個例子;圖4a給出了根據(jù)本發(fā)明的一個方面的用于存儲子通道QDIO數(shù)據(jù)命令的請求塊的一個例子;圖4b給出了根據(jù)本發(fā)明的一個方面的用于存儲子通道QDIO數(shù)據(jù)命令的響應(yīng)塊的一個例子;圖4c給出了根據(jù)本發(fā)明的一個方面的圖4b的響應(yīng)塊的子通道QDIO描述塊的一個例子;圖5給出了根據(jù)本發(fā)明的一個方面的QDIO隊列的數(shù)據(jù)結(jié)構(gòu)的一個實施例;圖6a給出了根據(jù)本發(fā)明的一個方面的QDIO緩沖區(qū)信息控制塊(QBICB)的一個例子;圖6b給出了根據(jù)本發(fā)明的一個方面的圖6a的QBICB的隊列存儲器描述符的一個例子;圖6c給出了根據(jù)本發(fā)明的一個方面的光纖通道協(xié)議(FCP)操作塊(FOB)的一個例子;圖7a給出了根據(jù)本發(fā)明的一個方面的用于設(shè)置通道子系統(tǒng)特征命令的請求塊的一個例子;圖7b給出了根據(jù)本發(fā)明的一個方面的圖7a的請求塊的操作數(shù)據(jù)區(qū)域的一個例子;圖7c給出了根據(jù)本發(fā)明的一個方面的用于設(shè)置通道子系統(tǒng)特征命令的響應(yīng)塊的一個例子;圖8a-8c給出了根據(jù)本發(fā)明的一個方面的用于和網(wǎng)絡(luò)協(xié)議I/O請求一起使用的與設(shè)置QDIO緩沖區(qū)狀態(tài)指令相關(guān)聯(lián)的邏輯的一個實施例;圖9給出了根據(jù)本發(fā)明的一個方面的所使用的幀描述符的一個例子;圖10給出了根據(jù)本發(fā)明的一個方面的設(shè)置QDIO緩沖區(qū)狀態(tài)指令的格式的一個例子;圖11a給出了根據(jù)本發(fā)明的一個方面的頁狀態(tài)表表項(PGSTE)的一個例子;圖11b給出了根據(jù)本發(fā)明的一個方面的頁表表項(PTE)的一個例子;圖12給出了根據(jù)本發(fā)明的一個方面的與釘住(pin)功能相關(guān)聯(lián)的邏輯的一個實施例;圖13a-13b給出了根據(jù)本發(fā)明的一個方面的與解決(resolve)功能相關(guān)聯(lián)的邏輯的一個實施例;圖14a-14c給出了根據(jù)本發(fā)明的一個方面的用于和網(wǎng)絡(luò)協(xié)議I/O請求一起使用的與提取QDIO緩沖區(qū)狀態(tài)指令相關(guān)聯(lián)的邏輯的一個實施例;圖15給出了根據(jù)本發(fā)明的一個方面的提取QDIO緩沖區(qū)狀態(tài)指令的格式的一個例子;圖16給出了根據(jù)本發(fā)明的一個方面的與由虛擬地址解除主機頁釘住功能相關(guān)聯(lián)的邏輯的一個實施例;圖17給出了根據(jù)本發(fā)明的一個方面的與由PTE地址解除主機頁釘住功能相關(guān)聯(lián)的邏輯的一個實施例;圖18a-18d給出了用于和光纖通道協(xié)議I/O請求一起使用的與設(shè)置QDIO緩沖區(qū)狀態(tài)指令相關(guān)聯(lián)的邏輯的一個實施例;以及圖19a-19e給出了用于和光纖通道協(xié)議I/O請求一起使用的與提取QDIO緩沖區(qū)狀態(tài)指令相關(guān)聯(lián)的邏輯的一個實施例。
具體實施例方式
根據(jù)本發(fā)明的一個方面,來自可分頁存儲客戶(例如,V=V客戶)的I/O操作請求在沒有主機干預(yù)的情況下被解釋。例如,提供了一種能力,其允許諸如z/VM系統(tǒng)管理程序之類的主機以及諸如zSeries處理器之類的處理器的硬件/固件以一種受控的協(xié)作方式來彼此交互,以便在不需要從/向客戶操作系統(tǒng)和主機傳遞控制的情況下處理V=V客戶操作系統(tǒng)QDIO操作。
進而,在本發(fā)明的另一個方面中,提供了可以在解釋可分頁存儲模式客戶的過程中被調(diào)用的主機頁管理輔助功能。這些功能包括解決主機頁功能,其被用于動態(tài)地解決主機頁無效狀態(tài);釘住主機頁功能,其被用于指出主機頁的內(nèi)容被釘在主機頁幀中;以及由虛擬地址解除主機頁釘住功能和/或由PTE地址解除主機頁釘住功能,它們被用于指出主機頁的內(nèi)容不再被釘在主機頁幀中。
參照圖1a說明了包含并使用本發(fā)明的一個或多個方面的計算環(huán)境的一個實施例。計算環(huán)境100基于例如由紐約阿蒙克的國際商業(yè)機器公司所提供的z/Architecture。在標(biāo)題為“z/Architecture Principles of Operation”(“z/Architecture運行原理”,IBM出版物No.SA22-7832-02,2003年6月,其全部內(nèi)容在此引入作為參考)的IBM出版物中描述了所述z/Architecture。(IBM是美國紐約阿蒙克的國際商業(yè)機器公司的注冊商標(biāo)。此處所使用的其他名稱可能是國際商業(yè)機器公司或其他公司的注冊商標(biāo)、商標(biāo)或產(chǎn)品名稱。)在一個例子中,基于所述z/Architecture的計算環(huán)境包括由紐約阿蒙克的國際商業(yè)機器公司所提供的eServer zSeries。
作為一個例子,計算環(huán)境100包括中央處理器復(fù)合體(CPC)102,其提供虛擬機支持。CPC 102包括例如一個或多個虛擬機104、一個或多個中央處理器106、至少一個主機108(例如,諸如系統(tǒng)管理程序之類的控制程序)以及輸入/輸出子系統(tǒng)110,以下對每一個進行描述。
CPC的虛擬機支持提供了運行大量虛擬機的能力,每個虛擬機能夠容納諸如Linux之類的客戶操作系統(tǒng)112。每個虛擬機104能夠用作單獨的系統(tǒng)。即,每個虛擬機可以被獨立地重置、容納客戶操作系統(tǒng)以及與不同的程序一起運行。在虛擬機中運行的操作系統(tǒng)或應(yīng)用程序似乎在訪問完整的和全部的系統(tǒng),但事實上只有系統(tǒng)的一部分是可用的。
在此特定的例子中,虛擬機的模型是V=V模型,該模型中,由虛擬存儲器而不是實際存儲器來支持虛擬機的存儲器。每個虛擬機具有虛擬的線性存儲器空間。物理資源由主機108擁有,并且在需要時由主機向諸客戶操作系統(tǒng)分派共享的物理資源,以便滿足它們的處理要求。這種V=V虛擬機模型假設(shè)諸客戶操作系統(tǒng)之間的交互和物理共享的計算機資源受主機控制,因為大量的客戶通常使得主機簡單地進行分區(qū)并向所配置的客戶分配硬件資源成為不可能。在標(biāo)題為“z/VMRunning Guest OperatingSystems”(“z/VM運行客戶操作系統(tǒng)”,IBM出版物No.SC24-5997-02,2001年10月,其全部內(nèi)容在此引入作為參考)的IBM出版物中進一步描述了V=V模型的一個或多個方面。
中央處理器106是可以分配給虛擬機的物理的處理器資源。例如,虛擬機104包括一個或多個邏輯處理器,每個邏輯處理器代表可以被動態(tài)地分配給虛擬機的所有的或部分的物理處理器資源106。虛擬機104由主機108來管理。作為例子,所述主機可以以在處理器106上運行的微代碼來實現(xiàn),或者是在計算機上執(zhí)行的主機操作系統(tǒng)的一部分。在一個例子中,主機108是諸如由紐約阿蒙克的國際商業(yè)機器公司所提供的z/VM之類的VM系統(tǒng)管理程序。在標(biāo)題為“z/VMGeneral Information Manual”(“z/VM通用信息手冊”,IBM出版物No.GC24-5991-04,2001年10月,其全部內(nèi)容在此引入作為參考)的IBM出版物中描述了z/VM的一個例子。
輸入/輸出子系統(tǒng)110在諸設(shè)備與主存儲器之間引導(dǎo)信息流。它被連接到中央處理復(fù)合體,因為它可以是中央處理復(fù)合體的一部分或與其分離。I/O子系統(tǒng)減輕了中央處理器與被連接到CPC的I/O設(shè)備直接通信的任務(wù),并且允許數(shù)據(jù)處理與I/O處理同時進行。在一個實施例中,所述I/O子系統(tǒng)基于排隊直接I/O(QDIO)體系結(jié)構(gòu),在標(biāo)題為“Method And ApparatusFor Providing Configuration Information Using A Queued DirectInput-Output Device”(“使用排隊直接輸入/輸出設(shè)備來提供配置信息的方法和裝置”,Markos等人,美國專利No.6,519,645B2,2003年2月11日公開,其全部內(nèi)容在此引入作為參考)的美國專利中描述了所述體系結(jié)構(gòu)的一個例子。參考圖1b說明了關(guān)于I/O子系統(tǒng)110的其他細(xì)節(jié)。
I/O子系統(tǒng)110包括被連接到多個I/O設(shè)備122的多個適配器120。一個特定的適配器可以被連接到一個或多個I/O設(shè)備,并且一個I/O設(shè)備可以被連接到一個或多個適配器。
適配器的一個例子是QDIO適配器。QDIO適配器提供了通常與輸入/輸出控制單元相關(guān)的功能,以及通常與輸入/輸出通道相關(guān)的功能。QDIO適配器具有直接訪問主存儲器的能力,為的是與訪問同一主存儲器的程序交換數(shù)據(jù)。
QDIO適配器的一種邏輯表示是QDIO控制單元??梢杂卸鄠€QDIO控制單元表示同一QDIO適配器。
QDIO適配器被通過在適配器與主存儲器之間提供數(shù)據(jù)傳輸路徑的通道路徑連接到CPC中的其他單元。為了將從所連接的I/O設(shè)備或設(shè)備網(wǎng)絡(luò)接收到的數(shù)據(jù)傳輸給程序,適配器使用位于主存儲器中的QDIO輸入隊列。類似地,為了向QDIO適配器傳輸數(shù)據(jù)(QDIO適配器又可以向所連接的I/O設(shè)備或設(shè)備網(wǎng)絡(luò)傳輸數(shù)據(jù)),程序使用QDIO輸出隊列。
可以有多個(例如,32個)輸入隊列和輸出隊列可用于一個特定的適配器。為了指出哪些隊列可用于特定的適配器,采用了一種被稱為QDIO子通道的邏輯結(jié)構(gòu)。QDIO子通道包括零個或多個輸入隊列以及零個或多個輸出隊列,并且一個或多個子通道被與一個特定的適配器相關(guān)聯(lián),使得所述適配器能夠訪問這些隊列。
對于QDIO輸入隊列和QDIO輸出隊列,主存儲器(例如,主機存儲器)被用作在程序和適配器之間交換數(shù)據(jù)的介質(zhì)。此外,這些隊列為程序和適配器提供了以可預(yù)知的和高效的異步方式彼此直接通信的能力,無需諸如操作系統(tǒng)輸入/輸出系統(tǒng)管理程序之類的集中式控制機制的服務(wù),并且沒有此類控制機制帶來的結(jié)果開銷。輸入和輸出隊列都由程序在主存儲器中構(gòu)造,并且在QDIO適配器處被建立和激活。在I/O操作的處理過程中,這些隊列被用于通信。
根據(jù)本發(fā)明的一個方面,為了在不需要從/向客戶操作系統(tǒng)和主機傳送控制的情況下處理V=V客戶操作系統(tǒng)QDIO操作,主機(例如,z/VM)和處理器(例如,zSeries)硬件/固件以受控的協(xié)作方式彼此交互。客戶QDIO操作可以利用一種被稱為QDIO增強緩沖區(qū)狀態(tài)管理(QEBSM)的工具,并且當(dāng)這么做時,在沒有主機干預(yù)的情況下,通過一種被稱作QDIO增強緩沖區(qū)狀態(tài)管理解釋(QEBSMI)工具(其允許為可分頁存儲模式客戶解釋性地執(zhí)行所選擇的指令)的工具,操作可以直接經(jīng)過主機到達(dá)QDIO適配器/從QDIO適配器到達(dá)主機。在System/370ExtendedArchitecture/Interpretative Execution(“系統(tǒng)/370擴展的體系結(jié)構(gòu)/解釋性執(zhí)行”,IBM出版物No.SA22-7095-01,1985年9月,其全部內(nèi)容在此引入作為參考)中描述了解釋性執(zhí)行(例如,啟動解釋性執(zhí)行(SIE))的一個例子。
為了配置一種能夠使用QEBSM和QEBSMI的系統(tǒng),執(zhí)行了各種配置任務(wù)。如參照圖2a-2b所說明的,由程序(例如,客戶程序)200、主機(例如,z/VM)202以及所述客戶和主機運行于其上的機器204(例如,處理器)執(zhí)行這些任務(wù)。
在一個實施例中,在步驟206,客戶程序200(圖2a)判定程序是否能夠使用QEBSM來管理QDIO連接。此判定是通過例如由程序向主機發(fā)出的通道子系統(tǒng)調(diào)用(CHSC)存儲通道子系統(tǒng)特性命令來作出的。在步驟208,主機又向硬件發(fā)出CHSC存儲通道子系統(tǒng)特性指令,以便獲得機器上已安裝的工具。在步驟210,所述機器處理CHSC指令,并且將信息傳遞回主機。
存儲通道子系統(tǒng)特性命令被用于存儲與I/O子系統(tǒng)的特性有關(guān)的信息。存儲通道子系統(tǒng)特性命令的執(zhí)行并不改變包含在I/O子系統(tǒng)內(nèi)的任何信息。存儲通道子系統(tǒng)特性命令被同步地執(zhí)行,并且不是被解釋地執(zhí)行。
參照圖3a說明了用于存儲通道子系統(tǒng)特性命令的請求塊的一個實施例。命令請求塊300包括,例如(a)長度區(qū)302該區(qū)指定命令請求塊的長度。
(b)命令代碼304該區(qū)指定存儲通道子系統(tǒng)特性命令。
(c)映像Id(IID)308該IID區(qū)包括多個0(作為一個例子)。
(d)格式310命令請求格式區(qū)包括一個無符號整數(shù),該無符號整數(shù)的值指定了命令請求塊的布局。
參照圖3b說明了用于存儲通道子系統(tǒng)特性命令的響應(yīng)塊的一個實施例。在一個例子中,響應(yīng)塊320包括(a)長度區(qū)322該區(qū)指定作為嘗試執(zhí)行存儲通道子系統(tǒng)特性命令的結(jié)果被存儲的命令響應(yīng)代碼的長度。
如果除了成功指示之外的響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則沒有特性信息作為嘗試執(zhí)行所述命令的結(jié)果被存儲,并且該長度區(qū)為所述命令響應(yīng)塊指定例如8字節(jié)的長度。
如果指示成功的響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則總體特性和CHSC命令特性都被存儲在命令響應(yīng)塊中。因此,長度區(qū)指定例如4080字節(jié)的命令響應(yīng)塊長度。
(b)響應(yīng)代碼324該區(qū)包括一個無符號二進制整數(shù),該整數(shù)說明嘗試執(zhí)行存儲通道子系統(tǒng)特性命令的結(jié)果。
(c)格式326命令響應(yīng)格式區(qū)包括一個無符號整數(shù),該整數(shù)的值指定了命令響應(yīng)塊的布局。
(d)總體特性328如果指示成功的響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則總體特性區(qū)包括指定各種工具中的哪些工具由I/O子系統(tǒng)來提供的信息。一些工具包括例如CHSC子通道;動態(tài)I/O配置工具;消息處理器通道配置工具;QDIO增強緩沖區(qū)狀態(tài)管理工具;QDIO增強緩沖區(qū)管理解釋(QEBSMI)工具等。雖然此處描述了多種工具,但是也可以存在其他的或不同的工具。當(dāng)對應(yīng)于特定工具的總體特性區(qū)的位是1時,表示提供該工具。
(e)CHSC特性330如果成功響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則CHSC特性區(qū)包括指定某些CHSC命令是否由I/O子系統(tǒng)來提供的信息。這些命令的例子包括,例如,改變通道路徑配置,改變控制單元配置,改變I/O設(shè)備配置,存儲配置組件列表,存儲域配置組件列表,以及設(shè)置域?qū)傩缘?。?dāng)對應(yīng)于特定命令的CHSC特性區(qū)的位是1時,將提供該命令。
返回圖2a,在步驟212,響應(yīng)于主機接收到已安裝工具的列表,該主機判定QDIO增強緩沖區(qū)狀態(tài)管理解釋(QEBSMI)工具是否已被安裝在機器上。假如已安裝了QEBSMI且子通道具有QDIO能力,則主機打開CHSC響應(yīng)數(shù)據(jù)中的QEBSM可用指示器,指出QEBSM工具可用。因此,在步驟214,以指出QEBSM工具可用來結(jié)束該命令。
接著,在步驟216,作出關(guān)于被指定的子通道號的QDIO特性的判定。在一個例子中,通過由程序向主機發(fā)出CHSC存儲子通道QDIO數(shù)據(jù)命令來作出此判定。然后,在步驟218,主機將該指令發(fā)給實際的子通道,以便獲得隊列特性。在步驟220,機器處理該指令。
存儲子通道QDIO數(shù)據(jù)命令被用于獲得與指定的子通道范圍相關(guān)聯(lián)的QDIO適配器的自述信息。
存儲子通道QDIO數(shù)據(jù)命令的執(zhí)行不改變包含在I/O子系統(tǒng)中的任何信息。在一個例子中,它被同步執(zhí)行。
用于存儲子通道QDIO數(shù)據(jù)命令的命令請求塊400(圖4a)包括例如(a)長度區(qū)402該區(qū)指定命令請求塊的長度。
(b)命令代碼404該區(qū)指定存儲子通道QDIO數(shù)據(jù)命令。
(c)映像ID(IID)406在此實施例中,IID區(qū)包括0值。
(d)格式(FMT)408命令請求格式區(qū)包括一個無符號整數(shù),該整數(shù)的值指定命令請求塊的布局。
(e)第一子通道號410該區(qū)指定標(biāo)識為其請求QDIO適配器信息的第一子通道的子通道號。
(f)最終子通道號412該區(qū)指定標(biāo)識為其請求QDIO適配器信息的最終子通道的子通道號。
參照圖4b說明了用于所述存儲子通道QDIO數(shù)據(jù)命令的響應(yīng)塊的一個實施例。在一個例子中,響應(yīng)塊420包括例如(a)長度區(qū)422該區(qū)指定命令響應(yīng)塊的長度。該長度取決于作為嘗試執(zhí)行存儲子通道QDIO數(shù)據(jù)命令的結(jié)果被存儲的響應(yīng)代碼。
如果除了成功指示之外的響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則沒有子通道QDIO描述塊作為嘗試執(zhí)行所述命令的結(jié)果被存儲,并且該長度區(qū)為所述命令響應(yīng)塊指定例如8字節(jié)的長度。
如果指示成功的響應(yīng)代碼被存儲在響應(yīng)代碼區(qū)中,則至少一個子通道QDIO描述塊作為執(zhí)行所述命令的結(jié)果被存儲在命令響應(yīng)塊中,并且該長度區(qū)為被存儲的每個子通道QDIO描述塊指定例如8字節(jié)加32字節(jié)的命令響應(yīng)塊長度。
(b)響應(yīng)代碼424該區(qū)包括一個無符號二進制整數(shù),該整數(shù)說明了嘗試執(zhí)行存儲子通道QDIO數(shù)據(jù)命令的結(jié)果。
(c)壓縮(C)426該區(qū)指定子通道QDIO描述塊是否被壓縮。
當(dāng)是1時,C位指定描述塊被壓縮。即,只有子通道被指定為具有QDIO能力的那些描述塊被存儲。不具有QDIO能力的子通道的描述塊不被存儲在響應(yīng)塊中。
當(dāng)是0時,C位指定描述塊沒有被壓縮。即,描述塊被存儲在響應(yīng)塊中而沒有考慮它們是否描述了具有QDIO能力的子通道。對于與被請求的子通道范圍內(nèi)所存儲的塊同樣多的描述塊,由一個描述塊來表示每個可能的子通道號。
(d)格式(FMT)428命令響應(yīng)格式區(qū)包括一個無符號整數(shù),該整數(shù)的值指定命令響應(yīng)塊的布局。該區(qū)的值是,例如,0。
(e)子通道QDIO描述塊(多個)430當(dāng)一個成功響應(yīng)代碼被存儲時,多至127個32-字節(jié)(作為一個例子)子通道QDIO描述塊被存儲在命令響應(yīng)塊的響應(yīng)數(shù)據(jù)區(qū)域中。所存儲的子通道QDIO描述塊的數(shù)量取決于在命令請求塊中指定的范圍內(nèi)的子通道的數(shù)量、當(dāng)執(zhí)行CHSC時I/O子系統(tǒng)內(nèi)的情況以及I/O子系統(tǒng)模型。
至少一個子通道QDIO描述塊被存儲,并且通過從命令響應(yīng)塊的大小中減去8個字節(jié)并將剩余部分除以32來確定所存儲的塊的實際數(shù)量。
從由第一子通道號區(qū)所指定的子通道開始,為一些或所有被指定的子通道存儲子通道QDIO描述塊。按照子通道號升序來存儲子通道QDIO描述塊。
參照圖4c描述了子通道QDIO描述塊的一個例子。子通道QDIO描述塊430包括例如(a)標(biāo)志440該區(qū)包括與子通道QDIO描述塊的內(nèi)容有關(guān)的信息。在一個例子中,位0-7的含義如下位 含義0 具有QDIO能力當(dāng)是1時,位0指出與指定的子通道關(guān)聯(lián)的I/O設(shè)備能夠執(zhí)行QDIO操作。當(dāng)是0時,位0指出與指定的子通道關(guān)聯(lián)的I/O設(shè)備不能夠執(zhí)行QDIO操作。
1 有效性當(dāng)是1時,位1指出子通道QDIO描述塊有效。當(dāng)是0時,位1指出子通道QDIO描述塊無效除了位0、1和2,以及子通道號區(qū)之外,子通道QDIO描述塊的內(nèi)容沒有意義。對于沒有被指定為具有QDIO能力(即當(dāng)位0是1時)的子通道,位1是0。
2 最后的QDIO子通道當(dāng)是1時,位2指出沒有具有QDIO能力的更高編號的子通道。當(dāng)是0時,位2指出存在具有QDIO能力的更高編號的子通道。
(b)子通道號442該區(qū)指定向其應(yīng)用子通道QDIO描述塊中的信息的子通道。
(c)QDIO隊列格式(QFMT)444該區(qū)包括一個無符號二進制整數(shù),該整數(shù)標(biāo)識了可被用在指定子通道上的QDIO隊列的格式。
(d)參數(shù)446該區(qū)包括與由子通道QDIO描述塊所表示的子通道或設(shè)備有關(guān)的參數(shù)信息。
(e)QDIO適配器特性1(QDIOAC1)448該區(qū)描述與指定子通道相關(guān)聯(lián)的QDIO適配器的模型相關(guān)的特性。在一個例子中,位0-7的含義如下
位 含義0 未經(jīng)請求的輸入隊列中斷當(dāng)是1時,位0指出當(dāng)緩沖區(qū)已轉(zhuǎn)換到已準(zhǔn)備好狀態(tài),同時子通道處于QDIO有效狀態(tài)時,QDIO適配器可以動態(tài)地啟動向程序給出未經(jīng)請求的輸入隊列進展報告中斷。這些中斷獨立于經(jīng)請求的中斷被給出,所述經(jīng)請求的中斷作為程序已在輸入隊列SBAL中設(shè)置了輸入隊列中斷請求指示器(如下面所述)的結(jié)果被給出(當(dāng)支持輸入隊列中斷請求時)。
當(dāng)是0時,位0指出QDIO適配器沒有啟動向程序給出未經(jīng)請求的輸入隊列進展報告中斷。
1 SIGA啟動輸入隊列當(dāng)位1是1并且位7是0時,QDIO適配器要求程序執(zhí)行SIGNAL ADAPTER-由子通道讀(SIGA-r)。當(dāng)位1是1并且位7是1時,QDIO適配器要求程序執(zhí)行SIGNALADAPTER-由標(biāo)記讀(SIGA-rt)。在2001年12月18日公布的標(biāo)題為“Self-contained Queues WithAssociated Control Information For Receipt AndTransfer Of Incoming And Outgoing Data Using AQueued Direct Input-output Device”(用于使用排隊直接輸入-輸出設(shè)備來接收和傳輸進入和外出數(shù)據(jù)的具有關(guān)聯(lián)控制信息的自足隊列)的美國專利No.6,332,171中;在2002年2月5日公布的標(biāo)題為“Method And Apparatus Of Simulation Of DataIn A Virtual Environment Using A Queued DirectInput-Output Device”(在虛擬環(huán)境中使用排隊直接輸入-輸出設(shè)備來模擬數(shù)據(jù)的方法和裝置)的美國專利No.6,519,645中;以及在2003年2月11日公布的標(biāo)題為“Method And Apparatus For ProvidingConfiguration Information Using A Queued Direct
Input-Output Device”(使用排隊直接輸入-輸出設(shè)備來提供配置信息的方法和裝置)的美國專利No.6,345,241中(所有這些專利的全部內(nèi)容在此引入作為參考)說明了SIGA的一個例子。
當(dāng)是0時,位1指定QDIO適配器不要求程序執(zhí)行SIGA-r或SGIA-rt。
2 SGIA啟動或處理輸出隊列當(dāng)位2是1并且位7是0時,出于指令的說明中所指出的原因,QDIO適配器要求程序執(zhí)行SIGNAL ADAPTER-由子通道寫(SIGA-w)。當(dāng)位2是1并且位7是1時,QDIO適配器要求程序執(zhí)行SIGNAL ADAPTER-由標(biāo)記寫(SIGA-wt)。
當(dāng)是0時,位2指定QDIO適配器不要求程序執(zhí)行SIGA-w或SIGA-wt。
3 SIGA同步當(dāng)位3是1并且位7是0時,QDIO適配器要求程序執(zhí)行SIGNAL ADAPTER-由子通道同步(SIGA-s)。當(dāng)位3是1并且位7是1時,程序可以執(zhí)行SIGNAL ADAPTER-由標(biāo)記注銷(SIGA-lt)。
當(dāng)是0時,位3指定QDIO適配器不要求程序執(zhí)行SIGA-s。
4 適配器中斷隊列同步輔助有效當(dāng)位4是1時,適配器中斷隊列同步輔助有效。當(dāng)該輔助有效且SIGA-s被請求(位3是1并且位7是0)時,與適配器(其與指定的子通道關(guān)聯(lián))相關(guān)聯(lián)的輸入和輸出隊列將在中斷之前被動態(tài)地同步。因此,不需要程序在適配器中斷設(shè)備(AIF)中斷之后立即發(fā)出SIGA-s指令。
當(dāng)位4是0時,適配器中斷隊列同步輔助無效。
5 PCI中斷隊列同步輔助有效當(dāng)位5是1時,PCI
中斷隊列同步輔助有效。當(dāng)該輔助有效且SIGA-s被請求(位3是1并且位7是0)時,與指定子通道相關(guān)聯(lián)的輸出隊列將在中斷之前被動態(tài)地同步。
因此,不需要程序在PCI中斷之后立即發(fā)出SIGA-s指令。
當(dāng)位5是0時,PCI中斷隊列同步輔助無效。
QDIOAC1區(qū)的位4和5由主機來設(shè)置。
6 QEBSM可用當(dāng)是1時,位6指出QDIO增強緩沖區(qū)狀態(tài)管理可用于允許指定的子通道。
當(dāng)是0時,位6指出QDIO增強緩沖區(qū)狀態(tài)管理不可用于允許指定的子通道。
基于響應(yīng)CHSC存儲通道子系統(tǒng)特性命令而被存儲的總體特性的指定位的設(shè)置,由主機來設(shè)置這個區(qū)。
7 QEBSM允許當(dāng)是1時,位7指出指定的子通道被允許QDIO增強緩沖區(qū)狀態(tài)管理,結(jié)果,以下為真·與指定的子通道相關(guān)聯(lián)的QDIO緩沖區(qū)狀態(tài)不能在程序存儲中的在下面所述的SLSB中被訪問。
而是,程序使用設(shè)置QDIO緩沖區(qū)狀態(tài)和提取QDIO緩沖區(qū)狀態(tài)指令。
·子通道標(biāo)記區(qū)包括子通道標(biāo)記。
當(dāng)是0時,位7指出指定的子通道沒有被允許QDIO增強緩沖區(qū)狀態(tài)管理,并且指出在程序存儲(其可以由程序直接操作)中的SLSB中可以訪問QDIO緩沖區(qū)狀態(tài)。
基于指定的子通道是否被允許QDIO增強緩沖區(qū)狀態(tài)管理解釋(QEBSMI),由主機來設(shè)置這個區(qū)。
當(dāng)主機完全模擬適配器時(例如,在客戶跟蹤期間),位7也可以由主機來設(shè)置。(要了解QDIO子通道如何被允許QEBSMI的說明,請參考下面描述的
CHSC設(shè)置通道子系統(tǒng)特性命令。)(f)類450該區(qū)包括一個無符號二進制整數(shù),該整數(shù)標(biāo)識了與指定子通道相關(guān)聯(lián)的I/O設(shè)備的類。類的一個例子是通信控制器。
(g)輸入隊列計數(shù)(IQCNT)452該區(qū)包括一個無符號二進制整數(shù),該整數(shù)指定了由QDIO適配器使用以執(zhí)行I/O操作的輸入QDIO隊列的數(shù)量。
(h)輸出隊列計數(shù)(OQCNT)454該區(qū)包括一個無符號二進制整數(shù),該整數(shù)指定了由QDIO適配器使用以執(zhí)行I/O操作的輸出QDIO隊列的數(shù)量。
(i)最大緩沖區(qū)鏈計數(shù)(MBCCNT)456當(dāng)這個區(qū)不是0時,它包括適配器所支持的鏈接緩沖區(qū)(即,下面所述的鏈接的SBAL)的最大數(shù)目的無符號整數(shù)計數(shù)。當(dāng)這個區(qū)是0且QFMT區(qū)指出格式1隊列(即,F(xiàn)CP)被用在指定子通道上時,最多36個緩沖區(qū)可以被鏈接。當(dāng)這個區(qū)是0且QFMT區(qū)指出格式1隊列沒有被用在指定子通道上時,適配器不支持緩沖區(qū)鏈接。
(j)QDIO適配器特性2(QDIOAC2)458該區(qū)描述與指定子通道相關(guān)聯(lián)的QDIO適配器的模型相關(guān)的特性。在一個例子中,位0-3的含義如下位 含義0 輸入隊列中斷請求支持當(dāng)是1時,位0指出適配器支持下面所述的輸入隊列SBAL的SBALF0區(qū)中的中斷請求位。當(dāng)位0是1并且位3是0時,報告適配器在關(guān)聯(lián)輸入隊列上的進展的中斷嚴(yán)格地遵循程序的請求。當(dāng)位0是1并且位3是1時,報告適配器在關(guān)聯(lián)輸入隊列上的進展的中斷遵循程序的請求,并且還可以發(fā)生未經(jīng)請求的報告進展的中斷。
當(dāng)是0時,位0指出適配器不支持用于輸入隊列的SBAL的SBALF 0區(qū)中的中斷請求位。
1 輸出隊列中斷請求支持當(dāng)是1時,位1指出適配器支持輸出隊列SBAL的SBALF0區(qū)中的中斷請求位。報告適配器在關(guān)聯(lián)輸出隊列上的進展的中斷嚴(yán)格地遵循程序的請求。
當(dāng)是0時,位1指出適配器不支持用于輸出隊列的SBAL的SBALF0區(qū)中的中斷請求位。
2 單緩沖區(qū)預(yù)取有效當(dāng)是1時,位2指出適配器在該適配器正在處理的當(dāng)前緩沖區(qū)之前最多預(yù)取一個緩沖區(qū)。當(dāng)是0時,位2指出適配器可以預(yù)取多于一個的緩沖區(qū)。
3 未經(jīng)請求的輸入隊列中斷無效當(dāng)是1時,位3指出未經(jīng)請求的輸入隊列中斷對于適配器是無效的。
當(dāng)是0時,位3指出未經(jīng)請求的輸入隊列中斷對于適配器是有效的。當(dāng)位3是0時,QDIOAC1位0是1。
(k)子通道標(biāo)記460當(dāng)QDIOAC1區(qū)的位7是1時,該區(qū)包括與指定的子通道相關(guān)聯(lián)的標(biāo)記。
子通道標(biāo)記區(qū)由主機來設(shè)置。如果指定的子通道允許QEBSMI,則主機將子通道標(biāo)記區(qū)設(shè)置為與該子通道關(guān)聯(lián)的QDIO緩沖區(qū)信息控制塊(QBICB)的主機實際或絕對地址的值。(如下所述,當(dāng)QDIO子通道允許QEBSMI時,通過CHSC設(shè)置通道子系統(tǒng)特性命令將QBICB與該子通道相關(guān)聯(lián)。)當(dāng)主機完全模擬適配器時,也可以由主機來設(shè)置子通道標(biāo)記。如果指定的子通道不允許QEBSMI且主機沒有模擬適配器,則將0作為子通道標(biāo)記值返回。
子通道標(biāo)記被用于為QEBSM操作指定QDIO子通道。當(dāng)發(fā)生導(dǎo)致從子通道解散QDIO隊列的活動或事件時,子通道標(biāo)記變成是過時的,并且在程序可以再次使用QEBSM操作之前,要獲得新的子通道標(biāo)記。先前分配的標(biāo)記變成無效,并且可以被隨后分配給另一個子通道。
在存儲子通道QDIO數(shù)據(jù)命令被執(zhí)行的時刻,存儲在子通道QDIO描述塊中的適配器描述信息是最新的。然而,作為由指定的適配器成功完成以下所述的建立QDIO隊列CCW命令的結(jié)果,某些適配器描述信息可能會改變。因此,在成功完成建立QDIO隊列CCW命令之后,要重新發(fā)出存儲子通道QDIO數(shù)據(jù)命令,以便獲得以下內(nèi)容的最新說明QDIOAC1位1(SIGA啟動輸入隊列)QDIOAC1位2(SIGA啟動或處理輸出隊列)QDIOAC1位3(SIGA同步)QDIOAC1位7(QEBSM允許)QDIOAC2位2(單緩沖區(qū)預(yù)取有效)QDIOAC2位3(未經(jīng)請求的輸入隊列中斷無效)子通道標(biāo)記剩余的適配器描述信息是最新的,與建立QDIO隊列命令的成功完成無關(guān)。
返回圖2a,步驟222,響應(yīng)CHSC存儲子通道QDIO數(shù)據(jù)命令的完成,在步驟224主機判定QEBSMI工具是否在機器上可用。如果QEBSMI可用,則子通道具有QDIO能力,并且主機支持用于這種連接的QEBSM,然后在返回給程序的CHSC響應(yīng)數(shù)據(jù)中作出QEBSM可被用于該子通道的指示。在步驟226,程序接收具有子通道QDIO數(shù)據(jù)的結(jié)束操作。
在步驟228,采用在CHSC響應(yīng)數(shù)據(jù)中被返回的信息,在主存儲器中由程序來創(chuàng)建QDIO隊列。QDIO隊列包括描述隊列的數(shù)據(jù)結(jié)構(gòu)以及用于數(shù)據(jù)傳輸?shù)木彌_區(qū)存儲器塊。在一個例子中,共同描述隊列的特性并提供控制,以便允許在程序和適配器之間交換數(shù)據(jù)的多個單獨的數(shù)據(jù)結(jié)構(gòu)(被稱作隊列組件)包括,例如1.隊列信息塊(QIB)500(圖5)每個QDIO子通道定義一個QIB。QIB提供了與子通道相關(guān)聯(lián)的輸入和輸出隊列的集合的有關(guān)信息。通過此處說明的建立QDIO隊列命令,QIB的絕對地址被提供給QDIO適配器。QIB具有多個區(qū),包括例如下述部分,其中一些部分在圖5中示出(a)隊列格式(QFMT)該區(qū)包括一個無符號二進制整數(shù),其標(biāo)識了QDIO隊列的格式。
(b)實現(xiàn)相關(guān)的參數(shù)格式(PFMT)該區(qū)包括一個無符號二進制整數(shù),其標(biāo)識了實現(xiàn)相關(guān)的參數(shù)的內(nèi)容的格式。
(c)請求標(biāo)志(RFlags)該區(qū)包括請求標(biāo)志。一個標(biāo)志包括QDIO增強緩沖區(qū)狀態(tài)管理(QEBSM)允許。當(dāng)這個位在發(fā)出建立QDIO隊列CCW命令的時刻為1時,則指出為QEBSM啟動子通道的請求。
(d)適配器特性(AC)該區(qū)包括與適配器的能力有關(guān)的信息(就與子通道相關(guān)聯(lián)的輸入和輸出隊列的集合而言)。在建立QDIO隊列CCW命令被發(fā)出但未被適配器檢查之前,由程序?qū)⒃揂C區(qū)設(shè)置為0。
在建立QDIO隊列CCW命令的執(zhí)行期間,由適配器來設(shè)置該區(qū),并且該區(qū)被設(shè)置為指出在成功完成該命令之前適配器所支持的值。在一個例子中,位0-1的含義如下位 含義0 輸入隊列中斷請求支持當(dāng)是0時,位0指出適配器不支持用于輸入隊列的SBAL的SBALF0區(qū)(下面所述)中的中斷請求位。
當(dāng)是1時,位0指出適配器支持SBAL的SBALF0區(qū)中的中斷請求位。
1 輸出隊列中斷請求支持當(dāng)是0時,位1指出適配器不支持用于輸出隊列的SBAL的SBALF0區(qū)中的中斷請求位。不給出報告適配器在關(guān)聯(lián)的輸出隊列上的處理的中斷。
當(dāng)是1時,位1指出適配器支持SBAL的SBALF0區(qū)中的中斷請求位。
(e)第一輸入存儲器列表信息塊(SLIB)地址502該區(qū)包括用于QIB被與其關(guān)聯(lián)的子通道的最高優(yōu)先權(quán)輸入隊列SLIB的邏輯地址。
(f)第一輸出SLIB地址504該區(qū)包括用于QIB被與其關(guān)聯(lián)的子通道的最高優(yōu)先權(quán)輸出隊列SLIB的邏輯地址。
(g)適配器標(biāo)識符該區(qū)包括程序分配給用于子通道(QIB被與其關(guān)聯(lián))的QDIO適配器的名稱。
(h)實現(xiàn)相關(guān)的參數(shù)該區(qū)包括一個或多個實現(xiàn)相關(guān)的參數(shù)。
2.存儲器列表信息塊(SLIB)506為每個隊列定義一個SLIB。SLIB提供了與隊列以及在保存數(shù)據(jù)中可用的每個隊列緩沖區(qū)有關(guān)的信息。通過建立QDIO隊列命令,SLIB的絕對地址被提供給QDIO適配器。
在一個例子中,存儲器列表信息塊包括以下區(qū),其中的一些區(qū)在圖5中示出(a)下一個存儲器列表信息塊地址508如果對于同一子通道,存在用于相同類型的QDIO隊列(輸入或輸出)的其他更低優(yōu)先權(quán)的SLIB,則該區(qū)包括該SLIB的邏輯地址。
(b)存儲器列表地址510該區(qū)包括被稱作存儲器列表的控制塊的邏輯地址。存儲器列表包括存儲器塊地址列表(SBAL)的絕對地址。每個SBAL包括最多例如16個存儲器塊(例如,頁)的絕對地址。能夠使用單個SBAL中的地址被定位的存儲器塊的集合被稱作QDIO緩沖區(qū)。
(c)存儲器列表狀態(tài)塊地址(SLSB)512當(dāng)QIB RFlags區(qū)中的增強QDIO緩沖區(qū)狀態(tài)管理允許指示器是0時,該區(qū)包括存儲器列表狀態(tài)塊(SLSB)的邏輯地址。
3.存儲器列表(SL)514為每個隊列定義一個SL。SL包括例如128個表項,與隊列關(guān)聯(lián)的每個QDIO I/O緩沖區(qū)一個表項。SL提供了關(guān)于I/O緩沖區(qū)在主存儲器中的位置的信息。每個表項包括存儲器塊地址列表516的絕對地址,并且每個SBAL包括共同構(gòu)成與該隊列相關(guān)聯(lián)的128個數(shù)據(jù)緩沖區(qū)中的一個緩沖區(qū)的存儲器塊的絕對地址列表。
通過建立QDIO隊列命令,存儲器列表的絕對地址被提供給QDIO適配器。
4.存儲器列表狀態(tài)塊(SLSB)或存儲器列表狀態(tài)注銷(SLSL)518當(dāng)QDIO子通道被允許增強的QDIO管理操作時,為每個隊列定義一個SLSL,并且對于程序存儲之外的每個隊列,還存在相應(yīng)的SLSB。SLSL長度為128字節(jié),并且包括SLSB的注銷(無論何時Signal Adapter-由標(biāo)記注銷(SIGA-lt)被執(zhí)行時或當(dāng)隊列被從適配器解散時作出)。SLSB包括128個表項520,被稱作SQBN(隊列緩沖區(qū)N的狀態(tài)),與隊列相關(guān)聯(lián)的128個I/O緩沖區(qū)中的每個緩沖區(qū)一個表項。每個表項提供了關(guān)于其關(guān)聯(lián)的I/O緩沖區(qū)的狀態(tài)信息。本文中說明的設(shè)置QDIO緩沖區(qū)狀態(tài)和提取QDIO緩沖區(qū)狀態(tài)指令被用于訪問SLSB中的狀態(tài)信息。作為例子,所述狀態(tài)指出緩沖區(qū)是程序擁有還是適配器擁有的,以及緩沖區(qū)是輸出緩沖區(qū)還是輸入緩沖區(qū)。
通過建立QDIO隊列命令,存儲器列表狀態(tài)塊的絕對地址被提供給QDIO適配器。
5.存儲器塊地址列表(SBAL)522為與每個隊列關(guān)聯(lián)的128個I/O緩沖區(qū)中的每一個緩沖區(qū)定義一個SBAL。SBAL為I/O緩沖區(qū)提供關(guān)于存儲器塊(SB)位置的信息。
存儲器塊地址列表包括16個被稱為存儲器塊地址列表表項(SBALE)524的表項。每個SBALE包括存儲器塊526的絕對存儲地址。由單個SBAL的表項尋址的存儲器塊共同構(gòu)成QDIO隊列的128個可能的QDIO緩沖區(qū)中的一個緩沖區(qū)。
在一個例子中,存儲器塊地址列表表項包括(a)標(biāo)志該區(qū)包括關(guān)于SBALE內(nèi)容的信息。
(b)虛擬化標(biāo)志當(dāng)安裝了QDIO增強緩沖區(qū)狀態(tài)管理解釋工具時,該區(qū)包括虛擬化信息。對該區(qū)的更改應(yīng)在QSD鎖定字的控制下被串行化。在一個例子中,該區(qū)的位0表示已釘住頁指示器。當(dāng)位0是1時,對應(yīng)于數(shù)據(jù)地址區(qū)中的數(shù)據(jù)地址的主機頁為此SBALE被釘住。當(dāng)位0是0時,對應(yīng)于數(shù)據(jù)地址區(qū)中的數(shù)據(jù)地址的主機頁沒有為此SBALE被釘住。
(c)SBAL標(biāo)志(SBALF)該區(qū)包括與包含該SBALE的SBAL相關(guān)聯(lián)的緩沖區(qū)有關(guān)的信息,并不只是關(guān)于與該SBALE相關(guān)聯(lián)的存儲器塊。在一個例子中,位0指出當(dāng)緩沖區(qū)處于程序擁有狀態(tài),或是接著返回程序擁有狀態(tài)時,在為該緩沖區(qū)執(zhí)行下一個SQBS操作之前將為該緩沖區(qū)執(zhí)行EQBS操作。位1指出當(dāng)緩沖區(qū)處于程序擁有狀態(tài),或是接著返回程序擁有狀態(tài)時,作為為該緩沖區(qū)執(zhí)行的下一個EQBS操作的一部分,該SBAL及其對應(yīng)的客戶SBAL將被同步。緩沖區(qū)同步可以包括從對應(yīng)的主機SBALE來更新客戶SBALE,并且還可以包括解除主機頁的釘住。
(d)數(shù)據(jù)計數(shù)該區(qū)包括一個無符號二進制整數(shù),該整數(shù)指定了要在數(shù)據(jù)地址區(qū)中指定的地址開始處讀或?qū)懙臄?shù)據(jù)的字節(jié)數(shù)。
(e)數(shù)據(jù)地址該區(qū)包括存儲器塊(包括將被寫(輸出隊列)的數(shù)據(jù))的絕對地址或?qū)⒈蛔x(輸入隊列)的數(shù)據(jù)的地址。
6.存儲器塊(SB)526定義了從1到16個單獨存儲器塊(例如頁),它們共同定義了單個I/O緩沖區(qū)。
在標(biāo)題為“Method And Apparatus For Providing ConfigurationInformation Using A Queued Direct Input-Output Device”(“使用排隊直接輸入/輸出設(shè)備來提供配置信息的方法和裝置”,Markos等人,2003年2月11日公開,其全部內(nèi)容在此引入作為參考)的美國專利No.6,519,645以及在標(biāo)題為“Method And Apparatus For Simulation Of Data In AVirtual Environment Using A Queued Direct Input-Output Device”(“在虛擬環(huán)境中使用排隊直接輸入-輸出設(shè)備來模擬數(shù)據(jù)的方法和裝置”,Brice等人,2002年2月5日公開,其全部內(nèi)容在此引入作為參考)的美國專利No.6,345,241中提供了關(guān)于QDIO隊列的其他詳細(xì)信息。
返回圖2a,在創(chuàng)建隊列之后,在步驟230,如果子通道支持QEBSM,則QIB中的QEBSM允許位被設(shè)置,以便使用QEBSM來管理連接。
此后,在步驟232,在適配器中建立QDIO隊列。作為一個例子,這通過程序發(fā)出帶有建立QDIO隊列通道命令字的啟動子通道指令來完成,在標(biāo)題為“Self-contained Queues With Associated Control Information ForReceipt And Transfer Of Incoming And Outgoing Data Using A QueuedDirect Input-output Device”(“用于使用排隊直接輸入-輸出設(shè)備來接收和傳輸進入和外出數(shù)據(jù)的具有關(guān)聯(lián)控制信息的自足隊列”,Baskey等人,2001年12月18日公布,其全部內(nèi)容在此引入作為參考)的美國專利No.6,332,171中說明了進行這種處理的一個例子。
建立QDIO隊列命令被用于將隊列描述符記錄(QDR)寫到I/O設(shè)備。與I/O設(shè)備相關(guān)聯(lián)的控制單元(例如,適配器)使用隊列描述符記錄中的信息來定位被用于建立具有優(yōu)先權(quán)的數(shù)據(jù)隊列的QDIO控制塊。隨后這些隊列被用于向I/O設(shè)備或從I/O設(shè)備直接傳輸數(shù)據(jù)。
在步驟234,建立過程使主機為由程序建立的隊列在主機存儲器中創(chuàng)建一組影子QDIO隊列。即,主機建立某些QDIO控制結(jié)構(gòu)的影子版本,這些QDIO控制結(jié)構(gòu)包括例如存儲器列表和存儲器塊地址列表。同時,由于SLSB被定義為程序和適配器協(xié)同處理的控制機制,雖然它不包含地址,SLSB也被在主存儲器中分配。與建立QDIO隊列命令相關(guān)聯(lián)的隊列描述符記錄包括如程序所見的QDIO隊列組件的主存儲器地址。主機在建立其自己的隊列描述符記錄和影子SL和SBAL的拷貝時,對這些地址以及SL和SBAL中的地址進行轉(zhuǎn)換。關(guān)于與QDR相關(guān)聯(lián)的建立影子和處理的其他詳細(xì)信息被包括在其全部內(nèi)容在此引入作為參考的上述美國專利中。
在創(chuàng)建影子隊列之后,在步驟236,如果在QIB中QEBSM允許位被設(shè)置,則主機在主機存儲器中創(chuàng)建一個被稱為QDIO緩沖區(qū)信息控制塊(QBICB)的結(jié)構(gòu),以便將客戶和主機的影子QDIO隊列映射到機器。QBICB包括描述客戶和主機結(jié)構(gòu)的指針和信息。其與QDIO子通道相關(guān)聯(lián),以便當(dāng)該子通道被標(biāo)識為SQBS和EQBS的運算對象時(如下面所述),客戶和主機結(jié)構(gòu)可以被定位和使用。參考圖6a-6b說明了關(guān)于QBICB的其他詳細(xì)信息。
QDIO緩沖區(qū)信息控制塊(QBICB)600(圖6a)包括關(guān)于QDIO數(shù)據(jù)隊列集合的緩沖區(qū)存儲和緩沖區(qū)狀態(tài)的信息,并且被用于將緩沖區(qū)存儲和緩沖區(qū)狀態(tài)與給定的QDIO子通道相關(guān)聯(lián)。例如,在主機的實際或絕對存儲器中,它是一個以雙字邊界開始并具有64字節(jié)的最小長度的變長控制塊。如其隊列計數(shù)區(qū)所指定的那樣,QBICB的大小由其描述的隊列的數(shù)目來確定(即,由它包括的隊列描述符的數(shù)目來確定)。
在一個例子中,QBICB 600包括以下區(qū)(a)隊列格式(QFMT)602該區(qū)包括一個無符號二進制整數(shù)代碼值,該代碼值標(biāo)識了隊列描述符的格式和由該隊列描述符的內(nèi)容尋址的控制塊的格式。作為例子,格式0表示OSA直接表達(dá)隊列,格式1表示光纖通道協(xié)議(FCP)隊列,并且格式2表示內(nèi)部排隊直接通信隊列。
(b)隊列計數(shù)(QCNT)604該區(qū)包括一個無符號整數(shù),該整數(shù)指定了由QBICB描述的輸入和輸出隊列的總的計數(shù)。
(c)子系統(tǒng)ID 606該區(qū)包括與QBICB相關(guān)聯(lián)的QDIO子通道的子系統(tǒng)ID。
(d)隊列描述符(多個)608隊列描述符是例如一個16字節(jié)的結(jié)構(gòu),并且在一個實施例中QBICB可以包括多至64個隊列描述符。每個隊列描述符包括隊列存儲器描述符的地址,所述隊列存儲器描述符被用于為一個QDIO輸入或輸出隊列來描述緩沖區(qū)狀態(tài)和緩沖區(qū)數(shù)據(jù)存儲器。
用于輸入隊列(如果有)的隊列描述符被連續(xù)地列出。用于輸出隊列(如果有)的隊列描述符在用于輸入隊列的隊列描述符的列表之后被連續(xù)地列出。QCNT區(qū)中的值指定了隊列描述符的總數(shù)。
QBICB隊列描述符包括隊列存儲器描述符起始地址區(qū),該區(qū)以及被附加在右側(cè)的7個0為相應(yīng)的隊列指定了隊列存儲器描述符的64位主機實際或絕對地址。
隊列存儲器描述符是例如一個128字節(jié)的結(jié)構(gòu),其包括與用于相應(yīng)的隊列的主機和客戶緩沖區(qū)存儲器有關(guān)的信息。在一個例子中,隊列存儲器描述符620(圖6b)包括下面的區(qū)(a)鎖定字622鎖定字區(qū)是例如一個32位的區(qū),它是用于隊列存儲器描述符和有效請求頭部FOB列表(在下面說明)的互鎖控制。取決于其預(yù)定的值,鎖定字值可以具有下面含義中的一種含義可用與鎖關(guān)聯(lián)的結(jié)構(gòu)可由機器或主機使用;為機器鎖定機器已經(jīng)獲得了鎖和對相關(guān)聯(lián)的結(jié)構(gòu)的所有權(quán);由機器為主機鎖定機器遇到了需要來自主機的服務(wù)的情況,并且已經(jīng)將對鎖和相關(guān)聯(lián)的結(jié)構(gòu)的所有權(quán)傳遞給了主機;以及由主機為主機鎖定主機已經(jīng)獲得了鎖和對相關(guān)聯(lián)的結(jié)構(gòu)的所有權(quán)。
(b)隊列標(biāo)志(QFlags)624該區(qū)包括例如8位的標(biāo)志區(qū)。
標(biāo)志的例子包括位 含義0 隊列/緩沖區(qū)類型當(dāng)位0是0時,隊列是輸入隊列。當(dāng)位0是1時,隊列是輸出隊列。
1 未決請求組件FOB列表完成當(dāng)位1是1時,由第一個有效請求頭部FOB地址區(qū)標(biāo)識的FOB是一個多緩沖區(qū)請求的頭部FOB,對于它來說,請求組件FOB列表是不完整的,并且仍然在被構(gòu)造。
(c) SLSB地址626該區(qū)包括與相應(yīng)的隊列關(guān)聯(lián)的存儲器列表狀態(tài)塊(SLSB)的主機實際或絕對地址。
(d) 主機SL地址628該區(qū)包括與相應(yīng)的隊列關(guān)聯(lián)的主機存儲器列表(SL)的主機實際或絕對地址。由該地址指定的SL可以被適配器觀察到。
(e) 客戶SL地址630該區(qū)包括與相應(yīng)的隊列關(guān)聯(lián)的客戶存儲器列表(SL)的客戶絕對地址。由該地址指定的SL不能被適配器觀察到。
(f) 客戶SLSL地址632該區(qū)包括與相應(yīng)的隊列關(guān)聯(lián)的存儲器列表狀態(tài)注銷(SLSL)區(qū)域的客戶絕對地址。
(g) 狀態(tài)轉(zhuǎn)換計數(shù)634該區(qū)包括對由程序觀察到的(通過提取QDIO緩沖區(qū)狀態(tài)指令)從適配器擁有狀態(tài)到程序擁有狀態(tài)的緩沖區(qū)狀態(tài)轉(zhuǎn)換數(shù)目的無符號整數(shù)計數(shù)。
(h) 字節(jié)傳輸計數(shù)636該區(qū)包括對由適配器傳輸?shù)淖止?jié)數(shù)目的無符號整數(shù)計數(shù)。對于光纖通道協(xié)議(FCP)隊列,字節(jié)傳輸計數(shù)不是實際傳輸?shù)淖止?jié)的計數(shù)。而是對指定將被傳輸?shù)淖止?jié)的計數(shù)。
(i) 第一個有效請求頭部FCP操作塊(FOB)地址638當(dāng)QBICB中的QFMT區(qū)指定隊列是格式1隊列(即,F(xiàn)CP)并且該區(qū)的預(yù)定位(帶有被附加在右側(cè)的8個0)不形成該區(qū)的第一個字節(jié)的主機實際或絕對地址時,作為一個例子,該區(qū)的預(yù)定位(帶有被附加在右側(cè)的8個0)形成有效FCP請求列表中的第一個FCP請求的頭部FOB的主機實際或絕對地址(即,有效請求頭部FOB列表中的第一個FCP請求的頭部FOB的地址)。當(dāng)QBICB中的QFMT區(qū)指定隊列是格式1隊列并且預(yù)定位(帶有被附加在右側(cè)的8個0)形成該區(qū)的第一個字節(jié)的主機實際或絕對地址時,作為一個例子,不存在有效FCP請求并且有效請求頭部FOB列表為空。
(j)最后的有效請求頭部FOB地址640當(dāng)QBICB中的QFMT區(qū)指定隊列是格式1隊列并且該區(qū)的預(yù)定位(帶有被附加在右側(cè)的8個0)不形成區(qū)638的第一個字節(jié)的主機實際或絕對地址時,作為一個例子,該區(qū)的預(yù)定位(帶有被附加在右側(cè)的8個0)形成有效FCP請求列表中的最后一個FCP請求的頭部FOB的64位主機實際或絕對地址(即,有效請求頭部FOB列表中的最后一個FCP請求的頭部FOB的地址)。當(dāng)QBICB中的QFMT區(qū)指定隊列是格式1隊列并且該區(qū)的預(yù)定位(作為一個例子,帶有被附加在右側(cè)的8個0)形成區(qū)638的第一個字節(jié)的主機實際或絕對地址時,不存在有效FCP請求并且有效請求頭部FOB列表為空。光纖通道協(xié)議操作塊(FOB)描述了在FCP I/O操作期間被釘在主機頁幀中的多至例如16個的主機頁。在一個例子中,F(xiàn)CP操作塊(FOB)648(圖6c)包括下面的區(qū)(a)下一個請求頭部FOB地址650如果FOB是有效請求頭部FOB,該區(qū)以及被附加在右側(cè)的8個0形成了有效請求頭部FOB列表中的下一個FCP請求的頭部FOB的主機實際或絕對地址,或者如果該FOB是有效請求頭部FOB列表中的最后的頭部FOB,則形成QSD中的第一個有效請求頭部FOB地址區(qū)的頭部FOB的主機實際或絕對地址。如果該FOB在可用FOB列表中并且該區(qū)不是0,則該區(qū)以及被附加在右側(cè)的8個0形成可用FOB列表中的下一個FOB的主機實際或絕對地址。如果該FOB在可用FOB列表中并且該區(qū)是0,則該FOB是可用FOB列表中的最后的FOB。如果該FOB是除頭部FOB之外的請求組件FOB,則該區(qū)的內(nèi)容沒有意義。
(b)前一個請求頭部FOB地址652如果該FOB是有效請求頭部FOB,則該區(qū)以及被附加在右側(cè)的8個0形成了有效請求頭部FOB列表中的前一個FCP請求的頭部FOB的主機實際或絕對地址,或者如果該FOB是有效請求頭部FOB列表中的第一個頭部FOB,則形成QSD中的第一個有效請求頭部FOB地址區(qū)的頭部FOB的主機實際或絕對地址。如果該FOB在可用FOB列表中或是除頭部FOB之外的請求組件FOB,則該區(qū)的內(nèi)容沒有意義。
(c)下一個請求組件FOB地址654如果該FOB是請求組件FOB并且該區(qū)不是0,則該區(qū)以及被附加在右側(cè)的8個0形成了請求組件FOB列表中的下一個FOB的主機實際或絕對地址。如果該FOB是請求組件FOB并且該區(qū)是0,則該FOB是請求組件FOB列表中的最后的FOB或是僅有的FOB。
(d)隊列存儲器描述符(QSD)地址656如果該FOB是頭部FOB,則該區(qū)以及被附加在右側(cè)的7個0形成了輸出隊列的隊列存儲器描述符的主機實際或絕對地址,用于請求的頭部FOB被從所述輸出隊列排隊。
(e)QDIO緩沖區(qū)信息控制塊(QBICB)地址658如果該FOB是頭部FOB,則該區(qū)以及被附加在右側(cè)的3個0形成與子通道(FCP操作對于其有效)關(guān)聯(lián)的QDIO緩沖區(qū)信息控制塊的主機實際或絕對地址。
(f)客戶請求ID 660如果FOB是頭部FOB,則該區(qū)包括由其SBAL中的客戶指定的FCP請求id。
(g)標(biāo)志662當(dāng)FOB是頭部FOB時,該區(qū)包括例如一個8位的標(biāo)志區(qū)。這些位和它們的含義的例子包括,例如1)位0-請求有效位0指出該頭部FOB在有效請求頭部FOB列表中,并且代表一個有效的FCP請求;2)位1-構(gòu)造完成位1指出包括FCP請求的緩沖區(qū)已經(jīng)被處理,并且完成了所述FCP請求的構(gòu)造;3)位2-請求ID已投遞位2指出適配器已經(jīng)投遞了用于所述請求的FCP請求描述符;4)位3-4存儲器塊類型位3-4為由FOB及其相應(yīng)SBAL所描述的格式1輸出緩沖區(qū)指定存儲器塊類型。位3-4與相應(yīng)的SBAL中的SBALF0區(qū)的位3-4具有相同的值和含義。
(h)頁表表項(PTE)計數(shù)(PTECNT)664該區(qū)包括有意義的PTE地址數(shù)組表項的計數(shù)。
(i)PTE地址666該區(qū)包括一個0-16個PTE地址區(qū)的數(shù)組。
每個PTE地址區(qū)的位以及被附加在右側(cè)的3個0形成PTE的主機實際或絕對地址,其為FOB所屬的請求被釘住。
各FOB可以彼此鏈接以形成各種列表。一種列表是可用FOB列表。當(dāng)FOB已被由主機分配并且未被用于QDIO操作時,它駐留在可用FOB列表(AFOBL)中。在一個例子中,為每個處理器提供一個單獨的可用FOB列表??捎肍OB列表中的各FOB被使用下一個請求頭部FOB地址區(qū)來單獨地鏈接。列表中的最后一個表項在其下一個請求頭部FOB地址區(qū)中被指定為0值??捎肍OB列表的起始地址和可用FOB列表中的各FOB的計數(shù)由CPU前置區(qū)域中的各區(qū)來指定。
另一種列表是請求組件FOB列表,它包括構(gòu)成單個有效FCP請求的一個或多個FOB。請求組件FOB列表中的FOB的數(shù)目對應(yīng)于FCP請求中的SBAL的數(shù)目。請求組件FOB列表中的第一個FOB是頭部FOB,并且被用于表示有效請求頭部FOB列表中的有效請求的存在。
對于單個SBAL(即,單個緩沖區(qū))FCP請求,請求組件列表由頭部FOB組成。在頭部FOB被構(gòu)造之后,它被放置在有效請求頭部FOB列表的開頭,并且FOB的標(biāo)志區(qū)中的構(gòu)造完成和請求有效指示器都被設(shè)置為1,以便指出完成了整個FCP請求的構(gòu)造,并且請求是有效的。
對于一個多SBAL(即多緩沖區(qū))FCP請求,相應(yīng)于包括該請求的每個SBAL來構(gòu)造一個FOB。被構(gòu)造的第一個FOB成為頭部FOB。頭部FOB被添加到有效請求頭部FOB列表的開頭,并且在它被構(gòu)造之后,F(xiàn)OB的標(biāo)志區(qū)中的請求有效位被設(shè)置為1,以便指出請求是有效的。其余的請求組件FOB的列表的錨(anchor)保存在頭部FOB中。
其余的FOB被添加到請求組件FOB列表,并且從頭部FOB開始被使用下一個請求組件FOB地址區(qū)來單獨地鏈接。列表中的最后的FOB在其下一個請求組件FOB地址區(qū)中被指定為0值。在最后的FOB被添加到列表之后,頭部FOB的標(biāo)志區(qū)中的構(gòu)造完成指示器被設(shè)置為1,以便指出完成了整個FCP請求的構(gòu)造,并且請求是有效的。
包括頭部FOB的請求組件FOB列表中的各FOB被看作請求組件FOB。
另一種列表是有效請求頭部FOB列表。當(dāng)FCP請求是有效的時,該請求的頭部FOB在有效請求頭部FOB列表中。有效請求頭部FOB列表是使用下一個請求頭部FOB地址和前一個請求頭部FOB地址區(qū)的雙重鏈接列表。有效請求頭部FOB列表的錨是用于該隊列的隊列存儲器描述符中的第一個有效請求頭部FOB地址和最后的有效請求頭部FOB地址區(qū)。該列表中的第一個表項由以下兩個值來指定頭部FOB的前一個請求頭部FOB地址區(qū)中的隊列存儲器描述符的第一個有效請求頭部FOB地址區(qū)的地址值,以及該隊列存儲器描述符的第一個有效請求頭部FOB地址中的第一個表項的頭部FOB的地址值。該列表的最后一個表項由以下兩個值來指定頭部FOB的下一個請求頭部FOB地址區(qū)中的隊列存儲器描述符的第一個有效請求頭部FOB地址區(qū)的地址值,以及隊列描述符的最后的有效請求頭部FOB地址中的最后表項的頭部FOB的地址值。
回到圖2a,在創(chuàng)建QBICB之后,在步驟238,由主機向機器發(fā)出啟動子通道指令(帶有建立QDIO隊列通道命令字),以便將用于正在被建立的連接的影子QDIO隊列的位置通知給適配器。在步驟240,機器將建立QDIO隊列命令發(fā)送到適配器,并且在步驟242,主機等待完成(圖2b)。在步驟244,機器發(fā)出I/O完成中斷,在步驟246,由主機接收該中斷,其反應(yīng)了虛擬I/O完成中斷。在步驟248,由程序200接收用于建立QDIO隊列命令的I/O完成中斷。
此后,在步驟250,程序獲取用于QEBSM連接的子通道標(biāo)記和管理該連接所需的(或所希望的)SIGA的類型。在一個例子中,這是通過發(fā)出上面所述的CHSC存儲子通道QDIO數(shù)據(jù)命令來完成的。
在步驟252,主機將QBICB與所述子通道關(guān)聯(lián)。在一個例子中,通過發(fā)出設(shè)置通道子系統(tǒng)特性命令來完成這種關(guān)聯(lián)。CHSC設(shè)置通道子系統(tǒng)特性命令基于用于該命令的命令請求塊的操作碼來設(shè)置所選擇的通道子系統(tǒng)控制。
參考圖7a說明了命令請求塊700的一個例子。該請求塊包括,例如
(a)長度區(qū)702該區(qū)指定了命令請求塊的長度。
(b)命令碼704該區(qū)指定了設(shè)置通道子系統(tǒng)特性命令。
(c)操作碼(OC)706該區(qū)包括一個值,該值指定了要被執(zhí)行的操作。作為一個例子,為0的OC指定設(shè)置適配器設(shè)備控制操作。執(zhí)行該設(shè)置適配器設(shè)備控制操作要求為指定的子通道允許并設(shè)置指定的適配器設(shè)備控制,或為子通道禁止指定的適配器設(shè)備控制。適配器設(shè)備控制是,例如·設(shè)備狀態(tài)改變指示器的地址;·用于設(shè)備狀態(tài)改變指示器的存儲器保護關(guān)鍵字;·適配器本地概要指示器的地址;·用于適配器本地概要指示器的存儲器保護關(guān)鍵字;·中斷子類碼;·客戶中斷子類碼;以及·QBICB的起始地址。
(d)格式(FMT)708命令請求格式區(qū)包括一個無符號整數(shù),該整數(shù)的值指定了命令請求塊的布局。該區(qū)的值的一個例子是0。
(e)操作數(shù)據(jù)區(qū)域710命令請求塊的這個區(qū)域可以被操作使用。操作數(shù)據(jù)區(qū)域的數(shù)據(jù)格式特定于每個操作碼。
作為一個例子,設(shè)置適配器設(shè)備控制操作的操作數(shù)據(jù)區(qū)域包括,例如,將參考圖7b說明的下面的區(qū)(a)適配器本地概要指示器(ALSI)地址720該區(qū)包括在用于指定子通道的存儲器中的適配器本地概要指示器字節(jié)的絕對地址。
(b)設(shè)備狀態(tài)改變指示器(DSCI)地址722該區(qū)包括在用于指定子通道的存儲器中的設(shè)備狀態(tài)改變指示器字節(jié)的絕對地址。
(c)適配器本地概要指示器關(guān)鍵字(KS)724該區(qū)包括存儲器訪問關(guān)鍵字,所述存儲器訪問關(guān)鍵字用于訪問指定子通道的適配器本地概要指示器字節(jié)。
(d)設(shè)備狀態(tài)改變指示器關(guān)鍵字(KC)726該區(qū)包括存儲器訪問關(guān)鍵字,所述存儲器訪問關(guān)鍵字用于訪問指定子通道的設(shè)備狀態(tài)改變指示器字節(jié)。
(e)中斷子類碼(IS)732該區(qū)包括一個無符號整數(shù),其指定了將被用于控制允許適配器中斷的中斷子類碼。
(f)子系統(tǒng)標(biāo)識(SID)734該區(qū)包括一個無符號整數(shù),其指定了一個子系統(tǒng)ID,該子系統(tǒng)ID標(biāo)識了為其設(shè)置適配器本地概要指示器和設(shè)備狀態(tài)改變指示器地址的子通道。
(g)QDIO緩沖區(qū)信息控制塊(QBICB)起始地址736該區(qū)被用于形成QBICB的絕對地址。當(dāng)該區(qū)指定了一個不是0的有效地址,并且QBICB沒有被指定跨4K字節(jié)邊界時,指定的QBICB被與指定的子通道相關(guān)聯(lián),并且該子通道被允許QDIO增強緩沖區(qū)狀態(tài)管理解釋。當(dāng)該區(qū)包括0并且指定的子通道被與QBICB關(guān)聯(lián)時,子通道被從該QBICB解除關(guān)聯(lián),并且該子通道被禁止QDIO增強緩沖區(qū)狀態(tài)管理操作。當(dāng)該區(qū)包含無效地址時,可以存儲一個響應(yīng)碼。當(dāng)該區(qū)指定了一個不是0的有效地址,并且QBICB被指定跨4K字節(jié)邊界時,QBICB說明是無效的,并且可以存儲一個響應(yīng)碼。
當(dāng)在操作數(shù)據(jù)區(qū)域中提供了一個有效的非0QBICB起始地址時,設(shè)備還被與指定的QBICB關(guān)聯(lián),并被允許QDIO增強緩沖區(qū)狀態(tài)管理解釋。當(dāng)在操作數(shù)據(jù)區(qū)域中提供為0的QBICB起始地址時,如果設(shè)備與一個QBICB相關(guān)聯(lián),則它被從該QBICB解除關(guān)聯(lián)。
參考圖7c說明了用于設(shè)置通道子系統(tǒng)特性命令的命令響應(yīng)塊740的一個例子。該響應(yīng)塊包括,例如(a)長度區(qū)742該區(qū)指定了命令響應(yīng)塊的長度。
(b)響應(yīng)碼744該區(qū)包括一個無符號整數(shù),該整數(shù)描述了嘗試執(zhí)行設(shè)置通道子系統(tǒng)特性命令的結(jié)果。
成功的響應(yīng)碼指出指定的通道子系統(tǒng)特性已經(jīng)如命令請求塊中的操作碼和操作數(shù)據(jù)區(qū)域確定的那樣被設(shè)置。當(dāng)除了成功之外的響應(yīng)碼被存儲時,該命令被禁止,并且指定的通道子系統(tǒng)特性沒有被設(shè)置。
(c)格式746該區(qū)包括一個無符號整數(shù),該整數(shù)的值指定了命令響應(yīng)塊的布局。
返回圖2b,在步驟254,機器處理設(shè)置通道子系統(tǒng)特性指令,并且信息被傳遞回主機。
此外,在步驟256,主機獲取程序所需的最新的QDIO特性。在一個例子中,這是使用此處說明的存儲子通道QDIO數(shù)據(jù)命令來完成的。在步驟258,由機器處理存儲子通道QDIO數(shù)據(jù)指令,并且將信息傳遞回主機。
在步驟260,主機指出QEBSM被允許,并且返回如子通道標(biāo)記和SIGA在程序的CHSC響應(yīng)數(shù)據(jù)中所要求的QBICB的主機絕對地址。在步驟262程序接收用于連接的子通道標(biāo)記和特性。
此后,在步驟264,程序借助返回的子通道標(biāo)記使用SQBS指令將QDIO緩沖區(qū)初始化為適當(dāng)?shù)膯訝顟B(tài)。在步驟266,由機器處理在下面說明的SQBS指令,并且將信息傳遞回程序。
此外,在步驟268,由程序發(fā)出啟動子通道命令(帶有有效的QDIO隊列通道命令字),以便激活用于數(shù)據(jù)傳輸?shù)年犃?。在?biāo)題為“Self-contained Queues With Associated Control Information For ReceiptAnd Transfer Of Incoming And Outgoing Data Using A Queued DirectInput-output Device”(“用于使用排隊直接輸入-輸出設(shè)備來接收和傳輸進入和外出數(shù)據(jù)的具有關(guān)聯(lián)控制信息的自足隊列”,Baskey等人,2001年12月18日公布,其全部內(nèi)容在此引入作為參考)的美國專利No.6,332,171中說明了與該命令相關(guān)聯(lián)的處理的一個例子。在步驟270,主機接收此啟動子通道命令并發(fā)出啟動子通道命令(帶有有效的QDIO隊列通道命令字)以通知適配器,以便激活用于數(shù)據(jù)傳輸?shù)年犃小H缓笤诓襟E272,機器將有效的QDIO隊列發(fā)送給適配器。在步驟274,當(dāng)請求被啟動時,可以開始QDIO數(shù)據(jù)傳輸。
作為QDIO數(shù)據(jù)傳輸?shù)囊徊糠?,客戶程序管理QDIO緩沖區(qū)狀態(tài)。根據(jù)本發(fā)明的一個方面,為了執(zhí)行這個任務(wù)實現(xiàn)了兩個指令。一個指令被稱為設(shè)置QDIO緩沖區(qū)狀態(tài)(SQBS)指令,另一個被稱為提取QDIO緩沖區(qū)狀態(tài)(EQBS)指令。這些指令允許將V=V虛擬機(客戶)QDIO隊列與這些隊列的主機影子拷貝動態(tài)地同步。由機器在客戶執(zhí)行期間在沒有主機干預(yù)的情況下執(zhí)行動態(tài)隊列同步。因此,客戶對設(shè)置QDIO緩沖區(qū)狀態(tài)和提取QDIO緩沖區(qū)狀態(tài)指令的使用消除了以前為保持客戶QDIO隊列和主機影子QDIO隊列同步而產(chǎn)生的環(huán)境轉(zhuǎn)換開銷。
參考圖8a-8c說明了使用設(shè)置QDIO緩沖區(qū)狀態(tài)指令的一個實施例。在調(diào)用設(shè)置QDIO緩沖區(qū)狀態(tài)指令之前,將進行某些初始化。例如,在步驟800(圖8a),主機執(zhí)行各種清除任務(wù),包括例如刪除和處理已處理幀描述符列表上的幀。
已處理幀描述符列表(PFDL)是幀描述符的列表,其描述了在客戶解釋過程中已經(jīng)被用于解決主機頁無效狀態(tài)的主機頁幀。由PFDL描述的主機頁幀被分配給為客戶提供存儲的主機頁。由在指定的主機實際地址處的PFDL起始地址(PFDLO)來指定PFDL。PFDLO的內(nèi)容以及被附加在右側(cè)的5個0指定了PFDL上的第一個幀描述符的主機本地空間虛擬地址。0值指出該列表為空。
PFDLO由主機來初始化,并且可以通過主機或主機頁管理輔助功能(此處說明的)來更改。在一個實施例中,借助維護列表完整性的雙字并發(fā)互鎖更新操作來更改PFDLO。
幀描述符描述主機頁幀,并且多個幀描述符可以彼此鏈接以形成諸如PFDL或可用幀描述符列表(AFDL)之類的列表。幀描述符由主機來分配、取消分配和初始化,并且可以由主機頁管理輔助功能(此處說明的)來更新。在一個例子中,幀描述符900(圖9)是例如駐留在主機本地空間虛擬存儲器中32字節(jié)邊界上的32字節(jié)塊,并且包括下面的區(qū)(a)下一個幀描述符地址902在一個例子中,該區(qū)的內(nèi)容以及被附加在右側(cè)的5個0,指定了該列表上的下一個幀描述符的主機本地空間虛擬地址。為0的值指出該幀描述符是列表上的最后一個幀描述符。
該區(qū)由主機來初始化,并且可以由主機或由主機頁管理輔助功能來更改。
(b)頁幀實際地址或PTE拷貝904當(dāng)幀描述符在可用幀描述符列表(AFDL)內(nèi)時,該區(qū)的內(nèi)容以及被附加在右側(cè)的12個0,指定了可用于分配以便提供主機存儲器的主機頁幀的第一個字節(jié)(字節(jié)0)的主機實際地址。
當(dāng)幀描述符在已處理幀描述符列表(PFDL)中時,如在主機頁被解決之前所見的,該區(qū)包括由頁表表項地址區(qū)指定的頁表表項(PTE)的拷貝。
該區(qū)由主機初始化,并且可以由主機或由主機頁管理輔助功能更改。
(c)頁表表項地址906當(dāng)幀描述符在已處理幀描述符列表中時,該區(qū)的內(nèi)容以及被附加在右側(cè)的3個0,指定了用于主機虛擬頁的頁表表項的主機實際或主機絕對地址。
該區(qū)由主機初始化,并且可以由主機或由主機頁管理輔助功能更改。
回到圖8a,除了執(zhí)行清除之外,在步驟802,主機確保在可用幀描述符列表上有足夠的幀以便為接著幾個主機存儲器請求提供服務(wù)。可用幀描述符列表(AFDL)是幀描述符的列表,它描述了主機使得可用于進行主機頁分配的主機幀。AFDL由指定主機實際地址處的AFDL起始地址(AFDLO)來指定。
AFDLO的內(nèi)容以及被附加在右側(cè)的5個0,指定了AFDL上的第一個幀描述符的主機本地空間虛擬地址。為0的值指出該列表為空。
AFDLO由主機來初始化,并且可以由主機或由主機頁管理輔助功能來更改。AFDLO借助非互鎖的更新操作來更改。
幀描述符存在于兩種列表中的一種列表中已處理幀描述符列表(PFDL)或可用幀描述符列表(AFDL)。為每個CPU提供單獨一對這些列表。借助CPU前置區(qū)域中的區(qū)來指定用于CPU的AFDL和PFDL的起始地址。
此后,在步驟804,主機可以啟動程序的解釋執(zhí)行(SIE)。響應(yīng)于啟動解釋執(zhí)行,程序開始執(zhí)行,并且在執(zhí)行過程中,在步驟806,選擇要傳輸給適配器的下一個QDIO緩沖區(qū)。在步驟808,程序以將在數(shù)據(jù)傳輸中使用的存儲器塊的程序絕對地址來填充SBAL。進而,在步驟810,程序通過發(fā)出設(shè)置QDIO緩沖區(qū)狀態(tài)指令將QDIO緩沖區(qū)的狀態(tài)從程序擁有改為適配器擁有,來將緩沖區(qū)的所有權(quán)傳輸給適配器。參考圖10說明了設(shè)置QDIO緩沖區(qū)狀態(tài)指令的格式的一個例子。設(shè)置QDIO緩沖區(qū)狀態(tài)指令1000包括操作碼1002,在這個例子中,它是一個分裂操作碼,指定了設(shè)置QDIO緩沖區(qū)狀態(tài)指令;多個通用寄存器1004,諸如R1和R3;以及由B2、DL2和DH2指定的第二運算對象1006。
使用設(shè)置QDIO緩沖區(qū)狀態(tài)指令,通用寄存器(由R1和R3區(qū)指定)所指定的一個或多個QDIO輸入隊列或輸出隊列緩沖區(qū)的狀態(tài)被設(shè)置為由第二運算對象指定的狀態(tài)。操作繼續(xù)進行直到指定的緩沖區(qū)狀態(tài)被設(shè)置,或是直到由CPU所確定的數(shù)目的緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置為止(無論哪個首先發(fā)生)。結(jié)果在狀態(tài)碼中指出。
通用寄存器1包括子通道標(biāo)記,該標(biāo)記指定允許QDIO增強緩沖區(qū)狀態(tài)管理(QEBSM)并且將對其一個或多個緩沖區(qū)狀態(tài)進行設(shè)置的QDIO子通道。(在QDIO子通道被允許QEBSM之后,通過CHSC存儲子通道QDIO數(shù)據(jù)命令來獲得子通道標(biāo)記。)由R1區(qū)指定的通用寄存器包括對QDIO隊列和第一個緩沖區(qū)(將對其狀態(tài)進行設(shè)置)的說明。當(dāng)該指令被發(fā)出時,由R1區(qū)指定的通用寄存器包括下面的區(qū)(a)隊列索引(QIX)該區(qū)包括一個無符號整數(shù)索引值,該值指定了包含將對其狀態(tài)進行設(shè)置的緩沖區(qū)的隊列。如果該隊列是輸入隊列,則隊列索引等于隊列的輸入隊列號。如果隊列是輸出隊列,則隊列索引等于隊列的輸出隊列號加上已建立的輸入隊列的總數(shù)的和。該區(qū)的值將指定現(xiàn)有的隊列(即,隊列索引值不超過已建立的輸入隊列的總數(shù)加上已建立的輸出隊列的總數(shù)的和減1);否則,在一個例子中,狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。
(b)緩沖區(qū)號(BNUM)該區(qū)包括一個無符號整數(shù),該整數(shù)指定了將對其狀態(tài)進行設(shè)置的第一個緩沖區(qū)的號碼。
由R3區(qū)指定的通用寄存器包括將對其狀態(tài)進行設(shè)置的緩沖區(qū)的數(shù)目的計數(shù)。R3寄存器還包括一個狀態(tài)碼限定符區(qū),當(dāng)指令完成時,該區(qū)與所述狀態(tài)碼的設(shè)置一起被設(shè)置。當(dāng)指令被發(fā)出時,由R3區(qū)指定的通用寄存器包括下面的區(qū)(a)狀態(tài)碼限定符(CCQ)當(dāng)指令被發(fā)出時,該區(qū)的內(nèi)容沒有意義。當(dāng)指令完成時,該區(qū)包括一個當(dāng)狀態(tài)碼被設(shè)置時對其進行設(shè)置的狀態(tài)碼限定符(CCQ)碼。下面的列表包括可能的CCQ。
·所有指定的緩沖區(qū)狀態(tài)被設(shè)置。
·當(dāng)前指定的緩沖區(qū)處于適配器擁有狀態(tài)。該緩沖區(qū)的狀態(tài)沒有改變。
·自從狀態(tài)最后從適配器擁有改變?yōu)槌绦驌碛袪顟B(tài)以來,當(dāng)前指定的緩沖區(qū)狀態(tài)沒有被提取QDIO緩沖區(qū)狀態(tài)指令提取。該緩沖區(qū)的狀態(tài)沒有改變。
·用于當(dāng)前指定的隊列的存儲器列表(SL)的地址是無效的。
·用于當(dāng)前指定的緩沖區(qū)的存儲器緩沖區(qū)地址列表(SBAL)的地址是無效的。
·用于當(dāng)前指定的緩沖區(qū)的存儲器塊(SB)的地址是無效的。
·在指定的緩沖區(qū)中存在SBAL序列錯誤。
·指定的子通道不可運行。
·指定的子通道標(biāo)記沒有指定一個允許QEBSM的有效子通道。
·沒有為指定的子通道建立指定的隊列。
·指定的緩沖區(qū)號無效。
·指定的緩沖區(qū)計數(shù)無效。
·指定的緩沖區(qū)狀態(tài)既不是適配器擁有也不是程序擁有狀態(tài),或者指定的緩沖區(qū)狀態(tài)既是適配器擁有又是程序擁有狀態(tài)。
·CPU確定的數(shù)目的緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置。
(b)計數(shù)該區(qū)包括一個無符號整數(shù),該整數(shù)指定了將對其狀態(tài)進行設(shè)置的緩沖區(qū)的計數(shù)。在一個例子中,該區(qū)的值要大于0并且小于或等于128;否則,將設(shè)置狀態(tài)碼和狀態(tài)碼限定符。
作為一個例子,緩沖區(qū)號空間在0到127的范圍內(nèi)。計數(shù)值結(jié)合R1BNUM值,可以指定緩沖區(qū)號空間中的繞回(wrap around)。
第二運算對象地址沒有被用于地址數(shù)據(jù)。而是,第二運算對象地址的最右側(cè)8個位以存儲器列表狀態(tài)塊(SLSB)緩沖區(qū)狀態(tài)指示器的形式指定了將被設(shè)置的QDIO緩沖區(qū)狀態(tài)。如果第二運算對象地址指定了一個既不是適配器擁有也不是程序擁有狀態(tài)的狀態(tài),或者第二運算對象指定了一個既是適配器擁有也是程序擁有狀態(tài)的狀態(tài)(即,如果所指定的狀態(tài)的位0和位1相等),則設(shè)置狀態(tài)碼,并且以預(yù)先指定的值來設(shè)置R3狀態(tài)碼限定符。
用于設(shè)置QDIO緩沖區(qū)狀態(tài)的操作單元包括設(shè)置一個緩沖區(qū)狀態(tài)、將R3寄存器中的計數(shù)區(qū)遞減1以及將R1寄存器中的緩沖區(qū)號區(qū)遞增1。如果遞增緩沖區(qū)號區(qū)使得緩沖區(qū)號超過最大緩沖區(qū)號127,則在緩沖區(qū)號空間中發(fā)生繞回,并且緩沖區(qū)號被重置為0。
當(dāng)下面任一情況先發(fā)生時,指令操作完成·當(dāng)R3計數(shù)區(qū)中指定的緩沖區(qū)狀態(tài)的計數(shù)已經(jīng)被設(shè)置,并且沒有遇到錯誤或異常狀態(tài)時。在這種情況下,狀態(tài)碼和R3狀態(tài)碼限定符區(qū)被設(shè)置。
·當(dāng)遇到異常狀態(tài)并且沒有、某些或全部指定的緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置時。在這種情況下,狀態(tài)碼被設(shè)置并且使用一個值來設(shè)置R3狀態(tài)碼限定符區(qū)以便指出異常。以已經(jīng)被設(shè)置的緩沖區(qū)狀態(tài)的數(shù)目來遞減R3寄存器中的計數(shù)區(qū),并且以相同的數(shù)目來遞增R1寄存器中的緩沖區(qū)號(BNUM)區(qū),且繞回通過0(如果需要)。因此,如果R3寄存器中的計數(shù)區(qū)是0,則指定的緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置。如果該計數(shù)區(qū)不是0,則R1隊列索引(QIX)和存儲器號(BNUM)區(qū)標(biāo)識出當(dāng)遇到異常狀態(tài)時正被處理的緩沖區(qū)。
·當(dāng)遇到錯誤狀態(tài),并且沒有指定的緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置時。在這種情況下,設(shè)置狀態(tài)碼,并且使用一個值來設(shè)置R3狀態(tài)碼限定符區(qū)以便指出錯誤。
·當(dāng)CPU確定的數(shù)目的指定緩沖區(qū)狀態(tài)已經(jīng)被設(shè)置,而沒有設(shè)置緩沖區(qū)狀態(tài)的總的指定計數(shù)時。在這種情況下,狀態(tài)碼和R3狀態(tài)碼限定符區(qū)被設(shè)置。以已經(jīng)被設(shè)置的緩沖區(qū)狀態(tài)的數(shù)目來遞減R3寄存器中的計數(shù)區(qū),并且以同樣的數(shù)目來遞增R1寄存器中的緩沖區(qū)號(BNUM)區(qū),且繞回通過0(如果需要)。
在指定的緩沖區(qū)狀態(tài)被設(shè)置之前和之后,執(zhí)行串行化和檢查點同步功能。
設(shè)置QDIO緩沖區(qū)狀態(tài)指令的執(zhí)行不改變包含在子通道中的任何信息,也不使I/O子系統(tǒng)向適配器發(fā)送信號,并且也不改變程序存儲器中的任何緩沖區(qū)狀態(tài)信息。
參考圖8a-8c說明了與執(zhí)行SQBS指令相關(guān)聯(lián)的處理。除非發(fā)生異常狀態(tài),有利地,由機器執(zhí)行指令。如果發(fā)生了這種異常狀態(tài),則由主機完成所述處理,其中主機執(zhí)行被列于機器之下的剩余的步驟。
參考圖8a,響應(yīng)于發(fā)出SQBS指令,在步驟812,機器執(zhí)行主機允許檢查以便判定主機是否允許客戶使用QEBSM工具。在步驟814,如果QEBSMI允許控制(例如,在客戶狀態(tài)中)被設(shè)置為0,指出不允許,則在步驟816,將由主機而不是機器來完成所述處理。當(dāng)在設(shè)置QDIO緩沖區(qū)狀態(tài)解釋的過程中遇到一個狀態(tài),需要來自主機的某些活動或服務(wù),或是指令阻斷或是部分執(zhí)行阻斷(PEI)被識別,使用設(shè)置QDIO緩沖區(qū)狀態(tài)指令文本來設(shè)置阻斷參數(shù),并且對于PEI,在客戶狀態(tài)中設(shè)置QEBSM-PEI參數(shù)。
接著,在步驟818,機器執(zhí)行子通道判定。在一個例子中,SQBS子通道標(biāo)記被用于定位包含有標(biāo)識所述子通道的SID的QBICB。作出關(guān)于子通道標(biāo)記是否與存儲在由QBICB指定的子通道中的標(biāo)記相匹配的判定。如果不匹配,則在步驟820由主機完成處理。否則由機器繼續(xù)處理。
更詳細(xì)地,當(dāng)設(shè)置QDIO緩沖區(qū)狀態(tài)指令(以及向適配器發(fā)送信號指令或提取QDIO緩沖區(qū)狀態(tài)指令)被執(zhí)行時,在通用寄存器1中的子通道標(biāo)記被用于指定子通道。該標(biāo)記被用于判定指定的子通道是否允許QDIO增強緩沖區(qū)狀態(tài)管理解釋,并且被用于確定所述子通道的子系統(tǒng)id。在一個例子中,用于作出這些判定的步驟包括(1)當(dāng)子通道被允許QDIO增強緩沖區(qū)狀態(tài)管理解釋時,寄存器1中的子通道標(biāo)記被用作與該子通道相關(guān)聯(lián)的QDIO緩沖區(qū)信息控制塊(QBICB)的主機實際或絕對地址。如果當(dāng)引用該QBICB時存在訪問異常狀態(tài),則客戶指令被禁止并且指令阻斷被識別;否則處理繼續(xù)。
(2)QBICB的子系統(tǒng)id區(qū)指定了要使用的子系統(tǒng)。如果QBICB的子系統(tǒng)id區(qū)不包含有效的子系統(tǒng)id,則客戶指令被禁止并且指令阻斷被識別;否則處理繼續(xù)。這允許例如主機處理模擬設(shè)備的操作或處理追蹤能力。
(3)如果由QBICB子系統(tǒng)id區(qū)指定的子通道沒有被允許QEBSMI或是沒有與由所述子通道標(biāo)記指定的QBICB相關(guān)聯(lián),則客戶指令被禁止并且指令阻斷被識別;否則處理繼續(xù)。
接著,在步驟821,由機器作出關(guān)于SQBS運算對象是否有效的判定。作為例子,緩沖區(qū)號被驗證。在一個例子中,如果R1緩沖區(qū)號區(qū)指定了大于127的值,則指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。此外,計數(shù)值被驗證。如果R3計數(shù)區(qū)指定了0值或大于128的值,則指令被再次完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。此外,對指定的緩沖區(qū)狀態(tài)的有效性進行檢查。如果由第二運算對象地址指定的緩沖區(qū)狀態(tài)指定了一個同時為適配器擁有和程序擁有的狀態(tài),或指定了一個既不是適配器擁有也不是程序擁有的狀態(tài),則該指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。進而,用于指定隊列的隊列存儲器描述符被定位。如果R1隊列索引區(qū)大于或等于QBICB隊列計數(shù)區(qū)中的值,則沒有為所述子通道建立指定的隊列并且指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。否則,R1隊列索引區(qū)的值被用作QBICB隊列描述符數(shù)組中的索引以便確定隊列描述符地址。
假如上面的任何一個測試失敗,則處理完成,并且在步驟822狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。否則處理繼續(xù)。
在客戶狀態(tài)中的間隔完成指示器被設(shè)置為1,并且執(zhí)行串行化和檢查點同步功能。在機器故障的情況下,該指示器通知主機主機控制結(jié)構(gòu)可能處于有問題的狀態(tài)。
接著,在步驟824為指定的隊列進行獲得隊列存儲器描述符鎖的嘗試。為指定的隊列從QBICB隊列描述符中的隊列存儲器地址區(qū)中獲取隊列存儲器描述符地址。使用互鎖更新操作進行嘗試以便將QSD鎖定字值從可用改變?yōu)楸粰C器鎖定。如果QSD地址為0或當(dāng)嘗試設(shè)置該鎖定字時存在訪問異常狀態(tài),則一個有效性阻斷被識別并且設(shè)置有效性阻斷原因碼。
如果互鎖更新操作失敗,可以對這個操作進行取決于模型的次數(shù)的重試。如果QSD鎖定字不能被設(shè)置為由機器值鎖定,則在步驟826部分執(zhí)行阻斷被識別,返回給主機程序的QEBSM-PEI參數(shù)項中的部分執(zhí)行原因碼被設(shè)置為(例如)1,并且由主機完成處理。如果互鎖更新操作成功,則處理繼續(xù)。
下面的邏輯被重復(fù)由SQBS指令上的計數(shù)區(qū)指定的QDIO緩沖區(qū)的數(shù)目。初始地,在步驟828,用于要處理的QDIO緩沖區(qū)的SQBN和SBAL被定位。在一個例子中,用于指定隊列的主機存儲器列表被定位。即,從隊列存儲器描述符中的主機存儲器列表地址區(qū)取回主機存儲器列表地址。然后,定位指定的隊列存儲器列表狀態(tài)塊。從隊列存儲器描述符中的SLSB地址區(qū)取回該地址。要設(shè)置的第一個SLSB表項(SQBN)被定位。R1緩沖區(qū)號(BNUM)區(qū)的值被用作SLSB中的索引以便確定要設(shè)置的第一個SQBN的地址。如果在訪問SQBN時存在訪問異常狀態(tài),則有效性阻斷被識別并且有效性阻斷原因碼被設(shè)置。
此后,在步驟830,作出關(guān)于指定的緩沖區(qū)是否當(dāng)前被程序擁有的判定。在一個例子中,通過檢查SQBN作出該判定。如果不是,則在步驟832,處理完成并且在設(shè)置狀態(tài)碼和狀態(tài)碼限定符。否則,在步驟834,處理繼續(xù),機器作出關(guān)于指定的緩沖區(qū)的狀態(tài)是否需要被提取的判定(圖8b)。如果狀態(tài)需要被通過例如EQBS指令提取,則在步驟836,處理完成并且設(shè)置狀態(tài)碼和狀態(tài)碼限定符。如果指定緩沖區(qū)的狀態(tài)不需要被提取,則在步驟838,程序SBAL的內(nèi)容被復(fù)制到主機的SBAL。此外,在步驟840,在主機的SBAL中設(shè)置緩沖區(qū)同步和EQBS操作所需的位。
進而,在步驟842,對于具有有效存儲器塊的每個有意義的主機SBALE,執(zhí)行下面的功能(1)在步驟844,從主機SBALE取回程序絕對(主機虛擬)存儲器塊地址;(2)在步驟846,調(diào)用下面說明的HPMA釘住功能以便在存儲器中轉(zhuǎn)換并釘住頁。在步驟848,如果HPMA釘住功能沒有成功,則在步驟850,由主機完成處理。否則由機器繼續(xù)處理;(4)在步驟852,由HPMA釘住返回的存儲器塊的主機絕對地址被移動到主機的SBALE中;以及(5)在步驟854,主機的SBAL中的已釘住頁指示器被設(shè)置(圖8c)。
此后,在步驟856,緩沖區(qū)的SQBN被設(shè)置為由SQBS指令指定的適配器擁有狀態(tài)。在一個例子中,該狀態(tài)由第二運算對象指定。另外,在步驟858,SQBS緩沖區(qū)號(BNUM)遞增1,并且在步驟860,SQBS計數(shù)區(qū)遞減1。
在步驟862,作出關(guān)于SQBS計數(shù)是否等于0的判定。假如SQBS計數(shù)不等于0,則在步驟828處理繼續(xù),定位要被處理的QDIO緩沖區(qū)的SQBN和SBAL(圖8a)。然而,如果SQBS計數(shù)等于0,則在步驟864,處理繼續(xù),解鎖QSD鎖(圖8c)。如果成功,在步驟866,成功指示被轉(zhuǎn)發(fā)給程序。
如果這是在此刻要傳輸?shù)淖詈蟮腝DIO緩沖區(qū),則在步驟868,發(fā)出適當(dāng)?shù)腟IGA指令功能,以便向適配器發(fā)信號I/O請求未決,例如,對于輸出操作為SIGA-wt,或者當(dāng)輸入可供適配器后續(xù)使用時為SIGA-rt。
注意,如果SQBS處理必須由主機完成,則主機(而不是機器)向程序給出適當(dāng)?shù)慕Y(jié)束操作。
在對SQBS指令的說明中,引用了主機頁管理輔助(HPMA)。根據(jù)本發(fā)明的一個方面,主機頁管理輔助包括可以由其它CPU工具在可分頁存儲客戶的解釋過程中調(diào)用的4個輔助功能。這些功能包括釘住功能、解決主機頁功能、由虛擬地址解除主機頁釘住功能以及由PTE地址解除主機頁釘住功能,下面將說明每一個功能。
從SQBS指令調(diào)用的HPMA釘住功能為CPU提供了這樣的能力指出主機頁的內(nèi)容被釘在主機頁幀內(nèi)。當(dāng)頁需要駐留在單個指令的執(zhí)行之外(例如,在I/O操作期間)時,頁可以被釘住。當(dāng)頁處于被釘住狀態(tài)時,這是給主機的指示,指示該頁無資格進行頁失效。當(dāng)頁被成功地由釘住主機頁功能釘住時,與該頁關(guān)聯(lián)的已釘住頁計數(shù)器可以被遞增。
在一個例子中,增量(delta)已釘住頁計數(shù)器數(shù)組(DPPCA)是一個例如31位有符號整數(shù)已釘住頁計數(shù)器的數(shù)組,當(dāng)頁被成功地釘住時,所述計數(shù)器之一可以通過釘住主機頁功能來遞增。進而,當(dāng)頁被成功地解除釘住時,DPPCA計數(shù)器之一可以通過由虛擬地址解除主機頁釘住功能或者由PTE地址解除主機頁釘住功能(在下面說明)來遞減。在一種實現(xiàn)中,DPPCA中的一個計數(shù)器被與駐留在給定大小(例如2GB)之下的主機實際存儲器中的頁相關(guān)聯(lián),并且其它計數(shù)器被與駐留在該大小或高于該大小的主機實際存儲器中的頁相關(guān)聯(lián)。
主機將每個頁分類為類0頁或類1頁,并且相應(yīng)地為該頁在頁狀態(tài)表表項(PGSTE)中設(shè)置頁分類指示器。參考圖11a說明了頁狀態(tài)表表項1100的一個例子,頁狀態(tài)表表項1100包括例如下列內(nèi)容(a)Acc 1102訪問控制關(guān)鍵字;(b)FP 1104取回保護指示器;(c)頁控制互鎖(PCL)1106這是用于串行化對頁表表項(PTE)和相應(yīng)PGSTE(除被標(biāo)記為保留的PGSTE狀態(tài)區(qū)域和PGSTE位之外)的更新的互鎖控制。
(d)HR 1108主機引用備份指示器;(e)HC 1110主機改變備份指示器;(f)GR 1112客戶引用備份指示器;(g)GC 1114客戶改變備份指示器;(h)頁內(nèi)容邏輯0指示器(Z)1116當(dāng)為1時,由該PGSTE和相應(yīng)的PTE描述的頁的內(nèi)容被看作0。該頁的任何先前內(nèi)容不必被保留,并且可以被是0的頁替代。
當(dāng)為0時,由該PGSTE和相應(yīng)的PTE描述的頁的內(nèi)容不被看作0。該頁的內(nèi)容將被保留并且不應(yīng)被替換。
當(dāng)相應(yīng)的PTE頁無效(PTE.I)位為1時,這個位有意義。
1當(dāng)Z位是1并且相應(yīng)的PTE.I位(在下面說明)是1時,頁內(nèi)容可以由主機或主機頁管理輔助功能來替換。
2當(dāng)Z位是1,相應(yīng)的PTE.I位是1,并且頁內(nèi)容被替換時,應(yīng)通過將頁與被設(shè)置為0的幀關(guān)聯(lián)來替換頁。
(i)頁分類(PC)1118當(dāng)為0時,由PGSTE和相應(yīng)的PTE描述的頁為類0頁,并且用于類0頁的增量已釘住頁計數(shù)數(shù)組(DPPCA)被用于計數(shù)該頁的釘住和解除釘住操作。當(dāng)是1時,由PGSTE和相應(yīng)的PTE描述的頁為類1頁,并且類1頁的DPPCA被用于計數(shù)該頁的釘住和解除釘住操作。
(j)釘住計數(shù)溢出(PCO)1120當(dāng)為1時,釘住計數(shù)區(qū)處于溢出狀態(tài)。當(dāng)為0時,釘住計數(shù)區(qū)沒有處于溢出狀態(tài)。在這種情況下,總的釘住計數(shù)由主機保存在不被機器訪問的另一個數(shù)據(jù)結(jié)構(gòu)中。
(k)已處理幀描述符列表(FPL)上的幀描述符1122當(dāng)為1時,由PGSTE和相應(yīng)的PTE描述的頁的幀描述符在已處理幀描述符列表中。幀描述符標(biāo)識了由用于頁的HPMA解決主機頁功能所使用的主機頁幀。
(1)已請求頁內(nèi)容替換(PCR)1124當(dāng)是1時,當(dāng)為由PGSTE和相應(yīng)的PTE表示的頁調(diào)用HPMA解決主機頁功能時,頁內(nèi)容替換被請求。
(m)釘住計數(shù)1126為無符號二進制整數(shù),用于指出由PGSTE和相應(yīng)的PTE表示的主機虛擬頁的內(nèi)容是否被釘在由PTE的頁幀實際地址區(qū)所指定的實際主機頁幀中。當(dāng)該區(qū)的值大于0或頁計數(shù)溢出(PCO)位是1時,相應(yīng)的頁被認(rèn)為是被釘住的。當(dāng)該區(qū)的值是0并且PCO位為0時,相應(yīng)的頁被認(rèn)為沒有被釘住。
在頁被主機或CPU釘住時,該區(qū)應(yīng)遞增1。在頁被主機或CPU解除釘住時,該區(qū)應(yīng)遞減1。
當(dāng)釘住計數(shù)區(qū)的值大于0或PCO位為1時,相應(yīng)的PTE.I(頁無效)位要為0。否則,可能發(fā)生不可預(yù)知的結(jié)果。
當(dāng)頁被釘住時,主機程序不應(yīng)更改PTE頁幀實際地址(PRFA)區(qū)的內(nèi)容、PTE頁無效(I)位的設(shè)置或者PTE或段表表項(STE)中的頁保護(P)位的設(shè)置。否則,可能發(fā)生不可預(yù)知的結(jié)果。
PGSTE對應(yīng)于一個頁表表項(PTE),參考圖11b說明了它的一個例子。頁表表項1150包括,例如(a)頁幀實際地址1152該區(qū)提供了實際存儲器地址的最左邊的位。當(dāng)這些位被與右側(cè)的虛擬地址的字節(jié)索引區(qū)連接成串時,可以獲得實際地址。
(b)頁無效指示器1154該區(qū)控制與頁表表項相關(guān)聯(lián)的頁是否可用。當(dāng)該指示器為0時,通過使用頁表表項進行地址轉(zhuǎn)換。當(dāng)該指示器為1時,頁表表項不能被用于轉(zhuǎn)換。
(c)頁保護指示器1156該區(qū)控制是否允許對頁進行存儲訪問。
在標(biāo)題為“z/Architecture Principles of Operation”(“z/Architecture運行原理”,IBM出版物No.SA22-7832-02,2003年6月,其全部內(nèi)容在此引入作為參考)的IBM出版物中提供了關(guān)于頁表表項和頁表以及此處提到的段表表項的進一步的詳細(xì)信息。
繼續(xù)對DPPCA的討論,單獨的DPPCA被與每個用于類0釘住頁計數(shù)的虛擬配置相關(guān)聯(lián),并且由所述虛擬配置的每個描述中的類0DPPCA起始地址區(qū)來指定。存在用于類1釘住頁計數(shù)的單獨的DPPCA,并且由前置區(qū)域中的類1DPPCA起始地址區(qū)來指定。
DPPCA不受關(guān)鍵字控制的保護或低地址保護。在一個例子中,它是一個在雙字邊界上被分配的8字節(jié)控制塊,并且包括,例如,用于小于特定大小(例如2GB)的頁幀實際地址的增量已釘住頁計數(shù),和用于大于或等于該大小的頁幀實際地址的增量已釘住頁計數(shù)。互鎖更新操作被用于改變這個區(qū),以便維護其內(nèi)容的準(zhǔn)確性。當(dāng)頁成功地由釘住主機頁功能釘住時,增量已釘住頁計數(shù)器可以被遞增。
當(dāng)釘住主機頁功能被調(diào)用時,下面的數(shù)據(jù)被輸入該功能將被釘住的主機虛擬地址(頁);標(biāo)識分配給客戶的地址空間的有效主機地址空間控制元素(ASCE)和要使用的轉(zhuǎn)換表;對該頁是否被為取回或存儲操作釘住的指示;以及頁內(nèi)容替換指示器。
參考圖12說明了與釘住主機頁功能關(guān)聯(lián)的邏輯的一個實施例。初始地,在步驟1200,定位用于頁的PTE/PGSTE對。例如,使用ASCE和將被釘住的虛擬地址(頁),主機存儲器中的用于將被釘住的該虛擬地址的頁表表項和頁狀態(tài)表表項的位置被確定。
在步驟1202,被定位的PTE/PGSTE對被使用例如互鎖更新操作來鎖定,以便將PGSTE中的頁控制鎖指示器從0更改為1。在詢問1204,如果所述對不能被鎖定,或者如果頁控制互鎖(PCL)已經(jīng)為1,則在步驟1206指出失敗。否則處理繼續(xù),在詢問1208,判定用于頁的釘住計數(shù)在下一個釘住時是否將溢出(即,如果PGSTE中的釘住計數(shù)區(qū)的值為一個預(yù)定的值(例如,255))。如果是的,則在步驟1206,處理以失敗結(jié)束。否則在步驟1210,用于將被釘住的虛擬頁的PTE被取回。
接著,在詢問1212,作出關(guān)于該頁是否被保護并且正在被為存儲操作釘住的判定。即,在步驟1206,如果輸出指示用于存儲操作,并且用于該頁的段表表項或者頁表表項中的頁保護位是1,則指出失敗。否則,處理繼續(xù),在詢問1214判定該頁是否無效。如果該頁無效,則在步驟1216調(diào)用解決主機頁功能(如下所述)。如果在詢問1217,解決主機頁功能失敗,則在步驟1206釘住功能失敗。然而,如果解決成功,或如果該頁不是無效的,則在步驟1218,釘住計數(shù)被遞增。
隨后,在詢問1220,作出關(guān)于釘住狀態(tài)是否正在被從解除釘住更改為釘住狀態(tài)的判定。如果是的,在步驟1222,關(guān)聯(lián)的增量已釘住頁計數(shù)(即,基于頁分類和PFRA所選擇的計數(shù))遞增1。即,如果釘住計數(shù)現(xiàn)在是1并且釘住計數(shù)不處于溢出狀態(tài)(PGSTE.PCL=0),則頁狀態(tài)已經(jīng)從解除釘住狀態(tài)轉(zhuǎn)換為釘住狀態(tài)。在這種情況下,增量已釘住頁計數(shù)被遞增1。此后,或者如果頁狀態(tài)沒有正在被從解除釘住狀態(tài)更改為釘住狀態(tài),則在步驟1224,PTE/PGSTE對被解鎖。例如,PGSTE中的頁控制互鎖位被設(shè)置為0,并且處理成功完成。
當(dāng)釘住主機頁功能退出且指示成功時,指定的頁被釘住,并且還可能已經(jīng)通過調(diào)用解決主機頁功能而被解決。在這種情況下,用于該頁的頁計數(shù)已經(jīng)在狀態(tài)表中由機器遞增,并且主機轉(zhuǎn)換表可能也已經(jīng)由機器更新,先前的對傳遞控制給主機以便進行頁釘住和解決的要求被減輕了。
當(dāng)頁主機釘住功能退出且指示失敗時,對轉(zhuǎn)換和狀態(tài)表沒有作出永久的更改,并且當(dāng)識別到失敗時,由釘住功能設(shè)置的任何頁控制的互鎖位被重置。在這種情況下,機器就像沒有調(diào)用該功能一樣,并且主機將被給予控制以便處理所述失敗。
如上所述,如果將被釘住的頁無效,則調(diào)用解決主機頁功能。當(dāng)條件允許時,解決主機頁功能利用主機提供的可由CPU使用的可用主機頁幀的列表,以便動態(tài)地解決主機頁無效狀態(tài)。該功能還提供了一種手段,借助該手段,通過被指配給特定的主機頁,已經(jīng)被用于解決主機頁無效狀態(tài)的任何主機頁幀被通知給主機。
如果主機頁管理輔助被允許,則為主機頁調(diào)用解決主機頁功能,并且描述該頁的頁表表項中的頁無效位(PTE.I)為1,然后主機已使其成為可用的主機頁幀中的一個主機頁幀被用于動態(tài)地解決主機頁無效狀態(tài)。
解決主機頁功能的輸入包括可用幀描述符列表、將被解決的虛擬地址(頁)、標(biāo)識所述地址空間的有效地址空間控制元素(ASCE)和將被使用的轉(zhuǎn)換表、頁內(nèi)容替換指示器、對間隔完成指示器是否已經(jīng)由調(diào)用者設(shè)置的指示、以及對PTE/PTSTE對的訪問是否已經(jīng)被調(diào)用者鎖定的指示。
參考圖13a-13b說明了與解決功能相關(guān)聯(lián)的邏輯的一個實施例。初始地,在詢問1300,作出關(guān)于是否存在任何可用幀的判定(圖13a)。通過例如檢查可用幀描述符列表是否為空來作出該判定。如果AFDLO指定了為0的地址(即,對于本地處理器沒有可用的主機頁幀),則沒有可用的幀,并且在步驟1302,處理退出并指出失敗。
然而,如果存在可用的幀,則在步驟1304,處理器繼續(xù),為所述頁定位PTE/PGSTE對。在一個例子中,ASCE和將被解決的虛擬地址(頁)被用于為將被解決的虛擬地址確定主機存儲器中的頁表表項和頁狀態(tài)表表項的位置。
此后,在步驟1306,從可用幀描述符列表中的第一個幀描述符取回頁幀實際地址。同時,如果尚未被指示為已經(jīng)由調(diào)用者建立,則間隔完成指示器被標(biāo)記,以便指出解決主機頁功能已經(jīng)開始,并且在步驟1308,串行化和檢查點同步功能也被執(zhí)行。
隨后,在步驟1310,PTE/PGSTE對被有條件地鎖定。如果解決主機頁功能表項狀態(tài)指出對相應(yīng)于將被解決的主機虛擬地址的PTE和PGSTE的訪問尚未被串行化,則嘗試使用互鎖更新操作來將PGSTE中的頁控制互鎖指示器(PGSTE.PCL)從0更改為1。如果在詢問1312,PTE/PGSTE對不能被鎖定或者如果PGSTE.PCL被發(fā)現(xiàn)已經(jīng)為1,則在步驟1302,處理以失敗退出。否則,在步驟1314,處理繼續(xù),為將被解決的虛擬頁取回PTE。在一個例子中,頁表表項被從主機存儲器同步地以塊取回。
此外,在詢問1316,作出關(guān)于頁是否需要被解決的判定。在一個例子中,通過檢查PTE中的有效指示器來作出此判定。如果PTE指出頁是有效的(PTE.I=0),則該頁被解決并且處理完成。然而,如果頁將被解決,則在詢問1318,作出關(guān)于該頁能否被解決的進一步的判定。例如,如果用于將被解決的虛擬頁的PGSTE指出頁內(nèi)容邏輯上不是0(PGSTE.Z=0)并且輸入頁內(nèi)容替換指示器指出該頁不能被替換,則在步驟1302,處理以失敗退出。然而,如果PGSTE中的頁內(nèi)容邏輯0指示器為1或解決主機頁功能表項狀態(tài)指出將被解決的主機虛擬頁的內(nèi)容可以被替換,則在步驟1320,可以作出解決該頁的嘗試并且處理繼續(xù)。
為了解決該頁,如參考圖13b所說明的執(zhí)行各個步驟。一個步驟(步驟1330)包括為頁設(shè)置存儲器關(guān)鍵字。例如,用于由幀描述符的頁幀實際地址區(qū)所標(biāo)識的主機幀的存儲器關(guān)鍵字被通過下面的步驟設(shè)置設(shè)置來自PGSTE.ACC的訪問控制位;設(shè)置來自PGSTE.FP的取回保護位;將引用指示器設(shè)置為0;以及將更改指示器設(shè)置為0。
此外,在步驟1332,幀描述符被從可用幀描述符列表中刪除。作為一個例子,使用非互鎖更新操作來從可用幀描述符列表中刪除所述幀描述符。該幀描述符的下一個幀描述符地址區(qū)的內(nèi)容替換AFDLO中的舊值。
接著,在步驟1334,幀分配被記錄。通過將PTE復(fù)制到幀描述符的PTE拷貝區(qū)中,主機虛擬頁的PTE被保留。此外,用于主機虛擬頁的PTE的地址被存儲器在幀描述符的頁表表項地址區(qū)中。
接著,在詢問1338,作出關(guān)于頁的內(nèi)容是否能夠被替換的判定。作為一個例子,通過檢查輸入頁內(nèi)容替換指示器作出此判定。如果輸入頁內(nèi)容替換指示器指出頁內(nèi)容可以被替換,則在步驟1340,PGSTE中的頁內(nèi)容替換指示器(PGSTE.PCR)被設(shè)置為1。這允許主機持續(xù)統(tǒng)計允許頁內(nèi)容替換的操作的數(shù)目。
此后,或者如果內(nèi)容沒有被替換,用于主機虛擬頁的PTE被更新以便刪除頁無效狀態(tài)。例如,并發(fā)存儲器操作使用所述幀描述符的頁幀實際地址區(qū)的內(nèi)容來替換頁表表項的頁幀實際地址區(qū)的內(nèi)容,并且在步驟1342,將該頁表表項中的頁無效位設(shè)置為0。PTE中的其它位保持不變。此外,在步驟1344,該幀描述符被添加到已處理列表中。這是通過互鎖更新操作執(zhí)行的。這完成了解決處理。
回到圖13a,在解決該頁之后,在步驟1322,PTE/PGSTE對被有條件地解鎖。例如,如果頁控制互鎖指示器被由該功能設(shè)置為1,則指示器被設(shè)置為0。
此外,如果由此功能設(shè)置了間隔完成指示器,則在步驟1324執(zhí)行串行化和檢查點同步功能,并且間隔完成指示器被重置。這完成了所述解決功能的處理。
當(dāng)解決功能退出且指示成功時,所指定的頁已經(jīng)被解決。在這種情況下,主機轉(zhuǎn)換表已經(jīng)由機器更新,并且先前的對傳遞控制給主機以便進行頁解決的要求被減輕了。
當(dāng)解決功能退出且指示失敗時,沒有對轉(zhuǎn)換表作出更改。在這種情況下,機器就像沒有調(diào)用該功能那樣,并且主機被給予控制以便處理所述失敗。
根據(jù)本發(fā)明的一個方面,除了SQBS指令之外,還實現(xiàn)了EQBS指令。作為例子,當(dāng)客戶從適配器接收到通知時,客戶發(fā)出提取QDIO緩沖區(qū)狀態(tài)指令,或是當(dāng)緩沖區(qū)狀態(tài)將被提取時,客戶主動發(fā)出該指令。參考圖14a-14c說明了與提取QDIO緩沖區(qū)狀態(tài)指令相關(guān)聯(lián)的邏輯的一個實施例。
在運行該程序之前,進行某些初始化。例如,在步驟1400,主機執(zhí)行各種清除任務(wù)(圖14a),包括例如刪除和處理已處理幀描述符列表上的幀。進而,在步驟1402,主機確保在可用幀描述符列表上存在足夠的幀。此后,在步驟1404,主機開始程序的解釋執(zhí)行。
在執(zhí)行過程中,在步驟1406,程序選擇它正等待適配器結(jié)束處理的下一個輸出QDIO緩沖區(qū)。然后在步驟1408,程序發(fā)出EQBS指令以便取得所選擇的緩沖區(qū)的當(dāng)前狀態(tài)。
參考圖15說明了EQBS指令的格式的一個例子。提取QDIO緩沖區(qū)狀態(tài)指令1500包括指定EQBS指令的操作碼1502;通用寄存器R1區(qū)1504;通用寄存器R3區(qū)1506;以及通用寄存器R2區(qū)1508;下面說明它們中的每一個。
借助提取QDIO緩沖區(qū)狀態(tài)指令,由R1和R3區(qū)指定的通用寄存器所指定的一個或多個相同狀態(tài)的QDIO輸入隊列或輸出隊列緩沖區(qū)的狀態(tài)被提取,并且以QDIO緩沖區(qū)狀態(tài)指示器的形式被裝入由R2區(qū)指定的通用寄存器??蛇x地,處于輸入緩沖區(qū)準(zhǔn)備好狀態(tài)的指定的緩沖區(qū)可以被更改為輸入緩沖區(qū)已確認(rèn)狀態(tài)。操作繼續(xù),直到指定的緩沖區(qū)使其公共狀態(tài)被提取為止,或是直到至少某些指定的緩沖區(qū)已使其公共狀態(tài)被提取并且下一個將被提取的緩沖區(qū)狀態(tài)不同于先前提取的那些狀態(tài)時為止,或是直到CPU確定的數(shù)目的緩沖區(qū)狀態(tài)已使其公共的狀態(tài)被提取為止,以先發(fā)生的為準(zhǔn)。結(jié)果在狀態(tài)碼中指出。
通用寄存器1包括子通道標(biāo)記,該標(biāo)記指定了被允許QDIO增強緩沖區(qū)狀態(tài)管理(QEBSM)并且將使其一個或多個緩沖區(qū)狀態(tài)被提取的QDIO子通道。
由R1區(qū)指定的通用寄存器包括對QDIO隊列和第一個緩沖區(qū)(其狀態(tài)將被提取)的說明。當(dāng)發(fā)出該指令時,由R1區(qū)指定的通用寄存器包括如下的區(qū)(a)隊列索引(QIX)該區(qū)包括一個無符號整數(shù)索引值,該值指定了包含其狀態(tài)將被提取的緩沖區(qū)的隊列。如果隊列是輸入隊列,則隊列索引等于該隊列的輸入隊列號。如果隊列是輸出隊列,則隊列索引等于該隊列的輸出隊列號加已建立的輸入隊列的總數(shù)的和。該區(qū)將指定存在的隊列(即,隊列索引值不超過已建立的輸入隊列的總數(shù)加已建立的輸出隊列的總數(shù)的和減1)。
(b)緩沖區(qū)號(BNUM)該區(qū)包括一個無符號整數(shù),該整數(shù)指定了其狀態(tài)將被提取的第一個緩沖區(qū)的號碼。在一個例子中,該區(qū)的值小于128。
由R3區(qū)指定的通用寄存器包括對其狀態(tài)將被提取的緩沖區(qū)的數(shù)目的計數(shù)。R3寄存器還包括當(dāng)該指令完成時隨著狀態(tài)碼的設(shè)置而被一起設(shè)置的狀態(tài)碼限定符。在一個例子中,當(dāng)該指令被發(fā)出時,由R3區(qū)指定的通用寄存器包括下面的區(qū)(a)狀態(tài)碼限定符(CCQ)當(dāng)所述指令被發(fā)出時,該區(qū)沒有意義。當(dāng)所述指令完成時,該區(qū)包括一個當(dāng)狀態(tài)碼被設(shè)置時被設(shè)置的無符號整數(shù)狀態(tài)碼限定符(CCQ)碼。狀態(tài)碼限定符的例子包括·所有指定的緩沖區(qū)狀態(tài)被提取。
·當(dāng)前指定的緩沖區(qū)的狀態(tài)與在該指令的執(zhí)行期間先前提取的那些狀態(tài)不同。該緩沖區(qū)的狀態(tài)不被提取。
·用于當(dāng)前指定的隊列的存儲器列表(SL)的地址無效。
·用于當(dāng)前指定的緩沖區(qū)的存儲器緩沖區(qū)地址列表(SBAL)的地址無效。
·用于當(dāng)前指定的緩沖區(qū)的存儲器塊(SB)的地址無效。
·指定的子通道不可操作。
·指定的子通道標(biāo)記沒有指定有效的允許QEBSM的子通道。
·沒有為指定的子通道建立指定的隊列。
·指定的緩沖區(qū)號無效。
·指定的緩沖區(qū)計數(shù)無效。
·CPU確定的數(shù)目的緩沖區(qū)狀態(tài)已經(jīng)被提取。
·CPU確定的數(shù)目的緩沖區(qū)存儲器塊已經(jīng)被處理,但是沒有完整的緩沖區(qū)已經(jīng)被處理并且沒有緩沖區(qū)狀態(tài)已經(jīng)被提取。
(b)計數(shù)該區(qū)包括一個無符號整數(shù),該整數(shù)指定了其狀態(tài)將被提取的緩沖區(qū)的計數(shù)。該區(qū)的值應(yīng)大于0并且小于或等于128;否則,狀態(tài)碼和R3狀態(tài)碼限定符區(qū)被設(shè)置。緩沖區(qū)號空間在0到127的范圍內(nèi)。所述計數(shù)值結(jié)合R1BNUM值,可以指定緩沖區(qū)號空間中的繞回。
在發(fā)出該指令之前,由R2區(qū)指定的通用寄存器包括這樣的指示在緩沖區(qū)狀態(tài)被提取后,是否應(yīng)將要提取的和被發(fā)現(xiàn)處于輸入緩沖區(qū)準(zhǔn)備好狀態(tài)的指定緩沖區(qū)狀態(tài)更改為輸入緩沖區(qū)已確認(rèn)狀態(tài)。當(dāng)該指令完成時,結(jié)果狀態(tài)碼和狀態(tài)碼限定符指出,例如,由R2區(qū)指定的寄存器是否包括一個或多個緩沖區(qū)的狀態(tài)。當(dāng)該指令被發(fā)出時,由R1QIX和BNUM區(qū)的值標(biāo)識出所述狀態(tài)將應(yīng)用到其的第一個緩沖區(qū)。所述狀態(tài)將應(yīng)用到其的被順序編號的緩沖區(qū)的計數(shù)是當(dāng)指令發(fā)出時R3計數(shù)區(qū)與指令完成時遞減的R3計數(shù)區(qū)之間的差。
由R2區(qū)指定的通用寄存器包括例如下面的區(qū)(a)確認(rèn)輸入緩沖區(qū)控制(I)當(dāng)該指令被發(fā)出且該區(qū)為1時,在緩沖區(qū)狀態(tài)被提取之后,被發(fā)現(xiàn)處于輸入緩沖區(qū)準(zhǔn)備好狀態(tài)的指定緩沖區(qū)將被更改為輸入緩沖區(qū)已確認(rèn)狀態(tài)。當(dāng)該指令被發(fā)出并且該區(qū)為0時,沒有輸入緩沖區(qū)狀態(tài)被改變。
(b)緩沖區(qū)狀態(tài)(BSTATE)當(dāng)該指令被發(fā)出時,該區(qū)沒有意義。當(dāng)該指令完成并且R3計數(shù)區(qū)已經(jīng)被遞減時,該區(qū)包括從存儲器列表狀態(tài)塊(SLSB)緩沖區(qū)狀態(tài)指示器取回的值。當(dāng)該指令完成并且R3計數(shù)區(qū)沒有被遞減時,該區(qū)的內(nèi)容保持不變并且沒有意義。
用于提取QDIO緩沖區(qū)狀態(tài)的操作單元包括提取一個緩沖區(qū)狀態(tài)、將該狀態(tài)裝入R2BSTATE區(qū)、可選地更改該緩沖區(qū)狀態(tài)、將R3寄存器中的計數(shù)區(qū)遞減1以及將R1寄存器中的緩沖區(qū)號區(qū)遞增1。如果遞增緩沖區(qū)號區(qū)使緩沖區(qū)號超過了最大例如127的緩沖區(qū)號,則在緩沖區(qū)號空間內(nèi)發(fā)生繞回,并且緩沖區(qū)號被重置為例如0。
當(dāng)下面之一首先發(fā)生時指令操作完成·當(dāng)R3計數(shù)區(qū)中指定的緩沖區(qū)的計數(shù)已經(jīng)使其公共狀態(tài)被提取到R2緩沖區(qū)狀態(tài)(BSTATE)區(qū)中,并且沒有遇到錯誤或異常情況時。在這種情況下,設(shè)置狀態(tài)碼和R3狀態(tài)碼限定符。
·當(dāng)遇到異常狀態(tài)并且沒有或某些指定緩沖區(qū)使其公共狀態(tài)被提取時。在這種情況下,使用一個值來設(shè)置狀態(tài)碼和R3狀態(tài)碼限定符以便指示該異常。R3寄存器中的計數(shù)區(qū)被遞減已經(jīng)被提取的緩沖區(qū)狀態(tài)的數(shù)目,并且R1寄存器的緩沖區(qū)號(BNUM)區(qū)被遞增相同的數(shù)目,且繞回通過0(如果需要)。指定的緩沖區(qū)狀態(tài)已經(jīng)被提取。如果所述計數(shù)區(qū)不是0,則R1隊列索引(QIX)和緩沖區(qū)號(BNUM)區(qū)標(biāo)識出當(dāng)遇到異常情況時正在被處理的緩沖區(qū)。
·當(dāng)遇到錯誤狀態(tài)并且沒有指定的緩沖區(qū)使其狀態(tài)被提取時。在這種情況下,使用一個值來設(shè)置狀態(tài)碼和R3狀態(tài)碼限定符區(qū)以便指示該錯誤。
·當(dāng)CPU確定的數(shù)目的緩沖區(qū)已使其公共狀態(tài)被提取而沒有提取緩沖區(qū)狀態(tài)的全部指定計數(shù)時。在這種情況下,設(shè)置狀態(tài)碼和R3狀態(tài)碼限定符區(qū)。R3寄存器中的計數(shù)區(qū)被遞減已經(jīng)被提取的緩沖區(qū)狀態(tài)的數(shù)目,并且R1寄存器中的緩沖區(qū)號(BNUM)區(qū)被遞增相同的數(shù)目,且繞回通過0(如果需要)。
·當(dāng)CPU在完成單個操作單元之前決定結(jié)束該指令時。在這種情況下,設(shè)置狀態(tài)碼和狀態(tài)碼限定符。R3寄存器中的計數(shù)區(qū)和R1寄存器中的緩沖區(qū)號(BNUM)區(qū)保持不變,并且沒有狀態(tài)信息被放置到R2寄存器的緩沖區(qū)狀態(tài)(BSTATE)區(qū)內(nèi)。
在指定的緩沖區(qū)狀態(tài)被提取之前和之后,執(zhí)行串行化和檢查點同步功能。
提取QDIO緩沖區(qū)狀態(tài)的執(zhí)行既不改變包含在子通道中的任何信息,也不會使I/O子系統(tǒng)詢問或發(fā)信號給適配器。
參考圖14a-14b說明了與執(zhí)行EQBS指令相關(guān)聯(lián)的處理。除非發(fā)生異常狀態(tài),有利地,該指令由機器執(zhí)行。如果發(fā)生了這種異常狀態(tài),則由主機完成該指令的處理。
參考圖14a,響應(yīng)于發(fā)出EQBS指令,在步驟1410,機器執(zhí)行主機允許檢查以便確定主機是否允許客戶使用QEBSM工具。如果客戶不是可分頁存儲模式客戶或者QEBSMI工具允許控制是0,則在步驟1412,將由主機完成處理。否則由機器繼續(xù)處理。
接著,在步驟1414,機器執(zhí)行子通道判定。在一個例子中,通用寄存器1中的子通道標(biāo)記被用于定位QBICB,所述QBICB包括標(biāo)識所述子通道的SID。作出關(guān)于該子通道標(biāo)記是否與存儲在由QBICB指定的子通道中的標(biāo)記相匹配的判定。如果否,則由主機完成處理;否則由機器繼續(xù)處理。
在步驟1416,作出關(guān)于EQBS運算對象是否有效的判定。在一個例子中,緩沖區(qū)號被驗證。如果R1緩沖區(qū)號(BNUM)區(qū)指定了一個大于例如127的值,則在步驟1418,指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。進而,所述計數(shù)值被驗證。如果R3計數(shù)區(qū)指定了一個0值或大于例如128的值,則指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。進而,用于指定隊列的隊列存儲器描述符被定位。如果R1隊列索引區(qū)大于或等于QBICB隊列計數(shù)區(qū)中的值,則沒有為子通道建立指定的隊列,指令完成,并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。否則,R1隊列索引區(qū)的值被用作QBICB隊列描述符地址數(shù)組中的索引,以便確定隊列描述符地址。
此后,在步驟1420,由機器嘗試為指定的隊列獲得隊列存儲器描述符鎖。為指定的隊列從QBICB隊列描述符中的隊列存儲器地址區(qū)取回QSD地址。使用互鎖更新操作作出嘗試,以便將QSD鎖定字值從可用更改為由機器鎖定。如果當(dāng)嘗試設(shè)置鎖定字時,QSD地址是0或存在訪問異常狀態(tài),則識別出異常。如果互鎖更新操作失敗,該操作可以被重試(次數(shù)取決于模型)。如果QSD鎖定字不能被設(shè)置為預(yù)定的值,則在步驟1422,識別出部分執(zhí)行阻斷,并且由主機繼續(xù)處理。然而,如果互鎖更新操作成功,則由機器繼續(xù)處理。
接著,在步驟1424,用于第一個QDIO緩沖區(qū)的SQBN被定位(圖14b)。該緩沖區(qū)的狀態(tài)是當(dāng)指令完成時被在STATE中返回的狀態(tài)。具體地說,通過從隊列存儲器描述符中的主機存儲器列表地址區(qū)取回主機存儲器列表地址,用于指定隊列的主機存儲器列表被定位。然后通過從隊列存儲器描述符中的SLSB地址區(qū)取回SLSB地址,指定隊列的存儲器列表狀態(tài)塊被定位。進而,將被提取的第一個SLSB表項(SQBN)被定位。R1緩沖區(qū)號區(qū)的值被用作SLSB中的索引,以便確定將被提取的第一個SQBN的地址。
下面的邏輯被重復(fù)由EQBS指令上的計數(shù)區(qū)指定的QDIO緩沖區(qū)的數(shù)目。初始地,在步驟1426,用于將被處理的QDIO緩沖區(qū)的SQBN和SBAL被定位。接著在步驟1428,作出關(guān)于該SQBN是否與將被返回的STATE相匹配的判定。即,如果至少一個緩沖區(qū)狀態(tài)已經(jīng)被提取,并且用于當(dāng)前緩沖區(qū)的SQBN包括對不同于先前提取的狀態(tài)的指定,則在步驟1430,操作單元被禁止,EQBS指令完成并且狀態(tài)碼和狀態(tài)碼限定符被設(shè)置。否則,處理繼續(xù)。
如果在步驟1431,指定的緩沖區(qū)當(dāng)前由程序擁有,并且需要被提取(主機中的緩沖區(qū)同步SBAL=1),則為SBAL中的所有SBALE(例如16個)執(zhí)行(1)在步驟1432,將主機SBALE中的SBALF區(qū)(除SBALF2以外)復(fù)制到程序SBALE中的相應(yīng)區(qū)。
(2)如果主機SBAL中的頁釘住指示器為打開,則a)在步驟1434,使用主機虛擬地址(來自程序SBALE)和主機實際地址(來自主機SBALE)來調(diào)用HPMA解除釘住功能。
b)在步驟1436,作出關(guān)于解除釘住功能是否成功的判定。如果解除釘住功能沒有成功,則在步驟1438由主機完成處理。否則由機器繼續(xù)處理。
c)在步驟1438,在主機SBALE中將頁釘住指示器設(shè)置為0。
d)如果隊列是輸入隊列,則在步驟1440,主機SBALE計數(shù)被復(fù)制到程序SBALE(圖14c)。
e)如果是格式2的輸入隊列,則在步驟1442,主機SBALE的緩沖區(qū)數(shù)據(jù)偏移(即,緩沖區(qū)頁中的數(shù)據(jù)的偏移)被復(fù)制到客戶SBALE中,保持緩沖區(qū)地址的其余部分不變。
(3)此后,在步驟1444,緩沖區(qū)同步所需的以及EQBS操作所需的指示器被在主機SBAL中關(guān)閉,并且QSD中的狀態(tài)轉(zhuǎn)變計數(shù)被遞增1。
如果已確認(rèn)輸入緩沖區(qū)控制為打開,并且SQBN中的值指出輸入緩沖區(qū)已準(zhǔn)備好,則在步驟1446,SQBN被設(shè)置為輸入緩沖區(qū)已確認(rèn)狀態(tài)。在步驟1448,EQBS緩沖區(qū)號也遞增1,并且在步驟1450,EQBS計數(shù)區(qū)遞減1。
接著,在步驟1452,作出關(guān)于EQBS計數(shù)是否等于0的判定。如果否,則處理繼續(xù),在步驟1426,為將被處理的QDIO緩沖區(qū)定位SQBN和SBAL(圖14b)。如果EQBS計數(shù)等于0,則處理完成且指示成功。然后在步驟1454,程序可以處理已經(jīng)從適配器擁有轉(zhuǎn)換為程序擁有狀態(tài)的緩沖區(qū)。例如,可以處理已經(jīng)到達(dá)的輸入,或處理輸出請求的完成(例如,收回緩沖區(qū))。
如果EQBS處理必須由主機完成,則主機而不是機器向程序給出正確的狀態(tài)碼和狀態(tài)碼限定符。
如上所述,EQBS指令可以調(diào)用由虛擬地址解除HPMA釘住功能。該功能為CPU提供了這樣的能力代表I/O請求來指出主機頁的內(nèi)容不再需要被釘在主機頁幀內(nèi)。將被解除釘住的頁由主機虛擬地址指定。當(dāng)頁被成功地解除釘住時,與該頁相關(guān)聯(lián)的一個或多個已釘住頁計數(shù)器可以被遞減。
在一個例子中,該功能的輸入包括將被解除釘住的虛擬地址(頁);標(biāo)識分配給客戶的地址空間和將被使用的轉(zhuǎn)換表的有效地址空間控制元素(ASCE);以及將被解除釘住的頁的主機實際地址。
為了便于主機數(shù)據(jù)結(jié)構(gòu)有效性判定,由虛擬地址解除主機頁釘住功能的調(diào)用者負(fù)責(zé)確保間隔完成指示器在該功能被調(diào)用的整個檢查點間隔中被設(shè)置。由虛擬地址解除主機頁釘住功能不檢查或修改間隔完成指示器。
參考圖16說明了與由虛擬地址解除主機頁釘住功能相關(guān)聯(lián)的邏輯的一個實施例。初始地,在步驟1600,用于頁的PTE/PGSTE對被定位。使用將被解除釘住的主機虛擬地址和主機地址空間控制元素(ASCE),相應(yīng)的頁表表項和頁狀態(tài)表表項的主機實際地址被確定。一旦被定位,在步驟1602,使用例如互鎖更新操作(其將頁控制互鎖指示器從0更改為1)來鎖定所述PTE/PGSTE對。如果在詢問1604,PTE/PGSTE對不能被鎖定,或是如果PGSTE.PCL已經(jīng)為1,則在步驟1606處理以失敗結(jié)束;否則處理繼續(xù)。
在詢問1608,作出關(guān)于該頁的釘住計數(shù)對于下一個解除釘住是否下溢的判定(即,PGSTE中的釘住計數(shù)區(qū)的值是否為0)。如果是的,則在步驟1606,處理再一次以失敗結(jié)束;否則在步驟1610,處理繼續(xù),取回將被解除釘住的虛擬頁的PTE。在一個例子中,從主機存儲器取回(塊并發(fā)地)頁表表項。
如果在詢問1612,頁是無效的或者頁無效位是1,則在步驟1606,處理再次以失敗結(jié)束。否則在詢問1614,作出關(guān)于是否已經(jīng)定位了一個不正確的PTE的判定。即,如果PTE中的頁幀實際地址區(qū)沒有指定與將被解除釘住的頁的輸入主機實際地址相同的頁,則已經(jīng)定位了一個不正確的PTE,并且在步驟1606處理結(jié)束。否則處理繼續(xù)。在步驟1616,PGSTE中的釘住計數(shù)區(qū)遞減1,并且在詢問1618,作出關(guān)于頁狀態(tài)是否被從釘住更改為解除釘住的判定。如果頁狀態(tài)被從釘住更改為解除釘住狀態(tài),則在步驟1620,關(guān)聯(lián)的增量已釘住頁計數(shù)遞減1。即,如果釘住計數(shù)現(xiàn)在是0,并且釘住計數(shù)沒有處于溢出狀態(tài)(PGSTE.PCO=0),則頁狀態(tài)已經(jīng)從釘住轉(zhuǎn)換為解除釘住狀態(tài),并且增量已釘住頁計數(shù)遞減1。
此后,或者如果頁狀態(tài)沒有從釘住被更改為解除釘住,則在步驟1622,通過例如將頁控制互鎖指示器設(shè)置為0來解鎖PTE/PGSTE對。這完成了由虛擬地址解除釘住功能的處理。
當(dāng)解除釘住功能退出且指出失敗時,沒有作出對狀態(tài)表的改變。在這種情況下,機器就像沒有調(diào)用該功能,并且主機被給予控制以便處理所述失敗。當(dāng)該功能退出且指出成功時,指定的頁已經(jīng)被解除釘住。在這種情況下,主機狀態(tài)表已經(jīng)由機器更新,并且先前對傳遞控制給主機以便進行頁釘住的要求被減輕了。
另一個可以被調(diào)用的功能是由PTE地址解除主機頁釘住功能。該功能為CPU提供了這樣的能力指出主機頁的內(nèi)容不再被釘住在主機頁幀內(nèi)。將被解除釘住的頁由主機頁表表項的主機實際或絕對地址來指定。當(dāng)頁被成功地解除釘住時,與頁表相關(guān)聯(lián)的一個或多個已釘住頁計數(shù)器被遞減。
在一個例子中,由PTE地址解除主機頁釘住功能的輸入包括將被解除釘住的頁的主機實際地址或主機頁表表項。
參考圖17說明了與由PTE地址解除主機頁釘住功能相關(guān)聯(lián)的邏輯的一個實施例。初始地,在步驟1700,相應(yīng)于輸入頁表表項的頁狀態(tài)表表項被定位。然后在步驟1702,PTE/PGSTE對被鎖定。在一個例子中,使用互鎖更新操作來嘗試將PGSTE中的頁控制互鎖指示器從0更改為1。如果在詢問1704,PTE/PGSTE對不能被鎖定,或是如果PGSTE.PCL已經(jīng)是1,則在步驟1706處理以失敗退出。
另一方面,如果鎖定成功,則在詢問1708,作出關(guān)于頁的釘住計數(shù)對于下一個解除釘住是否將下溢的進一步判定(即,PGSTE中的釘住計數(shù)區(qū)的值是否為0)。如果是的,則在步驟1706,處理再次以失敗退出。否則在步驟1710,用于將被解除釘住的虛擬頁的PTE被取回。在一個例子中,它被從主機存儲器取回(塊并發(fā)地)。
此后,在詢問1712,作出關(guān)于該頁是否無效的判定。具體地說,檢查頁無效指示器。如果它是1,則該頁是無效的,并且在步驟1706處理以失敗退出。如果該頁有效,則在步驟1714,PGSTE中的釘住計數(shù)區(qū)遞減1。
接著,在詢問1716,作出關(guān)于頁狀態(tài)是否被從釘住更改為解除釘住的判定。如果釘住計數(shù)現(xiàn)在是0并且釘住計數(shù)沒有處于溢出狀態(tài),則頁狀態(tài)已經(jīng)從釘住轉(zhuǎn)換到解除釘住狀態(tài)。因此,在步驟1718,增量已釘住頁計數(shù)被遞減1。此后,或是如果頁狀態(tài)沒有從釘住更改為解除釘住,則在步驟1720,PTE/PGSTE對被解鎖。在一個例子中,這包括將頁控制互鎖指示器設(shè)置為0。這結(jié)束了由PTE地址解除頁釘住功能的處理。
當(dāng)解除釘住功能退出且指出失敗時,沒有對狀態(tài)表作出改變。在這種情況下,機器就像沒有調(diào)用該功能,并且主機被給予控制以便處理所述失敗。當(dāng)該功能退出且指出成功時,指定的頁被解除釘住。在這種情況下,主機狀態(tài)表已經(jīng)由機器更新,并且先前對將控制傳遞給主機以便進行頁釘住的要求被減輕了。
上面的詳細(xì)說明是在沒有主機干預(yù)的情況下與來自可分頁存儲客戶的解釋I/O操作請求相關(guān)聯(lián)的處理。所述請求可以是基于網(wǎng)絡(luò)協(xié)議的通過QDIO適配器或類似適配器對網(wǎng)絡(luò)協(xié)議(例如,網(wǎng)際協(xié)議)或網(wǎng)絡(luò)設(shè)備的請求。作為進一步的例子,所述請求可以是基于光纖通道協(xié)議(FCP)的對連接到光纖通道的設(shè)備的請求。
與諸如QDIO適配器之類的非FCP適配器類似,F(xiàn)CP適配器通過適配器與主存儲器之間的通道路徑來連接到CPC中的其它元件。然而,與FCP適配器關(guān)聯(lián)的處理在某些方面和與非FCP適配器關(guān)聯(lián)的處理不同。例如,數(shù)據(jù)輸入和輸出是通過QDIO輸出隊列執(zhí)行的,并且QDIO輸入隊列僅用于適配器發(fā)送信號通知I/O操作的完成。進而,當(dāng)FCP適配器將輸出隊列緩沖區(qū)置于程序擁有狀態(tài)時,包括數(shù)據(jù)傳輸?shù)腎/O操作可能沒有全部完成。(這與用于非FCP適配器的QDIO體系結(jié)構(gòu)相反。)即使緩沖區(qū)處于程序擁有狀態(tài),程序也不對緩沖區(qū)頁執(zhí)行任何活動,直到適配器通過輸入隊列發(fā)送信號通知I/O操作完成為止。然而,程序可以在與所述緩沖區(qū)相關(guān)聯(lián)的QDIO數(shù)據(jù)結(jié)構(gòu)上執(zhí)行活動,只要所述緩沖區(qū)頁未被改變。
當(dāng)FCP操作被啟動時,一個唯一請求id被從程序傳遞給適配器。是此在輸入隊列中被返回的請求id發(fā)送信號通知操作完全結(jié)束并且程序可以與緩沖區(qū)頁交互。
因此,借助FCP,可以具有將緩沖區(qū)頁從QDIO數(shù)據(jù)結(jié)構(gòu)斷開的能力。換言之,QDIO數(shù)據(jù)結(jié)構(gòu)中的緩沖區(qū)頁的地址的拷貝可以被保存在另一個位置,并且可以分配新的緩沖區(qū)頁,它們的地址被置于該QDIO數(shù)據(jù)結(jié)構(gòu)中,具體地說,置于希望的SBALE內(nèi),并且啟動新的I/O操作-始終等待來自適配器(在緩沖區(qū)頁的最初集合上的操作已經(jīng)完成)的請求id(誰的地址,復(fù)制了哪里)。
為了便于保持已斷開連接的緩沖區(qū)頁的描述,設(shè)計了FCP操作塊(FOB)。FOB是一種結(jié)構(gòu),該結(jié)構(gòu)當(dāng)由指定FCP請求的客戶發(fā)出SQBS時被建立,并且在機器解決和釘住頁時,它在FOB中記錄緩沖區(qū)頁的主機頁表表項地址。機器還在FOB中記錄客戶的請求id,并使用等于該FOB的地址的請求id來替換所述客戶的請求id。然后,當(dāng)稍后適配器返回輸入隊列中的該請求id并且客戶發(fā)出EQBS以便詢問輸入隊列的狀態(tài)時,機器可以定位該FOB、解除頁的釘住、使用先前記錄的初始客戶值來替換所述請求id。
參考圖18a-18d和19a-19e說明了關(guān)于FCP的處理的進一步的詳細(xì)信息。具體地說,參考圖18a-18d說明了與用于FCP協(xié)議的SQBS指令相關(guān)聯(lián)的處理的一個例子,并且參考圖19a-19e說明了與用于FCP協(xié)議的EQBS指令相關(guān)聯(lián)的處理的一個例子。
首先參考圖18a,在為FCP調(diào)用設(shè)置QDIO緩沖區(qū)狀態(tài)指令之前,執(zhí)行某些初始化。例如,在步驟1800,主機執(zhí)行各種清除任務(wù)(圖18a),包括例如刪除和處理已處理幀描述符列表上的幀。除了執(zhí)行清除之外,在步驟1802,主機確保在可用幀描述符列表和可用FOB列表上有足夠的幀。
在執(zhí)行清除和/或確保在相關(guān)的列表上具有足夠的幀之后,在步驟1804,主機可以啟動程序的解釋執(zhí)行。在步驟1806,程序開始執(zhí)行,并且在執(zhí)行過程中程序選擇將被傳輸給適配器的下一個QDIO緩沖區(qū)。在步驟1808,程序以將被用于數(shù)據(jù)傳輸?shù)拇鎯ζ鲏K的程序絕對地址來填充SBAL。進而,在步驟1810,通過發(fā)出設(shè)置QDIO緩沖區(qū)狀態(tài)指令將QDIO緩沖區(qū)的狀態(tài)從程序擁有更改為適配器擁有,來將緩沖區(qū)的所有權(quán)傳遞給適配器。
響應(yīng)于發(fā)出SQBS指令,在步驟1812,機器執(zhí)行主機允許檢查以便確定主機是否允許客戶使用QEBSM工具。如果在步驟1814,QEBSNI允許控制(例如,在客戶狀態(tài)中)被設(shè)置為0,指出不允許,則在步驟1816,由主機而不是機器來完成處理。當(dāng)在設(shè)置QDIO緩沖區(qū)狀態(tài)解釋過程中遇到需要來自主機的某些活動或服務(wù)的狀態(tài)時,指令阻斷或者部分執(zhí)行阻斷(PEI)被識別,使用設(shè)置QDIO緩沖區(qū)狀態(tài)指令文本來設(shè)置阻斷參數(shù),并且對于PEI,在客戶狀態(tài)中設(shè)置QEBSM-PEI參數(shù)。
接著,在步驟1818,機器執(zhí)行子通道判定,其中作出關(guān)于子通道標(biāo)記是否與存儲在由QBICB指定的子通道內(nèi)的標(biāo)記相匹配的判定。如果不匹配,則在步驟1820由主機完成處理。否則,由機器繼續(xù)處理。
此外,在步驟1822,由機器作出關(guān)于SQBS運算對象是否有效的判定。如果任意運算對象無效,則處理結(jié)束,并且在步驟1824設(shè)置狀態(tài)碼和狀態(tài)碼限定符。否則處理繼續(xù)。
接著,在步驟1826,嘗試獲得用于指定隊列的隊列存儲器描述符鎖。如果沒有獲得QSD鎖,則在步驟1828由主機完成處理。否則由機器繼續(xù)處理。
下面的邏輯被重復(fù)由SQBS指令的計數(shù)區(qū)指定的QDIO緩沖區(qū)的數(shù)目。初始地,在步驟1830,用于將被處理的QDIO緩沖區(qū)的SQBN、程序SBAL和相應(yīng)的主機SBAL被定位。此后,在步驟1832,作出關(guān)于指定的緩沖區(qū)當(dāng)前是否由程序擁有的判定。如果該緩沖區(qū)不是由程序擁有,則在步驟1834,處理以狀態(tài)碼和狀態(tài)碼限定符結(jié)束。否則在步驟1836,處理繼續(xù),判定指定緩沖區(qū)的狀態(tài)是否將被使用EQBS指令來提取(圖18b)。如果是,則在步驟1838,處理再次以狀態(tài)碼和狀態(tài)碼限定符結(jié)束。否則,在步驟1840,處理繼續(xù),且將客戶SBAL的內(nèi)容復(fù)制到主機SBAL。此外,在步驟1842,緩沖區(qū)同步和EQBS操作所需的位在主機的SBAL中被設(shè)置。
進而,如果SBAL緩沖區(qū)序列位指出這是一個新的FCP請求(與跨多個SBAL的請求的繼續(xù)相反),則在步驟1844,以前的FCP請求(如果有)被標(biāo)記為已完成。例如,為新的請求的指示檢查主機SBALE0表項如果客戶SBALE0的SBAL-Flags(SBALF)區(qū)中的緩沖區(qū)序列類型指出一個命令被指定,則QSD地址的隊列標(biāo)志區(qū)中的未決請求組件FOB列表完成位是1,并且有效請求頭部FOB列表中存在FOB,該列表中的第一個頭部FOB的標(biāo)志區(qū)中的構(gòu)造完成位被設(shè)置為1,并且QSD地址的隊列標(biāo)志區(qū)中的未決請求組件FOB列表完成位被設(shè)置為0。
接著,在步驟1846,作出關(guān)于在可用FOB列表上是否存在FOB的判定。如果沒有,在步驟1848由主機完成處理。否則由機器繼續(xù)處理。例如,在步驟1850,可用FOB列表中的第一個可用FOB被從該列表上刪除,并且可用FOB計數(shù)遞減1。然后,在步驟1852,基于SBAL中的緩沖區(qū)序列位,新的FOB被添加到適當(dāng)?shù)牧斜怼@?,如果這是第一個或唯一的SBAL,則這是一個新的FCP請求。在這種情況下,該FOB是頭部FOB并且被插入到有效請求FOB列表,并且該請求在該FOB中被標(biāo)記為有效。然而,如果這是一個中間或最后的SBAL,則這是多個SBAL FCP請求的繼續(xù)或是最后的SBAL。因此,該FOB是非頭部組件FOB,并且被添加到被在隊列存儲器描述符中錨定的有效請求FOB列表上的第一個頭部FOB的請求組件FOB列表。
對于頭部FOB,在步驟1854,發(fā)生下面的處理1)在步驟1856,在QSD標(biāo)志中的未決請求組件完成指示器被設(shè)置;2)在步驟1858,SBALE 0中由程序指定的請求標(biāo)識符被保存在客戶請求id區(qū)中;3)在步驟1860,QSD的地址被存儲在FOB中的隊列存儲器描述符地址區(qū)內(nèi),以便標(biāo)識與該請求相關(guān)聯(lián)的特定隊列(圖18c);4)在步驟1862,QBICB的地址被存儲在QDIO緩沖區(qū)信息控制塊地址區(qū)內(nèi),以便將子通道與該請求相關(guān)聯(lián);
5)在步驟1864,頭部FOB的地址被如主機SBAL的SBALE0中的請求id區(qū)那樣設(shè)置;以及6)在步驟1866,來自SBALF0的FCP存儲器塊類型被存儲在FOB內(nèi)的存儲器塊類型中,以便定義將被執(zhí)行的存儲操作的類型。
進而,在步驟1868,對于具有有效存儲器塊地址的每個有意義的主機SBALE,下面的功能被執(zhí)行1)在步驟1870,從主機SBALE取回程序絕對(主機虛擬)存儲器塊地址;2)在步驟1872,調(diào)用HPMA釘住功能以便轉(zhuǎn)換和鎖定存儲器中的頁。在一個例子中,HPMA功能被調(diào)用并且被傳遞給下面的輸入數(shù)據(jù)項·將被釘住的主機虛擬地址來自主機SBALE的客戶存儲器塊數(shù)據(jù)地址是將被釘住的虛擬地址。
·頁將被釘住在其中的地址空間的有效主機地址空間控制元素(ASCE)主地址空間控制元素(PASCE)被指定為有效ASCE。
·取回或存儲訪問指示如果指定的隊列是輸入隊列,則指出存儲訪問操作。如果指定的隊列是輸出隊列,并且QBICB隊列格式(QFMT)區(qū)指出該隊列不是格式1的輸出隊列,則指出取回-訪問操作。如果指定的隊列是輸出隊列,并且QBICB隊列格式(QFMT)區(qū)指出該隊列是格式1的輸出隊列,則指出取回訪問操作(如果主機SBALE指定了寫緩沖區(qū)存儲器塊);否則指出存儲訪問操作。
·對頁內(nèi)容是否可以被替換的指示如果指定的隊列是輸入隊列,則指出頁內(nèi)容替換。如果指定的隊列是輸出隊列,并且QBICB隊列格式(QFMT)區(qū)指出該隊列不是格式1的輸出隊列,則不指出頁內(nèi)容替換。如果指定的隊列是輸出隊列,并且QBICB隊列格式(QFMT)區(qū)指出該隊列是格式1的輸出隊列,則指出頁替換(如果主機SBALE指定了狀況讀緩沖區(qū)或讀緩沖區(qū)存儲器塊,并且SBALE中的數(shù)據(jù)計數(shù)是例如4K字節(jié))。
3)在步驟1874,如果HPMA釘住功能沒有成功,則在步驟1876由主機完成處理。否則由機器繼續(xù)處理。例如,如果HPMA釘住主機頁功能完成且指示成功,則由釘住主機頁功能返回的頁幀實際地址被復(fù)制到主機SBALE的數(shù)據(jù)地址區(qū)內(nèi),并且當(dāng)前SBALE的虛擬化標(biāo)志(VFlags)區(qū)中的已釘住頁指示器位被設(shè)置為1。如果HPMA釘住主機頁功能完成且指出應(yīng)識別一個有效性阻斷,則被指出的有效性阻斷被識別。如果HPMA釘住主機頁功能完成且指示失敗,則部分執(zhí)行阻斷被識別,并且根據(jù)HPMA釘住主機頁功能失敗原因,設(shè)置客戶狀態(tài)中的QEBSM-PEI參數(shù)區(qū)中的部分執(zhí)行阻斷原因碼;否則處理繼續(xù)。
4)在步驟1878,由HPMA返回的PTE地址被移動到FOBPTE地址數(shù)組中的下一個可用表項內(nèi),并且PTE計數(shù)區(qū)遞增1(圖18d);以及5)在步驟1880,來自主機SBALE的數(shù)據(jù)計數(shù)區(qū)被添加到QSD中的字節(jié)傳輸計數(shù)。
如果這是多個SBAL的最后一個SBAL,或是FCP請求的唯一SBAL,則該請求在FOB中被標(biāo)記為完成,并且未決請求FOB列表完成指示器被設(shè)置為0。
此后,在步驟1884,緩沖區(qū)的SQBN被設(shè)置為由SQBS指令指定的適配器擁有狀態(tài)。此外,在步驟1886,SQBS緩沖區(qū)數(shù)目遞增1,并且在步驟1888,SQBS計數(shù)區(qū)遞減1。
在步驟1890,作出關(guān)于SQBS計數(shù)是否等于0的判定。假如SQBS計數(shù)不等于0,則在步驟1830,處理繼續(xù),為將被處理的QDIO緩沖區(qū)定位SQBN、程序SBAL和主機SBAL(圖18a)。然而,如果SQBS計數(shù)等于0,則在步驟1892,處理繼續(xù)且解鎖QSD鎖定。如果成功,在步驟1894,成功指示被轉(zhuǎn)發(fā)給程序。如果這是將在此時傳輸?shù)淖詈笠粋€QDIO緩沖區(qū),則在步驟1896發(fā)出SIGA-wt指令。
除了與處理用于FCP協(xié)議的SQBS指令相關(guān)聯(lián)的上述更改之外,還存在與EQBS指令相關(guān)聯(lián)的更改。參考圖19a-19e說明了與用于FCP請求的EQBS指令相關(guān)聯(lián)的邏輯的一個例子。
在運行程序之前,進行某些初始化。例如,在步驟1900,主機執(zhí)行各種清除任務(wù),包括例如刪除和處理已處理幀描述符列表上的幀。進而,在步驟1902,主機確保在可用幀描述符列表和可用FOB列表上有足夠的幀。此后在步驟1904,主機開始該程序的解釋執(zhí)行。
在執(zhí)行過程中,在步驟1906,程序選擇下一個輸出QDIO緩沖區(qū)或程序正在等待適配器結(jié)束處理的緩沖區(qū)。然后在步驟1908,程序發(fā)出EQBS指令以便獲取所選緩沖區(qū)(多個)的當(dāng)前狀態(tài)。
響應(yīng)于發(fā)出EQBS指令,在步驟1910,機器執(zhí)行主機允許檢查以便確定主機是否允許客戶使用QEBSM工具。如果在詢問1912,客戶不是可分頁存儲模式客戶,或是QEBSMI工具允許控制為0,則在步驟1914由主機完成處理。否則由機器繼續(xù)處理。
接著,在步驟1916機器執(zhí)行子通道判定。如果子通道標(biāo)記與被存儲在由QBICB指定的子通道中的標(biāo)記不匹配,則在步驟1914由主機完成處理;否則由機器繼續(xù)處理。
進而,在步驟1918,作出關(guān)于EQBS運算對象是否有效的判定。如果一個或多個運算對象無效,則處理結(jié)束,并且在步驟1920設(shè)置狀態(tài)碼和狀態(tài)碼限定符。否則處理繼續(xù)。
在步驟1922,由機器嘗試為指定的隊列獲得隊列存儲器描述符鎖。如果沒有獲得QSD鎖,則部分執(zhí)行阻斷被識別,并且在步驟1924由主機繼續(xù)處理。然而,如果獲得了鎖(例如,互鎖更新操作成功),則由機器繼續(xù)處理。
接著,在步驟1926,用于第一個QDIO緩沖區(qū)的SQBN被定位。此緩沖區(qū)的狀態(tài)是當(dāng)指令完成時將在STATE中被返回的狀態(tài)。
下面的邏輯被重復(fù)由EQBS指令的計數(shù)區(qū)指定的QDIO緩沖區(qū)的數(shù)目。初始地,在步驟1928,用于將被處理的QDIO緩沖區(qū)的SQBN、程序SBAL和相應(yīng)的主機SBAL被定位。接著,在步驟1930,作出關(guān)于SQBN是否與將被返回的STATE相匹配的判定(圖19b)。如果否,則處理結(jié)束,并且在步驟1932設(shè)置狀態(tài)碼和狀態(tài)碼限定符。否則處理繼續(xù)。
如果隊列是FCP(例如,格式1)輸出隊列,并且SQBN指定了程序擁有狀態(tài),則在步驟1934,緩沖區(qū)同步所需的和EQBS操作所需的指示器在主機SBAL中被關(guān)閉。此外,在步驟1936,各SBALF區(qū)(除SBALF 2以外)被復(fù)制到程序SBALE中的相應(yīng)區(qū)內(nèi)。
如果指定的緩沖區(qū)當(dāng)前由程序擁有,并且它是格式1的輸入隊列,則在步驟1938,為在主機SBAL中SBALE請求標(biāo)識符區(qū)不是0的有意義的SBALE執(zhí)行下面的步驟1)代表已完成的FCP請求的頭部FOB的絕對地址是在主機SBALE中被返回的請求標(biāo)識符。在步驟1940,作出關(guān)于該請求標(biāo)識符是否指定了有效的FOB的判定。例如,作出關(guān)于由請求id所指的FOB中指定的QBICB中的子通道標(biāo)記是否與SQBS指令上指定的標(biāo)記相匹配的檢查。如果否,在步驟1942由主機完成處理;否則由機器繼續(xù)處理。
2)通過驗證FOB中指定的QBICB中的子通道標(biāo)記與SQBS指令上指定的標(biāo)記相匹配,為此用戶驗證由適配器返回的頭部FOB。如果在步驟1944,所述FOB并非用于此用戶,則在步驟1946由主機完成處理;否則由機器繼續(xù)處理。
3)嘗試獲得用于在FOB(在FCP請求啟動時被建立)中指定的輸出隊列的QSD鎖。如果在步驟1948,在合理的時間內(nèi)不能獲得該鎖(圖19c),則在步驟1950由主機完成處理;否則由機器繼續(xù)處理。在這個步驟以及在隨后的步驟(其中在機器已經(jīng)獲得了一個或多個鎖之后,將由主機完成處理)中,這些鎖的狀態(tài)首先被更改為“由機器為主機鎖定”。
4)驗證FOB當(dāng)前在有效請求列表上并且已被完成。如果在步驟1952,請求有效和構(gòu)造完成指示器都是打開(on),并且在FOB標(biāo)志中請求id已投遞指示器為關(guān)閉(off),則在步驟1954由主機完成處理;否則由機器繼續(xù)處理。
5)在步驟1956,頭部FOB標(biāo)志區(qū)中的請求id已投遞指示器被設(shè)置為打開。
6)在步驟1958,對于代表所述請求的頭部FOB以及可以被與該頭部FOB關(guān)聯(lián)和斷開與該頭部FOB鏈接的組件FOB(所述頭部FOB被最后處理),發(fā)生下面的邏輯a)在步驟1960,對于在由FOB PTE計數(shù)指定的范圍內(nèi)的FOB中的每個非0PTE地址數(shù)組表項,調(diào)用HPMA由PTE地址解除主機釘住功能。如果解除釘住功能沒有成功,則在步驟1962由主機完成處理;否則由機器繼續(xù)處理。
b)如果這是一個組件FOB,則在步驟1964,其被從與所述頭部FOB解除錨定的請求組件FOB列表刪除(圖19d)。
c)如果這是一個頭部FOB,則在步驟1966,將來自該頭部FOB的客戶請求id復(fù)制到程序SBALE的請求id區(qū)內(nèi),將主機SBALE中的請求id置0以便指出該請求id已經(jīng)被處理,并且從與輸出隊列QSD解除錨定的有效請求FOB列表刪除所述頭部FOB。
d)在步驟1968,清除該FOB的預(yù)先指定的字,將其插入可用FOB列表的開始處,并且將可用FOB計數(shù)遞增1。
7)在步驟1970,釋放輸出隊列QSD鎖。
8)在步驟1972,緩沖區(qū)同步所需的以及EQBS操作所需的指示器被在主機SBAL中關(guān)閉,并且狀態(tài)轉(zhuǎn)換計數(shù)遞增1。
如果已確認(rèn)的輸入緩沖區(qū)控制為1,并且SQBN中的值指出輸入緩沖區(qū)準(zhǔn)備好狀態(tài),則在步驟1974,SQBN被設(shè)置為輸入緩沖區(qū)已確認(rèn)狀態(tài)。
此后,在步驟1976,EQBS緩沖區(qū)號被遞增1,并且在步驟1978,EQBS計數(shù)區(qū)被遞減1。如果在步驟1980,EQBS計數(shù)區(qū)不等于0(圖19e),則在步驟1928處理繼續(xù),為將被處理的QDIO緩沖區(qū)定位SQBN、程序SBAL和相應(yīng)的主機SBAL(圖19a)。否則在步驟1982,程序結(jié)束。然后在步驟1984,程序可以處理已經(jīng)從適配器擁有轉(zhuǎn)換為程序擁有狀態(tài)的緩沖區(qū)。
如上所述,QDIO體系結(jié)構(gòu)被擴展,以使可分頁存儲模式客戶可以體驗到接近本地QDIO的性能。這種V=V QDIO通過能力可以接近與處理器效率相同的水平,如在沒有虛擬機操作環(huán)境的情況下本地地得到的那樣。這是通過將來自可分頁存儲模式客戶執(zhí)行地址空間的QDIO緩沖區(qū)狀態(tài)信息重新定位到主機(例如,VM主機)存儲器內(nèi),并且實現(xiàn)指令以允許客戶操縱緩沖區(qū)狀態(tài)并相應(yīng)地管理主機轉(zhuǎn)換和影子結(jié)構(gòu)來完成的。引入了兩個指令,所述指令賦予程序通過隊列號/緩沖區(qū)號指定(而不是通過在程序存儲器內(nèi)直接尋址緩沖區(qū)狀態(tài))來管理QDIO緩沖區(qū)狀態(tài)的能力。這種緩沖區(qū)狀態(tài)指定的抽象形式允許以提高可分頁模式虛擬機QDIO操作的性能的方式來實現(xiàn)這些指令的解釋版本。它還允許減少SIGA開銷(更少的SIGA)。此外,子通道標(biāo)記表示允許為在程序中分配的子通道進行SIGA的解釋,從而在大多數(shù)情況下消除了在SIGA處理中牽涉到主機。
當(dāng)指定對QDIO增強緩沖區(qū)狀態(tài)管理允許的請求的建立QDIO隊列CCW命令成功地完成時,QDIO子通道被允許進行QDIO增強緩沖區(qū)狀態(tài)管理。
當(dāng)沒有指定對QDIO增強緩沖區(qū)狀態(tài)管理允許的請求的建立QDIO隊列CCW命令成功地執(zhí)行,或是發(fā)生了使隊列從子通道解散的活動或事件時,QDIO子通道被禁止進行QDIO增強緩沖區(qū)狀態(tài)管理。
是CHSC存儲子通道QDIO數(shù)據(jù)命令響應(yīng)塊的一部分的子通道QDIO數(shù)據(jù)塊中的QDIO適配器特性1(QDIOAC1)區(qū)的位7指出對于特定的子通道是否允許QDIO增強緩沖區(qū)狀態(tài)管理。
當(dāng)QDIO子通道被允許QDIO增強緩沖區(qū)狀態(tài)管理時,對于下面的指令,由通用寄存器1中的子通道標(biāo)記來指定子通道·發(fā)信號通知適配器(SIGA)-具體地說,SIGA-rt(由標(biāo)記讀)和SIGA-wt(由標(biāo)記寫),它們是SIGA-r和SIGA-w的替代物。SIGA-rt和SIGA-wt指令分別執(zhí)行與SIGA-r和SIGA-w相同的功能;然而,使用標(biāo)記而不是子系統(tǒng)id來指定子通道。在標(biāo)題為“Self-containedQueues With Associated Control Information For Receipt AndTransfer Of Incoming And Outgoing Data Using A Queued DirectInput-output Device”(“用于使用排隊直接輸入-輸出設(shè)備來接收和傳輸進入和外出數(shù)據(jù)的具有關(guān)聯(lián)控制信息的自足隊列”,Baskey等人,2001年12月18日公布,其全部內(nèi)容在此引入作為參考)的美國專利No.6,332,171 B1中說明了SIGA-r和SIGA-w的例子;·設(shè)置QDIO緩沖區(qū)狀態(tài)(SQBS);以及
·提取QDIO緩沖區(qū)狀態(tài)(EQBS)。
從是對CHSC存儲子通道QDIO數(shù)據(jù)命令(在子通道已被允許QEBSM之后執(zhí)行)的響應(yīng)的一部分的子通道QDIO數(shù)據(jù)塊的子通道標(biāo)記區(qū)來獲得子通道標(biāo)記。因此,為了實現(xiàn)QEBSM允許并且為特定子通道獲得子通道標(biāo)記,程序執(zhí)行如下序列1.執(zhí)行CHSC存儲子通道QDIO數(shù)據(jù)以便驗證QEBSM可用于子通道。
2.執(zhí)行建立QDIO隊列CCW命令以便允許子通道使用QEBSM。
3.執(zhí)行CHSC存儲子通道QDIO數(shù)據(jù)以便驗證QEBSM被允許,以獲得子通道標(biāo)記并檢查適配器的特性,作為成功執(zhí)行建立QDIO隊列CCW命令的結(jié)果,某些適配器特性可能已改變。
在QDIO子通道已經(jīng)被允許QEBSM之后,使用設(shè)置QDIO緩沖區(qū)狀態(tài)(SQBS)指令來改變在子通道上有效的隊列緩沖區(qū)的狀態(tài)。適時地使用提取QDIO緩沖區(qū)狀態(tài)(EQBS)指令來詢問在子通道上有效的隊列緩沖區(qū)的狀態(tài)允許主機頁被以這樣的方式解除釘住即不會不適當(dāng)?shù)貙Υ鎯ζ髟斐膳c大量可分頁存儲模式客戶的管理相關(guān)聯(lián)的過度壓力??商娲兀绻绦驔]有良好地運行或是對主機存儲器的要求高,則主機可以解除釘住在程序擁有狀態(tài)中的任何已釘住的緩沖區(qū)頁,而無需等待客戶發(fā)出EQBS。
一旦緩沖區(qū)狀態(tài)已經(jīng)通過設(shè)置QDIO緩沖區(qū)狀態(tài)被從程序擁有狀態(tài)更改為適配器擁有狀態(tài),該狀態(tài)將由提取QDIO緩沖區(qū)狀態(tài)詢問并且在另一個設(shè)置QDIO緩沖區(qū)狀態(tài)被再次用于該緩沖區(qū)之前,被發(fā)現(xiàn)已回到程序擁有狀態(tài)。概括地說,客戶準(zhǔn)備數(shù)據(jù)緩沖區(qū)并且執(zhí)行設(shè)置QDIO緩沖區(qū)狀態(tài)(SQBS)指令。SQBS指令嘗試確保所有指定的緩沖區(qū)頁被駐留。如果緩沖區(qū)頁尚未被引用,則使用主機頁管理輔助功能來動態(tài)地在頁表中分配新的幀、釘住頁以及更新主機影子QDIO SBAL表項。然而,如果緩沖區(qū)頁存在且當(dāng)前被換出(page out),并且是輸入隊列緩沖區(qū)頁,則使用主機頁管理輔助功能來動態(tài)地在頁表中分配新的幀、釘住頁以及更新主機影子QDIO SBAL表項。
適配器啟動的從適配器擁有到程序擁有狀態(tài)的狀態(tài)改變可以由客戶通過提取QDIO緩沖區(qū)狀態(tài)(EQBS)指令直接觀察到,所述提取QDIO緩沖區(qū)狀態(tài)(EQBS)指令指定了程序先前使其置于適配器擁有狀態(tài)并且返回當(dāng)前緩沖區(qū)狀態(tài)的緩沖區(qū)。
除了上述之外,主機頁管理輔助工具(HPMA)可以由其它CPU工具在可分頁存儲模式客戶的解釋期間來調(diào)用。HPMA工具的一個或多個方面可以與QDIO體系結(jié)構(gòu)一起使用或不與QDIO體系結(jié)構(gòu)一起使用。HPMA包括例如4種HPMA輔助功能,諸如解決主機頁功能、釘住主機頁功能、由虛擬地址解除主機頁釘住功能以及由PTE地址解除主機頁釘住功能。
如果在指令取回或指令運算對象訪問上存在主機頁無效狀態(tài),并且主機頁管理輔助被允許,則可以調(diào)用解決主機頁功能。解決主機頁功能可以在轉(zhuǎn)換處理期間使用,以便動態(tài)地解決主機頁無效狀態(tài),并且防止頁轉(zhuǎn)換異常被識別。如果解決主機頁功能成功地完成,在一個例子中,主機頁無效狀態(tài)存在的操作單元被無效并重試。如果解決主機頁功能沒有成功地完成,則如主機頁管理輔助沒有被允許那樣處理最初的主機頁無效狀態(tài)。
QEBSM結(jié)合HPMA提供了下面的優(yōu)點和性能改進更少的SIE表項/退出開銷和更少的主機環(huán)境切換和路由開銷(用于生產(chǎn)性工作的更多的周期);消除了QDIO緩沖區(qū)狀態(tài)的主機影子拷貝以及關(guān)聯(lián)的同步開銷;動態(tài)更新頁狀態(tài)表和轉(zhuǎn)換表;動態(tài)防止主機頁故障;改進的QDIO建立影子;以及在沒有主機干預(yù)下的解釋性執(zhí)行模式中時由CPU對主機影子結(jié)構(gòu)的動態(tài)維護。
雖然此處說明了各種例子和實施例,但是這些僅是例子,并且許多變形被包括在本發(fā)明的范圍內(nèi)。例如,此處描述的計算環(huán)境僅是一個例子。許多其他環(huán)境,包括其他類型的通信環(huán)境,可以包括本發(fā)明的一個或多個方面。例如,可以采用不同類型的處理器、客戶和/或主機。此外,其他類型的體系結(jié)構(gòu)可以采用本發(fā)明的一個或多個方面。
進而,在此處提供的數(shù)據(jù)結(jié)構(gòu)和流程的例子中,不同區(qū)的創(chuàng)建和/或使用可以包括許多變化,諸如不同數(shù)量的位;不同順序的位;更多、更少或不同于此處說明的位;更多、更少或不同的區(qū);不同順序的區(qū);不同大小的區(qū)等。再次地,這些區(qū)僅被作為例子提供,并且可以包括許多變化。進而,此處說明的指示器和/或控制可以具有許多不同形式。例如,可以以除了位以外的方式來表示它們。此外,雖然此處使用了術(shù)語地址,但是可以使用任何名稱。
此外,雖然以互聯(lián)網(wǎng)協(xié)議和光纖通道協(xié)議說明了本發(fā)明的各方面,再次地,這些只是例子。其他協(xié)議可以從本發(fā)明的一個或多個方面獲益,包括但是不限于其他網(wǎng)絡(luò)協(xié)議。
再次地,雖然參考QDIO和此處說明的例子描述了HPMA,但是HPMA的一個或多個方面可自身使用。與QDIO一起使用僅是一個例子。
如此處所使用的,術(shù)語“頁”被用于指固定大小或預(yù)定大小的存儲器區(qū)域。頁的大小可以變化,雖然此處提供的一個例子中頁是4K。類似地,緩沖區(qū)是保存數(shù)據(jù)的一種結(jié)構(gòu),并且可以有許多結(jié)構(gòu)類型和結(jié)構(gòu)大小。類似地,存儲器塊是存儲器的塊,并且如此處所使用的,等價于一個存儲器頁。然而,在其他實施例中,可以有不同大小的存儲器塊和/或頁。許多其他替代物也是可能的。進而,雖然此處使用了諸如隊列、列表、表之類的術(shù)語,但是可以使用任何類型的數(shù)據(jù)結(jié)構(gòu)。再次地,此處提到的這些僅是例子。
本發(fā)明可以被包括在具有例如計算機可用介質(zhì)的制品(例如,一個或多個計算機程序產(chǎn)品)中。所述介質(zhì)中包含例如計算機可讀程序代碼裝置或邏輯(例如,指令、代碼、命令等),以便提供和促進本發(fā)明的功能。所述制品可以被包括為計算機系統(tǒng)的一部分或單獨銷售。
此外,可以提供至少一個計算機可讀的程序存儲裝置,該裝置包含至少一個計算機可執(zhí)行的指令程序以執(zhí)行本發(fā)明的功能。
此處示出的流程圖只是實例。在不偏離本發(fā)明的精神的情況下,此處所述的這些圖或步驟(或操作)可以有多種變化。例如,可以按不同順序執(zhí)行步驟,或者可以添加、刪除或修改步驟。所有這些變化都被視為要求保護的發(fā)明的一部分。
雖然此處給出并詳細(xì)說明了優(yōu)選實施例,對相關(guān)領(lǐng)域的技術(shù)人員顯而易見的是,可以做出各種修改、增加、替代等而不偏離本發(fā)明的精神,并且因此它們被看作在如以下權(quán)利要求限定的本發(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸?shù)姆椒?,所述方法包括由所述可分頁模式虛擬環(huán)境的處理器獲得將在數(shù)據(jù)傳輸中使用的緩沖區(qū)的指示,所述緩沖區(qū)被與運行在所述可分頁模式虛擬環(huán)境的可分頁模式虛擬機中的客戶程序相關(guān)聯(lián);以及由所述處理器執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理,以便允許數(shù)據(jù)傳輸,所述執(zhí)行沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
2.如權(quán)利要求1的方法,進一步包括在主機存儲器中為所述緩沖區(qū)提供狀態(tài)信息,并且其中所述執(zhí)行包括由所述處理器操縱所述狀態(tài)信息。
3.如權(quán)利要求2的方法,其中所述操縱包括采用至少一個由所述客戶程序發(fā)出并由所述處理器執(zhí)行的指令來操縱所述狀態(tài)信息。
4.如權(quán)利要求3的方法,其中所述至少一個指令包括設(shè)置緩沖區(qū)狀態(tài)指令和提取緩沖區(qū)狀態(tài)指令中的至少一個指令。
5.如權(quán)利要求1的方法,其中所述獲得包括從所述客戶程序接收所述緩沖區(qū)的所述指示。
6.如權(quán)利要求5的方法,其中所述客戶程序通過一個指令將所述緩沖區(qū)的所述指示傳輸給所述處理器。
7.如權(quán)利要求1的方法,其中所述緩沖區(qū)被與由標(biāo)記標(biāo)識的設(shè)備相關(guān)聯(lián),并且其中所述執(zhí)行包括檢查所述標(biāo)記的有效性;以及響應(yīng)于有效標(biāo)記的指示,繼續(xù)與所述緩沖區(qū)關(guān)聯(lián)的處理。
8.如權(quán)利要求1的方法,其中所述緩沖區(qū)是隊列的緩沖區(qū),并且其中所述執(zhí)行包括鎖定所述隊列以便執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理。
9.如權(quán)利要求8的方法,其中所述處理遇到異常,使得處理將由所述主機而不是所述處理器來完成,并且所述方法進一步包括將所述鎖的所有權(quán)從所述處理器傳遞給所述主機。
10.如權(quán)利要求1的方法,其中所述執(zhí)行包括標(biāo)識將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的一個或多個頁;以及將所述一個或多個頁釘在物理主機存儲器中。
11.如權(quán)利要求10的方法,其中通過設(shè)置緩沖區(qū)狀態(tài)指令來啟動所述釘住。
12.如權(quán)利要求10的方法,其中將被釘住的所述一個或多個頁中的一個頁是無效的,因為它沒有駐留在物理存儲器內(nèi),并且其中所述執(zhí)行進一步包括解決該頁以使其有效。
13.如權(quán)利要求12的方法,其中所述解決包括使用被提供給所述處理器的一個或多個可用描述符的列表來動態(tài)地解決所述無效頁,所述一個或多個可用描述符指定了可用于支持物理存儲器中的所述頁的一個或多個可用頁幀。
14.如權(quán)利要求10的方法,進一步包括判定所述緩沖區(qū)的一個或多個頁是否將被解除釘?。灰约敖獬鲆粋€或多個頁的釘住。
15.如權(quán)利要求14的方法,其中所述數(shù)據(jù)傳輸包括采用光纖通道協(xié)議,并且其中所述判定包括檢查輸入隊列上關(guān)于請求所述數(shù)據(jù)傳輸?shù)腎/O操作是否完成的指示,并且其中當(dāng)所述指示指出完成時執(zhí)行所述解除釘住。
16.如權(quán)利要求14的方法,其中通過提取緩沖區(qū)狀態(tài)指令來啟動所述解除釘住。
17.如權(quán)利要求14的方法,進一步包括在解除所述緩沖區(qū)的一個或多個頁的釘住之前,由所述處理器提取所述緩沖區(qū)的狀態(tài)。
18.如權(quán)利要求14的方法,進一步包括由所述處理器追蹤用于一個或多個頁的釘住和解除釘住操作中的至少一個操作。
19.如權(quán)利要求1的方法,其中所述執(zhí)行包括更改所述緩沖區(qū)的狀態(tài)。
20.如權(quán)利要求19的方法,其中所述更改狀態(tài)包括將所述狀態(tài)從程序擁有更改為適配器擁有。
21.如權(quán)利要求1的方法,其中所述獲得包括獲得將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的頁的標(biāo)識,并且其中所述執(zhí)行包括判定所述頁是否駐留在物理存儲器中;響應(yīng)于指出所述頁沒有駐留的所述判定,解決所述頁以使所述頁駐留;以及將所述頁釘在物理存儲器中。
22.如權(quán)利要求21的方法,其中所述數(shù)據(jù)傳輸被與一個輸入操作相關(guān)聯(lián),對于該輸入操作而言,所述頁的先前內(nèi)容不再被需要,并且其中所述解決包括將所述頁與先前被清除的頁幀相關(guān)聯(lián)。
23.如權(quán)利要求21的方法,其中所述獲得所述頁的所述標(biāo)識包括接收客戶數(shù)據(jù)結(jié)構(gòu),該客戶數(shù)據(jù)結(jié)構(gòu)包括所述頁的客戶程序指定,并且其中所述執(zhí)行進一步包括由所述處理器將所述客戶數(shù)據(jù)結(jié)構(gòu)的內(nèi)容的至少一部分復(fù)制到主機數(shù)據(jù)結(jié)構(gòu);從所述主機數(shù)據(jù)結(jié)構(gòu)取回將被用于判定所述頁是否駐留在物理存儲器內(nèi)的所述客戶程序指定;獲得所述頁的主機指定;以及將所述頁的所述主機指定置于所述主機數(shù)據(jù)結(jié)構(gòu)內(nèi),所述主機指定可用于數(shù)據(jù)傳輸。
24.如權(quán)利要求23的方法,進一步包括將所述緩沖區(qū)的狀態(tài)更改為適配器擁有,使得所述可分頁模式虛擬環(huán)境的適配器能夠訪問所述緩沖區(qū)。
25.如權(quán)利要求24的方法,其中所述適配器使用所述主機指定來訪問所述緩沖區(qū)的所述頁。
26.如權(quán)利要求23的方法,其中從所述客戶程序來接收所述客戶數(shù)據(jù)結(jié)構(gòu)。
27.如權(quán)利要求23的方法,進一步包括判定是否將執(zhí)行解除釘住操作;以及響應(yīng)于指出將執(zhí)行所述解除釘住操作的所述判定,執(zhí)行所述解除釘住操作。
28.如權(quán)利要求27的方法,其中所述緩沖區(qū)被與一個隊列相關(guān)聯(lián),并且其中所述方法包括鎖定所述隊列以便執(zhí)行對所述緩沖區(qū)的處理。
29.如權(quán)利要求28的方法,其中所述緩沖區(qū)對應(yīng)于由標(biāo)記標(biāo)識的設(shè)備,并且所述執(zhí)行處理進一步包括驗證所述標(biāo)記。
30.如權(quán)利要求1的方法,其中所述數(shù)據(jù)傳輸涉及通信適配器。
31.如權(quán)利要求1的方法,其中所述數(shù)據(jù)傳輸涉及光纖通道協(xié)議適配器。
32.如權(quán)利要求1的方法,進一步包括由所述客戶程序詢問所述緩沖區(qū)的狀態(tài)。
33.如權(quán)利要求32的方法,其中通過提取緩沖區(qū)狀態(tài)指令來進行所述詢問。
34.一種促進可分頁模式虛擬環(huán)境中的輸入/輸出(I/O)操作的處理的方法,所述方法包括由所述可分頁模式虛擬環(huán)境的處理器來處理在所述可分頁模式虛擬環(huán)境的虛擬機中運行的客戶程序的I/O操作,其中所述處理沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
35.如權(quán)利要求34的方法,其中所述I/O操作包括排隊直接I/O(QDIO)操作。
36.如權(quán)利要求35的方法,其中所述QDIO操作涉及通信適配器。
37.如權(quán)利要求35的方法,其中所述QDIO操作涉及光纖通道協(xié)議適配器。
38.一種促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸?shù)南到y(tǒng),所述系統(tǒng)包括一裝置,所述裝置用于由所述可分頁模式虛擬環(huán)境的處理器獲得將在數(shù)據(jù)傳輸中使用的緩沖區(qū)的指示,所述緩沖區(qū)被與運行在所述可分頁模式虛擬環(huán)境的可分頁模式虛擬機中的客戶程序相關(guān)聯(lián);以及一裝置,所述裝置用于由所述處理器執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理,以便允許數(shù)據(jù)傳輸,所述執(zhí)行沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
39.如權(quán)利要求38的系統(tǒng),進一步包括用于在主機存儲器中為所述緩沖區(qū)提供狀態(tài)信息的裝置,并且其中所述用于執(zhí)行的裝置包括用于由所述處理器操縱所述狀態(tài)信息的裝置。
40.如權(quán)利要求38的系統(tǒng),其中所述用于獲得的裝置包括用于從所述客戶程序接收所述緩沖區(qū)的所述指示的裝置。
41.如權(quán)利要求38的系統(tǒng),其中所述緩沖區(qū)被與由標(biāo)記標(biāo)識的設(shè)備相關(guān)聯(lián),并且其中所述用于執(zhí)行的裝置包括一裝置,所述裝置用于檢查所述標(biāo)記的有效性;以及一裝置,所述裝置用于響應(yīng)于有效標(biāo)記的指示,繼續(xù)與所述緩沖區(qū)關(guān)聯(lián)的處理。
42.如權(quán)利要求38的系統(tǒng),其中所述緩沖區(qū)是隊列的緩沖區(qū),并且其中所述用于執(zhí)行的裝置包括用于鎖定所述隊列以便執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理的裝置。
43.如權(quán)利要求42的系統(tǒng),其中所述處理遇到異常,使得處理將由所述主機而不是所述處理器來完成,并且所述系統(tǒng)進一步包括用于將所述鎖的所有權(quán)從所述處理器傳遞給所述主機的裝置。
44.如權(quán)利要求38的系統(tǒng),其中所述用于執(zhí)行的裝置包括一裝置,所述裝置用于標(biāo)識將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的一個或多個頁;以及一裝置,所述裝置用于將所述一個或多個頁釘在物理主機存儲器中。
45.如權(quán)利要求44的系統(tǒng),其中將被釘住的所述一個或多個頁中的一個頁是無效的,因為它沒有駐留在物理存儲器內(nèi),并且其中所述用于執(zhí)行的裝置進一步包括用于解決該頁以使其有效的裝置。
46.如權(quán)利要求45的系統(tǒng),其中所述用于解決的裝置包括用于使用被提供給所述處理器的一個或多個可用描述符的列表來動態(tài)地解決所述無效頁的裝置,所述一個或多個可用描述符指定了可用于支持物理存儲器中的所述頁的一個或多個可用頁幀。
47.如權(quán)利要求44的系統(tǒng),進一步包括一裝置,所述裝置用于判定所述緩沖區(qū)的一個或多個頁是否將被解除釘?。灰约耙谎b置,所述裝置用于解除所述一個或多個頁的釘住。
48.如權(quán)利要求47的系統(tǒng),進一步包括用于在解除所述緩沖區(qū)的一個或多個頁的釘住之前,由所述處理器提取所述緩沖區(qū)的狀態(tài)的裝置。
49.如權(quán)利要求47的系統(tǒng),進一步包括用于由所述處理器追蹤用于一個或多個頁的釘住和解除釘住操作中的至少一個操作的裝置。
50.如權(quán)利要求38的系統(tǒng),其中所述用于執(zhí)行的裝置包括用于更改所述緩沖區(qū)的狀態(tài)的裝置。
51.如權(quán)利要求38的系統(tǒng),其中所述用于獲得的裝置包括用于獲得將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的頁的標(biāo)識的裝置,并且其中所述用于執(zhí)行的裝置包括一裝置,所述裝置用于判定所述頁是否駐留在物理存儲器中;一裝置,所述裝置用于響應(yīng)于指出所述頁沒有駐留的所述判定,解決所述頁以使所述頁駐留;以及一裝置,所述裝置用于將所述頁釘在物理存儲器中。
52.如權(quán)利要求51的系統(tǒng),其中所述數(shù)據(jù)傳輸被與一個輸入操作相關(guān)聯(lián),對于該輸入操作而言,所述頁的先前內(nèi)容不再被需要,并且其中所述用于解決的裝置包括用于將所述頁與先前被清除的頁幀相關(guān)聯(lián)的裝置。
53.如權(quán)利要求51的系統(tǒng),其中所述用于獲得所述頁的所述標(biāo)識的裝置包括用于接收客戶數(shù)據(jù)結(jié)構(gòu)的裝置,該客戶數(shù)據(jù)結(jié)構(gòu)包括所述頁的客戶程序指定,并且其中所述用于執(zhí)行的裝置進一步包括一裝置,所述裝置用于由所述處理器將所述客戶數(shù)據(jù)結(jié)構(gòu)的內(nèi)容的至少一部分復(fù)制到主機數(shù)據(jù)結(jié)構(gòu);一裝置,所述裝置用于從所述主機數(shù)據(jù)結(jié)構(gòu)取回將被用于判定所述頁是否駐留在物理存儲器內(nèi)的所述客戶程序指定;一裝置,所述裝置用于獲得所述頁的主機指定;以及一裝置,所述裝置用于將所述頁的所述主機指定置于所述主機數(shù)據(jù)結(jié)構(gòu)內(nèi),所述主機指定可用于數(shù)據(jù)傳輸。
54.如權(quán)利要求53的系統(tǒng),進一步包括用于將所述緩沖區(qū)的狀態(tài)更改為適配器擁有,使得所述可分頁模式虛擬環(huán)境的適配器能夠訪問所述緩沖區(qū)的裝置。
55.如權(quán)利要求53的系統(tǒng),進一步包括一裝置,所述裝置用于判定是否將執(zhí)行解除釘住操作;以及一裝置,所述裝置用于響應(yīng)于指出將執(zhí)行所述解除釘住操作的所述判定,執(zhí)行所述解除釘住操作。
56.如權(quán)利要求55的系統(tǒng),其中所述緩沖區(qū)被與一個隊列相關(guān)聯(lián),并且其中所述系統(tǒng)包括用于鎖定所述隊列以便執(zhí)行對所述緩沖區(qū)的處理的裝置。
57.如權(quán)利要求56的系統(tǒng),其中所述緩沖區(qū)對應(yīng)于由標(biāo)記標(biāo)識的設(shè)備,并且所述用于執(zhí)行處理的裝置進一步包括用于驗證所述標(biāo)記的裝置。
58.如權(quán)利要求38的系統(tǒng),進一步包括用于由所述客戶程序詢問所述緩沖區(qū)的狀態(tài)的裝置。
59.一種促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸?shù)南到y(tǒng),所述系統(tǒng)包括所述可分頁模式虛擬環(huán)境的處理器,所述處理器適合于獲得將在數(shù)據(jù)傳輸中使用的緩沖區(qū)的指示,所述緩沖區(qū)被與運行在所述可分頁模式虛擬環(huán)境的可分頁模式虛擬機中的客戶程序相關(guān)聯(lián);并且所述處理器還適合于執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理,以便允許數(shù)據(jù)傳輸,所述執(zhí)行沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
60.一件制品,所述制品包括至少一個計算機可用介質(zhì),所述介質(zhì)具有計算機可讀程序代碼邏輯,以便管理促進可分頁模式虛擬環(huán)境中的數(shù)據(jù)傳輸,所述計算機可讀程序代碼邏輯包括獲得邏輯,以便由所述可分頁模式虛擬環(huán)境的處理器獲得將在數(shù)據(jù)傳輸中使用的緩沖區(qū)的指示,所述緩沖區(qū)被與運行在所述可分頁模式虛擬環(huán)境的可分頁模式虛擬機中的客戶程序相關(guān)聯(lián);以及執(zhí)行邏輯,以便由所述處理器執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理以允許數(shù)據(jù)傳輸,所述執(zhí)行沒有所述可分頁模式虛擬環(huán)境的主機的干預(yù)。
61.如權(quán)利要求60的制品,進一步包括提供邏輯,以便在主機存儲器中為所述緩沖區(qū)提供狀態(tài)信息,并且其中所述執(zhí)行邏輯包括操縱邏輯,以便由所述處理器操縱所述狀態(tài)信息。
62.如權(quán)利要求60的制品,其中所述獲得邏輯包括接收邏輯,以便從所述客戶程序接收所述緩沖區(qū)的指示。
63.如權(quán)利要求60的制品,其中所述緩沖區(qū)被與由標(biāo)記標(biāo)識的設(shè)備相關(guān)聯(lián),并且其中所述執(zhí)行邏輯包括檢查邏輯,以便檢查所述標(biāo)記的有效性;以及繼續(xù)邏輯,以便響應(yīng)于有效標(biāo)記的指示,繼續(xù)與所述緩沖區(qū)關(guān)聯(lián)的處理。
64.如權(quán)利要求60的制品,其中所述緩沖區(qū)是隊列的緩沖區(qū),并且其中所述執(zhí)行邏輯包括鎖定邏輯,以便鎖定所述隊列以執(zhí)行與所述緩沖區(qū)關(guān)聯(lián)的處理。
65.如權(quán)利要求64的制品,其中所述處理遇到異常,使得處理將由所述主機而不是所述處理器來完成,并且所述處理邏輯進一步包括傳遞邏輯,以便將所述鎖的所有權(quán)從所述處理器傳遞給所述主機。
66.如權(quán)利要求60的制品,其中所述執(zhí)行邏輯包括標(biāo)識邏輯,以便標(biāo)識將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的一個或多個頁;以及釘住邏輯,以便將所述一個或多個頁釘在物理主機存儲器中。
67.如權(quán)利要求66的制品,其中將被釘住的所述一個或多個頁中的一個頁是無效的,因為它沒有駐留在物理存儲器內(nèi),并且其中所述執(zhí)行邏輯進一步包括解決邏輯,以便解決該頁以使其有效。
68.如權(quán)利要求67的制品,其中所述解決邏輯包括用于使用被提供給所述處理器的一個或多個可用描述符的列表來動態(tài)地解決所述無效頁的邏輯,所述一個或多個可用描述符指定了可用于支持物理存儲器中的所述頁的一個或多個可用頁幀。
69.如權(quán)利要求66的制品,進一步包括判定邏輯,以便判定所述緩沖區(qū)的一個或多個頁是否將被解除釘??;以及解除釘住邏輯,以便解除所述一個或多個頁的釘住。
70.如權(quán)利要求69的制品,進一步包括提取邏輯,以便在解除所述緩沖區(qū)的一個或多個頁的釘住之前,由所述處理器提取所述緩沖區(qū)的狀態(tài)。
71.如權(quán)利要求69的制品,進一步包括追蹤邏輯,以便由所述處理器追蹤用于一個或多個頁的釘住和解除釘住操作中的至少一個操作。
72.如權(quán)利要求60的制品,其中所述用于執(zhí)行的執(zhí)行邏輯包括改更邏輯,以便更改所述緩沖區(qū)的狀態(tài)。
73.如權(quán)利要求60的制品,其中所述獲得邏輯包括用于獲得將在數(shù)據(jù)傳輸中使用的所述緩沖區(qū)的頁的標(biāo)識的邏輯,并且其中所述執(zhí)行邏輯包括判定邏輯,以便判定所述頁是否駐留在物理存儲器中;解決邏輯,以便響應(yīng)于指出所述頁沒有駐留的所述判定,解決所述頁以使所述頁駐留;以及釘住邏輯,以便將所述頁釘在物理存儲器中。
74.如權(quán)利要求73的制品,其中所述數(shù)據(jù)傳輸被與一個輸入操作相關(guān)聯(lián),對于該輸入操作而言,所述頁的先前內(nèi)容不再被需要,并且其中所述解決包括將所述頁與先前被清除的頁幀相關(guān)聯(lián)。
75.如權(quán)利要求73的制品,其中所述用于獲得所述頁的所述標(biāo)識的獲得邏輯包括接收邏輯,以便接收客戶數(shù)據(jù)結(jié)構(gòu),該客戶數(shù)據(jù)結(jié)構(gòu)包括所述頁的客戶程序指定,并且其中所述執(zhí)行邏輯進一步包括復(fù)制邏輯,以便由所述處理器將所述客戶數(shù)據(jù)結(jié)構(gòu)的內(nèi)容的至少一部分復(fù)制到主機數(shù)據(jù)結(jié)構(gòu);取回邏輯,以便從所述主機數(shù)據(jù)結(jié)構(gòu)取回將被用于判定所述頁是否駐留在物理存儲器內(nèi)的所述客戶程序指定;獲得邏輯,以便獲得所述頁的主機指定;以及放置邏輯,以便將所述頁的所述主機指定置于所述主機數(shù)據(jù)結(jié)構(gòu)內(nèi),所述主機指定可用于數(shù)據(jù)傳輸。
76.如權(quán)利要求75的制品,進一步包括更改邏輯,以便將所述緩沖區(qū)的狀態(tài)更改為適配器擁有,使得所述可分頁模式虛擬環(huán)境的適配器能夠訪問所述緩沖區(qū)。
77.如權(quán)利要求75的制品,進一步包括判定邏輯,以便判定是否將執(zhí)行解除釘住操作;以及執(zhí)行邏輯,以便響應(yīng)于指出將執(zhí)行所述解除釘住操作的所述判定,執(zhí)行所述解除釘住操作。
78.如權(quán)利要求77的制品,其中所述緩沖區(qū)被與一個隊列相關(guān)聯(lián),并且其中所述制品包括鎖定邏輯,以便鎖定所述隊列以執(zhí)行對所述緩沖區(qū)的處理。
79.如權(quán)利要求78的制品,其中所述緩沖區(qū)對應(yīng)于由標(biāo)記標(biāo)識的設(shè)備,并且所述用于執(zhí)行處理的執(zhí)行邏輯進一步包括驗證邏輯,以便驗證所述標(biāo)記。
80.如權(quán)利要求60的制品,進一步包括詢問邏輯,以便由所述客戶程序詢問所述緩沖區(qū)的狀態(tài)。
全文摘要
來自可分頁存儲模式客戶的輸入/輸出(I/O)操作請求在沒有主機干預(yù)的情況下被解釋。在可分頁模式虛擬環(huán)境中,由可分頁存儲模式客戶發(fā)出的請求被該環(huán)境的一個或多個處理器處理,而沒有來自該環(huán)境的一個或多個主機的干預(yù)。所述請求的處理包括由至少一個處理器代表所述客戶來操縱被存儲在主機存儲器內(nèi)的緩沖區(qū)狀態(tài)信息。所述操縱通過由所述客戶啟動并由一個或多個所述處理器處理的指令來執(zhí)行。
文檔編號G06F3/00GK1728685SQ20051007231
公開日2006年2月1日 申請日期2005年5月26日 優(yōu)先權(quán)日2004年5月27日
發(fā)明者J·R·伊斯頓, W·A·霍爾德, B·納茲, D·L·奧西賽克, G·E·西特曼, R·P·陶爾曹, L·W·梅姆恩 申請人:國際商業(yè)機器公司