国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于在32位aix內(nèi)核中自動更新64位域的方法和系統(tǒng)的制作方法

      文檔序號:6541729閱讀:272來源:國知局
      專利名稱:用于在32位aix內(nèi)核中自動更新64位域的方法和系統(tǒng)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明一般地涉及一種改進(jìn)的數(shù)據(jù)處理系統(tǒng)。具體地,本發(fā)明涉及用于在32位AIX內(nèi)核中原子地更新64位的域的方法、裝置和計(jì)算機(jī)指令。
      背景技術(shù)
      UNIX操作系統(tǒng)是一種多用戶操作系統(tǒng),其支持用于組織和維護(hù)文件的分層目錄結(jié)構(gòu)。與單個操作系統(tǒng)相反,UNIX是一類相似的操作系統(tǒng)。存在有許多不同的UNIX實(shí)現(xiàn),諸如高級交互執(zhí)行(AIX),一種由國際商業(yè)機(jī)器公司生產(chǎn)的UNIX版本。因?yàn)槊糠N實(shí)現(xiàn)都提供基本的UNIX命令的一個核心的集,所以每種實(shí)現(xiàn)的使用都是類似的。
      UNIX操作系統(tǒng)被組織為三個層次內(nèi)核、外殼和實(shí)用程序。內(nèi)核是管理用戶程序?qū)ο到y(tǒng)硬件和軟件資源的訪問的軟件,諸如調(diào)度任務(wù)、管理數(shù)據(jù)/文件訪問和存儲,以及執(zhí)行安全機(jī)制。外殼為每個用戶呈現(xiàn)一個提示符,解釋由用戶鍵入的命令,執(zhí)行用戶的命令,并且支持每個用戶的定制的環(huán)境。實(shí)用程序提供了為操作系統(tǒng)提供附加的功能的工具和應(yīng)用程序。
      在AIX操作系統(tǒng)內(nèi),內(nèi)核原子操作包括讀和寫共享位置的預(yù)留和條件存儲指令。預(yù)留指令和配對的條件存儲指令通常被稱為裝入并預(yù)留索引(LARX)指令和存儲條件索引(STCX)指令。具體地,LARX指令首先創(chuàng)建對存儲器位置的預(yù)留,以便由配對的STCX指令使用。隨后,如果所述的預(yù)留保持為有效,則執(zhí)行STCX指令。換言之,如果所述預(yù)留丟失了,則STCX操作中的條件存儲將不被執(zhí)行。如果在執(zhí)行配對的STCX指令之前,所述的存儲器位置已經(jīng)被CPU、另一個CPU或其它設(shè)備修改了,則由LARX指令設(shè)定的預(yù)留可能會丟失。在這種情況下,STCX不是執(zhí)行條件存儲指令,而是將設(shè)置狀態(tài)寄存器中的零位(zero bit)。檢測這個位的轉(zhuǎn)移指令將向后轉(zhuǎn)移以便再次重試該原子操作。以這種方式,原子代碼不斷地重取并條件地寫,直到它確定該存儲器位置在LARX和STCX指令的執(zhí)行之間沒有被修改為止。
      此外,AIX操作系統(tǒng)內(nèi)每次出現(xiàn)中斷時,預(yù)留也可能會丟失。當(dāng)發(fā)生中斷時,AIX內(nèi)核總是使用LARX/STCX操作處理中斷。然而,作為中斷的副作用,被中斷的程序的LARX預(yù)留將丟失。即使在處理中斷時所使用的LARX/STCX不在由第一個LARX預(yù)留所預(yù)留的存儲器位置進(jìn)行存儲,所述預(yù)留也將丟失。
      內(nèi)核原子操作允許在不大于CPU的自然字大小的對象上進(jìn)行操作。CPU字的大小是CPU可以一次處理的位的數(shù)目。例如,具有64位字大小的CPU可以一次對64位進(jìn)行操縱。雖然原子操作可用于在64位內(nèi)核下保持64位的量,一個關(guān)于當(dāng)可以使用64位硬件時在32位內(nèi)核中保持64位對象的問題是如果發(fā)生中斷,則64位寄存器的高32位可能會丟失。因?yàn)?2位的內(nèi)核不知道這些高位在那里預(yù)留著,所以高位可能被丟失。因此,由于32位的內(nèi)核不知道保護(hù)64位寄存器的高位,所以如果發(fā)生中斷,機(jī)器的寄存器中的64位的量將被安靜地截短為32位。
      現(xiàn)有的在32位內(nèi)核中保持64位對象的方法包含多個缺點(diǎn)。一種方法使用鎖,以便控制對數(shù)據(jù)對象的訪問。鎖是這樣一種機(jī)制,它控制在有許多執(zhí)行線程的環(huán)境中對資源的訪問。雖然可以使用鎖執(zhí)行并行控制策略,但是這種方法要求鎖必須在更新或訪問所述對象的代碼周圍被明確地鎖定和解鎖。另一種方法使用禁止(disablement)來提供串行化。中斷在更新或訪問所述對象的代碼周圍被禁止和重新啟用。然而,因?yàn)檫@些方法既給問題增加了空間開銷又給問題增加了時間開銷,所以這些方法是有問題的。
      假設(shè)AIX操作系統(tǒng)在處理中斷時總是使用LARX指令,在AIX操作系統(tǒng)中具有這樣一種機(jī)制是有利的,所述機(jī)制用于檢測潛在地破壞中斷(其引起由LARX指令設(shè)置的預(yù)留丟失)而不引來任何附加的代價(jià)。在AIX操作系統(tǒng)中具有一種用于如果發(fā)生中斷,則通過保護(hù)64位寄存器的高32位,在32位內(nèi)核中原子地更新64位的域的機(jī)制也是有利的。

      發(fā)明內(nèi)容
      本發(fā)明提供了一種用于在AIX32位內(nèi)核中原子地更新64位的域的方法、系統(tǒng)和計(jì)算機(jī)指令,其中底層硬件的具有64位能力的指令被用于構(gòu)造原子原語。本發(fā)明構(gòu)建在現(xiàn)有的原子操作之上,以便提供一種用于構(gòu)造原子原語的機(jī)制,以便在32位內(nèi)核中以類似于64位內(nèi)核的固有的、更方便的環(huán)境中的處理的方式使用,而沒有與使用鎖相關(guān)的開銷和問題。本發(fā)明認(rèn)識到,當(dāng)發(fā)生中斷時,AIX內(nèi)核在處理中斷時總是使用LARX/STCX操作。由于AIX操作系統(tǒng)總是使用LARX指令處理中斷,本發(fā)明允許檢測潛在地破壞中斷而不會引來任何附加的代價(jià),所述潛在地破壞中斷引起64位的內(nèi)容被丟失。由于這個AIX內(nèi)核行為保證到被中斷的程序的LARX預(yù)留的丟失,程序不需要禁止中斷,或是另外明確地試圖檢測程序已經(jīng)被中斷。
      此外,本發(fā)明允許通過保護(hù)64位寄存器的高32位,在32位內(nèi)核中原子地更新64位的域。本發(fā)明使用裝入雙字預(yù)留索引(LDARX)和存儲雙字條件索引(STDCX)指令創(chuàng)建原子原語,所述的原子原語在功能上等同于鎖。由于被AIX處理的中斷將間接地引起LDARX預(yù)留(原子操作的基礎(chǔ))被丟失,本發(fā)明的機(jī)制,在LARX和STCX指令之間的代碼路徑內(nèi),提供對來自作為輸入被傳入的寄存器對的“l(fā)onglong”(64位整數(shù))進(jìn)行組裝,并且然后將來自64位的寄存器的結(jié)果解組裝到將被作為函數(shù)值返回的寄存器對中。因此,64位對象的每個32位的部分被放置到寄存器的受保護(hù)的一側(cè)。64位寄存器的高位被預(yù)留,以便能夠返回64位對象被原子地增量之前的初始值。以這種方式,如果發(fā)生中斷,64位寄存器的高32位被保護(hù)起來。


      在所附的權(quán)利要求中提出了被認(rèn)為是本發(fā)明的特性的新穎性特征。然而通過結(jié)合附圖進(jìn)行閱讀,參考下面對示例的實(shí)施例的詳細(xì)說明,將會更好地理解本發(fā)明本身,以及使用的優(yōu)選模式,其進(jìn)一步的目的和優(yōu)點(diǎn),其中圖1是本發(fā)明可以被實(shí)現(xiàn)在其中的超標(biāo)量數(shù)據(jù)處理系統(tǒng)的方框圖;圖2是一個根據(jù)本發(fā)明的示例的處理,用于確定原子操作的子情況以便在執(zhí)行環(huán)境中使用;圖3是一個根據(jù)本發(fā)明的示例的操作,說明了在32位內(nèi)核下使用64位指令的64位取和加操作;和圖4是根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于在32位內(nèi)核中更新64位的量的處理的流程圖。
      具體實(shí)施例方式
      本發(fā)明提供一種用于在32位內(nèi)核中原子地更新64位的域的方法、裝置和計(jì)算機(jī)程序產(chǎn)品。提供下面的圖1作為本發(fā)明可以被實(shí)現(xiàn)在其內(nèi)的數(shù)據(jù)處理環(huán)境的示例圖。應(yīng)當(dāng)理解,圖1僅是示例,并且不旨在表明或暗示關(guān)于本發(fā)明可以被實(shí)現(xiàn)在其中的環(huán)境的任何限制??梢詫o出的環(huán)境做出許多修改而不脫離本發(fā)明的精神和范圍。
      現(xiàn)在參考附圖,圖1給出了本發(fā)明可以被實(shí)現(xiàn)在其中的超標(biāo)量數(shù)據(jù)處理系統(tǒng)的方框圖。數(shù)據(jù)處理系統(tǒng)100可以是PowerPC RISC處理器,其中在PowerPC RISC處理器指令集內(nèi),LARX和STCX指令還被指定為裝入字和預(yù)留索引(LWARX)及存儲字條件索引(STWCX)指令。具有其它指令集的其它處理器可以實(shí)現(xiàn)類似的指令,諸如LARX和STCX指令或其它的指令,這些指令提供了在保持存儲器一致性的同時,從多個處理器對存儲器的原子的存儲器訪問。
      在圖1中示出的示例實(shí)施例中,數(shù)據(jù)處理系統(tǒng)100包括單個集成電路超標(biāo)量微處理器。因此,處理器100包括各種執(zhí)行單元、寄存器、緩沖器、存儲器設(shè)備和其它的功能單元,它們?nèi)渴怯杉呻娐窐?gòu)成的。雖然此處說明的發(fā)明被用于微處理器,但是本發(fā)明的指令處理方案不限于微處理器,并且可以被實(shí)現(xiàn)在其它類型的處理器內(nèi)。
      數(shù)據(jù)處理系統(tǒng)100包括發(fā)出單元(ISU)125,下面將具體描述發(fā)出單元(ISU)125。發(fā)出單元125給予執(zhí)行單元130、140和150拒絕指令的能力。被拒絕的指令被保留在ISU125中,以便在稍后的時間再次發(fā)出。
      如圖1所示,數(shù)據(jù)處理系統(tǒng)100被通過總線接口單元(BIU)114和處理器總線115連接到系統(tǒng)總線113。系統(tǒng)總線113和處理器總線115兩者分別包括未示出的地址、數(shù)據(jù)和控制總線。BIU114參與總線仲裁,以便控制數(shù)據(jù)處理系統(tǒng)100和連接到系統(tǒng)總線113上的其它設(shè)備諸如主存儲器116和非易失大容量存儲117之間的信息傳輸。處理器100優(yōu)選地包括被連接到系統(tǒng)總線113的其它設(shè)備;然而,這些其它的設(shè)備對于理解本發(fā)明來說不是必須的,并且因此被從圖中省略掉,從而不會因不必要的細(xì)節(jié)使得本發(fā)明難以理解。
      此外,BIU114包括預(yù)留寄存器123,它為特定的數(shù)據(jù)地址建立有效的預(yù)留。典型地,LARX指令為特定的數(shù)據(jù)地址在預(yù)留寄存器123中放置預(yù)留。如果在系統(tǒng)總線113上發(fā)生了對所述預(yù)留地址的任何干涉遠(yuǎn)程存儲,則預(yù)留寄存器123中的有效預(yù)留將被丟失。遠(yuǎn)程存儲是其它處理器或輸入/輸出(I/O)設(shè)備在引用該地址的STCX指令之前引用了由LARX指令建立的該地址的結(jié)果。
      BIU114被連接到指令高速緩存和MMU(存儲器管理單元)118和數(shù)據(jù)高速緩存和MMU119。數(shù)據(jù)高速緩存和MMU119內(nèi)的高速緩存,諸如一級(L1)高速緩存102和二級(L2)高速緩存104使得數(shù)據(jù)處理系統(tǒng)100能夠?qū)崿F(xiàn)對以前被從主存儲器116傳輸?shù)剿龈咚倬彺嬷械臄?shù)據(jù)或指令子集相對快的訪問時間,因此提高了總體處理速度。數(shù)據(jù)高速緩存119和指令高速緩存118中存儲的每個數(shù)據(jù)和指令分別被以一個與主存儲器116中的各數(shù)據(jù)或指令的真實(shí)地址有關(guān)的有效地址識別和訪問。
      指令高速緩存和MMU118還被連接到順序取指令器120,順序取指令器120在每個處理器周期內(nèi)從指令高速緩存和MMU118取指令以便執(zhí)行。順序取指令器120將從指令高速緩存和MMU118取得的轉(zhuǎn)移指令傳輸?shù)睫D(zhuǎn)移處理單元(BPU)121以便執(zhí)行,并且在指令隊(duì)列122中臨時存儲順序指令,以便最后傳輸?shù)椒峙蓡卧?24,以便進(jìn)行解碼并分派到指令發(fā)出單元(ISU)125。
      在給出的示例實(shí)施例中,除了BPU121之外,數(shù)據(jù)處理系統(tǒng)100的執(zhí)行電路包括用于執(zhí)行順序指令的多個執(zhí)行單元,包括定點(diǎn)單元(FXU)130、裝入-存儲單元(LSU)140和浮點(diǎn)單元(FPU)150。每個執(zhí)行單元130、140和150通常在每個處理器周期內(nèi)執(zhí)行一個或多個特定類型的指令。
      FXU130使用從規(guī)定的通用寄存器(GPR)132接收的源操作數(shù)執(zhí)行定點(diǎn)算術(shù)和邏輯操作,諸如加、減、與、或和異或。在定點(diǎn)指令操作的執(zhí)行之后,F(xiàn)XU130在結(jié)果總線128上向與GPR132相關(guān)聯(lián)的GPR寄存器文件133輸出該指令的數(shù)據(jù)結(jié)果。此外,F(xiàn)XU130內(nèi)的條件寄存器(CR)112保存控制位,所述控制位指示GPR132內(nèi)的指令的條件。
      FPU150通常對從浮點(diǎn)寄存器(FPR)152接收的源操作數(shù)執(zhí)行單精度和雙精度浮點(diǎn)算術(shù)和邏輯操作,諸如浮點(diǎn)乘和浮點(diǎn)除。FPU150將執(zhí)行浮點(diǎn)指令所獲得的數(shù)據(jù)在結(jié)果總線128上輸出到臨時存儲所述結(jié)果數(shù)據(jù)的FPR寄存器文件153。
      LSU140通常執(zhí)行浮點(diǎn)和定點(diǎn)指令,這些指令或是從存儲器裝入數(shù)據(jù)或是向存儲器內(nèi)存儲數(shù)據(jù)。例如,LSU指令可以或是從數(shù)據(jù)高速緩存和MMU119或是從主存儲器116向選定的GPR132或FPR152裝入數(shù)據(jù)。其它的LSU指令可以從選定的GPR132或FPR152向主存儲器116存儲數(shù)據(jù)。例如,LARX指令當(dāng)被執(zhí)行時,可以使得數(shù)據(jù)被裝入選定的GPR132。此外,如果被適當(dāng)?shù)念A(yù)留啟用,STCX指令可以從選定的GPR132向主存儲器116存儲數(shù)據(jù)。
      與已有的原子原語相反,本發(fā)明在LDARX/STDCX循環(huán)中將任何依賴于64位的值的指令放置在寄存器中。例如,在fetch_and_add原子操作中,其目標(biāo)是返回64位對象的在其被原子地增量之前的初始值。為了在32位內(nèi)核中執(zhí)行這個任務(wù),初始的64位對象被在LDARX/STDCX循環(huán)中分解為兩個32位的部分。在準(zhǔn)備在LDARX/STDCX循環(huán)的保護(hù)下返回所述初始值時進(jìn)行這個處理。為了有助于進(jìn)行這個處理,右移雙字立即數(shù)(SRDI)指令被插入到LDARX和STDCX指令之間。SRDI指令被包括在內(nèi),以便將寄存器的內(nèi)容右移由立即數(shù)規(guī)定的位數(shù)。換言之,SRDI指令捕捉64位寄存器的初始的高32位,并且通過將它放置在另一個寄存器的低32位中來保護(hù)它。以這種方式,預(yù)留了64位寄存器的高32位,以便能夠返回64位對象被原子地增量之前的初始值。因此,64位對象的每個32位部分被放置在寄存器的受保護(hù)的一側(cè)。示例的原子服務(wù)將一個32位值原子地加到一個64位值上。如果被加的增量需要是一個64位的量,則在32位內(nèi)核環(huán)境中被傳遞到兩個寄存器的兩個部分需要再次被在LDARX/STDCX循環(huán)內(nèi)裝到一個64位的寄存器中。結(jié)果,當(dāng)中斷發(fā)生時,64位對象的高32位將被重構(gòu)。
      現(xiàn)在轉(zhuǎn)到圖2,圖2示出了根據(jù)本發(fā)明的優(yōu)選實(shí)施例用于確定原子操作的子情況以便在執(zhí)行環(huán)境中使用的示例操作。在這個示例性例子中,圖2中示出的程序被實(shí)現(xiàn)在諸如圖1中的數(shù)據(jù)處理系統(tǒng)100的數(shù)據(jù)處理系統(tǒng)中的AIX內(nèi)核內(nèi)。
      在這個示例性例子中,程序200被用于在定義于AIX內(nèi)核中的原子操作族中識別特定的子情況。例如,原子操作的子情況包括(1)64位內(nèi)核多處理器(MP)內(nèi)核(2)32位單處理器(UP)內(nèi)核(僅被32位硬件支持)(3)32位硬件上的32位多處理器(MP)內(nèi)核(4)64位硬件上的32位多處理器(MP)內(nèi)核原子操作的第一個子情況是64位多處理器(MP)內(nèi)核。對于這種子情況,64位內(nèi)核中的現(xiàn)有的可調(diào)用的服務(wù)可以被用于在64位內(nèi)核中更新64位的域。條件語句202示出,如果程序200識別出數(shù)據(jù)請求應(yīng)用于64位MP內(nèi)核204執(zhí)行環(huán)境,一個已有的子程序,諸如fetch_and_addlp服務(wù)206,被調(diào)用。
      原子操作的第二個子情況是32位單處理器(UP)內(nèi)核。由于UP內(nèi)核具有單一的處理器,可以通過禁止中斷提供串行化。條件語句208示出,如果程序200識別出數(shù)據(jù)請求應(yīng)用于32位UP內(nèi)核210執(zhí)行環(huán)境,中斷被禁止212。一旦雙字被增量214,則重新啟用中斷216。
      原子操作的第三個子情況是32位硬件上的32位多處理器(MP)內(nèi)核。在這種子情況中,64位對象的高位被保留以便用作內(nèi)鎖(即,互鎖位)。使用所述的內(nèi)鎖允許避免使用更昂貴的外鎖和鎖定服務(wù)。條件語句218示出如果程序200識別出數(shù)據(jù)請求應(yīng)用于32位MP內(nèi)核220執(zhí)行環(huán)境,則所述雙字被鎖定222,并且被在本地存儲器224內(nèi)增量。在低位字被存儲226之后,高位字被存儲228,這也釋放了所述的鎖。
      原子操作的第四個子情況是64位硬件上的32位內(nèi)核。由于底層硬件的具有64位能力的指令可以被用于仔細(xì)地構(gòu)造用于在32位AIX內(nèi)核下保持64位對象而不引來任何附加代價(jià)的原子原語,這種子情況是本發(fā)明特別關(guān)心的。條件語句230示出,如果程序200識別出數(shù)據(jù)請求應(yīng)用于64位硬件232執(zhí)行環(huán)境上的32位MP內(nèi)核,調(diào)用一個子程序,諸如acct_fetch_and_addll服務(wù)234,以便在32位內(nèi)核下使用64位指令執(zhí)行原子原語。下面將詳細(xì)說明acct_fetch_and_addll服務(wù)234。
      圖3是一個示例的原子操作,示出了根據(jù)本發(fā)明的優(yōu)選實(shí)施例的64位取和加操作。這個原子操作允許檢測預(yù)留是否因?yàn)橹袛喽呀?jīng)丟失。這個操作還允許在發(fā)生中斷的情況下通過轉(zhuǎn)移回并重新裝入64位寄存器的高32位原子地更新在32位內(nèi)核中64位的域。
      當(dāng)圖2中的程序200識別出數(shù)據(jù)請求應(yīng)用于64位硬件232執(zhí)行環(huán)境上的32位MP內(nèi)核時,這個原子操作可以被調(diào)用。在這個示例性的例子中,圖3中示出的操作被在諸如圖1中的數(shù)據(jù)處理系統(tǒng)100的數(shù)據(jù)處理系統(tǒng)內(nèi)的AIX內(nèi)核中實(shí)現(xiàn)。AIX操作系統(tǒng)被用于這個例子,因?yàn)樗谔幚碇袛鄷r總是使用LARX指令。
      在圖3中的示例性的例子中,示出了一個用于高級記賬的子程序。Acct_fetch_and_addll子程序300在32位內(nèi)核下使用64位指令執(zhí)行64位取和加指令??梢詮乃鎏幚憝h(huán)境中調(diào)用Acct_fetch_and_addll子程序300,并且可能產(chǎn)生頁面錯誤。Acct_fetch_and_addll子程序300不是與機(jī)器無關(guān)的。應(yīng)當(dāng)注意,雖然圖3中示出了fetch_and_add操作,其它的原子操作,諸如fetch_and_zero操作,也可以使用LDARX和SRDCX以同樣的方式被類似地構(gòu)造為原語。
      當(dāng)Acct_fetch_and_addll子程序300被調(diào)用時,裝入并預(yù)留指令,諸如裝入雙字預(yù)留索引(LDARX)指令302,設(shè)置處理器內(nèi)的預(yù)留位。所述預(yù)留邏輯為每個處理器保持預(yù)留標(biāo)志,以便指出預(yù)留被何時設(shè)置??梢援?dāng)從處理器接收到LDARX指令時設(shè)置這個標(biāo)志。所述預(yù)留與所述的位置和處理器相關(guān)聯(lián)。
      此外,初始的64位對象被如以LDARX裝入那樣分解成兩個32位的部分。在LDARX/STDCX循環(huán)的保護(hù)之下,在準(zhǔn)備返回所述初始值時執(zhí)行這個步驟。在增量步驟被執(zhí)行之后(例如,加304),被放置在LDARX和STDCX循環(huán)之中的右移雙字立即數(shù)(SRDI)指令306被執(zhí)行。SRDI指令被包括在內(nèi),以便將寄存器的內(nèi)容右移由所述立即數(shù)指定的位數(shù)。換言之,SRDI指令捕捉初始的高位字,并且將其放置在另一個寄存器的低位(受保護(hù)的)字中。以這種方式,64位寄存器的高32位被預(yù)留,以便能夠返回64位對象在其被原子地增量之前的初始值。如果被加的增量也必須是64位的量,被傳到32位內(nèi)核環(huán)境中的兩個寄存器中的所述的兩個部分將需要再次在LDARX/STDCX循環(huán)中被裝配在一個64位的寄存器內(nèi)。
      接著,存儲條件指令,諸如存儲雙字條件索引(STDCX)指令308,檢查所述預(yù)留并且確定該預(yù)留是否保持有效。如果預(yù)留是有效的,STDCX將新的值寫到該位置。以這種方式,如果發(fā)生中斷,64位寄存器的高32位將被預(yù)留。
      圖4是根據(jù)本發(fā)明的優(yōu)選實(shí)施例在32位內(nèi)核中更新64位的量的處理的流程圖。圖4中示出的處理可以被實(shí)現(xiàn)在數(shù)據(jù)處理系統(tǒng),諸如圖1中的數(shù)據(jù)處理系統(tǒng)100內(nèi)的AIX內(nèi)核中。在這個示例的例子中,原子原語被用于通過在發(fā)生中斷的情況下,保護(hù)64位寄存器的高32位,在32位內(nèi)核中原子地更新64位域。
      處理從確定數(shù)據(jù)請求是否應(yīng)用于64位硬件執(zhí)行環(huán)境上的32位MP內(nèi)核開始(步驟402)。如果不是,一個退出服務(wù)被調(diào)用(步驟404)。
      如果數(shù)據(jù)請求應(yīng)用于64位硬件執(zhí)行環(huán)境上的32位MP內(nèi)核,在32位內(nèi)核下使用64位指令的原子操作被調(diào)用(步驟406)。在該原子操作中,裝入并預(yù)留指令,諸如LDARX,為一個存儲器位置設(shè)置預(yù)留(步驟408)。接著,初始的64位對象被分解為兩個32位的部分(步驟410)。這被在準(zhǔn)備返回所述的初始值時,在LDARX/STDCX循環(huán)的保護(hù)下進(jìn)行。SRDI指令被執(zhí)行,以便將寄存器的內(nèi)容右移由所述立即數(shù)規(guī)定的位數(shù)(步驟412)。以這種方式,64位寄存器的高32位被保留,以便能夠返回64位對象被原子地增量之前的初始值。
      接著,存儲條件指令,諸如STDCX,檢查所述預(yù)留并且確定該預(yù)留是否保持有效(步驟414)。如果預(yù)留沒有丟失,存儲條件指令存儲該結(jié)果(步驟416)。如果存儲條件指令失敗(例如,發(fā)生了中斷,并且預(yù)留被丟失),則處理返回步驟408直到存儲條件操作返回成功為止。如果存儲條件成功了,所述的初始64位值已經(jīng)被分解到當(dāng)子程序在32位環(huán)境中必須返回64位值時所需的必需的寄存器對中。
      因此,本發(fā)明提供了一種用于構(gòu)造原子原語以便在32位內(nèi)核中以和64位內(nèi)核所固有的更方便的環(huán)境中的處理相類似的方式使用的方法、裝置和計(jì)算機(jī)指令。通過利用AIX操作系統(tǒng)使用LARX指令處理中斷的特性以檢測引起所有寄存器的高位部分內(nèi)的數(shù)據(jù)丟失的潛在地破壞中斷而不會引來任何附加的代價(jià),本發(fā)明提供了和當(dāng)前的系統(tǒng)相比的優(yōu)點(diǎn)。本發(fā)明使用裝入雙字預(yù)留索引(LDARX)和存儲雙字條件索引(STDCX)指令,沒有代價(jià)地創(chuàng)建了在功能上等同于鎖的原子原語。與64位內(nèi)核的已有的原語相似,本發(fā)明對于可分頁數(shù)據(jù)是有效的。以這種方式,本發(fā)明的機(jī)制允許創(chuàng)建可以被用在內(nèi)核代碼中而不用考慮特定的內(nèi)核或硬件環(huán)境的可以調(diào)用的服務(wù)。
      重要的是應(yīng)注意雖然已經(jīng)在功能完備的數(shù)據(jù)處理系統(tǒng)的背景下說明了本發(fā)明,本領(lǐng)域的普通技術(shù)人員將會理解,本發(fā)明的處理可以被以指令的計(jì)算機(jī)可讀的媒體形式以及本發(fā)明等同地適用的各種形式分發(fā),而不論實(shí)際用于執(zhí)行所述分發(fā)的信號承載介質(zhì)的特定類型是什么。計(jì)算機(jī)可讀介質(zhì)的例子包括可記錄類型的介質(zhì)和傳輸型介質(zhì),可記錄類型的介質(zhì)諸如軟盤、硬盤驅(qū)動器、RAM、CD-ROM、DVD-ROM,傳輸型介質(zhì)諸如數(shù)字和模擬通信鏈路、使用諸如射頻和光波傳輸?shù)膫鬏斝问降挠芯€和無線通信鏈路。計(jì)算機(jī)可讀介質(zhì)可以采用被編碼的格式,其被解碼以便在特定的數(shù)據(jù)處理系統(tǒng)內(nèi)實(shí)際使用。
      出于示例和說明的目的已經(jīng)給出了對本發(fā)明的描述,但該描述并不是旨在是無遺漏的或是將本發(fā)明限制為所披露的形式。許多修改和變化對于本領(lǐng)域的普通技術(shù)人員來說是顯而易見的。例如,雖然以在32位環(huán)境中更新64位的域說明了本發(fā)明,本發(fā)明還可以適用于其它的環(huán)境,其中底層硬件字的大小超過了執(zhí)行環(huán)境所支持的字的大小(例如,在16位環(huán)境中更新32位的域,在64位環(huán)境中更新128位的域等)。選擇并描述上述的實(shí)施例以便最好地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且使得其它的本領(lǐng)域的普通技術(shù)人員能夠理解本發(fā)明的具有適用于所構(gòu)想出的特定使用的各種修改的各種實(shí)施例。
      權(quán)利要求
      1.一種在數(shù)據(jù)處理系統(tǒng)中用于在第二位環(huán)境中原子地更新第一位域的方法,其中第一位域的字的大小超過由第二位環(huán)境所支持的字的大小,該方法包括響應(yīng)確定出數(shù)據(jù)請求應(yīng)用于第二位執(zhí)行環(huán)境中的第一位對象,執(zhí)行裝入并預(yù)留索引指令,其中裝入并預(yù)留索引指令產(chǎn)生對存儲器位置的預(yù)留;將第一位對象分解為低位和高位;在寄存器中保留高位,其中高位被預(yù)留以便允許在第二位執(zhí)行環(huán)境中返回第一位對象的初始值;并且執(zhí)行存儲條件索引指令,其中如果所述的預(yù)留保持有效,則存儲條件索引指令在所述的存儲器位置存儲結(jié)果。
      2.如權(quán)利要求1的方法,還包括如果存儲條件指令沒有被執(zhí)行,轉(zhuǎn)移回裝入和預(yù)留索引指令。
      3.如權(quán)利要求1的方法,其中裝入和預(yù)留索引指令是裝入和預(yù)留雙字索引指令。
      4.如權(quán)利要求1的方法,其中存儲條件索引指令是存儲條件雙字索引指令。
      5.如權(quán)利要求1的方法,其中在裝入和預(yù)留索引指令及存儲條件索引指令之間的指令包括右移雙字立即數(shù)指令。
      6.如權(quán)利要求1的方法,其中所述的高32位在裝入和預(yù)留索引/存儲條件索引循環(huán)的保護(hù)下被預(yù)留。
      7.如權(quán)利要求1的方法,其中所述的低32位被預(yù)留在寄存器的低位字,并且所述高32位被預(yù)留在另一個寄存器的低位字。
      8.如權(quán)利要求1的方法,其中所述的內(nèi)核是高級交互執(zhí)行內(nèi)核。
      9.如權(quán)利要求8的方法,其中高級交互執(zhí)行內(nèi)核在處理中斷時執(zhí)行裝入和預(yù)留索引指令。
      10.一種在數(shù)據(jù)處理系統(tǒng)中用于在32位執(zhí)行環(huán)境中原子地更新64位的域的方法,包括響應(yīng)確定出數(shù)據(jù)請求應(yīng)用于32位執(zhí)行環(huán)境中的64位對象,執(zhí)行裝入和預(yù)留索引指令,其中裝入和預(yù)留索引指令產(chǎn)生對存儲器位置的預(yù)留;將64位對象分解為低32位和高32位;在寄存器中預(yù)留高32位,其中高32位被預(yù)留以便允許在32位執(zhí)行環(huán)境中返回64位的對象的初始值;并且執(zhí)行存儲條件索引指令,其中如果所述的預(yù)留保持有效,則存儲條件索引指令在所述的存儲器位置存儲結(jié)果。
      11.一種用于在第二位環(huán)境中原子地更新第一位域的數(shù)據(jù)處理系統(tǒng),其中第一位域的字的大小超過由第二位環(huán)境所支持的字的大小,該方法包括第一執(zhí)行裝置,用于響應(yīng)確定出數(shù)據(jù)請求應(yīng)用于第二位執(zhí)行環(huán)境中的第一位對象,執(zhí)行裝入和預(yù)留索引指令,其中裝入和預(yù)留索引指令產(chǎn)生對存儲器位置的預(yù)留;分解裝置,用于將第一位對象分解為低位和高位;預(yù)留裝置,用于在寄存器中預(yù)留高位,其中高位被預(yù)留以便允許在第二位執(zhí)行環(huán)境中返回第一位對象的初始值;和第二執(zhí)行裝置,用于執(zhí)行存儲條件索引指令,其中如果所述的預(yù)留保持有效,則存儲條件索引指令在所述的存儲器位置存儲結(jié)果。
      12.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),還包括轉(zhuǎn)移裝置,用于如果存儲條件指令沒有被執(zhí)行,轉(zhuǎn)移回裝入和預(yù)留索引指令。
      13.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中裝入和預(yù)留索引指令是裝入和預(yù)留雙字索引指令。
      14.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中存儲條件索引指令是存儲條件雙字索引指令。
      15.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中在裝入和預(yù)留索引指令和存儲條件索引指令之間的指令包括右移雙字立即數(shù)指令。
      16.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中所述的高32位在裝入和預(yù)留索引/存儲條件索引循環(huán)的保護(hù)下被預(yù)留。
      17.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中所述的低32位被預(yù)留在寄存器的低位字,并且所述高32位被預(yù)留在另一個寄存器的低位字。
      18.如權(quán)利要求11的數(shù)據(jù)處理系統(tǒng),其中所述的內(nèi)核是高級交互執(zhí)行內(nèi)核。
      19.如權(quán)利要求18的數(shù)據(jù)處理系統(tǒng),其中高級交互執(zhí)行內(nèi)核在處理中斷時執(zhí)行裝入和預(yù)留索引指令。
      20.一種計(jì)算機(jī)可讀介質(zhì)中用于在第二位環(huán)境中原子地更新第一位的域的計(jì)算機(jī)程序產(chǎn)品,其中第一位域的字的大小超過由第二位環(huán)境所支持的字的大小,該方法包括第一指令,用于響應(yīng)確定出數(shù)據(jù)請求應(yīng)用于第二位執(zhí)行環(huán)境中的第一位對象,執(zhí)行裝入和預(yù)留索引指令,其中裝入和預(yù)留索引指令產(chǎn)生對存儲器位置的預(yù)留;第二指令,用于將第一位對象分解為低位和高位;第三指令,用于在寄存器中預(yù)留高位,其中高位被預(yù)留,以便允許在第二位執(zhí)行環(huán)境中返回第一位的對象的初始值;和第四指令,用于執(zhí)行存儲條件索引指令,其中如果所述的預(yù)留保持有效,則存儲條件索引指令在所述的存儲器位置存儲結(jié)果。
      21.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,還包括第五指令,用于如果存儲條件索引指令沒有被執(zhí)行,轉(zhuǎn)移回裝入和預(yù)留索引指令。
      22.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中裝入和預(yù)留索引指令是裝入和預(yù)留雙字索引指令。
      23.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中存儲條件索引指令是存儲條件雙字索引指令。
      24.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中在裝入和預(yù)留索引指令和存儲條件索引指令之間的指令包括右移雙字立即數(shù)指令。
      25.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中所述的高32位在裝入和預(yù)留索引/存儲條件索引指令循環(huán)的保護(hù)下被預(yù)留。
      26.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中所述的低32位被預(yù)留在寄存器的低位字,并且所述高32位被預(yù)留在另一個寄存器的低位字。
      27.如權(quán)利要求20的計(jì)算機(jī)程序產(chǎn)品,其中所述的內(nèi)核是高級交互執(zhí)行內(nèi)核。
      28.如權(quán)利要求27的計(jì)算機(jī)程序產(chǎn)品,其中高級交互執(zhí)行內(nèi)核在處理中斷時執(zhí)行裝入和預(yù)留索引指令。
      全文摘要
      一種用于在32位的AIX內(nèi)核中原子地更新64位域的方法、系統(tǒng)和計(jì)算機(jī)指令,其中底層硬件的具有64位能力的指令被用于構(gòu)造原子原語。如果數(shù)據(jù)請求應(yīng)用于64位硬件執(zhí)行環(huán)境上的32位內(nèi)核,裝入和預(yù)留指令為一存儲器位置設(shè)置預(yù)留。初始的64位的數(shù)據(jù)對象被分解為兩個32位的部分。右移雙字立即數(shù)(SRDI)指令捕捉64位寄存器的高位。如果存儲條件索引指令確定所述的預(yù)留沒有被丟失,則存儲條件指令存儲結(jié)果。如果存儲條件指令失敗了,處理返回預(yù)留指令,直到存儲條件操作返回成功為止。
      文檔編號G06F9/30GK1719402SQ20051005918
      公開日2006年1月11日 申請日期2005年3月24日 優(yōu)先權(quán)日2004年7月8日
      發(fā)明者拉里·伯特·勃倫納 申請人:國際商業(yè)機(jī)器公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1