亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

針對事務(wù)型數(shù)據(jù)處理執(zhí)行模式的調(diào)用堆棧維護的制作方法

文檔序號:11160875閱讀:330來源:國知局
針對事務(wù)型數(shù)據(jù)處理執(zhí)行模式的調(diào)用堆棧維護的制造方法與工藝

本公開涉及數(shù)據(jù)處理。更具體地,它涉及對于在數(shù)據(jù)處理處于事務(wù)執(zhí)行模式中時使用的調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的維護。



背景技術(shù):

數(shù)據(jù)處理器可被配置為依據(jù)它所執(zhí)行的數(shù)據(jù)處理指令對調(diào)用堆棧進行維護,具體地數(shù)據(jù)處理器在遇到函數(shù)調(diào)用時把返回地址推送給調(diào)用堆棧,并且在函數(shù)結(jié)束時從調(diào)用堆棧中彈出該返回地址。在當代的數(shù)據(jù)處理裝置中,提供不止一個數(shù)據(jù)處理器(例如,處理器核)(因為它帶來性能增強)是常見的。然而,關(guān)于由這多個處理器執(zhí)行的數(shù)據(jù)處理的某些約束因此必須被重視以確保由多個處理器執(zhí)行的數(shù)據(jù)處理的結(jié)果是可預(yù)測的并且是確定性的。此情形的一個示例涉及由數(shù)據(jù)處理器在訪問(例如,存儲在系統(tǒng)存儲器中的)數(shù)據(jù)結(jié)構(gòu)時進行的事務(wù)執(zhí)行,其中該數(shù)據(jù)結(jié)構(gòu)被共享給系統(tǒng)中的至少一個其它數(shù)據(jù)處理器。此數(shù)據(jù)結(jié)構(gòu)的共享意味著必須遵循某些協(xié)議以避免不同的數(shù)據(jù)處理器對共享數(shù)據(jù)結(jié)構(gòu)做出并發(fā)修改所導(dǎo)致的數(shù)據(jù)沖突。數(shù)據(jù)處理裝置中的每個數(shù)據(jù)處理器然后可被配置為:當操作于事務(wù)執(zhí)行模式(即,在正嘗試對共享數(shù)據(jù)結(jié)構(gòu)的訪問但尚未成功完成訪問的時段期間)時,以推測性的方式更新調(diào)用堆棧,從而使得如果針對共享數(shù)據(jù)結(jié)構(gòu)的事務(wù)執(zhí)行沒有成功地完成,則數(shù)據(jù)處理器能夠丟棄推測性修改并且“回滾”至數(shù)據(jù)處理序列中最后已知的非推測點。



技術(shù)實現(xiàn)要素:

根據(jù)第一示例配置,提供了一種裝置,包括:處理器電路,被配置為執(zhí)行數(shù)據(jù)處理指令,其中處理器電路被配置為依據(jù)它所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu),并且其中處理器電路被配置為在執(zhí)行的數(shù)據(jù)處理指令訪問與其它處理器電路共享的存儲數(shù)據(jù)項時在事務(wù)執(zhí)行模式中操作;以及事務(wù)前堆棧指針存儲電路,被配置為存儲調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的堆棧深度指示,其中處理器電路被配置為在進入事務(wù)執(zhí)行模式前存儲堆棧深度指示,其中處理器電路被配置為當在事務(wù)執(zhí)行模式中操作時確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置,并且如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是非推測性的指示,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是推測性的指示。

根據(jù)另一示例配置,提供了一種裝置,包括:用于執(zhí)行數(shù)據(jù)處理指令的裝置;用于依據(jù)所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的裝置,其中用于執(zhí)行數(shù)據(jù)處理指令的裝置被配置為在執(zhí)行的數(shù)據(jù)處理指令訪問與其它用于執(zhí)行數(shù)據(jù)處理指令的裝置共享的存儲數(shù)據(jù)項時在事務(wù)執(zhí)行模式中操作;以及用于存儲調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的堆棧深度指示的裝置,其中堆棧深度指示在用于執(zhí)行數(shù)據(jù)處理指令的裝置進入事務(wù)執(zhí)行模式前被存儲;用于當在事務(wù)執(zhí)行模式中操作時確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置的裝置;以及用于存儲與修改相關(guān)聯(lián)的指示的裝置,其中如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則該指示顯示修改是非推測性的,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則指示顯示修改是推測性的。

根據(jù)另一示例配置,提供了一種處理器設(shè)備中的數(shù)據(jù)處理方法,包括:執(zhí)行數(shù)據(jù)處理指令;依據(jù)所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu);當執(zhí)行的數(shù)據(jù)處理指令將尋求訪問與其它處理器電路共享的存儲數(shù)據(jù)項時進入事務(wù)執(zhí)行模式;存儲堆棧深度指示,其中堆棧深度指示在進入事務(wù)執(zhí)行模式前被存儲;當在事務(wù)執(zhí)行模式中操作時,確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置;以及如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是非推測性的指示,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是推測性的指示。

附圖說明

將僅通過示例方式參照附圖中所示的本發(fā)明的實施例來進一步描述本發(fā)明,在附圖中:

圖1示意性地描述一個實施例中的數(shù)據(jù)處理裝置,其示出能夠各自訪問存儲器中的共享數(shù)據(jù)結(jié)構(gòu)的兩個處理器核;

圖2A示出了類似C代碼的示例序列;

圖2B示意性地描述一個實施例中圖2A的代碼中的函數(shù)調(diào)用和返回如何對應(yīng)至推送給調(diào)用堆棧和自調(diào)用堆棧中彈出;

圖2C示意性地描述在一個實施例中針對圖2A的代碼的調(diào)用堆棧的內(nèi)容和增長;

圖3示意性地更詳細描述一個實施例中調(diào)用堆棧的內(nèi)容與圖2A中示出的代碼的執(zhí)行相對應(yīng)的演進;

圖4A示意性地描述一個實施例中的存儲單元;

圖4B和4C示意性描述圖4A的存儲單元的示例性使用;

圖5示意性地描述一個實施例中的處理器核和相關(guān)聯(lián)的L1緩存;

圖6示意性地描述根據(jù)一個實施例的方法所采取的一系列步驟;以及

圖7示意性地描述一個實施例中為了監(jiān)測事務(wù)中止以及對事務(wù)中止做出反應(yīng)而采取的一系列步驟。

具體實施方式

根據(jù)第一示例配置,提供了一種裝置,包括:處理器電路,被配置為執(zhí)行數(shù)據(jù)處理指令,其中處理器電路被配置為依據(jù)它所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu),并且其中處理器電路被配置為在執(zhí)行的數(shù)據(jù)處理指令訪問與其它處理器電路共享的存儲數(shù)據(jù)項時在事務(wù)執(zhí)行模式中操作;以及事務(wù)前堆棧指針存儲電路,被配置為存儲調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的堆棧深度指示,其中處理器電路被配置為在進入事務(wù)執(zhí)行模式前存儲堆棧深度指示,其中處理器電路被配置為當在事務(wù)執(zhí)行模式中操作時確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置,并且如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是非推測性的指示,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是推測性的指示。

本技術(shù)的發(fā)明人已經(jīng)察覺到盡管在處理器操作于事務(wù)執(zhí)行模式時對調(diào)用堆棧的修改被標記為推測性的配置是安全的(理由在于,在處理器進入事務(wù)執(zhí)行模式時如果嘗試的事務(wù)沒有成功完成,這肯定將允許處理器把調(diào)用堆棧的狀態(tài)“回滾”至它過去具有的配置),但是所產(chǎn)生的、數(shù)據(jù)處理器必須相對于對調(diào)用堆棧的推測性修改維護的數(shù)據(jù)集合的大小會變得不可取的大。本技術(shù)解決這一問題并且使得此數(shù)據(jù)集合的大小可被減小。

因此,提供了事務(wù)前堆棧指針存儲電路,該電路能夠存儲由處理器在它對調(diào)用堆棧的管理和維護中使用的堆棧指針所指向的堆棧深度的指示,此堆棧深度指示在處理器進入它的事務(wù)執(zhí)行模式前被存儲至事務(wù)前堆棧指針存儲電路。注意,進入事務(wù)執(zhí)行模式例如可源自處理器基于要訪問的存儲的數(shù)據(jù)項的標識是與其它處理器電路共享的標識而認識到這么做的需要,或者在另一示例中可源自明確的“開始事務(wù)執(zhí)行模式”指令的執(zhí)行,該指令把處理器切換至事務(wù)執(zhí)行模式。在后一示例的上下文中,“結(jié)束事務(wù)執(zhí)行模式”指令然后也可被用于把處理器切換出事務(wù)執(zhí)行模式。

此外,處理器然后針對它此后(在處于事務(wù)執(zhí)行模式中時)對調(diào)用堆棧做出的每次修改,確定該修改相對于事務(wù)前堆棧指針存儲設(shè)備中存儲的指示將發(fā)生在哪里。修改的這個相對堆棧位置具體是相對于調(diào)用堆棧的堆棧增長方向而確定的,將理解的是,此堆棧增長方向可被描述為“向上”或向下(取決于調(diào)用堆棧的具體配置)、調(diào)用堆棧朝向增大還是減小存儲器地址的方向增長,等等。然后,當做出對調(diào)用堆棧的修改時,處理器確定修改的相對堆棧位置相對于由事務(wù)前堆棧指針存儲設(shè)備的內(nèi)容指示的位置是否處于正向堆棧增長方向。如果發(fā)現(xiàn)需要對處于正向堆棧增長方向的相對堆棧位置進行修改,則與對調(diào)用堆棧的修改相關(guān)聯(lián)地存儲指示此修改是非推測性的指示。相反地,如果確定修改的相對堆棧位置相對于由事務(wù)前堆棧指針存儲設(shè)備的內(nèi)容指示的位置未處于正向堆棧增長方向,則與對調(diào)用堆棧的修改相關(guān)聯(lián)地存儲的指示被設(shè)定為指示該修改是推測性的。將理解的是,這些與修改相關(guān)聯(lián)地存儲的推測性/非推測性指示可例如僅包括被置位或者未被置位的位。

處理器必須與調(diào)用堆棧相關(guān)聯(lián)地維護以便在處于事務(wù)執(zhí)行模式時正確地管理對調(diào)用堆棧的一些修改的推測性性質(zhì)的數(shù)據(jù)集合的大小因此可被減小,因為那些修改的子集實際上未被標記為推測性的,而是被標記為非推測性的,因為這樣的修改會在處理器未處于事務(wù)執(zhí)行模式中(以及以其它方式不運行某一類型的推測性執(zhí)行)時做出。這基于以下實現(xiàn)是可能的:在事務(wù)執(zhí)行模式中嘗試的事務(wù)沒有成功完成的情形中,如果處理器通過將調(diào)用堆棧的狀態(tài)回滾至它在處理器進入事務(wù)執(zhí)行模式時所具有的狀態(tài)來對此進行處置,并具體地將堆棧指針重置為它在該數(shù)據(jù)處理階段所具有的值,則在事務(wù)執(zhí)行模式中在相對于事務(wù)執(zhí)行模式進入的堆棧深度處于正向堆棧增長方向的位置處做出的對調(diào)用堆棧的修改可被簡單丟棄,因為它們不具有對在進入事務(wù)執(zhí)行模式時或者在此之前寫入的任何調(diào)用堆棧內(nèi)容進行覆寫的可能性。

事務(wù)前堆棧指針存儲電路可以各種方式來配置,但在一個實施例中,事務(wù)前堆棧指針存儲電路被配置為存儲由處理電路用于調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的堆棧指針的副本。因此,例如如果當前堆棧指針被裝置存儲在處理器的寄存器中,則該寄存器的內(nèi)容可被復(fù)制到事務(wù)前堆棧指針存儲電路中。確實,在一些實施例中事務(wù)前堆棧指針存儲電路自身包括處理電路可訪問的寄存器。這樣的寄存器可附加地被配置為不可被由處理電路執(zhí)行的數(shù)據(jù)處理指令訪問。換而言之,此寄存器對于編程者可以是透明的,從而使得它的內(nèi)容不可被外部代理修改。

對調(diào)用堆棧的修改可包括推送和彈出。在一些實施例中,如果相對堆棧位置未處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向并且修改是到調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的推送,則通過該推送而推送給調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)項被標記為推測性寫入。因此,由裝置存儲以反映推送操作的結(jié)果的一個或多個數(shù)據(jù)項因此被標記為正在被推測性寫入。相反地,如果相對堆棧位置未處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向并且修改是自調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的彈出,則通過該彈出而從調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)中彈出的數(shù)據(jù)項被標記為推測性讀取。因此,先前由裝置存儲以反映調(diào)用堆棧內(nèi)容的增加并且彈出現(xiàn)在正尋求從調(diào)用堆棧移出的一個或多個數(shù)據(jù)項被更新以指示它/它們已經(jīng)被推測性讀取。還應(yīng)當注意,如果調(diào)用堆棧僅可由它所從屬的處理器電路訪問(并且不可由其它處理器電路訪問),那么這樣的標記為推測性讀取通常是冗余的,因為就提供的任何一致性機制而言,該數(shù)據(jù)項或這些數(shù)據(jù)項的推測性讀取不能影響其它處理電路。

處理器電路可被配置為在多個存儲位置中維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)。例如,處理器電路可在存儲器中維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu),其中與其它處理器電路共享的數(shù)據(jù)項被存儲在該存儲器中。然而,在一些實施例中,裝置還包括存儲電路,其被配置為存儲由處理器電路在執(zhí)行數(shù)據(jù)處理指令時在存儲器中訪問的數(shù)據(jù)項的本地副本,其中處理器電路被配置為在存儲電路中維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)。此存儲電路被配置為存儲由處理器電路在存儲器中訪問的數(shù)據(jù)項的本地副本,即,換而言之通常是緩存,并且通常將被配置為具有相對較小的存儲容量。本技術(shù)可在包括處理器電路和相關(guān)聯(lián)的本地緩存的裝置的上下文中找到特別可應(yīng)用性,因為這樣的緩存可具有相對受限的存儲容量。

當裝置包括這樣的存儲電路時,存儲電路可包括一致性控制單元,一致性控制電路被配置為允許存儲電路中被指示為非推測性的內(nèi)容被驅(qū)逐至存儲器并且如果存儲電路中的內(nèi)容被選擇進行驅(qū)逐并且被指示為推測性的則生成錯誤狀況。一致性控制單元因此在數(shù)據(jù)處理的任何給定階段管理什么內(nèi)容應(yīng)當被保持在存儲電路中的確定,特別是鑒于存儲電路(例如,緩存)可具有相對受限的存儲容量的事實。因此,一致性控制單元能夠允許存儲電路中被指示為非推測性的內(nèi)容被驅(qū)逐到存儲器(通常在新內(nèi)容被要求存儲在存儲電路中的時候),該新內(nèi)容(由于存儲電路配置)被要求存儲在有效內(nèi)容已經(jīng)被存儲于其中的預(yù)定位置。如果此預(yù)先存在的有效內(nèi)容被標記為非推測性的,則一致性控制單元允許這樣的驅(qū)逐進行,然而如果它被標記為推測性的,則一致性控制單元生成錯誤狀況。在處理器操作于事務(wù)執(zhí)行模式的上下文中,這通常將代表阻止處理器電路繼續(xù)進行所嘗試的事務(wù)的發(fā)展,因為不能保證對調(diào)用堆棧的進一步推測性修改能夠被存儲在存儲電路中,并且生成的錯誤狀況然后可導(dǎo)致事務(wù)嘗試中止。

然而如果在事務(wù)執(zhí)行模式中嘗試的事務(wù)成功地完成,則存儲電路中的推測性內(nèi)容能夠被更新為非推測性的,因為相對應(yīng)的改變代表已經(jīng)成功發(fā)生的確定性改變。因此,在一個實施例中當處理電路退出事務(wù)執(zhí)行模式并且在事務(wù)執(zhí)行模式中執(zhí)行的數(shù)據(jù)處理指令已經(jīng)成功完成了它們的數(shù)據(jù)處理操作時,一致性控制單元被配置為把存儲電路中被指示為推測性的內(nèi)容改變?yōu)楸恢甘緸榉峭茰y性的。

一致性控制單元可被配置為向其它處理器電路隱藏存儲電路中被指示為推測性的內(nèi)容。這使得裝置中提供的任何一致性介質(zhì)不需要進一步確保存儲電路的任何推測性內(nèi)容相對于其他處理電路被安全地處置。例如,一致性控制單元可被配置為:如果其它處理電路指示它正在訪問對應(yīng)的內(nèi)容,則回應(yīng)以這樣的內(nèi)容當前未存儲在存儲電路中的通知。

在一些實施例中,裝置還包括中止處置電路,中止處置電路被配置為在處理電路操作于事務(wù)執(zhí)行模式中時響應(yīng)于待定事務(wù)已經(jīng)失敗的指示而執(zhí)行回滾過程,其中回滾過程包括丟棄被指示為推測性的任何修改并且使用存儲的堆棧深度指示重置當前的堆棧指針。這樣,如果處理電路沒有成功地退出事務(wù)執(zhí)行模式并且嘗試的事務(wù)必須被再次嘗試,則由處理電路執(zhí)行的數(shù)據(jù)處理能夠被回滾(重置)到事務(wù)執(zhí)行模式啟動的點,因此由處理電路用于引用調(diào)用堆棧的當前堆棧指針被重置為存儲的堆棧深度指示的值,即堆棧指針在進入事務(wù)執(zhí)行模式時所具有的值。

根據(jù)另一示例配置,提供了一種裝置,包括:用于執(zhí)行數(shù)據(jù)處理指令的裝置;用于依據(jù)所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的裝置,其中用于執(zhí)行數(shù)據(jù)處理指令的裝置被配置為在執(zhí)行的數(shù)據(jù)處理指令訪問與其它用于執(zhí)行數(shù)據(jù)處理指令的裝置共享的存儲數(shù)據(jù)項時在事務(wù)執(zhí)行模式中操作;以及用于存儲調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的堆棧深度指示的裝置,其中堆棧深度指示在用于執(zhí)行數(shù)據(jù)處理指令的裝置進入事務(wù)執(zhí)行模式前被存儲;用于當在事務(wù)執(zhí)行模式中操作時確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置的裝置;以及用于存儲與修改相關(guān)聯(lián)的指示的裝置,其中如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則該指示顯示修改是非推測性的,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則指示顯示修改是推測性的。

根據(jù)另一示例配置,提供了一種處理器設(shè)備中的數(shù)據(jù)處理方法,包括:執(zhí)行數(shù)據(jù)處理指令;依據(jù)所執(zhí)行的數(shù)據(jù)處理指令來維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu);當執(zhí)行的數(shù)據(jù)處理指令將尋求訪問與其它處理器電路共享的存儲數(shù)據(jù)項時進入事務(wù)執(zhí)行模式;存儲堆棧深度指示,其中堆棧深度指示在進入事務(wù)執(zhí)行模式前被存儲;當在事務(wù)執(zhí)行模式中操作時,確定對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改相對于堆棧深度指示的相對堆棧位置;以及如果相對堆棧位置處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是非推測性的指示,并且如果相對堆棧位置不處于相對于由堆棧深度指示所指示的位置的正向堆棧增長方向,則與修改相關(guān)聯(lián)地存儲該修改是推測性的指示。

圖1根據(jù)一個實施例示意性地描述了包括兩個數(shù)據(jù)處理裝置12和14的數(shù)據(jù)處理系統(tǒng)10。每個數(shù)據(jù)處理裝置12、14分別包括處理器核16、18并且因此將認識到數(shù)據(jù)處理系統(tǒng)10是多核系統(tǒng)。每個數(shù)據(jù)處理裝置12、14訪問相同的系統(tǒng)總線20,它能夠經(jīng)由系統(tǒng)總線訪問(除了其它目標之外)存儲器22。盡管處理裝置12和14二者具有相同存儲器22的訪問權(quán),但是根據(jù)已知的存儲器分配和控制技術(shù),存儲器22中可存在僅一個數(shù)據(jù)處理裝置能夠訪問并且其它數(shù)據(jù)處理裝置被阻止訪問(或者至少也許阻止修改)的區(qū)域。然而,如同所示,存儲器22包含共享數(shù)據(jù)結(jié)構(gòu)24被存儲在其中的至少一個區(qū)域,兩個數(shù)據(jù)處理裝置12和14均能夠訪問該共享數(shù)據(jù)結(jié)構(gòu)24。此共享數(shù)據(jù)結(jié)構(gòu)24例如可以是數(shù)據(jù)庫,但是本技術(shù)絕不限于這樣的示例。共享數(shù)據(jù)結(jié)構(gòu)24可代表更簡單的數(shù)據(jù)結(jié)構(gòu),確實原則上甚至可僅代表兩個數(shù)據(jù)處理裝置可訪問的單個數(shù)據(jù)項。

兩個數(shù)據(jù)處理裝置12和14均能夠訪問存儲器22中相同的共享數(shù)據(jù)結(jié)構(gòu)24的事實對數(shù)據(jù)處理裝置操作的方式施加了某些約束,以便確保當兩個數(shù)據(jù)處理裝置(具體是它們各自的處理器核)尋求訪問相同的共享數(shù)據(jù)結(jié)構(gòu)24(在上面提到的共享數(shù)據(jù)庫的上下文中,例如此共享數(shù)據(jù)庫內(nèi)的相同數(shù)據(jù)項)時不出現(xiàn)沖突。為了避免這樣的沖突,每個處理器核16、18被配置為在尋求訪問共享數(shù)據(jù)結(jié)構(gòu)24時進入事務(wù)執(zhí)行模式。每個處理器核例如可通過參考頁表中的信息、參考緩存一致性協(xié)議以及緩存中存儲的跟蹤結(jié)構(gòu)、或者參考其他已知的跟蹤和信令結(jié)構(gòu)來識別何時所訪問的數(shù)據(jù)項是與另一處理器核共享訪問的數(shù)據(jù)項。可替換地或者附加地,明確的“開始事務(wù)執(zhí)行模式”和“結(jié)束事務(wù)執(zhí)行模式”指令可被用于把處理器切換至事務(wù)執(zhí)行模式或者切換出事務(wù)執(zhí)行模式。這樣的事務(wù)執(zhí)行模式是本領(lǐng)域技術(shù)人員已知的,但是本質(zhì)上當在事務(wù)執(zhí)行模式中操作時處理器核被約束為以更保守的方式訪問存儲器22,根據(jù)該更保守的方式當做出對共享數(shù)據(jù)結(jié)構(gòu)24(或者其一部分)的訪問時,處理器核首先必須尋求獲取并且然后成功地獲取對數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)項的鎖定,該鎖定被布置為使得一旦獲取到,則它暫時屬于的處理器具有對該數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)項的排他性訪問直至鎖定被松開。這確保各種類型的已知數(shù)據(jù)沖突不能夠作為不止一個處理器同時訪問相同的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)項的結(jié)果而發(fā)生,其中作為處理器16和18訪問(以及具體地修改)此共享數(shù)據(jù)結(jié)構(gòu)的具體次序的結(jié)果,會出現(xiàn)針對作為整體的數(shù)據(jù)處理系統(tǒng)10的不同處理結(jié)果。

本文描述的當前技術(shù)具體涉及在處理器操作于它的事務(wù)執(zhí)行模式的上下文中已經(jīng)識別的問題以及處理器然后維護調(diào)用堆棧的方式,這是由數(shù)據(jù)處理設(shè)備用于存儲返回地址(以及可能的其他相關(guān)聯(lián)的處理器狀態(tài)信息)的已知數(shù)據(jù)結(jié)構(gòu),從而使得處理器能夠隨著在它所執(zhí)行的數(shù)據(jù)程序指令的序列中遇到的函數(shù)調(diào)用和函數(shù)返回而正確地導(dǎo)航至正確的存儲器地址(并且更新相對應(yīng)的處理器狀態(tài)信息)。處理器核16和18為了實現(xiàn)本技術(shù)而被構(gòu)造的方式的一個特征是每個處理器核分別在它具備的內(nèi)部寄存器組26和28內(nèi)置有附加寄存器,其中堆棧指針(SP)的副本能夠被存儲在其中,它使用堆棧指針來引用它正在維護的調(diào)用堆棧。此堆棧指針副本何時被存儲在為此目的提供的專用寄存器30、32的進一步細節(jié)將在下面參考以下圖示來更詳細地描述。每個數(shù)據(jù)處理裝置12、14還分別具有一級(L1)緩存34和36。這些L1緩存中的每一個被配置為緩存存儲器22的內(nèi)容的小子集以供它的相關(guān)聯(lián)處理器核使用,從而使得當處理器核尋求訪問存儲器22的內(nèi)容時,與經(jīng)由系統(tǒng)總線20以及可能經(jīng)由存儲器等級的其他元件(例如二級(L2)緩存(未示出))訪問存儲器22中存儲的數(shù)據(jù)項相關(guān)聯(lián)的延遲能夠被較大地避免。每個L1緩存34、36被提供各自的控制單元38、40,該控制單元維護對緩存的總體控制并且具體在所示實施例中以將參考以下圖示更詳細地描述的方式進行配置來支持本技術(shù)。

圖2A示出一些類似C的代碼,代碼描述了可由圖1中所示的數(shù)據(jù)處理系統(tǒng)10中的處理器核16、18中的一者執(zhí)行的數(shù)據(jù)處理指令的序列的結(jié)構(gòu)。圖2A中所示的代碼是函數(shù)調(diào)用的相對簡單集合,其中一些函數(shù)調(diào)用被嵌入到另一函數(shù)調(diào)用,例如函數(shù)f2()被嵌入到函數(shù)f1()內(nèi),同時函數(shù)f4()被嵌入到函數(shù)f3()內(nèi),函數(shù)f3()自身被嵌入到函數(shù)f1()內(nèi)。對于本技術(shù)特別重要的是函數(shù)f2()的定義,函數(shù)f2()包括操作tbegin(),在此操作點處執(zhí)行這些指令的處理器為了尋求對存儲器中存儲的數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)項的訪問將進入它的事務(wù)執(zhí)行模式。由此具體注意,事務(wù)執(zhí)行模式的進入以及跟隨的事務(wù)操作被抽象于庫調(diào)用內(nèi)。

為了正確地進行在圖2A中所示的定義代碼,執(zhí)行這些指令的處理器維護調(diào)用堆棧,它在程序指令的序列中遇到的函數(shù)調(diào)用的返回地址被推送給該調(diào)用堆棧,并且此后當函數(shù)完成時從調(diào)用堆棧彈出,從而使得處理器能夠正確地遵循由編程者定義的經(jīng)編程的指令序列。

圖2B提供了當處理器執(zhí)行圖2A中所示的數(shù)據(jù)處理指令時到調(diào)用堆棧的推送和自調(diào)用堆棧的彈出的描述。因此,當處理器在函數(shù)f1()中遇到函數(shù)f2()時,返回地址ret_f2被推送給調(diào)用堆棧并且在函數(shù)f2()的結(jié)尾處此地址(以及可能一些更多的配置數(shù)據(jù))被從堆棧中彈出。注意,此在函數(shù)f2()的結(jié)尾處的彈出在圖2B中被示出為tx_pop,這指代此彈出發(fā)生于處理器處于事務(wù)執(zhí)行模式中時的事實,如將在下文更詳細地描述。類似地,當處理器后面在函數(shù)f1()中遇到函數(shù)f3()時,返回地址ret_f3被推送給調(diào)用堆棧(tx_push)。然而,注意在此之后在函數(shù)f3()內(nèi),當遇到函數(shù)f4()時,返回地址ret_f4也被推送給調(diào)用堆棧,但這在圖2B中被標記為non_tx_push,這是因為(將在下文更詳細地描述)此返回地址ret_f4被處置的具體方式不同于返回地址ret_f3被處置的方式。

圖2C示意性地示出調(diào)用堆棧的內(nèi)容和發(fā)展,執(zhí)行圖2A中所示的指令的處理器隨著它施行那些指令而對調(diào)用堆棧進行維護。如圖2C中所示,調(diào)用堆棧具有在頁面上向下的正向堆棧增長方向,盡管應(yīng)當注意這不應(yīng)當被解釋為處理器用于維護調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的存儲器地址的特定排序——隨著正向堆棧增長而增加存儲器地址或者減小存儲器地址同樣能夠很好地進行,這取決于具體實現(xiàn)方式。對本論述特別重要的是圖2C的右側(cè)示出的、與圖2A中示出的代碼內(nèi)的具體點相對應(yīng)的標記(1)、(2)、(3)和(4)。這些點指示調(diào)用堆棧在到達代碼的特定階段時在該點處具有的堆棧深度。

處理器通過堆棧指針(SP)來維護它對當前堆棧深度的認識,專用寄存器被提供用于堆棧指針。另外,處理器被配置為在它進入事務(wù)執(zhí)行模式的點處(即在圖2A和2B中所描述的示例中當它遇到tbegin()函數(shù)時)存儲SP的副本。在圖1中所示的實施例中,此堆棧指針的副本被執(zhí)行圖2A中所示的指令的相應(yīng)處理器核16、18存儲在專用寄存器30、32中。此后,當處理器仍然處于它的事務(wù)執(zhí)行模式中時,它在它修改調(diào)用堆棧時引用此存儲的堆棧指針的副本并且確定對調(diào)用堆棧的修改相對于由該存儲副本指示的堆棧深度位置是否處于正向堆棧增長方向。因此,參考圖2C所示的描述,在低于由被指示為SP@tbeigin的深度所指示的深度的堆棧深度處對調(diào)用堆棧的修改被確定為相對于存儲的SP值處于正向堆棧增長方向,而在高于此點的堆棧深度位置處對調(diào)用堆棧的修改不處于正向堆棧增長方向。執(zhí)行圖2A所示的指令的處理器置有相關(guān)聯(lián)的L1緩存,該L1緩存的控制單元被配置為將形成調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的一部分并且被存儲在L1緩存中的數(shù)據(jù)項標記為非推測性的或者推測性的(取決于(當處理器處于它的事務(wù)執(zhí)行模式時)對調(diào)用堆棧的修改是否發(fā)生于相對于SP副本寄存器中存儲的堆棧指針值SP@tbegin處于正向堆棧增長方向的堆棧深度處)。如果在相對于此SP副本值處于正向堆棧增長方向做出修改,則緩存控制單元把L1緩存中相對應(yīng)的條目標記為非推測性的,而如果它未處于相對于此SP副本的正向堆棧增長方向,則相對應(yīng)的數(shù)據(jù)項被標記為推測性的。

這在圖2B中通過圖示的虛線的垂直劃分來示出,該虛線將圖示中與處理器的事務(wù)執(zhí)行模式相對應(yīng)的部分劃分為“tx_zone(事務(wù)區(qū))”和“non_tx_zone(非事務(wù)區(qū))”。因此,在“tx_zone”發(fā)生的對調(diào)用堆棧的修改被標記為推測性的,而在“non_tx_zone”中對調(diào)用堆棧的修改被標記為非推測性的。這能夠進一步參考圖2C來理解,其中可以看出:函數(shù)f2()的返回地址ret_f2在原理上將被函數(shù)f3()的返回地址ret_f3覆寫。然而,本技術(shù)認識到,因為處理器在操作于它的事務(wù)執(zhí)行模式中時尋求施行的事務(wù)執(zhí)行可能不能成功地完成,處理器回滾到它在遇到tbegin()指令時具有的它的執(zhí)行狀態(tài)(從而再一次嘗試該事務(wù)執(zhí)行)可能是必要的。注意,處理器在處于它的事務(wù)執(zhí)行模式時嘗試的事務(wù)可能因為多種原因而不能成功地完成,例如被動態(tài)觸發(fā)(因為另一處理器當前正在訪問期望的數(shù)據(jù)項),或者被人工觸發(fā)(例如,由于圖2A中的函數(shù)f1()所示的tabort()調(diào)用)。如果對調(diào)用堆棧的、涉及f3()的返回地址ret_f3的添加的修改被允許確定性修改L1緩存中的對應(yīng)條目,則此修改將會是永久性的,對應(yīng)的數(shù)據(jù)項也會被暫時驅(qū)逐至存儲器,并且處理器將無法把調(diào)用堆棧的狀態(tài)回滾至用于重新執(zhí)行tbegin()函數(shù)從而觸發(fā)對執(zhí)行所需要的事務(wù)的新嘗試(在事務(wù)執(zhí)行模式中)的正確狀態(tài)。這是因為在圖2C的圖示中調(diào)用堆棧中高于點SP@tbegin(1)的內(nèi)容將包含函數(shù)f3()的返回地址,而不是函數(shù)f2()的返回地址,因為后者將會被前者覆寫。因此,處理器將不能夠在后面正確地從函數(shù)f2()返回,因為所需要的返回地址將不再可用。

本技術(shù)通過提供以下方式來解決此問題:在處理器處于事務(wù)執(zhí)行模式中時發(fā)生的對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改與存儲的值SP@tbegin進行比較從而確定它們應(yīng)當被標記為推測性的還是非推測性的。然而應(yīng)當認識到,這不僅是確保對處于“tx_zone”(即,圖2C中示出的上部網(wǎng)格狀區(qū)域)中的調(diào)用堆棧的修改的推測性特性被正確地處置,而且還與處置non_tx_zone(即,圖2C的下部區(qū)域中顯示的輕度陰影區(qū)域)中的調(diào)用堆棧修改有關(guān)。此后一方面在這里特別重要,因為當處理器處于它的事務(wù)執(zhí)行模式中時僅使得對調(diào)用堆棧的所有修改被標記為推測性的(并且確實這是現(xiàn)有技術(shù)采取的方式)是可能的,因為這也會確保在事務(wù)執(zhí)行模式的未成功完成的情形中(即,當所嘗試的事務(wù)沒有成功完成時),處理器也能夠正確地回滾至tbegin()調(diào)用點處所需要的狀態(tài)。然而,盡管在圖2A的示例中僅示出數(shù)據(jù)處理指令的相對簡單集合,使得相對應(yīng)的調(diào)用堆棧的相對簡單和有限演進被顯示在圖2C中,但是原則上不存在對于會被執(zhí)行的數(shù)據(jù)處理指令的數(shù)量的任何限制,并且確實當處理器處于它的事務(wù)執(zhí)行模式時做出了其它函數(shù)調(diào)用。如果對調(diào)用堆棧的所有這些對應(yīng)修改僅被標記為推測性的,那么調(diào)用堆棧的管理會變得相當繁重,因為對調(diào)用堆棧的推測性修改(在事務(wù)執(zhí)行模式中)和非推測性修改(不在事務(wù)執(zhí)行模式中)二者的副本將不得不被維護,潛在地導(dǎo)致與事務(wù)執(zhí)行模式相關(guān)聯(lián)的相對較大的寫集合大小。這在任何數(shù)據(jù)存儲容量有限的數(shù)據(jù)處理系統(tǒng)中可能是重要的,但是在諸如圖1中所示的實施例中可能特別重要,其中在第一實例中調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)由處理器在它的相關(guān)聯(lián)的L1緩存內(nèi)進行維護,其中緩存的存儲容量當然通常被視為相比于主存儲器中的可用容量是更加受限的。因而,根據(jù)本技術(shù),盡管處理器處于它的事務(wù)執(zhí)行模式,對于處理器電路維護的調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的一些修改被標記為非推測性的。這具有以下結(jié)果:緩存中的這些條目能夠被安全地驅(qū)逐至主存儲器,而沒有影響在所嘗試的事務(wù)沒有成功完成時處理器正確地回滾它的執(zhí)行狀態(tài)的能力。另外,雖然圖1中所示的實施例中的一個處理器核可被準許查看由存儲器22中存儲的已提交的數(shù)據(jù)項表示的另一處理器核的調(diào)用堆棧,如果它不被允許查看與此處理器核相關(guān)聯(lián)的L1緩存中標記為推測性的內(nèi)容,那么數(shù)據(jù)處理系統(tǒng)10內(nèi)執(zhí)行的事務(wù)的正確原子性(atomicity)被維護。注意,在事務(wù)執(zhí)行成功完成時,整個調(diào)用堆棧被配置為被標記為非推測性的(非事務(wù)的)并且這些緩存的數(shù)據(jù)項然后可被自由地驅(qū)逐至存儲器22。然而,如上所述,在無論動態(tài)觸發(fā)還是人工觸發(fā)(例如,由于f4()中的tabort()調(diào)用)的中止的情形中,事務(wù)中已經(jīng)被推測性地修改的所有存儲器和架構(gòu)狀態(tài)被回滾至在tbegin()的調(diào)用處呈現(xiàn)的狀態(tài),并且在這樣的場景中寄存器集合26、28中指向堆棧的任何寄存器將回滾至它們的先前值并且堆棧指針將被重置為在圖2A和2C中示出的點(1)處獲取的快照的值。

圖3示出了由執(zhí)行圖2A中所示的數(shù)據(jù)處理指令序列的處理器電路維護的調(diào)用堆棧的演進的更詳細表示。階段A表示遇到函數(shù)f1()的點處的調(diào)用堆棧,其中堆棧指針SP然后指示返回地址ret_f1表示當前堆棧深度。此后在階段B處當遇到f2()函數(shù)時,返回地址ret_f2被推送給堆棧并且堆棧指針指示與此返回地址的位置相對應(yīng)的當前堆棧深度。當在階段C處遇到tbegin()調(diào)用時,注意堆棧指針已經(jīng)在正向堆棧增長方向輕微地移動,這是由于在遇到tbegin()指令自身前一些附加配置信息已經(jīng)被添加至調(diào)用堆棧。然后這是裝置在它的與進入事務(wù)執(zhí)行模式相對應(yīng)的SP副本寄存器(30或32)中存儲的堆棧深度(SP值)。此后,處理器(主要通過將此任務(wù)委派給它的L1緩存的控制單元)把它對調(diào)用堆棧做出的進一步修改與在它的SP副本寄存器中存儲的堆棧指針的值相比較,從而確定這些修改應(yīng)當被標記為推測性的還是非推測性的。因此,在圖3中的階段D處當遇到ref_f2指令時,彈出調(diào)用堆棧內(nèi)容以返回當前堆棧指針來指示函數(shù)f1()的返回地址ret_f1被標記為推測性的。然而,如將在下文參考圖4A至4C更詳細地描述的那樣,把對調(diào)用堆棧的彈出修改標記為推測性的可能不是必要的,因為這僅表示對于處理器的推測性讀取,并且只要還確保另一處理器不能夠訪問與執(zhí)行所示指令的處理器核相關(guān)聯(lián)的緩存的內(nèi)容,那么只要緩存中的此條目僅被標記為已經(jīng)被推測性地讀取(并且也沒有被推測性地寫入)則它實際上可被安全地驅(qū)逐至主存儲器而沒有損壞所要求的事務(wù)原子性。推測性寫入實際發(fā)生于圖3中遇到f3()函數(shù)的階段E處,因為這發(fā)生于調(diào)用堆棧中的一相對堆棧位置,該相對堆棧位置未處于相對于存儲的在tbegin()處獲取的SP快照的正向堆棧增長方向。因此,在緩存中做出的保持返回地址ret_f3的條目被標記為推測性的。相比而言,在階段F處當遇到對于f4()的調(diào)用時,要求把f4()返回地址ret_f4推送給調(diào)用堆棧的修改被標識為處于相對于SP快照的正向堆棧增長方向,從而在緩存中做出的保持此返回地址值的條目被標記為非推測性的。此后,在階段G處當遇到tabort()調(diào)用時,緩存中的任何標記為推測性的內(nèi)容被丟棄并且僅被標記為非推測性的內(nèi)容被保留(即,在實踐中任何標記為推測性的緩存行被標志為無效)并且調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)因此(潛在地根據(jù)被存儲到L1緩存中以及另外存儲到存儲器分級體系內(nèi)(例如,來自主存儲器22)的內(nèi)容的組合)被重構(gòu)為它在階段C處當遇到tbegin()調(diào)用時的狀態(tài),一些緩存內(nèi)容可能已經(jīng)被暫時驅(qū)逐至主存儲器22。

圖4示意性地示出了一個實施例中的緩存50,圖1中所示的L1緩存34或36可根據(jù)該緩存50來進行配置。L1緩存50包括控制單元52和多個緩存行54,數(shù)據(jù)可被存儲在緩存行中??刂茊卧?2維護對緩存50的總體控制并且管理對緩存行54的更新。另外它維護相對于在緩存50所屬的數(shù)據(jù)處理器系統(tǒng)中發(fā)現(xiàn)的存儲器系統(tǒng)的余下部分的正確一致性控制。因而,緩存50被置于處理器和存儲器分級體系的余下部分之間,此存儲器分級體系潛在地僅包括諸如圖1中所示的主存儲器22,并且還可包括其它緩存級別。緩存行54被示出以與返回地址ret_f2的存儲相對應(yīng)的示例條目,該返回地址已經(jīng)在此數(shù)據(jù)行的內(nèi)容中被標記為“已修改(MO)”,這指示此數(shù)據(jù)已經(jīng)被處理器修改并且最終應(yīng)當在存儲器分級體系中的余下部分中(具體地,如果此數(shù)據(jù)行被驅(qū)逐,則在主存儲器22中)進行更新。注意,此ret_f2的數(shù)據(jù)行未被標記為已經(jīng)被推測性讀取(SR)或者推測性寫入(SW),因為這表示在處理器進入它的事務(wù)執(zhí)行模式之前已經(jīng)發(fā)生的對調(diào)用堆棧的修改。

圖4B描述了圖4A中所示的示例緩存行條目的后續(xù)演進,其中在已經(jīng)被填充以返回地址ret_f2之后,處理器遇到函數(shù)調(diào)用f3(),并因此把返回地址ret_f3推送給調(diào)用堆棧。隨著它發(fā)生,在此所示示例中,針對返回地址ret_f2和ret_f3的存儲器地址足夠相似以使得它們均將被緩存50存儲在相同的緩存行中。從而當ret_f3由處理器推送給調(diào)用堆棧時,緩存50的緩存控制單元52使得此返回地址ret_f3驅(qū)逐緩存行中的當前內(nèi)容(即,返回地址ret_f2)。由于此具有內(nèi)容ret_f2的緩存行未被標記為被推測性寫入(SW),它可被驅(qū)逐到存儲器分級體系內(nèi),例如首先被驅(qū)逐到L2緩存并且潛在地然后被進一步驅(qū)逐到主存儲器22中。返回地址ret_f3然后填充此緩存行并且被類似地標志以“MO”狀態(tài)“已修改”,但還被標記為已被推測性寫入(SW),因為處理器現(xiàn)在處于事務(wù)執(zhí)行模式并且此修改未發(fā)生于相對于在處理器遇到tbegin()調(diào)用時的點處獲取的堆棧指針SP的快照的正向堆棧增長方向。此后,當事務(wù)中止(通過處理器遇到指令tabort())時,由于此緩存行被標記為已經(jīng)被推測性寫入,它的內(nèi)容被無效(狀態(tài)“I”)。

把圖4B所示的緩存行內(nèi)容的演進與圖4C所示的內(nèi)容相比較,圖4C示出了當?shù)竭_圖3中的階段D時的緩存行為,其中函數(shù)f2()的返回地址ret_f2自調(diào)用堆棧中彈出并且另外此對于調(diào)用堆棧的修改未發(fā)生于相對于tbegin()處的SP的快照的正向堆棧增長方向,因此(由于處理器處于事務(wù)執(zhí)行模式)這被視為推測性修改。因而,當此緩存行的內(nèi)容返回至處理器時,緩存行然后被標記為已經(jīng)被推測性讀取(SR)。然而如上文提到的那樣,只要緩存50的控制單元52確保緩存中的任何內(nèi)容(或者至少任何已修改的內(nèi)容)不能夠被數(shù)據(jù)處理系統(tǒng)中的另一處理器讀取,那么將緩存中的緩存行標示為推測性讀取原則上并不需要。這例如可通過以下配置來施行:其中,控制單元52在施行所要求的系統(tǒng)級存儲器一致性時,僅通過否認這樣的內(nèi)容當前在緩存50內(nèi)以任何有效的狀態(tài)存在來對作為一致性協(xié)議的一部分接收的關(guān)于此存儲器地址的任何查詢進行回應(yīng)。

圖5示意性地描述了示出一種配置的處理器核60和L1緩存62,圖1中所示的對應(yīng)組件可以根據(jù)該配置來進行配置。L1緩存62的緩存控制64被配置為從處理器核60接收各種信息并且向處理器核返回一些信息。具體地,緩存控制64從處理器核接收它當前正操作于的處理模式的指示,從而使得緩存控制64能夠依據(jù)處理器核當前是否處于它的事務(wù)執(zhí)行模式(TEM)來適當?shù)毓芾鞮1緩存62的內(nèi)容的更新。這不需要是連續(xù)信號,但是處理器核60可以僅向緩存控制單元64指示它何時改變執(zhí)行模式。處理器核60還被提供以中止處置單元66,其被配置為向緩存控制器60指示事務(wù)中止(例如,當處理器核遇到tabort()調(diào)用時)以及從緩存控制單元64接收中止指示(例如,當L1緩存62中被標志為已經(jīng)被推測性寫入(SW)的內(nèi)容被選擇進行驅(qū)逐(基于它的對應(yīng)存儲器地址))二者。這是所嘗試的事務(wù)應(yīng)當被中止的情形,因為把此內(nèi)容驅(qū)逐至存儲器分級體系中的余下部分會把它暴露至由數(shù)據(jù)處理系統(tǒng)的另一部分讀取并且這會潛在地損壞所嘗試的事務(wù)的原子性??商鎿Q地,也可通過確保當此緩存條目被驅(qū)逐至存儲器分級體系中的另一部分時將此緩存條目標記為已經(jīng)被推測性寫入進行維護來解決此問題,但是這可引發(fā)額外的配置復(fù)雜度,該復(fù)雜度能夠通過以下相對簡單的機制來避免:在嘗試驅(qū)逐被標志為已經(jīng)被推測性寫入的緩存條目時,中止該事務(wù)。不論事務(wù)中止的原因如何,中止處置單元(這里被實施為專用電路,盡管該單元可以是處理器核60執(zhí)行的數(shù)據(jù)處理指令內(nèi)編程的專用中止處置例程)然后使得寄存器68的內(nèi)容回滾至它們在圖3中的階段C處(即,當遇到tbegin()調(diào)用時)的狀態(tài)。具體參考本技術(shù),這包括中止處置單元66用當初始遇到tbegin()時獲取的、在SP副本寄存器72中存儲的堆棧指針的快照來替換當前堆棧指針寄存器70中的內(nèi)容。

圖6示意性地示出在一個實施例的方法中采取的一系列步驟。流程可被視為始于步驟100,其中處理器執(zhí)行它的指令序列。在步驟102處,確定是否遇到事務(wù)開始指令(例如,tbegin())。在不是此情形時,流程簡單地循環(huán)回步驟100。一旦遇到這樣的事務(wù)開始指令,則流程前進至步驟104,其中堆棧指針的當前值被存儲到專用堆棧指針副本寄存器內(nèi)并且此后在步驟106處處理器進入它的事務(wù)執(zhí)行模式。然后在步驟108,處理器繼續(xù)它的指令序列執(zhí)行,這包括發(fā)起它尋求對于存儲器中的共享數(shù)據(jù)項或共享數(shù)據(jù)結(jié)構(gòu)的事務(wù)性訪問。在步驟110處確定是否作為繼續(xù)數(shù)據(jù)處理指令序列的一部分要求對調(diào)用堆棧的修改。如果不要求,則流程簡單地循環(huán)回步驟108。然而,當要求這樣的修改時,在步驟112處確定此對于調(diào)用堆棧的修改是否會發(fā)生于相對于由專用SP副本寄存器中存儲的堆棧指針副本指示的堆棧深度的正向增長方向。如果此修改處于此正向增長方向,則流程前進至步驟114,其中做出對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改,將緩存中的任何相對應(yīng)的一個或多個條目標志為非推測性的??商鎿Q地,如果所要求的對調(diào)用堆棧的修改在步驟112被確定為未處于相對于由堆棧指針副本指示的堆棧深度的正向增長方向,則流程前進至步驟116,其中做出對調(diào)用堆棧數(shù)據(jù)結(jié)構(gòu)的修改并且緩存中的任何相對應(yīng)的一個或多個條目被標志為推測性的。在步驟114或步驟116之后,流程前進至步驟118,其中確定所嘗試的事務(wù)是否已經(jīng)成功完成。如果尚未成功完成,則流程返回步驟108以進行事務(wù)執(zhí)行模式中的繼續(xù)執(zhí)行。然而,一旦所嘗試的事務(wù)成功完成,則流程前進至步驟120,其中處理器退出它的事務(wù)執(zhí)行模式并且在步驟122處任何標記為推測性的緩存內(nèi)容被更新以被標志為非推測性的。流程然后返回步驟100。

將要注意的是,圖6中所示的一系列步驟不包括當中止所嘗試的事務(wù)時采取的步驟,并且這樣的步驟被示出在圖7中,其中這些步驟可被視為當處理器處于它的事務(wù)執(zhí)行模式時與圖6中所示的那些步驟并行運行。處理器在它的事務(wù)執(zhí)行模式中的指令執(zhí)行由步驟130表示。在步驟132處,持續(xù)地檢查是否已經(jīng)發(fā)生事務(wù)中止。如果沒有,則流程簡單地循環(huán)回步驟130。然而,當事務(wù)確實中止時,流程前進至步驟134,其中被標志為推測性的任何緩存內(nèi)容被無效。另外在步驟136處,當前堆棧指針從當處理器進入它的事務(wù)執(zhí)行模式時的時間點處獲取的堆棧指針的存儲副本中更新(即,回滾至堆棧指針的存儲副本)并且在步驟138處(除了當前堆棧指針寄存器之外的)寄存器的任何其它內(nèi)容也被恢復(fù),這些寄存器被要求把處理器的狀態(tài)回復(fù)至當它進入它的事務(wù)執(zhí)行模式時它所具有的狀態(tài)。流程然后返回至步驟130以用于處理器保留在事務(wù)執(zhí)行模式中并且再一次嘗試事務(wù)。

盡管本文已經(jīng)描述了具體實施例,但是要理解的是本發(fā)明不限于此并且在本發(fā)明的范圍內(nèi)可以對其做出許多修改和添加。例如,在不脫離本發(fā)明的范圍的情況下,可以做出從屬權(quán)利要求的特征和獨立權(quán)利要求的特征的各種組合。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1