和控制器-1 106包含L2高速緩沖存儲器I 120、L2控制器-1 121、保留粒度-1 (RG-1) 122和snoopl單元123。L2高速緩沖存儲器和控制器-2 110包含L2高速緩沖存儲器2 126、L2控制器-2 127、保留粒度-2(RG-2) 128和Snoop2單元129。還可在使用本文所述的類似技術(shù)的存儲器層級中的其它級中的高速緩沖存儲器之間使用相干總線。應(yīng)注意,系統(tǒng)100并不限于均質(zhì)的機器,這是因為異質(zhì)機器組織中的其它類型的處理代理(例如處理器或硬件加速器)可以執(zhí)行用于信號量管理的專門的指令。保留粒度(RG),例如RG-1 122和RG-2 128,包括程序可存取的存儲位置,其具有有效指示,例如有效位,以及用于存儲地址的標記字段。雖然是在相關(guān)聯(lián)的L2高速緩沖存儲器控制器中展示RG-1 122和RG-2 128,但是保留粒度的位置不受此限制,并且可以位于雙核系統(tǒng)102中的其它地方,例如舉例來說存儲器層級的不同級的控制器。
[0029]在雙核MP系統(tǒng)100中,每一處理代理例如PXl 104和PX2 108使用專門的指令來進行信號量管理。信號量管理通常包括一對專門加載和存儲指令,以讀取存儲器位置、設(shè)置保留粒度,并且基于保留粒度的狀態(tài)來條件性地寫入存儲器位置。這些專門的指令被稱作加載排他(LDEX)和存儲排他(STEX)的。保留粒度(RG)用于確定在執(zhí)行LDEX和STEX之間,是否另一處理代理已經(jīng)改變了為LDEX傳回的數(shù)據(jù)值。換句話說,RG用于允許兩個不連續(xù)的指令一起表現(xiàn),就仿佛這兩個指令是原子性的一樣,即使這兩個指令是單個執(zhí)行的也是如此。還關(guān)于圖3A-3C和圖4A-4C更詳細地描述用于高效的信號量管理的專門命令,包含讀取偏好型排他命令和升級偏好型排他命令。
[0030]MP系統(tǒng)100用于跨越相干總線114的信號量管理。響應(yīng)于第一高速緩沖存儲器具有加載排他指令提供的目標地址處的數(shù)據(jù)未中,利用裝置(例如L2高速緩沖存儲器和控制器-1 106)在從第一高速緩沖存儲器到第二高速緩沖存儲器的相干總線上發(fā)出讀取偏好型排他命令,其中第一高速緩沖存儲器耦合到發(fā)出了加載排他指令的第一處理代理并且第二高速緩沖存儲器耦合到第二處理代理。利用裝置(例如L2高速緩沖存儲器和控制器-2110)來監(jiān)聽相干總線并且對監(jiān)聽到的讀取偏好型排他命令作出響應(yīng),響應(yīng)的方法是通過提供數(shù)據(jù)到目標地址處的第一高速緩沖存儲器。響應(yīng)于針對這個目標地址標記了第二高速緩沖存儲器中的保留粒度,第二高速緩沖存儲器中的所述線的狀態(tài)以有效狀態(tài)結(jié)束。
[0031]舉例來說,與執(zhí)行加載排他(LDEX)或存儲排他(STEX)指令的第一處理代理(PXl) 104相關(guān)聯(lián)的L2高速緩沖存儲器和控制器-1 106可以配置有解碼器,用于識別相干總線114上的命令。L2高速緩沖存儲器和控制器-1 106還配置有用于識別存取的高速緩沖存儲線的狀態(tài)的硬件,并且配置有比較器,用于確定當前高速緩沖存儲線狀態(tài)或當前保留粒度(RG)狀態(tài)是否已經(jīng)相對于對應(yīng)先前狀態(tài)改變。通過單獨的機構(gòu)來確定高速緩沖存儲線狀態(tài),例如L2高速緩沖存儲器I 120中存取的高速緩沖存儲線的狀態(tài)和RG-1 122的狀態(tài),所述單獨的機構(gòu)并行地存取所存儲的狀態(tài)值。接著由邏輯裝置組合所確定的狀態(tài)值以識別是否需要發(fā)出總線命令。如果需要發(fā)出總線命令,則選擇適當?shù)目偩€命令來發(fā)出。雖然可以串行地檢查高速緩沖存儲器狀態(tài)和RG狀態(tài),但是這種方法的效率可能沒有并行地檢查所述狀態(tài)那么高。舉例來說,例如snoopl 123和snoop2 129的監(jiān)聽器通過對相干總線114上的總線命令進行解碼而分開并且并行地操作。所述所檢測特定操作及所選擇總線命令遵循圖3A-3C和4A-4C中展示的操作,其包含改變高速緩沖存儲線的狀態(tài)、改變RG狀態(tài),和提供對執(zhí)行了引起相干總線114上的命令的LDEX或STEX的處理代理的響應(yīng)。對執(zhí)行LDEX的處理代理的另一響應(yīng)可以包含(舉例來說)提供數(shù)據(jù),例如下文關(guān)于圖3B的框348、350、356 和 358 所示。
[0032]圖2k說明兩個處理代理PXl 202與PX2 203之間的信號量管理200的基本實例。在第一操作204中,PXl執(zhí)行LDEX A,LDEX A使得與PXl相關(guān)聯(lián)的保留粒度(RG)被標記上LDEX的存儲器地址A。在第二操作205中,PXl不采取動作,并且PX2也執(zhí)行LDEX A, LDEXA使得與PX2相關(guān)聯(lián)的RG被標記上存儲器地址A。在多處理器(MP)環(huán)境中,如果一個處理代理的RG被標記上來自另一處理代理的STEX的地址,則來自所述另一處理代理的STEX必需取消那一個處理代理的RG的標記。因此,在第三操作206中,PXl執(zhí)行STEX A,其完成執(zhí)行,因為PXl的RG被加上標記,并且發(fā)出從PX的RG移除所述標記的總線命令。響應(yīng)于所述總線命令,取消PX2的RG的標記。在第四操作207中,PX2嘗試執(zhí)行STEX,其執(zhí)行失敗,因為PX2的RG不再被標記。在一個不同的場景中,如果在PXl執(zhí)行STEX之前PX2更新了PXl的RG尋址的存儲器,則PXl的RG中的標記被清除,并且PXl的STEX于是將不更新存儲器,因為所述RG不再被標記。標記的清除向PXl指示其LDEX傳回的值現(xiàn)在過時了并且不是有效的。
[0033]跨越總線維持高速緩沖存儲器一致性的系統(tǒng)有這些信號量管理指令導(dǎo)致活鎖或性能不佳的可能。當STEX執(zhí)行時與執(zhí)行信號量管理指令的處理器相關(guān)聯(lián)的高速緩沖存儲器含有處于修改狀態(tài)或排他狀態(tài)的高速緩沖存儲線時,會出現(xiàn)最佳性能。如果STEX尋址的高速緩沖存儲線處于任何其它狀態(tài),則在允許STEX完成之前必須作出獲得處于修改或排他狀態(tài)的線的總線請求。
[0034]圖2B說明跨越相干總線的信號量管理220的第一場景。對此第一場景,處理代理PXl 202和PX2 203不在嘗試同時存取相同信號量,并且PX2保留包含地址A處的數(shù)據(jù)的高速緩沖存儲線。并且,PX2的RG未被標記。在第一操作224中,PXl執(zhí)行LDEX A并且獲得共享狀態(tài)的線。PXl的RG于是被標記上地址A。由于所述線路處于共享狀態(tài),所以必須使PX2對所述線的復(fù)本失效,以便將PXl的線改變成排他狀態(tài)。在第二操作225中,PXl發(fā)出STEX A,其使得發(fā)出總線命令以使PX2的線失效。當PXl正在試圖采集信號量時,被發(fā)出以使PX2的具有地址A的線失效的命令會導(dǎo)致額外的等待時間。
[0035]圖2C說明跨越相干總線的信號量管理240的第二場景。對此第二場景,PXl 202、PX2 203和相干總線經(jīng)配置以在執(zhí)行LDEX后即刻獲得線排他指令。PX2保留包含地址A處的數(shù)據(jù)的高速緩沖存儲線。并且,在發(fā)出PXl的LDEX A之前,PX2的RG未被標記。在第一操作244中,PXl執(zhí)行LDEX A,其使得發(fā)出讀取排他總線命令,并且獲得處于排他狀態(tài)的線。由于所述線處于排他狀態(tài),所以PX2對線的復(fù)本失效,并且接著給PXl的RG標記上地址A。在第二操作245中,PXl發(fā)出STEX A, STEX A完成執(zhí)行,因為PXl的RG被標記,并且PXl不需要發(fā)出總線命令,因為PXl的LDEX已經(jīng)獲得了處于排他狀態(tài)的線A。雖然因為不需要PXl的STEX A在完成執(zhí)行之前作出額外的總線命令,所以這種信號量管理技術(shù)240對性能有幫助,但是它可能導(dǎo)致關(guān)于圖2D所述的活鎖情形。
[0036]圖2D說明跨越相干總線的信號量管理260的第三場景,其說明活鎖的情形。對此第三場景,PXl 202、PX2 203和相干總線經(jīng)配置以在執(zhí)行LDEX后即刻獲得線排他指令。PXl和PX2兩者都保留包含地址A處的數(shù)據(jù)的高速緩沖存儲線的復(fù)本。在第一操作264中,PXl執(zhí)行LDEX A,其使得發(fā)出讀取排他總線命令,并且獲得處于排他狀態(tài)的線。由于所述線處于排他狀態(tài),所以PX2對線的復(fù)本失效,并且接著給PXl的RG標記上地址A。如果PX2的RG被標記了,則給它消除標記。在第二操作265中,PX2執(zhí)行LDEX A,其使得發(fā)出讀取排他總線命令,并且獲得處于排他狀態(tài)的線。由于所述線處于排他狀態(tài),所以PXi對所述線的復(fù)本失效,PXl的RG被消除標記,并且PX2的RG接著被標記上地址A。在第三操作266中,PXl發(fā)出STEX,STEX會失敗,因為其RG不再被標記,從而導(dǎo)致LDEX/STEX過程重復(fù)。在第四操作267中,PXl執(zhí)行LDEX A,其使得發(fā)出讀取排他總線命令,并且PXl獲得處于排他狀態(tài)的線。由于所述線處于排他狀態(tài),所以PX2對所述線的復(fù)本失效,PXl的RG接著被標記上地址A,并且PX2的RG被消除標記。在第五操作268中,PX2發(fā)出STEX,STEX會失敗,因為其RG不再被標記,從而導(dǎo)致LDEX/STEX過程重復(fù)。在第六操作269中并且繼續(xù),由于活鎖情形,PXl和PX2兩者中的LDEX/STEX過程都重復(fù)。
[0037]為了確保不出現(xiàn)活鎖情形,應(yīng)注意STEX操作前面始終是LDEX操作,因此,LDEX可以在預(yù)測STEX執(zhí)行時用作獲得處于修改或排他狀態(tài)的線的暗示。然而,實施方案不能要求如圖2C和2D的操作所指示在執(zhí)行LDEX后即刻要求處于修改或排他狀態(tài)的線。如圖2D中所示,如果兩個處理器正在競爭獲得相同信號量,則此方法可能導(dǎo)致活鎖。為了避免這種活鎖情形,先前實施方案在所有其它高速緩沖存儲器具有無效的線的情況下允許LDEX獲得處于排他狀態(tài)的線,但是如果任何其它高速緩沖存儲器具有處于無效之外的狀態(tài)的線則必需共享所述線。在執(zhí)行LDEX的處理代理共享所述線的情況下,STEX必須接著作出額外總線請求使其它高速緩沖存儲器對線的共享復(fù)本失效(如圖2B中所示),這樣會導(dǎo)致性能損失。
[0038]雙核系統(tǒng)102經(jīng)配置以執(zhí)行存儲于非暫時性計算機可讀媒體(例如