事務(wù)存儲器的主分支指令的制作方法
【專利摘要】本發(fā)明提供了一種使能計算機程序的執(zhí)行從而從一個代碼段分支到另一代碼段的主分支指令。這些指令還在其他代碼段創(chuàng)建新處理流,使能要與由其得到分支的代碼段并行執(zhí)行的其它代碼段的執(zhí)行。在一個例子中,其他處理流開始用于處理其他處理流的指令的事務(wù)。
【專利說明】事務(wù)存儲器的主分支指令
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的一方面總的來說涉及計算機程序,并且特別地涉及計算機程序中使用的分支指令。
【背景技術(shù)】
[0002]計算機程序(亦成為:程序或者應(yīng)用程序)是為了在計算機環(huán)境中執(zhí)行特定任務(wù)編寫的指令的序列。每個指令執(zhí)行特定操作,諸如加、減、移動、位移、比較、存儲和裝載,僅列舉幾個例子。處理器以序列順序取出指令,除非特定指令引導(dǎo)在不同位置連續(xù)的處理。例如,代替取出下一個序列指令,分支指令可以引導(dǎo)處理器取出該程序中位于不同位置的指令。平均地,程序每4到5個指令就有分支。
[0003]在某些計算機微體系結(jié)構(gòu)中,執(zhí)行指令以在下一個指令開始之前完成。然而,在其他微體系結(jié)構(gòu)中,利用管道化來增加能夠同時執(zhí)行的指令的數(shù)量。在管道化中,將指令的處理分割為在管道內(nèi)執(zhí)行的多個獨立步驟,諸如取出、解碼、調(diào)度、發(fā)布、執(zhí)行和完成以及可能的其他步驟。當(dāng)在管道中完成指令的第一步驟(例如,取出)時,然后可以開始另一個指令,
坐坐寸寸ο
[0004]管道化還促進(jìn)不按程序中位置順序地執(zhí)行指令。例如,發(fā)布步驟與發(fā)布隊列相關(guān)聯(lián),該發(fā)布隊列按照程序順序地接收指令。發(fā)布隊列負(fù)責(zé)保持每個指令,直到該指令所需的數(shù)據(jù)(例如,操作數(shù))可用為止,然后,其發(fā)布用于執(zhí)行的指令。如果一個指令的數(shù)據(jù)在另一個指令的數(shù)據(jù)之前可用,則即使在程序中另一個指令在第一個,仍能夠在另一個指令之前發(fā)出該一個指令來執(zhí)行(非順序處理)。例如,如果要執(zhí)行指令A(yù)、B和C,其中A最早,而C最新,如果B取決于A,而C不取決于A或者B,則能夠以A、C、B的順序發(fā)布指令,從而以較高的速率使用管道,并且允許指令被快速地處理。
[0005]然而,非順序處理受到可以非順序處理指令的有限大小的非順序窗口 /隊列的制約。發(fā)布窗口通常是100個指令或者不到100個指令,并且將指令重新排回其原始順序的重排序窗口通常是200個指令或者不到200個指令,其中100個是200個的子集。
【發(fā)明內(nèi)容】
[0006]通過提供執(zhí)行機器指令的計算機程序產(chǎn)品,克服現(xiàn)有技術(shù)的缺陷并且提供優(yōu)點。該計算機程序產(chǎn)品包括計算機可讀存儲介質(zhì),處理電路可讀該計算機可讀存儲介質(zhì),并且該計算機可讀存儲介質(zhì)存儲用于執(zhí)行方法的處理電路的執(zhí)行的指令。該方法包括例如:由處理器獲得用于執(zhí)行的機器指令,根據(jù)計算機體系結(jié)構(gòu),定義用于計算機執(zhí)行的機器指令,該機器指令包括:至少一個操作碼字段,用于規(guī)定操作碼,該操作碼定義分支操作;以及用于確定要分支的目標(biāo)位置的至少一個字段;并且在第一處理流中執(zhí)行機器指令,該執(zhí)行包括:開始第二處理流,該第二處理流與第一處理流有關(guān)系;以及開始第二處理流的事務(wù),該事務(wù)包括執(zhí)行在利用機器指令的至少一個字段定義的目標(biāo)位置開始的一個或者多個指令,一個或者多個指令不按第一處理流處理的一個或者多個指令的序列執(zhí)行順序,第一處理流繼續(xù)到處理該機器指令后面的一個或者多個指令,并且其中推測執(zhí)行第二處理流在于,即使通過處理第一處理流到達(dá)第二處理流的至少一個指令是暫定的,仍執(zhí)行第二處理流的一個或者多個指令中的至少一個指令,并且其中,根據(jù)在處理中到達(dá)預(yù)定點的第一處理流,執(zhí)行利用第二處理流的一個或者多個指令更新體系結(jié)構(gòu)化狀態(tài)。
[0007]在此還描述并且要求保護(hù)根據(jù)本發(fā)明的一個或者多個方面的方法和系統(tǒng)。此外,還描述并且可以要求保護(hù)根據(jù)本發(fā)明的一個或者多個方面的服務(wù)。
[0008]利用本發(fā)明的技術(shù)實現(xiàn)其他特征和優(yōu)點。在此詳細(xì)描述了本發(fā)明的其他實施例和方面,并且本發(fā)明的其他實施例和方面被認(rèn)為是要求保護(hù)的發(fā)明的一部分。
【專利附圖】
【附圖說明】
[0009]在概括說明中,作為權(quán)利要求書中的例子,特別指出并且明確要求保護(hù)本發(fā)明的一個或者多個方面。根據(jù)下面結(jié)合附圖所做的詳細(xì)描述,本發(fā)明的上述以及一個或者多個方面的目的、特征和優(yōu)點顯而易見,其中:
[0010]圖1A示出并入并且采用本發(fā)明的一個或者多個方面的計算環(huán)境的一個實施例;
[0011]圖1B示出并入并且采用本發(fā)明的一個或者多個方面的計算環(huán)境的另一個實施例;
[0012]圖1C示出根據(jù)本發(fā)明的方面的圖1B的存儲器的進(jìn)一步細(xì)節(jié);
[0013]圖2A示出指令管道的現(xiàn)有設(shè)計的一個例子;
[0014]圖2B示出根據(jù)本發(fā)明另一方面的指令管道的另一種設(shè)計的一個例子;
[0015]圖3示出根據(jù)本發(fā)明一個方面,包括一個或者多個分支的程序的一部分的例子;
[0016]圖4A示出根據(jù)本發(fā)明的一個方面,一般分支指令的格式的一個例子;
[0017]圖4B示出根據(jù)本發(fā)明的一個方面,一般分支指令的格式的另一個例子;
[0018]圖5示出根據(jù)本發(fā)明的一個方面,與處理主分支相關(guān)聯(lián)的邏輯的一個例子;
[0019]圖6示出根據(jù)本發(fā)明的一個方面,與利用事務(wù)存儲器處理主分支相關(guān)聯(lián)的邏輯的一個例子。
[0020]圖7示出并入本發(fā)明的一個或者多個方面的計算機程序產(chǎn)品的一個實施例;
[0021]圖8示出并入并且采用本發(fā)明的一個或者多個方面的主計算機系統(tǒng)的一個實施例;
[0022]圖9示出并入并且采用本發(fā)明的一個或者多個方面的計算機系統(tǒng)的又一個例子;
[0023]圖10示出并入并且采用本發(fā)明的一個或者多個方面的包括計算機網(wǎng)絡(luò)的計算機系統(tǒng)的另一個例子;
[0024]圖11示出并入并且采用本發(fā)明的一個或者多個方面的計算機系統(tǒng)的各種元件的一個實施例;
[0025]圖12A示出并入并且采用本發(fā)明的一個或者多個方面的圖11所示的計算機系統(tǒng)的執(zhí)行單元的一個實施例;
[0026]圖12B示出并入并且采用本發(fā)明的一個或者多個方面的圖11所示的計算機系統(tǒng)的分支單元的一個實施例;
[0027]圖12C示出并入并且采用本發(fā)明的一個或者多個方面的圖11所示的計算機系統(tǒng)的裝載/存儲單元的一個實施例;
[0028]圖13示出并入并且采用本發(fā)明的一個或者多個方面的模擬主計算機系統(tǒng)的一個實施例。
【具體實施方式】
[0029]以代碼(例如,源代碼)編寫包括要執(zhí)行的單獨指令的程序。存在互相無關(guān)的代碼段(還稱為部分、區(qū)域等),然而,使這些段的開始/進(jìn)入點分離得大于硬件非順序窗口。由于根據(jù)兩點之間的執(zhí)行指令的數(shù)量,它們被分離得大于非順序窗口,所以在此稱為次分支的現(xiàn)有分支不能以實時方式到達(dá)第一段的非順序窗口中,從而相對于根據(jù)第一段非順序地執(zhí)行第二段的指令。為了解決該問題,根據(jù)本發(fā)明的一個方面,將主分支設(shè)置為從一個代碼段分支到另一個代碼段,從而使得非順序窗口比只有硬件能夠看到的大(即,為了進(jìn)入非順序窗口 /隊列能夠跨越的代碼的量較大,盡管非順序窗口 /隊列保留相同的物理尺寸(例如,支持100個指令;該100個指令來自指令的多個線程,如下所述))。
[0030]根據(jù)本發(fā)明的一個方面,假定主分支指令能夠執(zhí)行從一個代碼段到另一個代碼段的分支。這些指令在其他代碼段創(chuàng)建新執(zhí)行流或者執(zhí)行線程,使得能夠與從其得到分支的代碼段并行地執(zhí)行其他代碼段。
[0031]在一個例子中,新流的執(zhí)行是抽象的,在于不知道第一流的處理實際上是否將到達(dá)新流的指令(即,到達(dá)新流的第一流是暫定的)。能夠執(zhí)行新流的一個或者多個指令,但是處理第一流占用不同的路徑并且不到達(dá)新流。
[0032]參考圖1A描述并入并且采用本發(fā)明的一個或者多個方面的計算環(huán)境的一個實施例。例如,計算環(huán)境100包括:處理器102 (例如,中央處理單元);存儲器104 (例如,主存儲器);以及一個或者多個輸入/輸出(I/O)裝置和/或者接口 106,其通過例如一個或者多個總線108和/或者其他連接互相耦合。
[0033]在一個例子中,處理器102是作為國際商用機器公司(IBM?), Armonk, New York提供的System z?服務(wù)器的一部分的處理器。國際商用機器公司提供的System z?服務(wù)器實現(xiàn)z/Arcliitecture?,該z/Architecture?規(guī)定計算機的邏輯結(jié)構(gòu)和功能操作。在2010年8月份的編號為SA22-7832-08的第九版IBM?出版物中標(biāo)題為“z/Architecture Principles of Operat1n”的 IBTVi? 出版物描述了 z/Architecture?帕一個實施例。在一個例子中,處理器執(zhí)行操作系統(tǒng),諸如也由國際商用機器公司IBM?提供的z/OS?, z/Architecture? 和z/OS?,是國際商用機器公司 Armonk, New York, USA 的注冊商標(biāo)。在此使用的其他名稱可以是國際商用機器公司或者其他公司的注冊商標(biāo)、商標(biāo)或者產(chǎn)品名稱。
[0034]參考圖1B描述并入并且采用本發(fā)明的一個或者多個方面的計算環(huán)境的另一個實施例。在該例子中,計算環(huán)境20包括例如通過例如一個或者多個總線128和/或者其他連接耦合在一起的:本機中央處理單元122、存儲器124、以及一個或者多個輸入/輸出裝置和/或者接口 126。作為例子,計算環(huán)境120可以包括:國際商用機器公司處理器Armonk,New
York提供的PowerPC?處理器、pSeries?.服務(wù)器或者xSeries?,服務(wù)器;惠普公司PaloAlto, California 提供的具有 Intel Itanium 11? 處理器的 HP Superdome ;以及 / 或者基于由IBM, Hewlett Packard, Intel, Sun Microsystems等提供的體系結(jié)構(gòu)的其他機器。PowerPC?、pSeries?:和xSeries? 是國際商用機器公司處理器 Armonk, New York, USA
的注冊商標(biāo)。Intel?he Itanium II?,是英特爾公司,Santa Clara, California的注冊商標(biāo)。
[0035]本機中央處理單元122包括一個或者多個本機寄存器130,諸如在該環(huán)境下的處理期間采用的一個或者多個通用寄存器和/或者一個或者多個專用寄存器。這些寄存器包括表示在任何特定時點的環(huán)境狀態(tài)。
[0036]此外,本機中央處理單元122執(zhí)行存儲在存儲器124內(nèi)的指令和代碼。在一個特定例子中,中央處理單元執(zhí)行存儲在存儲器124中的模擬代碼132。該代碼使得在一個體系結(jié)構(gòu)中配置的計算環(huán)境模擬另一個體系結(jié)構(gòu)。例如,模擬代碼132使基于z/Arch.1.tecture?-
之外的體系結(jié)構(gòu)的機器,諸如PowerPC?處理器、pSeries?服務(wù)器、xSeries?,服務(wù)器、
HP Superdome服務(wù)器等模擬z/'Architecture?并且執(zhí)行基于z/Architecture?開發(fā)的軟件和指令。
[0037]將參考圖1C描述關(guān)于模擬代碼132的更多詳情。來賓指令150包括為了在本機CPU 122之外的體系結(jié)構(gòu)中執(zhí)行而開發(fā)的軟件指令(例如,機器指令)。例如,已經(jīng)設(shè)計來賓指令150來在z/Architecture處理器102上執(zhí)行,但是在本機CPU 122上模擬(例如,
imel? Itanium II?處理器)。在一個例子中,模擬代碼132包括指令取出單元152,該指令取出單元152從存儲器124獲取一個或者多個來賓指令150,并且任選地對獲得的指令提供本地高速緩存。模擬代碼132還包括指令翻譯例程154,以確定已經(jīng)獲得的來賓指令的類型,并且將來賓指令翻譯為一個或者多個相應(yīng)本地指令156。該翻譯包括例如識別來賓指令要執(zhí)行的功能以及選擇執(zhí)行該功能的本機指令。
[0038]此外,模擬器132包括模擬控制例程160,以使得執(zhí)行本機指令。模擬控制例程160可以使本機CPU 122執(zhí)行模擬一個或者多個先前獲得的來賓指令的本機指令的例程,并且在該執(zhí)行結(jié)束時,使控制返回指令取出例程來模擬獲得下一個來賓指令或者一組來賓指令。執(zhí)行本機指令156可以包括將數(shù)據(jù)從存儲器124裝載到寄存器中;將數(shù)據(jù)從寄存器存回存儲器;或者執(zhí)行由翻譯例程確定的某些類型的算術(shù)或者邏輯操作。
[0039]每個例程例如都以存儲在存儲器中并且由本機中央處理單元122執(zhí)行的軟件實現(xiàn)。在其他例子中,以固件、硬件、軟件或者其某些組合實現(xiàn)一個或者多個例程或者操作??梢岳帽緳CCPU的寄存器130,也可以利用存儲器124內(nèi)的位置模擬該模擬處理器的寄存器。在實施例中,來賓指令150、本機指令156以及模擬代碼132可以駐留在同一個存儲器中,或者在不同存儲裝置之間分配。
[0040]在此使用的固件包括例如處理器的微代碼、毫碼和/或者宏碼。其包括例如在實現(xiàn)較高級機器代碼時使用的硬件級指令和/或者數(shù)據(jù)結(jié)構(gòu)。在一個實施例中,其包括例如典型地作為微代碼傳送的私有代碼(proprietary code),該私有代碼包括可信軟件或者對基礎(chǔ)硬件專用的微代碼,并且控制操作系統(tǒng)訪問系統(tǒng)硬件。
[0041]在一個例子中,獲得、翻譯和執(zhí)行的來賓指令150是在此描述的分支指令。從存儲器取出作為z/Architecture?.指令的指令,翻譯并且表示為執(zhí)行的本機指令156的序列(例如,PowerPC?、pSeries?、xSeries?, Intel?等)
[0042]在另一個實施例中,在另一個體系結(jié)構(gòu)環(huán)境中執(zhí)行一個或者多個指令,該另一個體系結(jié)構(gòu)環(huán)境包括例如在〃 Intel? 64and IA_32Architectures SoftwareDeveloper’s Manual Volume 1,"Order N0.253665-022US, 2006 年 11 月.:' Intel?64and IA_32Architecture Software Developer’s Manual Volume 2A,"OrderN0.253666-022US,2006 年 11 月;the〃 Intel? Itanium? Architecture SoftwareDeveloper's Manual Volume I, "Doc.N0.245317-005,2006 年 I 月;the〃 Intel?Itanium? Architecture Software Developer’s Manual Volume 2,〃Doc.N0.245318-005, 2006 年 I 月;和 / 或者 the" Intel? Itanium? Architecture SoftwareDeveloper's Manual Volume 3, "Doc.N0.245319-005,2006 年 I 月中描述的體系結(jié)構(gòu)。
[0043]在一個實施例中,處理器可以以同步多線程(SMT)模式或者單線程模式執(zhí)行。在同步多線程模式中,處理器能夠同時執(zhí)行多個獨立執(zhí)行的線程。如下面的詳細(xì)描述中所述,可以利用線程執(zhí)行計算機程序的一個或者多個指令。
[0044]如上所述,為了處理計算機程序的指令,采用指令管道,將參考圖2A — 2B描述其例子。參考圖2A,在現(xiàn)有設(shè)計中,以順序200執(zhí)行每個指令的如下步驟:指令取出(1-Fektch)、指令解碼、分組(例如,對于如何通過管道跟蹤指令對指令分組)、以及指令調(diào)度。即,如果指令A(yù)首先在程序中,然后是指令B,則在指令B的那些步驟之前執(zhí)行指令A(yù)的取出、解碼、分組以及調(diào)度。然而,可以在完成指令A(yù)的步驟之前開始指令B的步驟;例如,在完成取出指令A(yù)后,但是在完成解碼指令A(yù)之前,就可以開始取出指令B。這些步驟中的每一個也可以并行地關(guān)于多于一個單一指令工作。
[0045]然而,可以以非順序202執(zhí)行指令發(fā)布、指令執(zhí)行以及重新排序的步驟。例如,可以在未完成的指令A(yù)之前執(zhí)行指令B。再以非順序204執(zhí)行指令的完成(例如,校驗點化(checkpointing)),使得例如指令A(yù)在指令B之前完成。強迫順序完成的一個原因是允許精確異常檢測并且報告相對于體系結(jié)構(gòu)行為非法的指令。
[0046]根據(jù)本發(fā)明的一個方面,提供了另一種設(shè)計的指令管道,在該指令管道中,能夠非順序地執(zhí)行多個處理。例如,如圖2B所示,在以順序252執(zhí)行完成步驟的同時,能夠以非順序250執(zhí)行指令取出、解碼、分組、調(diào)度、發(fā)布、執(zhí)行和重新排序。例如,在主分支指令的處理中采用該設(shè)計,如在此所述。(盡管在此描述了各種指令步驟,但是在其他例子中可以采用更多、更少或者不同的步驟。)
[0047]在此稱為次分支的一種分支定義要執(zhí)行的程序中的下一個指令。該下一個指令不是程序的序列順序的下一個指令,而仍是當(dāng)前正在執(zhí)行的操作流的一部分(例如,線程)。與次分支相反的是根據(jù)本發(fā)明的一個方面提供的被稱為主分支的另一種分支。主分支定義代碼點(目標(biāo)地址),該代碼點不是序列程序順序中的下一個并且不是當(dāng)前正在執(zhí)行的處理流的一部分,相反地,該代碼點將作為新處理流(線程)的一部分被執(zhí)行。將參考圖3進(jìn)一步描述這種分支。
[0048]參考圖3,示出了計算機程序300 (或者其一部分)的一個例子,計算機程序300的一個例子包括多個指令。計算機程序的第一指令是指令A(yù) 302。以指令A(yù)開始處理并且以序列順序進(jìn)行到指令B 304、指令C 306以及指令D310。在該例子中,指令D是對目標(biāo)Y 340的主分支開啟指令。執(zhí)行主分支開啟指令,以使第二流(在此稱為子流)開始/開啟(例如,激活SMT處理器上的,在此被稱為子線程的第二線程)。第一流(在此稱為父流)繼續(xù)處理指令E 312、指令F 314以及指令G 320。指令G分支到目標(biāo)X 322,在目標(biāo)X322,處理指令M 324,之后處理指令N 326和O 328。作為第一流的一部分,處理這些指令,由于處于指令G的分支是次分支,并且不使得開始/開啟處理另一個流。
[0049]根據(jù)本發(fā)明的一方面,處理主分支OPEN之后的父流(即,一個或者多個指令E、F、G、M、N和O)與處理子流(即,一個或者多個指令T 342、U344和V 346)并行。
[0050]在該例子中,指令O是主分支關(guān)閉指令,該主分支關(guān)閉指令分支到目標(biāo)Y 340。該關(guān)閉指令意味著父線程已經(jīng)追上主分支OPEN的目標(biāo)地址。此時,子線程變成父線程,并且對父線程分配的線程資源可用于進(jìn)一步處理(例如,作為另一個子線程)。
[0051]可用線程的數(shù)量取決于處理器的體系結(jié)構(gòu)。例如,對于SMT-2處理器,有兩個線程可用,并且因此,能夠開始一個子(亦成為:支持)線程。對于SMT-4處理器,有四個線程可用,并且因此,能夠開始三個子線程,以允許進(jìn)一步的非順序處理。
[0052]在一個實施例中,直到完成父線程的指令為止,不完成子線程的指令,因為在在此描述的典型管道設(shè)計中,指令將順序完成。在父線程校驗點的指令(例如,保存其狀態(tài),諸如體系結(jié)構(gòu)化狀態(tài))時,子線程變成父線程,并且現(xiàn)在,允許定義為父線程的線程中的指令作為校驗點。
[0053]根據(jù)本發(fā)明的一方面,能夠?qū)⒅噶罴w系結(jié)構(gòu)的任意現(xiàn)有或者新分支指令定義為主分支指令和次分支指令,或者代替地次分支指令。例如,許多體系結(jié)構(gòu)當(dāng)前具有執(zhí)行各種分支操作的許多分支指令。能夠作為主分支(OPEN/CLOSE)和/或者次分支指令實現(xiàn)這些分支指令中的每一個(或者其子集)。為此,分支指令的操作碼或者其它字段將分支指令的類型或者定義為主分支(例如,主分支開啟或者主分支關(guān)閉),或者定義為次分支。
[0054]例如,分支指令可以具有三個不同操作碼中的一個:次分支操作碼、主分支開啟操作碼或者主分支關(guān)閉操作碼。盡管三種分支指令具有不同的操作碼,但是指令的格式相同,分支操作亦如此。差別在于如何處理指令。例如,其管道處理不同,其目標(biāo)地址可以不同,并且其在作為初始線程或者另一個線程的一部分之前的處理取決于分支指令的類型。
[0055]在又一個例子中,代替不同的操作碼,將指出分支指令的類型的字段添加到指令中(例如,獨立于該指令的其他字段的字段,或者對現(xiàn)有字段中的諸如操作碼字段或者另一個字段的字段附加的字段)。例如,在一個特定例子中,可以采用具有如下意義的2位字段:
[0056]00 一次分支;原有指令行為
[0057]01 —未使用
[0058]10 —主分支關(guān)閉
[0059]11 一主分支開啟
[0060]圖4A — 4B示出通用分支指令的格式的實施例。如圖4A所示,分支指令400包括:至少一個操作碼字段402,包括指出特定分支指令和分支指令的類型(主開啟、主關(guān)閉、次)的操作碼;以及目標(biāo)地址字段404,用于確定分支指令要跳轉(zhuǎn)到的位置。
[0061]在又一個例子中,分支指令420(圖4B)包括:至少一個操作碼字段422,包括指出特定分支指令的操作碼;格式字段424,指定分支指令的類型(例如,主開啟、主關(guān)閉、次);以及目標(biāo)地址字段426。格式字段424可以是獨立字段,也可以是另一個字段的一部分,諸如操作碼。
[0062]目標(biāo)地址字段404、426可以是一個或者多個用于確定目標(biāo)位置的字段。例如,其可以是指定寄存器的寄存器字段,其內(nèi)容規(guī)定目標(biāo)位置的地址;其可以是兩個字段,諸如基本寄存器字段和位移字段,將基本寄存器字段中指定寄存器的內(nèi)容附加到位移字段的內(nèi)容,以獲得目標(biāo)位置的地址;或者用于指定目標(biāo)位置的用字段、寄存器等的任何其他組合。
[0063]此外,無論其是主分支或者次分支,每個單獨分支指令都可以包括一個或者多個字段來執(zhí)行特定分支操作。如上所述,可以有許多分支指令,在上面引用的操作原理中描述了其例子。對于操作原理中的這些分支指令,使用特定格式的分支指令,但是根據(jù)本發(fā)明的一個方面,操作碼或者添加到格式或者附加到指令的現(xiàn)有字段的另一個字段指出分支指令的類型,例如,次、主開啟、主關(guān)閉。
[0064]參考圖5描述關(guān)于主分支指令的處理的更多詳情。對于SMT處理器內(nèi)的每個線程(例如,核心),處理器執(zhí)行該處理(例如,在各管道階段期間)。
[0065]首先,參考圖5,取出并且解碼指令,并且關(guān)于該指令是否是主分支開啟指令進(jìn)行查詢,INQUIRY 500。如果指令的操作碼或者其他字段指出其不是主分支開啟指令,則處理繼續(xù)到一個或者多個其他管道階段。
[0066]在另一個管道階段,確定主分支關(guān)閉指令是否處于校驗點(即,完成步驟),INQUIRY 502。如果未處于校驗點,則處理繼續(xù)到一個或者多個管道階段,并且在該處理期間,還查詢是否經(jīng)受了不希望的管道改向(例如,分支錯誤、操作系統(tǒng)任務(wù)對換),INQUIRY504。如果未經(jīng)受,則在每個管道階段處理一個或多個指令,然后,進(jìn)行到下一個階段,步驟506。處理繼續(xù)到下一個指令。
[0067]返回到INQUIRY 500,如果其是主分支開啟指令,則第二流(例如,子線程)被表示為開始/活動,步驟510。在一個例子中,這包括跟蹤(例如,利用計數(shù)器)正在使用預(yù)定義數(shù)量的線程中的另一個線程。此外,在該分支的目標(biāo)開始第二流(例如,子的SMT線程)。在一個例子中,這包括設(shè)定指針或者其他指示來使用子線程,并且在一個例子中,開始對子線程繼續(xù)指令取出和分支預(yù)測。由于在一個例子中,該流或者線程是父的子,所以由子參考父的體系結(jié)構(gòu)化狀態(tài)。如果子改變體系結(jié)構(gòu)化狀態(tài),則該更新的狀態(tài)僅與子相關(guān)聯(lián)。然后,處理在一個或者多個管道階段繼續(xù)。
[0068]參考INQUIRY 502,如果其是已經(jīng)到達(dá)校驗點的主分支關(guān)閉指令,則允許第二流(例如,子線程)作為一個或者多個其流已經(jīng)完成的指令的校驗點,步驟520。釋放父流(例如,父SMT攜程),使得其資源由另一個流或者線程使用,步驟522。子流變成父流(例如,通過設(shè)置作為父的指針或者其他指示),在父流中,處理繼續(xù),其中處理子線程??梢哉J(rèn)為子已經(jīng)完成,步驟524。然后,處理在一個或者多個管道階段繼續(xù)。
[0069]返回INQUIRY 504,如果父流(例如,線程)遇到分支錯誤或者操作系統(tǒng)干預(yù),則父流終止并且失效,步驟528。在一個例子中,假定線程可用,則通過主分支開啟指令,每個子流都能夠開始另一個子流。因此,如果有多個子流,則每個子流終止并且失效。做出沒有活動子線程的指示,步驟530,并且在步驟506,該處理繼續(xù)。這樣,現(xiàn)在,子流執(zhí)行的或者要執(zhí)行的任何指令都由父流處理。此外,在遇到相關(guān)聯(lián)的主關(guān)閉指令時,因為已經(jīng)采取關(guān)閉操作,所以其可以被忽略。(在又一個實施例中,如果有多個子流,并且這些子流中的一個子流遇到分支錯誤,則僅一個或者多個較新的子流被終止。)
[0070]在本發(fā)明的又一個方面中,當(dāng)采用主分支開啟指令以分支到目標(biāo)地址時,位于目標(biāo)地址的指令可以處理為在事務(wù)中執(zhí)行,該指令的結(jié)果被看作一個原子單位(即,全部交付或未交付)。在一個實施例中,主分支開啟指令不僅使新流或者線程開始,而且通過事務(wù)存儲器使事務(wù)開始。事務(wù)存儲器提供說明給定的代碼塊是事務(wù)的方式。事務(wù)允許程序?qū)⑼瓿蓵r的指令作為校驗點;然而,在事務(wù)開始時,記錄機器的狀態(tài),使得如果事務(wù)未完成,則機器/處理器/管道可以恢復(fù)為事務(wù)的進(jìn)入點。在事務(wù)結(jié)束時,將所有存儲交付給存儲器。這樣使得整個系統(tǒng)的狀態(tài)能夠恢復(fù)為事務(wù)開始時的狀態(tài)。在事務(wù)中,可以一起交付任何變化。如果事務(wù)被異常終止,則處理器返回事務(wù)開始之前的狀態(tài)。通過將新子流定義為事務(wù),允許子流與父流并行地執(zhí)行體系結(jié)構(gòu)校驗點,然而,直到子變成父為止,子事務(wù)不結(jié)束(TEND)。如果子流遇到分支錯誤,則作為事務(wù)的子流終止,并且機器的狀態(tài)返回(事務(wù)存儲器的定義所定義的),如同在子流中沒有發(fā)生動作。
[0071]在一個實施例中,關(guān)于檢測主分支開啟,為了使管道確定事務(wù)將通過事物存儲器開始,修改體系結(jié)構(gòu)。作為例子,設(shè)置以事務(wù)指出分支主開啟的操作碼(例如,圖4A中的402),或者作為操作碼字段或者另一個字段的一部分或者獨立于其的格式字段424包括指示以事務(wù)開始主分支開啟的代碼。
[0072]在另一個實施例中,主分支開啟指令的事務(wù)的開始與體系結(jié)構(gòu)無關(guān),并且代替地,在硬件管道的控制下。當(dāng)指令未做規(guī)定時,開始相對于主分支開啟的事務(wù)的硬件控制可以通過事物存儲器使主分支開啟作為事務(wù)開始。例如,如果硬件支持嵌套事務(wù),則在檢測到主分支開啟指令時,與主分支開啟指令格式是否規(guī)定要開始事務(wù)無關(guān),可以開始,如由硬件指向的。此外,硬件可以允許處理主分支開啟,但是即使體系結(jié)構(gòu)化的指令格式這樣規(guī)定,仍拒絕作為事務(wù)開始主分支開啟。例如,如果在機器中用于處理事務(wù)的資源在低速運行,則在主分支開啟指令格式表明開始事務(wù)時,可以防止事務(wù)開始,從而使得剩余事務(wù)資源可用于已經(jīng)在進(jìn)行中的任何事務(wù)。還存在其他例子。
[0073]此外,對于主分支關(guān)閉指令,在一個實施例中發(fā)生下面的動作:使父流從作為活動流退出;子流變成父流;以及如果主分支開啟開始事務(wù),則什么是子流不再是事務(wù)存儲狀態(tài),并且返回到典型處理器處理狀態(tài)(事務(wù)結(jié)束)。這樣,校驗點內(nèi)容不再回到先前體系結(jié)構(gòu)校驗點狀態(tài)。
[0074]參考圖6描述利用事物存儲器使處理與分支指令相關(guān)聯(lián)的一個實施例。此外,對于SMT處理器中的每個線程并且利用處理分支指令的處理器的邏輯執(zhí)行該處理。
[0075]參考圖6,確定主分支開啟指令是否正在被解碼,INQUIRY 600。如果指令的操作碼或者其他字段指出主分支開啟指令沒有正在被解碼,則處理繼續(xù)到一個或者多個其他管道階段。
[0076]在另一個管道階段,確定主分支關(guān)閉指令是否處于校驗點,INQUIRY602。如果主分支關(guān)閉指令未處于校驗點,則處理繼續(xù)到一個或者多個其他管道階段。
[0077]進(jìn)一步確定是否發(fā)生了不希望的管道改向,INQUIRY 604。如果沒有發(fā)生,則在每個管道階段,處理指令(各指令),然后,進(jìn)行到下一個階段,步驟606。處理進(jìn)入下一個指令,步驟600。
[0078]返回INQUIRY 600,如果主分支開啟指令正在被解碼,則意味著另一個流(例如,子線程)正在開始/活動,步驟610,并且在分支目標(biāo),開始另一個流(例如,線程),步驟612。此外,根據(jù)本發(fā)明的一個方面,確定事務(wù)是否要開始,INQUIRY 613。作為一個例子,利用指令的字段(或者是現(xiàn)有字段或者是新字段)指出事務(wù)是否要開始。作為另一個例子,通過跳過該指令或者根據(jù)具有這種指出事務(wù)要開始的字段的指令,處理器的硬件進(jìn)行該確定。如果事務(wù)要開始,則新流開始事務(wù)(TBEGIN),步驟614。為了開始事務(wù),保持或者取得機器當(dāng)前狀態(tài)的快照,使得如果事務(wù)被異常終止,則能夠使機器的狀態(tài)恢復(fù)到事務(wù)開始時的點。此后,或者如果事務(wù)未開始,則處理繼續(xù)到一個或者多個其他管道階段。
[0079]返回INQUIRY 602,如果邏輯確定主分支關(guān)閉指令處于校驗點,則確定事務(wù)是否開始,INQUIRY 616。如果事務(wù)已開始,則子流事務(wù)結(jié)束(TEND),步驟618。此外,更新機器的體系結(jié)構(gòu)化狀態(tài),以反映子的事務(wù)工作,步驟620。父流(例如,SMT線程)被釋放,并且不再活動,步驟622。使子流成為父流,并且請注意,子流不再活動,步驟624。然后,處理在管道中繼續(xù)。
[0080]返回INQUIRY 616,如果事務(wù)未開始,則可以使任何完成子指令作為校驗點,步驟621,并且處理繼續(xù)到步驟622。
[0081]返回INQUIRY 604,如果遇到不希望的管道改向,則確定是否開始事務(wù),INQUIRY626。如果開始事務(wù),則子流的事務(wù)異常終止(TABORT),步驟630。此后,或者如果事務(wù)未開始,則子流被釋放并且失效,步驟632,并且請注意,子不再活動,步驟634。在一個實施例中,一個以上的子流可以在進(jìn)行中。如果在父發(fā)生改向,則與父相關(guān)聯(lián)的所有子流都結(jié)束,包括異常終止事務(wù)。如果改向發(fā)生在子流,則任何較新子流都結(jié)束,包括異常終止事務(wù)。此夕卜,如果子流發(fā)生中斷或者例外,則子流暫停處理,并且在變成父流時重新開始處理。處理繼續(xù)到步驟606。
[0082]在事物存儲器中開始(各)子流使得(各)子流進(jìn)一步靠前開始運行。子流不再為了防止父線程掛起而必須保留管道化資源。此外,子流能夠使指令從容量有限、通常最多支持約200個指令的非順序完成表退出。在一個實施例中,子流仍對能夠作為事務(wù)執(zhí)行的完成量有某些限制,對于資源,要求保持在完成事務(wù)時要交付的所有存儲數(shù)據(jù)。對于例如頻率、等待時間、容量和/或者f 10rplan布局,與用于非順序窗口的資源相比,保持事務(wù)完成之前的存儲的硬件受限少得多。
[0083]上面描述了分支機制,該分支機制使得程序的一個代碼段與同一程序的至少一個其他代碼段同時處理。在一個例子中,提供在所取得的通道中開始并行線程(例如,子線程)的分支指令,但是在非所取得的路徑中保持執(zhí)行(例如父線程)。父線程包括用于結(jié)束線程的或者連結(jié)另一個線程的指令。在一個實施例中,直到父線程在處理中到達(dá)諸如主分支關(guān)閉指令的規(guī)定點為止,子線程不更新體系結(jié)構(gòu)化狀態(tài)(即,其他應(yīng)用程序、線程等可見的狀態(tài))。此外,在一個實施例中,所取得的路徑的線程開始事務(wù)存儲器事務(wù)。
[0084]使用主分支允許非順序地解碼/調(diào)度指令,從而對要執(zhí)行的指令提供較大的非順序窗口。如果沒有主分支0PEN/CL0SE,則順序解碼并且調(diào)度指令,但是可以非順序地發(fā)布,而順序地完成。
[0085]在一個實施例中,子流的處理量限于處理器中可用的非順序資源。正在使用非順序資源的子流不占用所有資源,從而創(chuàng)建掛起狀況,使得父不能獲得前進(jìn)進(jìn)度所需的資源。然而,如果子流采用事務(wù)處理,則避免該限制。
[0086]在一個實施例中,如果遇到主分支OPEN并且所有線程用于跨越子路徑,則不執(zhí)行主分支OPEN。這意味著,在遇到成對主分支CLOSE時,也不執(zhí)行。通過不在CLOSE執(zhí)行,不發(fā)生父到子的線程切換。
[0087]在一個例子中,包括重新開始I取出取出流的父流的重新開始終止子流的處理及其任何子等。子流中的重新開始終止其子和任何較新的子,但是不終止父。
[0088]定義處理器管道的硬件(例如,晶體管)由許多隊列構(gòu)成。該隊列的容量有限,并且該隊列包括但是并不限于:高速緩沖行地址、要解碼的指令(后指令取出)、要調(diào)度的指令、從調(diào)度到體系結(jié)構(gòu)校驗點的指令、通用寄存器、分支隊列和存儲隊列。在不做事務(wù)處理的情況下,即使在非順序處理器中,處理器仍可以要求這些隊列中的子集或者全部以順序方式清空。在已經(jīng)完成父流之前,可以不清空子流要求的這些資源(例如,隊列)。如果子流占用太多資源,則父可能沒有足夠的資源可用于執(zhí)行由體系結(jié)構(gòu)定義的并且由軟件程序定序的結(jié)構(gòu)的操作。這防止發(fā)生這樣的掛起狀況,即,使得子不可以將資源用于沒有父為了進(jìn)行前進(jìn)進(jìn)度而對父可用的足夠資源的點。對于能夠限制其資源使用的子,知道有多少資源供其使用。該量的資源可以是硬件中的硬接線,或者父線程能夠?qū)⒂卸嗌儋Y源可供使用通知子。父可以傳送可供子使用的不足資源量,使得在子不掛起父時,子不使用多到使父的前進(jìn)進(jìn)度速率滑落的資源。
[0089]在又一個實施例中,允許以在例如SMT-2環(huán)境下繼續(xù)執(zhí)行兩個獨立線程的方式繼續(xù)向下執(zhí)行分支預(yù)測??梢岳梅种ьA(yù)測來預(yù)測是否要取得分支并且/或者預(yù)測該分支的目標(biāo)位置。
[0090]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該計算機可讀介質(zhì)中包含計算機可讀的程序代碼。
[0091]可以采用一個或多個計算機可讀的介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0092]現(xiàn)在參考圖7,在一個例子中,計算機程序產(chǎn)品700包括,例如,一個或多個非暫時性計算機可讀存儲介質(zhì)702,在其上存儲有計算機可讀的程序代碼裝置或邏輯704,以提供并方便本發(fā)明的一個或多個方面。
[0093]體現(xiàn)在計算機可讀介質(zhì)上的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,所述介質(zhì)包括但不限于:無線、有線、光纜、RF等,或上述的任意合適的組合。
[0094]可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計語言一諸如”C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠(yuǎn)程計算機上執(zhí)行、或者完全在遠(yuǎn)程計算機或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算機的情形中,遠(yuǎn)程計算機可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0095]本文中將參照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0096]也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instruct1nmeans)的制造品(manufacture)。
[0097]也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0098]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0099]除了上述,本發(fā)明的一個或多個方面可由服務(wù)提供商提供、許諾(offer)、部署、管理、服務(wù)等,該服務(wù)提供商提供用戶環(huán)境的管理。例如,服務(wù)提供商可創(chuàng)建、維持、支持等計算機代碼和/或計算機基礎(chǔ)設(shè)施,其為一個或多個用戶執(zhí)行本發(fā)明的一個或多個方面。反過來,服務(wù)提供商可例如根據(jù)預(yù)訂和/或費用協(xié)議從用戶接受付費。額外地或可替換地,月艮務(wù)提供商可從向一個或多個第三方銷售廣告內(nèi)容接受付費。
[0100]在本發(fā)明的一個方面,可部署用于執(zhí)行本發(fā)明的一個或多個方面的應(yīng)用。作為一個例子,部署應(yīng)用包括提供計算機基礎(chǔ)設(shè)施,其可操作以執(zhí)行本發(fā)明的一個或多個方面。
[0101]作為本發(fā)明的又一個方面,可部署計算基礎(chǔ)設(shè)施,其包括將計算機可讀代碼集成到計算機系統(tǒng),其中與計算系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。
[0102]作為本發(fā)明的再一個方面,可提供用于集成計算基礎(chǔ)設(shè)施包括將計算機可讀碼集成到計算機系統(tǒng)的過程。計算機系統(tǒng)包括計算機可讀介質(zhì),其中計算機介質(zhì)包括本發(fā)明的一個或多個方面。與計算機系統(tǒng)結(jié)合的代碼能夠執(zhí)行本發(fā)明的一個或多個方面。
[0103]雖然上面描述了各種實施例,其僅是示例。例如,其它計算環(huán)境可以并入和使用本發(fā)明的一個或多個方面。例如,計算環(huán)境可包括具有多個處理器的中心處理器聯(lián)合體。該中心處理器聯(lián)合體可以或者可以不邏輯地分區(qū)。另外,其它體系結(jié)構(gòu)的計算環(huán)境可以并入或使用本發(fā)明的一個或多個方面。另外,在描述主分支開啟和關(guān)閉時,它們可以以不同名稱命名或者可以提供另外的主分支類型。在不脫離本發(fā)明的精神的情況下可以做出很多改變和/或添加。
[0104]而且,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為例子,可使用適于存儲和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng),其包括至少兩個通過系統(tǒng)總線直接或間接耦合到存儲元件的處理器。存儲器元件包括,例如,在程序代碼的實際執(zhí)行期間使用的本地存儲器、大容量存儲器以及高速緩沖存儲器,其提供至少一些程序代碼的臨時存儲,以便減少在執(zhí)行期間必須從大容量存儲器取回代碼的次數(shù)。
[0105]輸入/輸出或I/O設(shè)備(包括但不限于鍵盤、顯示器、指點設(shè)備、DASD、磁帶、⑶、DVD、拇指驅(qū)動器(thumb drive)以及其他的存儲介質(zhì)等)可直接或通過介于其間的I/O控制器被耦合到系統(tǒng)。網(wǎng)絡(luò)適配器也可被耦合到系統(tǒng)以使得數(shù)據(jù)處理系統(tǒng)能夠通過介于其間的私有或公共網(wǎng)絡(luò)而耦合到其他的數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機或存儲設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅是一些可獲得的網(wǎng)絡(luò)適配器類型。
[0106]下面描述可以并入和使用本發(fā)明的一個或多個方面的計算環(huán)境的其它示例。
[0107]參考圖8,其描述了實施本發(fā)明的一個或多個方面的主機計算機系統(tǒng)5000的代表性組件。代表性主機計算機5000包括與計算機存儲器(即,中央存儲器)5002通信的一個或多個CPU 5001,以及到存儲介質(zhì)設(shè)備5011和網(wǎng)絡(luò)5010的I/O接口,以用于與其他計算機或SAN等通信。CPU5001符合具有架構(gòu)指令集和架構(gòu)功能的架構(gòu)。CPU5001可具有動態(tài)地址轉(zhuǎn)換(DAT) 5003,其用于將程序地址(虛擬地址)轉(zhuǎn)變?yōu)榇鎯ζ鞯恼鎸嵉刂?。DAT典型地包括用于高速緩存轉(zhuǎn)換的轉(zhuǎn)換后備緩沖器(TLB) 5007,這樣稍后對計算機存儲器5002塊的訪問不需要地址轉(zhuǎn)換的延遲。典型地,高速緩存5009被使用在計算機存儲器5002和處理器5001之間。高速緩存5009可以是分層的,具有可被多于一個的CPU獲得的大高速緩存,以及大高速緩存和每個CPU之間的較小、較快(較低級)的高速緩存。在一些實施方式中,較低級的高速緩存被拆分以為指令獲取和數(shù)據(jù)訪問提供單獨的低級高速緩存。在一個實施例中,由指令獲取單元5004經(jīng)由高速緩存5009從存儲器5002獲取指令。指令在指令解碼單元5006中被解碼,且(在一些實施例中與其他指令一起)被發(fā)送到一個或多個指令執(zhí)行單元5008。典型地,使用若干執(zhí)行單元5008,例如算術(shù)執(zhí)行單元、浮點執(zhí)行單元和分支指令執(zhí)行單元。指令被執(zhí)行單元執(zhí)行,如需要,從指令指定的寄存器或存儲器訪問操作數(shù)。如果將從存儲器5002訪問(加載或存儲)操作數(shù),加載/存儲單元5005典型地在被執(zhí)行的指令的控制下處理該訪問。指令可在硬件電路或內(nèi)部微代碼(固件)中或其組合中被執(zhí)行。
[0108]需注意的是,計算機系統(tǒng)包括本地(或主)存儲器中的信息,以及尋址、保護(hù)以及引用和改變記錄。尋址的一些方面包括地址格式、地址空間的概念、地址的各種類型和其中一種類型的地址被轉(zhuǎn)換為另一種類型的地址的方式。一些主存儲器包括永久分配的存儲位置。主存儲器向系統(tǒng)提供直接可被尋址的快速訪問的數(shù)據(jù)存儲。數(shù)據(jù)和程序在可被處理之前都將(從輸入設(shè)備)被加載到主存儲器。
[0109]主存儲器可包括一個或多個更小、更快速訪問的緩沖存儲器,有時候被稱為高速緩存。高速緩存典型地與CPU或I/O處理器物理地關(guān)聯(lián)。物理結(jié)構(gòu)以及不同存儲介質(zhì)的使用的效果,除了在性能上,通常不會被程序觀察到。
[0110]可維護(hù)用于指令和數(shù)據(jù)操作數(shù)的單獨的高速緩存。高速緩存中的信息可被維護(hù)為相鄰的字節(jié),所述字節(jié)位于被稱為高速緩存塊或高速緩存線(或簡稱為線)的整數(shù)界限上。模型可提供EXTRACT CACHE ATTRIBUTE (提取高速緩存屬性)指令,其返回高速緩存線的字節(jié)大小。模型也可提供PREFETCH DATA (預(yù)取數(shù)據(jù))和PREFETCH DATA RELATIVE LONG (預(yù)取較長數(shù)據(jù))指令,其實現(xiàn)存儲到數(shù)據(jù)或指令高速緩存中的預(yù)取,或數(shù)據(jù)從高速緩存的釋放。
[0111]存儲器被視為位的長水平串。對于大部分操作來說,以從左到右的順序進(jìn)行對存儲器的訪問。位串被細(xì)分為八個位的單位。八位單位被稱為字節(jié),其是所有信息格式的基本構(gòu)件。存儲器中的每個字節(jié)位置由唯一的非負(fù)整數(shù)標(biāo)識,該非負(fù)整數(shù)是該字節(jié)位置的地址,或簡稱為字節(jié)地址。相鄰的字節(jié)位置具有連續(xù)的地址,在左邊從O開始且以從左到右的順序進(jìn)行。地址是無符號二進(jìn)制整數(shù),且是24、31或64位。
[0112]信息一次一個字節(jié)或一組字節(jié)地在存儲器和CPU或通道子系統(tǒng)之間傳遞。除非另有指定,例如在z/Architecture?中,存儲器中的一組字節(jié)由該組的最左邊的字節(jié)尋址。組中的字節(jié)的數(shù)量可由將被執(zhí)行的操作暗示或顯式地指定。當(dāng)在CPU操作中使用時,一組字節(jié)被稱為字段。在字節(jié)的每個組內(nèi),例如在z/Architecture鉉中,位以從左到右的順序被編號。在z/Architecture?中,最左邊的位有時候被稱為“高階”位且最右邊的位被稱為“低階”位。但是,位數(shù)不是存儲器地址。僅字節(jié)可被尋址。為了操作存儲器中的字節(jié)的單個位,訪問整個字節(jié)。字節(jié)上的位從左到右被編號為O到7(例如在z/Architecture?中)。對于24位地址,地址中的位被編號為8-31或40-63,對于31位地址,編號為1_31或33-63,對于64位地址,編號為0-63。在多個字節(jié)的任何其他的固定長度的格式中,構(gòu)成格式的位從O開始被連續(xù)編號。為了錯誤檢測,且優(yōu)選地為了校正,一個或多個校驗位可與每一個字節(jié)或一組字節(jié)一起被傳遞。這樣的校驗位由機器自動生成且不能被程序直接控制。存儲容量以字節(jié)的數(shù)量來表示。當(dāng)存儲器操作數(shù)字段的長度由指令的操作碼暗示時,字段被稱為具有固定長度,其可以是一個、兩個、四個、八個或十六個字節(jié)??蔀槟承┲噶畎凳靖蟮淖侄?。當(dāng)存儲器操作數(shù)字段的長度沒有被暗示,而是被顯式地表示時,該字段被稱為具有可變長度。可變長度的操作數(shù)可以一個字節(jié)的增量(或者對于一些指令,以兩個字節(jié)倍數(shù)或其他倍數(shù))在長度上可變。當(dāng)信息被放在存儲器中時,僅替換被包括在指定的字段中的那些字節(jié)位置的內(nèi)容,即使到存儲器的物理路徑的寬度可能大于正被存儲的字段的長度。
[0113]某些信息單元位于存儲器中的整數(shù)界限上。對于信息單元,當(dāng)其存儲器地址是以字節(jié)表示的單元長度的倍數(shù)時,界限被稱為是整數(shù)的。特殊的名稱被給予整數(shù)界限上的2、
4、8和16字節(jié)的字段。半字是兩字節(jié)邊界上的一組兩個連續(xù)的字節(jié),且是指令的基本構(gòu)件。字是四字節(jié)邊界上的一組四個連續(xù)的字節(jié)。雙字是八字節(jié)邊界上一組八個連續(xù)的字節(jié)。四倍長字(quadword)是16字節(jié)邊界上的一組16個連續(xù)的字節(jié)。當(dāng)存儲器地址指定半字、字、雙字和四倍長字時,地址的二進(jìn)制表示分別包括一個、兩個、三個或四個最右邊的零位。指令將位于二字節(jié)整數(shù)邊界上。大多數(shù)指令的存儲器操作數(shù)不具有界限對準(zhǔn)要求。
[0114]在為指令和數(shù)據(jù)操作數(shù)實現(xiàn)單獨的高速緩存的設(shè)備上,如果程序在高速緩存線中存儲且指令被隨后從該高速緩存線獲取,可經(jīng)歷顯著的延遲,不管該存儲是否改變隨后被獲取的指令。
[0115]在一個實施例中,本發(fā)明可被軟件(有時候被稱為許可的內(nèi)部代碼、固件、微代碼、毫代碼、微微代碼(pico-code)等,其任何一個都將符合本發(fā)明)實施。參考圖8,體現(xiàn)本發(fā)明的軟件程序代碼可典型地由主系統(tǒng)5000的處理器5001從長期存儲介質(zhì)設(shè)備5011(諸如CD-ROM驅(qū)動器、磁帶驅(qū)動或硬盤驅(qū)動器)訪問。軟件程序代碼可體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟磁盤、硬盤驅(qū)動或⑶-ROM)中的任何一個上。代碼可在這樣的介質(zhì)上被分發(fā),或可從一個計算機系統(tǒng)的計算機存儲器5002或存儲設(shè)備通過網(wǎng)絡(luò)5010被分發(fā)給其他計算機系統(tǒng)的用戶,以由這樣的其他系統(tǒng)的用戶使用。
[0116]軟件程序代碼包括操作系統(tǒng),其控制各種計算機組件和一個或多個應(yīng)用程序的功能和交互。程序代碼通??蓮拇鎯橘|(zhì)設(shè)備5011調(diào)頁到相對更高速的計算機存儲器5002,在此它對于處理器5001是可用的。用于在存儲器中、物理介質(zhì)上體現(xiàn)軟件程序代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是熟知的,且不會在此被進(jìn)一步討論。當(dāng)程序代碼被創(chuàng)建并存儲在有形介質(zhì)(包括但不限于電子存儲模塊(RAM)、閃存、光盤(CD)、DVD、磁帶等)上時,其經(jīng)常被稱為“計算機程序產(chǎn)品”。計算機程序產(chǎn)品介質(zhì)典型地可由優(yōu)選地位于計算機系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。
[0117]圖9示出了可在其中實施本發(fā)明的代表性工作站或服務(wù)器硬件系統(tǒng)。圖9的系統(tǒng)5020包括代表性基本計算機系統(tǒng)(base computer system) 5021,諸如個人計算機、工作站或服務(wù)器,包括可選的外圍設(shè)備。根據(jù)已知技術(shù),基本計算機系統(tǒng)5021包括一個或多個處理器5026以及被用于連接并使能處理器5026和系統(tǒng)5021的其他組件之間的通信的總線。總線將處理器5026連接到存儲器5025以及可包括例如硬盤驅(qū)動器(例如,包括磁介質(zhì)、⑶、DVD和閃存中的任何一個)或磁帶驅(qū)動器的長期存儲器5027。系統(tǒng)5021也可包括用戶接口適配器,其經(jīng)由總線將微處理器5026連接到一個或多個接口設(shè)備,諸如鍵盤5024、鼠標(biāo)5023、打印機/掃描儀5030和/或其他接口設(shè)備,其可以是任何用戶接口設(shè)備,諸如觸摸敏感屏、數(shù)字化輸入墊(digitized entry pad)等??偩€也可經(jīng)由顯示適配器將諸如IXD屏幕或監(jiān)視器的顯示設(shè)備5022連接到微處理器5026。
[0118]系統(tǒng)5021可通過能與網(wǎng)絡(luò)5029通信5028的網(wǎng)絡(luò)適配器與其他計算機或計算機網(wǎng)絡(luò)通信。示例性網(wǎng)絡(luò)適配器是通信通道、令牌環(huán)網(wǎng)、以太網(wǎng)或調(diào)制解調(diào)器。或者,系統(tǒng)5021可使用諸如⑶ro (蜂窩數(shù)字分組數(shù)據(jù))卡的無線接口來通信。系統(tǒng)5021可與局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)中的這樣的其他計算機關(guān)聯(lián),或系統(tǒng)5021可以是與另一個計算機的客戶機/服務(wù)器安排中的客戶機等。所有這些配置以及合適的通信硬件和軟件在本領(lǐng)域中是已知的。
[0119]圖10示出了其中可實施本發(fā)明的數(shù)據(jù)處理網(wǎng)絡(luò)5040。數(shù)據(jù)處理網(wǎng)絡(luò)5040可包括多個單獨的網(wǎng)絡(luò),諸如無線網(wǎng)和有線網(wǎng),其每個可包括多個單獨的工作站5041、5042、5043、5044。此外,本領(lǐng)域技術(shù)人員將理解,可包括一個或多個LAN,其中LAN可包括多個耦合到主處理機的智能工作站。
[0120]仍然參考圖10,網(wǎng)絡(luò)也可包括大型計算機或服務(wù)器,諸如網(wǎng)關(guān)計算機(客戶機服務(wù)器5046)或應(yīng)用服務(wù)器(遠(yuǎn)程服務(wù)器5048,其可訪問數(shù)據(jù)儲存庫,且也可直接從工作站5045被訪問)。網(wǎng)關(guān)計算機5046用作到每個單獨網(wǎng)絡(luò)的進(jìn)入點。當(dāng)將一個聯(lián)網(wǎng)協(xié)議連接到另一個時,需要網(wǎng)關(guān)。網(wǎng)關(guān)5046可通過通信鏈路優(yōu)選地耦合到另一個網(wǎng)絡(luò)(例如因特網(wǎng)5047)。也可使用通信鏈路將網(wǎng)關(guān)5046直接耦合到一個或多個工作站5041、5042、5043、
5044??梢岳每蓮膰H商業(yè)機器公司獲得的IBM eServerTMSystem ζβ服務(wù)器來實現(xiàn)網(wǎng)關(guān)計算機。
[0121]同時參考圖9和10,可體現(xiàn)本發(fā)明的軟件編程代碼可被系統(tǒng)5020的處理器5026從諸如CD-ROM驅(qū)動器或硬盤驅(qū)動器的長期存儲介質(zhì)5027訪問。軟件編程代碼可被體現(xiàn)在與數(shù)據(jù)處理系統(tǒng)一起使用的各種已知介質(zhì)(諸如軟盤、硬盤驅(qū)動器或CD-ROM)中的任一個上。代碼可在這樣的介質(zhì)上被分發(fā),或從一個計算機系統(tǒng)的存儲器或存儲設(shè)備通過網(wǎng)絡(luò)被分發(fā)到其他計算機系統(tǒng)的用戶5050、5051,以供這樣的其他系統(tǒng)的用戶使用。
[0122]或者,編程代碼可體現(xiàn)在存儲器5025中,且由處理器5026使用處理器總線訪問。這樣的編程代碼包括操作系統(tǒng),其控制各種計算機組件和一個或多個應(yīng)用程序5032的功能和交互。程序代碼通常從存儲介質(zhì)5027調(diào)頁到高速存儲器5025,在此它可用于由處理器5026進(jìn)行處理。用于在存儲器中、在物理介質(zhì)上體現(xiàn)軟件編程代碼和/或經(jīng)由網(wǎng)絡(luò)分發(fā)軟件代碼的技術(shù)和方法是公知的,不會在此進(jìn)一步討論。程序代碼,當(dāng)其被創(chuàng)建且在有形介質(zhì)(包括但不限于電子存儲模塊(RAM)、閃存、光盤化0)、0¥0、磁帶等)上存儲時,通常被稱為“計算機程序產(chǎn)品” 。計算機程序產(chǎn)品介質(zhì)典型地可以被優(yōu)選地位于計算機系統(tǒng)中的處理電路讀取以由處理電路執(zhí)行。
[0123]最容易被處理器使用的高速緩存(通常比處理器的其他高速緩存更快更小)是最低級(LI或級別I)高速緩存,且主存儲(主存儲器)是最高級高速緩存(如果有三個級別的話是L3)。最低級高速緩存經(jīng)常被分為保持將被執(zhí)行的機器指令的指令緩存(1-高速緩存),和保持?jǐn)?shù)據(jù)操作數(shù)的數(shù)據(jù)高速緩存(D-高速緩存)。
[0124]參考圖11,為處理器5026示出了示例性處理器實施例。典型地,使用一個或多個級別的高速緩存5053來緩沖存儲器塊,以便改善處理器性能。高速緩存5053是高速緩沖器,其保持很可能被使用的存儲器數(shù)據(jù)的高速緩存線。典型的高速緩存線是64、128或256字節(jié)的存儲器數(shù)據(jù)。通常使用單獨的高速緩存以用于緩存指令而不是緩存數(shù)據(jù)。高速緩存一致性(存儲器和高速緩存中的線的副本的同步)通常由本領(lǐng)域中熟知的各種“窺探”算法提供。處理器系統(tǒng)的主存儲器5025通常被稱為高速緩存。在具有4個級別的高速緩存5053的處理器系統(tǒng)中,主存儲器5025有時候被稱為級別5 (L5)高速緩存,因為它典型地更快,且僅保持可被計算機系統(tǒng)使用的非易失性存儲器(DASD、磁帶等)的一部分。主存儲器5025可“高速緩存”由操作系統(tǒng)向主存儲器5025調(diào)頁入或從其調(diào)頁出的數(shù)據(jù)頁。
[0125]程序計數(shù)器(指令計數(shù)器)5061保持跟蹤將被執(zhí)行的當(dāng)前指令的地址。z/Architecture?處理器中的程序計數(shù)器是64位的,且可被截短為31或24位以支持先前的尋址界限。程序計數(shù)器典型地體現(xiàn)在計算機的PSW(程序狀態(tài)字)中,這樣它可在上下文轉(zhuǎn)換中持續(xù)。因此,具有程序計數(shù)器值的進(jìn)行中的程序可被例如操作系統(tǒng)中斷(從程序環(huán)境到操作系統(tǒng)環(huán)境的上下文轉(zhuǎn)換)。當(dāng)程序不活動時,程序的PSW維持程序計數(shù)器值,且在操作系統(tǒng)執(zhí)行時,操作系統(tǒng)的(PSW中的)程序計數(shù)器被使用。典型地,程序計數(shù)器以等于當(dāng)前指令的字節(jié)數(shù)的量增量。RISC (精簡指令集計算)指令典型地是固定長度,而CISC (復(fù)雜指令集計算)指令典型地是可變長度。IBMz/Architecture?的指令是具有長度為2、4或6字節(jié)的CISC指令。程序計數(shù)器5061被例如上下文轉(zhuǎn)換操作或分支指令的分支采取操作修改。在上下文轉(zhuǎn)換操作中,當(dāng)前的程序計數(shù)器值與關(guān)于正被執(zhí)行的程序的其他狀態(tài)信息(諸如條件碼)一起被保存在程序狀態(tài)字中,且新程序計數(shù)器值被載入并指向?qū)⒈粓?zhí)行的新程序模塊的指令。執(zhí)行分支采取操作,以通過將分支指令的結(jié)果加載到程序計數(shù)器5061中而允許程序進(jìn)行決定或在程序內(nèi)循環(huán)。
[0126]典型地,使用指令獲取單元5055代表處理器5026獲取指令。獲取單元可獲取“下一序列指令”、分支采取指令的目標(biāo)指令或上下文轉(zhuǎn)換后的程序的第一指令。現(xiàn)在的指令獲取單元通常使用預(yù)取技術(shù)基于被預(yù)取的指令將被使用的可能性來推測性地預(yù)取指令。例如,獲取單元可獲取16字節(jié)的指令,其包括下一順序指令以及進(jìn)一步的順序指令的額外字節(jié)。
[0127]獲取的指令隨后被處理器5026執(zhí)行。在一實施例中,獲取的指令被傳遞給獲取單元的分派單元5056。分派單元解碼指令并將關(guān)于解碼的指令的信息轉(zhuǎn)送給合適的單元5057、5058、5060。執(zhí)行單元5057將典型地從指令獲取單元5055接收關(guān)于解碼的算術(shù)指令的信息,并將根據(jù)指令的操作碼對操作數(shù)執(zhí)行算術(shù)操作。優(yōu)選地從存儲器5025、架構(gòu)寄存器5059或從正被執(zhí)行的指令的立即字段(immediate field)向執(zhí)行單元5057提供操作數(shù)。執(zhí)行的結(jié)果,當(dāng)被存儲時,被存儲在存儲器5025、寄存器5059或其他機器硬件(諸如控制寄存器、PSW寄存器等)中。
[0128]處理器5026典型地具有一個或多個用于執(zhí)行指令的功能的單元5057、5058、5060。參考圖12A,執(zhí)行單元5057可通過接口邏輯5071與架構(gòu)通用寄存器5059、解碼/分派單元5056、加載存儲單元5060和其他5065處理器單元通信。執(zhí)行單元5057可使用幾個寄存器電路5067、5068、5069來保持算術(shù)邏輯單元(ALU) 5066將操作的信息。ALU執(zhí)行諸如加減乘除的算術(shù)操作,以及諸如和、或以及異或(XOR)、旋轉(zhuǎn)和移位的邏輯運算。優(yōu)選地,ALU支持依賴于設(shè)計的專門操作。其他電路可提供其他架構(gòu)工具5072,例如包括條件碼和恢復(fù)支持邏輯。典型地,ALU操作的結(jié)果被保持在輸出寄存電路5070中,該輸出寄存器電路可將結(jié)果轉(zhuǎn)送到多種其他處理功能。有許多處理器單元安排,本說明書僅旨在提供對一個實施例的代表性理解。
[0129]例如,ADD指令將在具有算術(shù)和邏輯功能的執(zhí)行單元5057中被執(zhí)行,而例如浮點指令將在具有專用浮點能力的浮點執(zhí)行中被執(zhí)行。優(yōu)選地,執(zhí)行單元通過在操作數(shù)上執(zhí)行操作碼定義的功能在由指令標(biāo)識的操作數(shù)上操作。例如,ADD指令可被執(zhí)行單元5057在由指令的寄存器字段標(biāo)識的兩個寄存器5059中發(fā)現(xiàn)的操作數(shù)上執(zhí)行。
[0130]執(zhí)行單元5027關(guān)于兩個操作數(shù)執(zhí)行算術(shù)加法并在第三操作數(shù)中存儲結(jié)果,該第三操作數(shù)可以是第三寄存器或者兩個源寄存器之一。執(zhí)行單元優(yōu)選地利用算術(shù)邏輯單元(ALU) 5066,其能夠執(zhí)行多種邏輯功能,比如移位、旋轉(zhuǎn)、與、或和異或(XOR)以及多種代數(shù)功能,包括加法、減法、乘法和除法中的任意。一些ALU 5066指定用于標(biāo)量操作且一些用于浮點。數(shù)據(jù)取決于體系結(jié)構(gòu)可以是Big Endian(其中最不重要字節(jié)在最高字節(jié)地址)或者Little Endian(其中最不重要字節(jié)在最低字節(jié)地址)。IBM z/Architectureβ是BigEndian。有符號字段取決于體系結(jié)構(gòu)可以是符號和大小,I的補數(shù)或者2的補數(shù)。2的補充數(shù)有益地在于ALU不需要設(shè)計減法性能,因為2的補數(shù)的正值或者負(fù)值僅需要ALU內(nèi)的加法。在速記中公共地描述各個數(shù),例如,其中12位字段定義4,096字節(jié)塊的地址且公共地描述為4K字節(jié)(千字節(jié))塊。
[0131]參考圖12B,用于執(zhí)行分支指令的分支指令信息典型地被發(fā)送到分支單元5058,該分支單元經(jīng)常使用諸如分支歷史表5082的分支預(yù)測算法,在其他條件運算完成前預(yù)測分支結(jié)果。在條件運算完成前,當(dāng)前分支指令的目標(biāo)將被獲取并推測性地執(zhí)行。當(dāng)條件運算完成時,基于條件運算的條件和推測的結(jié)果,推測性執(zhí)行的分支指令或被完成或被丟棄。典型的分支指令可測試條件碼,以及如果條件碼滿足分支指令的分支要求,分支到目標(biāo)地址,分支地址可基于若干數(shù)被計算,所述數(shù)包括例如在寄存器字段或是指令的立即字段中找到的數(shù)。分支單元5058可利用具有多個輸入寄存器電路5075、5076、5077和一個輸出寄存器電路5080的ALU5074。分支單元5058可與例如通用寄存器5059、解碼分派單元5056或其他電路5073通信。
[0132]一組指令的執(zhí)行可由于多個原因中斷,所述原因包括例如由操作系統(tǒng)發(fā)起的上下文轉(zhuǎn)換、引起上下文轉(zhuǎn)換的程序異?;蝈e誤、引起上下文轉(zhuǎn)換的I/o中斷信號或多個程序(在多線程環(huán)境中)的多線程活動。優(yōu)選地,上下文轉(zhuǎn)換動作保存關(guān)于當(dāng)前執(zhí)行的程序的狀態(tài)信息,且隨后加載關(guān)于正被調(diào)用的另一個程序的狀態(tài)信息。狀態(tài)信息可被存儲在例如硬件寄存器或存儲器中。狀態(tài)信息優(yōu)選地包括指向?qū)⒈粓?zhí)行的下一個指令的程序計數(shù)器值、條件碼、存儲器轉(zhuǎn)換信息和架構(gòu)寄存器內(nèi)容。上下文轉(zhuǎn)換活動可被硬件電路、應(yīng)用程序、操作系統(tǒng)程序或固件代碼(微代碼、微微代碼或許可內(nèi)部碼(LIC))單獨地或其組合實現(xiàn)。
[0133]處理器根據(jù)指令定義的方法而訪問操作數(shù)。指令可使用指令的一部分的值提供立即操作數(shù),可提供一個或多個寄存器字段,其顯式地指向通用寄存器或?qū)S眉拇嫫?例如浮點寄存器)。指令可利用由操作碼字段確定的暗示的寄存器作為操作數(shù)。指令可利用用于操作數(shù)的存儲器位置??捎杉拇嫫鳌⒘⒓醋侄位蚣拇嫫骱土⒓醋侄蔚慕M合提供操作數(shù)的存儲器位置,如由z/Architectureβ長位移工具(facility)所例示的,其中該指令定義了基寄存器、索引寄存器和立即字段(位移字段),它們加到一起,以提供例如存儲器中的操作數(shù)的地址。除非另外指明,此處的位置典型地意味著主存儲器(主存儲設(shè)備)中的位置。
[0134]參考圖12C,處理器使用加載/存儲單元5060訪問存儲器。加載/存儲單元5060可以通過獲取存儲器5053中的目標(biāo)操作數(shù)的地址并將操作數(shù)加載到寄存器5059或其他存儲器5053位置中,來執(zhí)行加載操作,或可以通過獲取存儲器5053中的目標(biāo)操作數(shù)的地址并將從寄存器5059或另一個存儲器5053位置獲得的數(shù)據(jù)存儲在存儲器5053中的目標(biāo)操作數(shù)位置,來執(zhí)行存儲操作。加載/存儲單元5060可以是推測性的,且可以以相對于指令順序來說無序的順序訪問存儲器,但是加載/存儲單元5060將向程序維持指令按順序執(zhí)行的外觀。加載/存儲單元5060可與通用寄存器5059、解密/分派單元5056、高速緩存/存儲器接口 5053或其他元件5083通信,且包括各種寄存器電路、ALU5085和控制邏輯5090以計算存儲器地址并提供流水線順序以使操作保持次序。一些操作可不按順序,但加載/存儲單元提供功能以使不按順序執(zhí)行的操作對程序看起來如已按順序執(zhí)行一樣,如本領(lǐng)域所熟知的。
[0135]優(yōu)選地,應(yīng)用程序“看到的”地址通常被稱為虛擬地址。虛擬地址有時候被稱為“邏輯地址”和“有效地址”。這些虛擬地址之所以虛擬,在于它們由多種動態(tài)地址轉(zhuǎn)換(DAT)技術(shù)中的一種重定向到物理存儲器位置,所述動態(tài)地址轉(zhuǎn)換技術(shù)包括但不限于簡單地給用偏移值給虛擬地址加前綴、經(jīng)由一個或多個轉(zhuǎn)換表轉(zhuǎn)換虛擬地址,所述轉(zhuǎn)換表優(yōu)選地包括至少一個段表和一個頁表(單獨地或組合地),優(yōu)選地,段表具有指向頁表的項。在z/Architecture較中,提供轉(zhuǎn)換分級結(jié)構(gòu),包括區(qū)域第一表、區(qū)域第二表、區(qū)域第三表、段表和可選的頁表。地址轉(zhuǎn)換的性能通常通過利用轉(zhuǎn)換后備緩沖器(TLB)被改善,該轉(zhuǎn)換后備緩沖器包括將虛擬地址映射到相關(guān)的物理存儲位置的項。當(dāng)DAT使用轉(zhuǎn)換表轉(zhuǎn)換虛擬地址時,創(chuàng)建項。于是,虛擬地址的隨后使用可利用快的TLB的項,而不是慢的順序轉(zhuǎn)換表訪問。TLB內(nèi)容可由包括LRU(最少最近使用)的多個替換算法來管理。
[0136]在處理器是多處理器系統(tǒng)的處理器的情況下,每個處理器具有保持共享資源的責(zé)任,所述共享資源諸如I/o、高速緩存、TLB和存儲器,它們互鎖以實現(xiàn)一致性。典型地,“窺探”技術(shù)將被用于維持高速緩存一致性。在窺探環(huán)境中,每個高速緩存線可被標(biāo)記為正處于共享狀態(tài)、獨占狀態(tài)、改變狀態(tài)、無效狀態(tài)等中的一個,以便有助于共享。
[0137]I/O單元5054(圖11)向處理器提供用于附加到例如包括磁帶、盤、打印機、顯示器和網(wǎng)絡(luò)的外圍設(shè)備的裝置。I/o單元通常由軟件驅(qū)動器向計算機程序呈現(xiàn)。在諸如來自
IBMB的System z?的大型計算機中,通道適配器和開放系統(tǒng)適配器是提供操作系統(tǒng)和外圍設(shè)備之間的通信的大型計算機的I/o單元。
[0138]而且,其他類型的計算環(huán)境可受益于本發(fā)明的一個或多個方面。作為例子,環(huán)境可包括仿真器(例如,軟件或其他仿真機制),其中特定架構(gòu)(包括例如指令執(zhí)行、諸如地址轉(zhuǎn)換的架構(gòu)功能、以及架構(gòu)寄存器)或其子集被仿真(例如,在具有處理器和存儲器的本機計算機系統(tǒng)中)。在這樣的環(huán)境中,仿真器的一個或多個仿真功能可實施本發(fā)明的一個或多個方面,即使執(zhí)行仿真器的計算機可具有與正被仿真的能力不同的架構(gòu)。作為一個例子,在仿真模式中,解碼正被仿真的特定指令或操作,且建立合適的仿真功能以實施單個指令或操作。
[0139]在仿真環(huán)境中,主計算機包括例如存儲器以存儲指令和數(shù)據(jù);指令獲取單元以從存儲器獲取指令,且可選地,提供用于獲取的指令的本地緩沖;指令解碼單元以接收獲取的指令并確定已被獲取的指令的類型;以及指令執(zhí)行單元以執(zhí)行該指令。執(zhí)行可包括將數(shù)據(jù)從存儲器加載到寄存器;從寄存器將數(shù)據(jù)存儲回存儲器;或執(zhí)行如由解碼單元確定的某些類型的算術(shù)或邏輯運算。在一個例子中,每個單元在軟件中實現(xiàn)。例如,被所述單元執(zhí)行的操作被實現(xiàn)為仿真器軟件中的一個或多個子例程。
[0140]更具體地,在大型計算機中,程序員(通常是如今的“C”程序員)一般通過編譯器應(yīng)用使用架構(gòu)機器指令。存儲在存儲介質(zhì)中的這些指令可以在z/Architecture?IBM?服務(wù)器中本機地執(zhí)行,或在執(zhí)行其他架構(gòu)的機器中執(zhí)行。它們可在現(xiàn)有的和未來的ΙΒΜβ大型計算機服務(wù)器以及IBM?的其他機器(例如,Power Systems服務(wù)器和System X?服務(wù)器)中被仿真。它們可在使用由IBMIntel?、AMDTM等制造的硬件的各種機器上運行Linux的機器中被執(zhí)行。除了Yl: z/Architectureβ下的該硬件上執(zhí)行,Linux也可被用于這樣的機器,其使用由Hercules、UMX或FSI (Fundamental Software, Inc)(其中一般地執(zhí)行是處于仿真模式中)提供的仿真。在仿真模式中,仿真軟件由本機處理器執(zhí)行以仿真被仿真處理器的架構(gòu)。
[0141]本機處理器典型地執(zhí)行仿真軟件,其包括固件或本機操作系統(tǒng),以執(zhí)行被仿真處理器的仿真程序。仿真軟件負(fù)責(zé)獲取并執(zhí)行被仿真處理器架構(gòu)的指令。仿真軟件維護(hù)仿真的程序計數(shù)器以保持跟蹤指令界限。仿真軟件可一次獲取一個或多個仿真的機器指令,并將所述一個或多個仿真的機器指令轉(zhuǎn)換為對應(yīng)的本機機器指令組,以由本機處理器執(zhí)行。這些轉(zhuǎn)換的指令可被高速緩存,這樣可完成更快的轉(zhuǎn)換。仿真軟件將維持被仿真的處理器架構(gòu)的架構(gòu)規(guī)則以保證為被仿真處理器編寫的操作系統(tǒng)和應(yīng)用正確操作。而且,仿真軟件將提供由被仿真的處理器架構(gòu)確定的資源,包括但不限于控制寄存器、通用寄存器、浮點寄存器、例如包括段表和頁表的動態(tài)地址轉(zhuǎn)換功能、中斷機制、上下文轉(zhuǎn)換機制、日中時間(TOD)時鐘和到I/O子系統(tǒng)的架構(gòu)接口,這樣被設(shè)計為在被仿真處理器上運行的操作系統(tǒng)或應(yīng)用程序可在具有仿真軟件的本機處理器上運行。
[0142]解碼正被仿真的特定指令,且調(diào)用子例程以執(zhí)行該單個指令的功能。仿真被仿真處理器的功能的仿真軟件功能例如在“C”子例程或驅(qū)動器中實現(xiàn),或由提供用于特定硬件的驅(qū)動器的其他方法實現(xiàn),如本領(lǐng)域技術(shù)人員在理解優(yōu)選實施例的描述后將理解的。包括但不限于 Beausoleil 等人的標(biāo)題為 “Multiprocessor for Hardware Emulat1n” 的美國專利證書號 5,551,013 ;以及 Scalzi 等人的標(biāo)題為 “Preprocessing of Stored TargetRoutines for Emulating Incompatible Instruct1ns on a Target Processor,,的美國專利證書號 6,009,261 ;以及 Davidian 等人的標(biāo)題為 “Decoding Guest Instruct1n toDirectly Access Emulat1n Routines that Emulate the Guest Instruct1ns,,的美國專利證書號,5,574,873 ;以及Gorishek等人的標(biāo)題為“Symmetrical Multiprocessing Busand Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem”的美國專利證書號6,308, 255 ;以及Lethin等人的標(biāo)題為“Dynamic OptimizingObject Code Translator for Architecture Emulat1n and Dynamic Optimizing ObjectCode Translat1n Method”的美國專利證書號6,463,582,;以及Eric Traut的標(biāo)題為“Method for Emulating Guest Instruct1ns on a Host Computer Through DynamicRecompilat1n of Host Instruct1ns”的美國專利證書號5,790,825 ;以及許多其他專利的各種軟件和硬件仿真專利示出各種已知的方式來實現(xiàn)針對可為本領(lǐng)域技術(shù)人員獲得的目標(biāo)機器對為不同機器進(jìn)行架構(gòu)設(shè)計的指令格式的仿真。
[0143]在圖13中,提供了仿真主計算機系統(tǒng)5092的例子,其仿真主架構(gòu)的主計算機系統(tǒng)5000’。在仿真主計算機系統(tǒng)5092中,主處理器(CPU) 5091是仿真主處理器(或虛擬主處理器),并包括具有與主計算機5000’的處理器5091不同的本機指令集架構(gòu)的仿真處理器5093。仿真主計算機系統(tǒng)5092具有可被仿真處理器5093訪問的存儲器5094。在示例性實施例中,存儲器5094被分區(qū)為主計算機存儲器5096部分和仿真例程5097部分。根據(jù)主計算機架構(gòu),主計算機存儲器5096對于仿真主計算機5092的程序來說是可用的。仿真處理器5093執(zhí)行與被仿真處理器5091不同架構(gòu)的架構(gòu)指令集的本機指令(即來自仿真程序處理器5097的本機指令),且可通過使用從順序和訪問/解碼例程獲得的一個或多個指令從主計算機存儲器5096中的程序訪問用于執(zhí)行的主機指令,所述順序和訪問/解碼例程可解碼訪問的主機指令,以確定用于仿真被訪問的主機指令的功能的本機指令執(zhí)行例程。被定義用于主計算機系統(tǒng)5000’架構(gòu)的其他工具可被架構(gòu)工具例程仿真,所述架構(gòu)工具例程包括諸如通用寄存器、控制寄存器、動態(tài)地址轉(zhuǎn)換和I/O子系統(tǒng)支持和處理器高速緩存等工具。仿真例程也可利用在仿真處理器5093中可獲得的功能(諸如通用寄存器和虛擬地址的動態(tài)轉(zhuǎn)換)以改善仿真例程的性能。也可提供專用硬件和卸載引擎以輔助處理器5093來仿真主計算機5000’的功能。
[0144]在此使用的術(shù)語僅是為了描述特定實施例,且不旨在限制本發(fā)明。如在此使用的,單數(shù)形式“一”、“一個”和“該”也旨在包括復(fù)數(shù)形式,除非上下文另外清楚地指明。還將理解,當(dāng)在說明書中使用時,術(shù)語“包括”和/或“包含”指明存在所述的特征、整體、步驟、操作、元件和/或組件,但不排除存在或附加一個或多個其他特征、整體、步驟、操作、元件和/或組件。
[0145]所附權(quán)利要求書中的所有裝置或步驟加功能元件的相應(yīng)結(jié)構(gòu)、材料、操作以及等價物,如有的話,旨在包括用于結(jié)合如特別要求保護(hù)的其他所要求保護(hù)的元件來執(zhí)行所述功能的任何結(jié)構(gòu)、材料或操作。呈現(xiàn)本發(fā)明的說明是為了示出和描述的作用,但不是窮盡性的或?qū)⒈景l(fā)明限制于所公開的形式。許多修改和變化對本領(lǐng)域普通技術(shù)人員來說是明顯的,且不脫離本發(fā)明的范圍。選擇和描述實施例是為了最佳地解釋本發(fā)明的原理和實際應(yīng)用,并使得本領(lǐng)域普通技術(shù)人員能針對適于考慮的特定用途的具有各種修改的各種實施例理解本發(fā)明。
【權(quán)利要求】
1.一種執(zhí)行機器指令的方法,包括步驟: 由處理器獲得用于執(zhí)行的機器指令,根據(jù)計算機體系結(jié)構(gòu)定義機器指令以用于計算機執(zhí)行,所述機器指令包括: 至少一個操作碼字段,用于規(guī)定操作碼,所述操作碼定義分支操作;以及 用于確定要分支的目標(biāo)位置的至少一個字段;和 在第一處理流中執(zhí)行機器指令,所述執(zhí)行包括: 開始第二處理流,所述第二處理流與第一處理流有關(guān)系,并且執(zhí)行在利用機器指令的至少一個字段定義的目標(biāo)位置開始的一個或者多個指令,所述一個或者多個指令不按由第一處理流處理的一個或者多個指令的序列執(zhí)行順序,所述第一處理流繼續(xù)以處理所述機器指令后面的一個或者多個指令;和 其中,推測第二處理流的執(zhí)行在于,即使通過第一處理流的處理到達(dá)第二處理流的至少一個指令是暫定的,仍執(zhí)行第二處理流的一個或者多個指令中的至少一個指令,并且其中,根據(jù)在處理中到達(dá)預(yù)定義點的第一處理流執(zhí)行通過第二處理流的一個或者多個指令的體系結(jié)構(gòu)化狀態(tài)的更新。
2.根據(jù)權(quán)利要求1所述的方法,其中,至少部分地與第一處理流中處理的一個或者多個指令并行地處理在第二處理流中執(zhí)行的一個或者多個指令的至少一個指令。
3.根據(jù)權(quán)利要求1所述的方法,其中,在第一處理流到達(dá)具有第二處理流的指令的目標(biāo)位置的指令后,釋放第一處理流。
4.根據(jù)權(quán)利要求1所述的方法,其中,第一處理流到達(dá)的指令包括主分支關(guān)閉指令。
5.根據(jù)權(quán)利要求4所述的方法,還包括: 基于處理主分支關(guān)閉指令,如果有,則將第二處理流的一個或者多個完成指令作為校驗點;以及 使第二處理流為新的第一處理流。
6.根據(jù)權(quán)利要求1所述的方法,其中,所述第二處理流包括同步多線程處理器中的子線程,并且所述第一處理流包括同步多線程處理器中的父線程。
7.根據(jù)權(quán)利要求1所述的方法,其中,所述機器指令包括主分支開啟指令,并且其中所述機器指令包括用于指出機器指令是主分支開啟指令的分支類型字段。
8.根據(jù)權(quán)利要求7所述的方法,其中,所述分支類型字段是以下中的一個:操作碼;操作碼的一部分;或者獨立于操作碼的字段。
9.根據(jù)權(quán)利要求1所述的方法,其中,相對于第一處理流的至少一個指令不按順序解碼和調(diào)度第二處理流的一個或者多個指令中的至少一個指令。
10.根據(jù)權(quán)利要求9所述的方法,其中,也不按順序執(zhí)行所述至少一個指令,但是按順序完成所述至少一個指令。
11.根據(jù)權(quán)利要求1所述的方法,還包括由第二處理流根據(jù)在第二處理流中主分支開啟指令的執(zhí)行而開始第三處理流。
12.根據(jù)權(quán)利要求1所述的方法,還包括重新開始第一處理流,其中,所述重新開始終止第二處理流。
13.根據(jù)權(quán)利要求1所述的方法,還包括由第二處理流控制資源的使用,以防止第二處理流妨礙第一處理流的前進(jìn)進(jìn)度。
14.根據(jù)權(quán)利要求1所述的方法,其中,開始第二處理流包括開始第二處理流的事務(wù)的事務(wù)執(zhí)行以及開始包括在目標(biāo)位置開始的一個或者多個指令的執(zhí)行的事務(wù),并且其中開始事務(wù)包括取得處理器的當(dāng)前狀態(tài)的快照。
15.根據(jù)權(quán)利要求14所述的方法,還包括: 根據(jù)機器指令的字段確定是否要開始事務(wù);以及 其中根據(jù)確定指出要開始指令來開始所述事務(wù)。
16.根據(jù)權(quán)利要求14所述的方法,還包括: 由硬件確定是否要開始事務(wù),并且 其中,根據(jù)確定指出要開始指令來開始所述事務(wù)。
17.根據(jù)權(quán)利要求16所述的方法,其中,由硬件確定超越指出是否要開始事務(wù)的機器指令子段。
18.根據(jù)權(quán)利要求14所述的方法,其中在,到達(dá)具有第二處理流的指令的目標(biāo)地址的指令的第一處理流之后,釋放第一處理流,第一處理流到達(dá)的指令是主分支關(guān)閉指令,并且其中所述方法還包括: 根據(jù)對主分支關(guān)閉指令的處理,結(jié)束第二處理流的事務(wù)并且更新狀態(tài)以反映所述事務(wù);以及 使第二處理流為新的第一處理流。
19.一種包括適于執(zhí)行根據(jù)上述任何一個方法權(quán)利要求所述方法的所有步驟的裝置的系統(tǒng)。
20.—種包括當(dāng)在計算機系統(tǒng)上執(zhí)行所述計算機程序時,用于執(zhí)行根據(jù)上述任何一個方法權(quán)利要求所述方法的所有步驟的指令的計算機程序。
【文檔編號】G06F9/38GK104081343SQ201380007502
【公開日】2014年10月1日 申請日期:2013年1月23日 優(yōu)先權(quán)日:2012年1月31日
【發(fā)明者】B.R.普拉斯基, C.A.克萊格夫斯基, 岑中龍, F.Y.布薩巴, S.卡洛 申請人:國際商業(yè)機器公司