專利名稱:多處理器存儲器一致性的高效仿真方法和系統(tǒng)的制作方法
技術領域:
本發(fā)明通常涉及計算機系統(tǒng),尤其涉及在另一個具有截然不同的存儲器共享行為的多處理計算系統(tǒng)上仿真一個多處理計算機系統(tǒng)的存儲器共享行為的方法。
背景技術:
仿真的主要目的是以最小性能損失在另一個體系結構上執(zhí)行針對一個特定體系結構而編寫的系統(tǒng)。顯然,仿真處理的效率和所得到的″宿主″代碼序列的質(zhì)量具有非常的重要性。計算系統(tǒng)通常包含若干部分,包含處理器、存儲器和輸入/輸出設備。經(jīng)常需要在另一個計算系統(tǒng)上仿真一個計算系統(tǒng)的行為。仿真的一個主要原因是允許在另一個系統(tǒng)(例如″宿主計算系統(tǒng)″)上以相同的結果執(zhí)行針對一個系統(tǒng)(例如″目標計算系統(tǒng)″)而編寫的程序。
已經(jīng)開發(fā)了若干傳統(tǒng)技術,以用于通過另一個處理器的指令集仿真一個處理器的指令集(例如,在Stephen A.Herrod的″通過完全的機器模擬理解計算機系統(tǒng)行為(Using Complete Machine Simulation to UnderstandComputer System Behavior)″,博士論文,Stanford大學,1998年2月中公開的SIMOS;在Cathy May的″模擬快速系統(tǒng)/370模擬器(MimicAFast System/370 Simulator)″,面向?qū)ο缶幊滔到y(tǒng)語言和應用會議(OOPSLA)會議錄,Orlando,1987年10月4-8日,Sigplan公告???,vol.22,No.12,1987年12月,vol.22,No.7,6月24日中公開的MIMIC)。
為了如實地執(zhí)行仿真,還必須仿真這種系統(tǒng)中存儲器的行為。通常,行為所包含的遠不止于使用程序指定的地址讀取和寫入存儲器中的單元。
更具體地,當在多處理系統(tǒng)中由一個處理器改變某個單元的內(nèi)容時,管理系統(tǒng)中所有處理器何時觀察到所述改變的規(guī)則是在體系結構中妥善定義的。在這個方面,當系統(tǒng)中只有一個處理器時,當前的多數(shù)系統(tǒng)的行為幾乎相同。也就是說,系統(tǒng)保持程序順序,這意味著如果在程序中出現(xiàn)的指令序列內(nèi)語句S1位于另一個語句S2前面,則處理器的操作象在S2開始其執(zhí)行之前完成S1的執(zhí)行那樣。這意味著S2必須知道S1對任何資源產(chǎn)生的改變,包含寄存器和存儲器。
因此,如圖1所示,如果象在上述SimOS和SimICS技術中那樣在單處理系統(tǒng)上仿真多處理系統(tǒng),并且如果目標系統(tǒng)和宿主系統(tǒng)遵守程序順序,則仿真期間的存儲器訪問可以被視作一系列階段(epoch)101,每個階段101均表示目標系統(tǒng)中的一個處理器。也就是說,其區(qū)域中的編號指示被仿真的處理器的標識,而陰影區(qū)100指示系統(tǒng)正執(zhí)行其它功能。
由于階段101期間在兩個或更多處理器的仿真存儲器訪問之間不存在同時交互,通過簡單地在宿主處理器上執(zhí)行目標處理器的正確單處理器仿真,可以保證程序順序。
因此在圖1中,當人們嘗試在單處理器上仿真多個處理器時,不同多處理器在不同時間出現(xiàn)交錯。于是,會在某個時間仿真處理器1,然后在一段時間內(nèi)仿真處理器2,接著仿真在一段時間內(nèi)返回到處理器1的仿真,然后有一段時間(例如陰影區(qū)100)不進行仿真,但單處理器執(zhí)行其它功能。于是,單處理器在指定時間只執(zhí)行多處理器中的一個處理器,而不是全部處理器的仿真。
上述交叉操作非常低效。然而其一個優(yōu)點是一個處理器的″臨界段″不與另一個處理器的臨界段交叉。也就是說,″臨界段″是2個處理器不能同時進入的部分。
對單處理器而言,當其執(zhí)行仿真時不必完成其它任務(例如不進行特別的操作),因為2個處理器從不同時進入臨界段。在某種意義上,單處理器自動滿足2個處理器不會同時進入臨界段的條件。出于同樣原因,當嘗試在多處理系統(tǒng)上仿真多處理器時,情況發(fā)生顯著的變化。也就是說,可能出現(xiàn)問題。
例如,圖2圖解了Dekker算法的應用,其中提供了有關處理器201和202之間的共享的例子。在圖2的例子中,2個處理器201、202正嘗試訪問臨界段。再次地,在單處理器中,對臨界段(例如每次只有一個處理器可以進入的部分)的訪問不會出現(xiàn)問題(例如由單處理器自動克服),因為通過使用圖1示出的階段,單處理器操作是順序的。
因此,如果實現(xiàn)使用Dekker算法的程序并且程序正在多處理機上運行,而仿真正在單處理器上執(zhí)行,則不會出現(xiàn)問題。然而,如果相同的使用Dekker算法的程序正在目標機上運行,并且目標機正被多處理系統(tǒng)仿真,則會出現(xiàn)問題。Dekker算法應當被視作正在作為目標處理器201、202的處理器201、202上運行。
具體地,第一處理器201設置變量x,并且保證在其進入臨界段之前另一個處理器202尚未設置其自身的變量y。第二處理器202設置y,并保證在其進入臨界段之前x不被設置。存在若干方式,其中整個應用程序在被仿真于單處理器上時可以被執(zhí)行,在圖3中示出了2個這樣的方式。如上所述,以順序1執(zhí)行P1,直到階段發(fā)生改變,此時P2被仿真。于是在圖3的2處理器順序中,每當存在階段變化時,仿真切換到另一個處理器,并且顯然在一個處理器(例如P1)處于臨界段時,另一個處理器(P2)不能進入臨界段。
然而,一個處理器的臨界段不可能與第二處理器的臨界段交叉,因為這意味著,宿主處理器一次會看見(x=1;y=0),另一次會看見(x=0;y=1),而在之間沒有出現(xiàn)寫入的情況下。
圖4圖解了會導致圖2的方法/Dekker算法出現(xiàn)不正確行為的情況。圖4的系統(tǒng)400包含共享存儲器410以及高速緩存420A、420B,其中高速緩存420A、420B分別為第一和第二處理器430A、430B提供。因此在圖4的情況下,兩個處理器可能會同時在臨界段中執(zhí)行,從而導致問題。
也就是說,假定目標系統(tǒng)具有保證這種情況從不發(fā)生的一致性模型(例如在向存儲器存儲之后等待,直到從其它處理器接收到確認)。這種系統(tǒng)的例子包含IBM系統(tǒng)/390和INTEL x86。
還假定為了相對快速地加以實現(xiàn),宿主系統(tǒng)具有更加寬松的一致性模型,并且不保證針對存儲器的寫入的原子記錄。因此當上述例子被這種宿主系統(tǒng)仿真時,會導致不正確行為。
類似PowerPC、具有這種寬松一致性模型的系統(tǒng)總是提供特殊同步指令或存儲器屏蔽指令,所述指令保證所有處理器在看見以后指令的結果之前已經(jīng)看見前述指令之前的存儲器操作的結果。
于是,一種保證正確進行模擬的方式是在每個存儲器指令之后跟隨存儲器屏蔽指令。不幸的是,這種指令需要若干周期才能完成。此外,存儲器指令(例如針對存儲器進行載入和存儲)是相當頻繁的(例如出現(xiàn)次數(shù)占所有指令的三分之一)。
因此期望找到上述問題的解決方案。此外,期望使在另一個多處理系統(tǒng)上仿真一個多處理系統(tǒng)的存儲器一致性行為的成本最小,尤其當宿主多處理系統(tǒng)與目標多處理系統(tǒng)(更加嚴格或″更強″)相比支持″更弱″(更加寬松)的一致性模型時。應當注意,術語″更弱″(或″寬松″)和″強″是本領域普通技術人員眾所周知的(例如參見Sarita Adve等人,″共享存儲器一致性模型講座(Shared Memory Consistency ModelsA Tutorial)″,IEEE計算機,vol.29,no.12,1996年12月,pp.66-76,和L.Lamport,″如何使多處理器計算機正確執(zhí)行多進程程序(How to Make A MultiprocessorComputer That Correctly Executes Multiprocess Programs)″,IEEE計算機學報,C-28,1979年9月9日,pp.690-691)。
于是,在傳統(tǒng)仿真方法和技術中,可以使用各種級別的轉(zhuǎn)換來增強仿真器產(chǎn)生的宿主指令的性能。然而,雖然當前有各種技術可用,然而仍然存在很大的改進空間。
因此,在傳統(tǒng)技術和本發(fā)明之前的技術中,尚沒有在另一個系統(tǒng)上仿真一個系統(tǒng)的存儲器一致性的方法和裝置,尤其當宿主支持上述寬松一致性模型并且目標系統(tǒng)使用強一致性模型時。
發(fā)明內(nèi)容
考慮到傳統(tǒng)方法和結構的上述和其它問題、缺點和不足,本發(fā)明的一個目的是提供一種在宿主多處理系統(tǒng)支持寬松一致性模型,而目標多處理系統(tǒng)規(guī)定了強一致性模型時,在另一個多處理系統(tǒng)上有效仿真一個多處理系統(tǒng)的存儲器一致性行為的方法和結構。
在本發(fā)明的第一方面,在多處理器系統(tǒng)中進行仿真的方法(和系統(tǒng))包含執(zhí)行仿真,其中多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
在本發(fā)明的第二方面,在包含用于仿真目標多處理器計算系統(tǒng)的行為的仿真器的多處理器計算系統(tǒng)中,仿真目標多處理器計算系統(tǒng)的存儲器一致性行為的方法包含在存儲器操作之前執(zhí)行存儲器屏蔽指令,存儲器屏蔽指令保證宿主計算系統(tǒng)中的所有處理器已經(jīng)得到執(zhí)行存儲器屏蔽指令之前所執(zhí)行的存儲器操作的結果,其中所述多處理器計算系統(tǒng)的宿主計算系統(tǒng)支持弱一致性模型,多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
在本發(fā)明的第三方面,高效仿真多處理器存儲器一致性的方法(和系統(tǒng))包含形成存儲器屏蔽指令,所述存儲器屏蔽指令保證宿主計算系統(tǒng)中的全部處理器已經(jīng)寄存執(zhí)行存儲器屏蔽指令之前所執(zhí)行的存儲器操作,其中宿主多處理系統(tǒng)支持寬松一致性模型,目標多處理系統(tǒng)規(guī)定了強一致性模型。
在本發(fā)明的第四方面,保證多處理系統(tǒng)中存儲器一致性的方法(和系統(tǒng))包含確定指令是否載入指令或存儲指令,如果確定指令是載入或存儲指令,則解析指令地址并且確定該地址是否被存儲在本地后援緩沖器(locallookaside buffer,LLB)中,如果該地址處于LLB中,則確定其所指的單元是否處于共享讀狀態(tài),如果確定其所指的單元處于共享讀狀態(tài),則確定當前地址是否進行寫入,如果當前地址不進行寫入,則執(zhí)行指令仿真。
在本發(fā)明的第五方面,在多處理器系統(tǒng)中插入用于保持一組指令內(nèi)的一致性的代碼的方法(和系統(tǒng))包含確定指令是否為載入或存儲指令,如果確定指令是載入或存儲指令,則解析地址,并且確定該地址是否處于本地后援緩沖器(LLB)中,如果該地址處于LLB中,則確定其所指的單元是否處于共享讀狀態(tài),如果其所指的單元被確定處于共享讀狀態(tài),則確定當前訪問是否為寫入,如果當前訪問被確定為寫入,則將該單元設置為共享寫,并且確定當前訪問是否為載入指令,如果確定當前訪問為載入,則執(zhí)行載入并且確定是否由存儲器順序緩沖器(MOB)表來滿足載入,如果沒有從MOB表滿足載入,則向根據(jù)存儲器序列號索引的MOB表插入對應記錄。
在本發(fā)明的第六方面,在指令的成組執(zhí)行結束時提交針對存儲器的共享寫入的方法(和系統(tǒng))包含在轉(zhuǎn)換結束時加入存根代碼,存根代碼進行檢查以保證沒有其它處理器改變一個塊所訪問的″共享寫″單元的數(shù)值。
在本發(fā)明的第七方面,共享多處理器系統(tǒng)的存儲引用表(SRT)包含所構造的表,該表含有數(shù)量與存儲引用的數(shù)量一樣多的記錄,其中每個記錄含有多個字段,包含地址字段和用于存儲要恢復的初值的舊值字段,其中表存儲有關記錄的共享寫入狀態(tài)的信息。
在本發(fā)明的第八方面,用于共享多處理器系統(tǒng)的存儲器順序緩沖器(MOB)包含所維護的表,該表具有有關當前被引用的單元的共享信息,其中信息包含用于區(qū)分記錄的特定狀態(tài)是否包括共享寫狀態(tài)的信息。
在本發(fā)明的第九方面,在多處理器系統(tǒng)中進行仿真的系統(tǒng)包含用于執(zhí)行仿真的仿真器,其中多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
在本發(fā)明的第十方面,提供實際包含機器可讀指令程序的信號承載介質(zhì),所述機器可讀指令程序可被數(shù)字處理設備運行,以便實現(xiàn)多處理器系統(tǒng)中的仿真方法,該方法包含執(zhí)行仿真,其中多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
通過本發(fā)明獨特和非顯而易見的方面,通過在多處理系統(tǒng)上仿真的多個處理器可以高效地對臨界段進行仿真。也就是說,本發(fā)明涉及對多個處理器進入臨界段進行仿真,而這些臨界段是同時為不同處理器而被仿真的。過去尚未遇到這種問題,因為通常在單處理器上執(zhí)行仿真。在這點上,本發(fā)明人首先認識到這種問題,并且提出了獨特和非顯而易見的解決方案。
為了保證上述存儲器一致性,在第一實施例中,本發(fā)明提供了一個存儲器屏蔽指令,存儲器屏蔽指令保證在執(zhí)行存儲器屏蔽指令之前已經(jīng)執(zhí)行的存儲器操作已經(jīng)被宿主機中的全部處理器訪問(例如寄存)。這保證實現(xiàn)存儲器一致性,因為處理器有機會寄存這種存儲器操作。
應當注意,本發(fā)明主要針對″共享寫入″狀態(tài)。
通過下面結合附圖對優(yōu)選實施例進行的詳細說明可以更好地理解本發(fā)明的上述和其它目的、特性和優(yōu)點,其中圖1圖解了多處理器系統(tǒng)的單處理器仿真中的階段101;圖2圖解了在第一和第二處理器201、202運行的程序中實現(xiàn)的Dekker算法的例子;圖3針對圖2中的程序圖解了單處理器上的仿真的2個樣本順序的例子;圖4圖解了系統(tǒng)400中會導致圖2的算法出現(xiàn)不正確行為的情況;圖5圖解了全局頁表記錄500中的讀/寫屏蔽字段570;圖6圖解了用于確定頁面的共享狀態(tài)的過程600;圖7圖解了描述頁面的共享存儲器狀態(tài)之間的轉(zhuǎn)換的部分狀態(tài)機700;圖8圖解了存儲器屏蔽指令的插入過程800;圖9圖解了存儲器順序緩沖器(MOB)900;圖10圖解了共享存儲器訪問到圖9的存儲器順序緩沖器900的映射1000;圖11圖解了保存針對存儲引用表(SRT)1110的存儲以便進行恢復的過程1100;圖12圖解了使用MOB 900和SRT 1110為保持一組指令內(nèi)的一致性而插入代碼的過程1200;圖13圖解了在成組執(zhí)行結束時提交針對存儲器的共享寫入的過程1300;圖14圖解了包含本發(fā)明的示例性硬件/信息處理系統(tǒng)1400;而圖15圖解了信號承載介質(zhì)1500(例如存儲介質(zhì)),用于存儲根據(jù)本發(fā)明的方法的程序步驟。
具體實施例方式
現(xiàn)在參照附圖,尤其參照圖5-15,其中示出了根據(jù)本發(fā)明的方法和結構的優(yōu)選實施例。
優(yōu)選實施例為了便于討論,假定目標多處理系統(tǒng)支持順序一致性。這是一個比多數(shù)已知系統(tǒng)支持的一致性形式更強的一致性形式。Lamport定義了順序一致性( L.Lamport,″如何得到正確執(zhí)行多進程程序的多處理器計算機(How to Make a Multiprocessor Computer That Correctly ExecutesMultiprocess Programs)″,IEEE計算機學報,C-28,1979年9月9日,pp.690-691),該定義表明任何執(zhí)行的結果均與按照某種順序次序執(zhí)行所有處理器的操作的結果相同,并且每個單個處理器的操作按照其程序指定的順序出現(xiàn)。
還假定宿主多處理系統(tǒng)支持弱一致性(在上述Adve等人的文章中定義的RCsc),但是具有存儲器一致性(例如,存儲器一致性表明從任何處理器的角度觀察,對單獨單元進行的改變的順序是相同的)。
另外,假定存在存儲器屏蔽指令mbar,該存儲器屏蔽指令被用來保證在所有處理器看見(例如寄存)了屏蔽之前的所有存儲器操作之后,執(zhí)行屏蔽之后的所有存儲器操作。
通過在每個訪問存儲器的指令之后跟隨mbar指令,可以保證順序一致性。如前所述,同步指令通常占用多個周期,因此如果可能應當避免它。
注意到的第一點是存儲器單元沒有全部在處理器之間共享。于是,如果可以明確確定指定單元是否被共享,則會大大降低保持順序一致性的成本。
在高速緩存系統(tǒng)的仿真的情況下,還不足以了解轉(zhuǎn)換期間的共享行為,因為(a)指令所引用的地址在每次轉(zhuǎn)換執(zhí)行時會發(fā)生改變,并且(b)在執(zhí)行過程中地址會改變其共享狀態(tài)。下面描述了動態(tài)確定單元的共享性質(zhì)的機構。
最好使用關于當前被引用的單元的共享信息維護一個表。為了降低表的尺寸,單元被組合在一起。一個方便的組合是頁面單元,盡管可以定義其它可能較小的單元。頁面單元是方便的,因為頁面單元也是在頁表和本地后援緩沖器(LLB)中受保護和映射信息的單元,其中在上述美國專利申請No.10/_,_中描述了本地后援緩沖器(LLB),這里參考引用了該專利申請,其IBM Docket No.為YOR920010535US1。每個頁面處于下述5個狀態(tài)中的一個1.未映射2.獨占讀取3.獨占寫入4.共享讀取5.共享寫入在頁面被換入之前,或者在其被換出頁表之后,該頁面會處于″未映射″狀態(tài)。當某個處理器請求讀取或?qū)懭腠撁鏁r,該頁面被換入。因此,頁面以″獨占讀取″或″獨占寫入″的狀態(tài)進入頁表。
與每個頁表記錄相關的是一列處理器,所述處理器將頁面列在其本地后援緩沖器(LLB)中,其中在上述美國專利申請No.10/_,_中描述了本地后援緩沖器(LLB),這里參考引用了該專利申請,其IBM Docket No.為YOR920010535US1。
這種信息處于后援屏蔽字段中,其中例如第五個單元上的1指示第五個處理器在其LLB中具有這個頁面。如圖5的表500所示,修改這個描述以便包含有關頁面是被讀模式的處理器訪問還是被寫模式的處理器訪問的信息。
表500包含有效/狀態(tài)位字段510,進程標識字段520,虛擬地址字段530,實地址字段540,保護位字段550,后援屏蔽字段560,讀/寫屏蔽字段570和訪問模式字段580。
在以后某個時間,如果處理器希望訪問不在其LLB中,但在頁表500中被映射的頁面,則該處理器被加入此列表(例如在處理器ID字段520上),并且規(guī)定其訪問模式(例如字段580)。
這時,如果所有訪問該頁面的處理器僅在讀模式下對其進行訪問,則頁面狀態(tài)被改變成″共享讀取″。如果有一個處理器對該頁面進行寫入訪問,則該頁面被設置成″共享寫入″模式。圖6的流程圖描述了這個過程。
于是如上所述,可以想到,頁面具有″共享寫入″狀態(tài)的原因是本發(fā)明必須考慮的主要因素。
此外,如上所述,本發(fā)明作出某些示例性假設,例如目標系統(tǒng)支持″順序一致性″(″強″),而宿主機支持″弱″一致性,等等。
然而這只是示例性的,本發(fā)明當然不限于此。實際上應當注意,本發(fā)明支持若干種不同的″強″、″弱″一致性組合和排列。然而發(fā)明人認識到,最困難的情況是″弱″環(huán)境中的″強″一致性,這里主要討論該情況。其它情況(例如″強″上″強″,″弱″上″弱″,″弱″上″強″等等)與此類似,但更加容易。
也就是說,在支持″弱″一致性的系統(tǒng)上仿真具有″強″一致性的系統(tǒng)是最困難的仿真。作為說明該情況為何是最困難情況的簡單例子,考慮黑板,其中不同的人正向黑板寫入。在″強″一致性的情況下,當一個人正讀取時,此人應當能夠看見每個其它人已經(jīng)寫入的任何內(nèi)容。類似地,當另一個人正寫入時,此人保證在其開始寫入之前其它人已經(jīng)完成寫入。這被稱作″強″一致性,其中在讀寫黑板時保持強順序。
在″弱″一致性(或″放松″一致性)的情況下,允許每個人在其希望時進行讀寫。在這點上,此人不需保證在其改變黑板內(nèi)容前其它人已經(jīng)進行讀取(或?qū)懭?。在這種情況下,某個″教師″(例如在某些情況下的某個程序)負責保證在此人需要讀取黑板時,此人事實上已經(jīng)在另一個人開始再次向黑板回寫(例如改變其寫入的內(nèi)容)之前完成讀取。這是更加混亂的情況,因為人們不斷進行讀取和寫入。當前許多傳統(tǒng)處理器便使用這種″弱″一致性模型,因為″弱″一致性模型允許處理器具有比共享時的速度更快的速度。于是,從性能的角度看,當不存在較多的共享時,″弱″一致性模型是更優(yōu)的模型。
因此,某些新機器正實現(xiàn)這種模型和操作模式。相反,更老的傳統(tǒng)機器實現(xiàn)的是強一致性,其中操作是順序的(逐個步驟的)。
于是,如人們預期的,非常難以采用非常有序的操作模式(″強″)并將其應用于相對混亂的操作(例如″弱″)。相反,采取非常混亂的操作模式(″弱″)并將其應用于有序操作(例如″強″)則較容易,因為這種情況會簡單地提供更強的順序。
于是,″共享寫入″狀態(tài)是核心問題。當頁面被換入系統(tǒng)時,系統(tǒng)希望確定頁面具有的狀態(tài)。如表500中的讀/寫屏蔽字段570所確定和示出的,當頁面具有″共享寫入″狀態(tài)時,標記這種狀態(tài)。也就是說,讀/寫屏蔽允許識別頁面是否具有″共享寫入″狀態(tài)。應當注意,訪問模式字段580不是圖5的表500中實際存在的字段。該字段的示出僅僅是為了使讀者能夠清楚和理解,并且僅僅描述到,通過查看后援屏蔽560和讀/寫屏蔽570的組合,可以確定共享寫狀態(tài)。
因此返回到圖6,方法600涉及用于確定頁面的共享狀態(tài)的過程。也就是說,圖6示出了一種技術,該技術通過主要查看后援屏蔽和讀/寫屏蔽,并且確定位單元等等以得到狀態(tài),從而確定表500中的最后列(例如字段580)。
更具體地,在步驟610中,確定后援屏蔽是否使不止一個位被置位。
如果在步驟610確定后援屏蔽使不止一個位被置位(例如″是″),則在步驟620確定讀/寫屏蔽是否使任何位被置位。
如果在步驟620確定讀/寫屏蔽使位被置位(例如″是″),則在步驟630將狀態(tài)設置成″共享寫入″。
如果在步驟620確定讀/寫屏蔽不使任何位被置位(例如″否″),則在步驟640將狀態(tài)設置成″共享讀取″。
如果在步驟610確定后援屏蔽不使不止一個位被置位(例如″否″),則在步驟650確定讀/寫屏蔽是否使任何位被置位。
如果在步驟650確定讀/寫屏蔽使一位或多位被置位(例如″是″),則在步驟660將狀態(tài)設置成″獨占寫入″。
如果在步驟650確定讀/寫屏蔽不使任何位被置位(例如″否″),則在步驟670將狀態(tài)設置成″獨占讀取″。接著過程終止。
在圖7的部分狀態(tài)機700中描述了各種共享存儲器頁面狀態(tài)之間的可能轉(zhuǎn)換。各種存儲器狀態(tài)包含″未映射″710,″獨占讀取″720,″獨占寫入″730,″共享讀取″740和″共享寫入″750。在圖7中,″LR″是本地讀取,″LW″是本地寫入,″RR″ 是遠程讀取,″RW″是遠程寫入,″D″指示從某個LLB降級的頁面,而″PO″指示被換出的頁面。應當注意,當其被換出系統(tǒng)時,頁面可以返回到″未映射″狀態(tài)。
即使″共享寫入″最吸引人,然而圖7表明還需要其它狀態(tài)(例如,其重要性使得有必要標出),以作為進入″共享寫入″狀態(tài)的方式。于是,在有限狀態(tài)機700中,為了進入共享寫狀態(tài),頁面可以處于其它狀態(tài)中的一個,并且示出到達共享寫狀態(tài)的路徑。因此,在部分狀態(tài)機700中標出這種其它狀態(tài)。
只要單元當前未被寫入,則不存在存儲一致性問題。也就是說,僅當單元改變其內(nèi)容時才出現(xiàn)存儲一致性問題。假定在任意指定時間點上,指定目標處理器的執(zhí)行均在一個確切的宿主處理器上進行,雖然執(zhí)行仿真的確切宿主處理器在不同時間可能有所不同。
例如,2個獨立處理器同時獲取目標指令的操作數(shù)的方式是不被接受的。還假定,如在公共多道程序系統(tǒng)中那樣,上下文切換與隱式或顯式存儲器屏蔽相關。這保證只要一個單元不被共享,則就不存在一致性問題,即使被仿真的目標處理器操作從一個宿主處理器轉(zhuǎn)移到另一個宿主處理器也是如此。
上述假設將一致性問題限制到針對處于″共享寫入″狀態(tài)的頁面進行的那些訪問。于是,只需要在每個這樣的訪問之后跟隨mbar指令。
在圖8的流程圖中描述了當一次一個地仿真指令時保證順序一致性的過程。
也就是說,圖8圖解了保證存儲器一致性的方法800,尤其涉及存儲器屏蔽指令的插入。
首先在步驟805確定指令是否為載入或存儲指令。由于載入和存儲是影響存儲器的主要指令,本發(fā)明不必關心其它指令。
如果在步驟805確定該指令不是載入或存儲指令(例如″否″),則處理前進到步驟840,其中進行指令仿真,并且接著過程在步驟870完成。
出于同樣原因,如果在步驟805確定指令是載入或存儲指令(例如″是″),則處理前進到步驟810,其中對地址進行解析。例如,載入/存儲指令通常需要將指令指定的2個數(shù)量相加以產(chǎn)生地址。這些數(shù)量或者駐留在指定寄存器中,或者其中的一個數(shù)量是指令自身的字段。地址解析意味著指定寄存器準備好其內(nèi)容,已經(jīng)執(zhí)行了加法,并且已經(jīng)調(diào)用地址轉(zhuǎn)換機構將所得到的和數(shù)轉(zhuǎn)換成實地址。因此,″解析地址″會將虛擬地址轉(zhuǎn)換成實地址(例如加上位移,虛擬地址轉(zhuǎn)換等等)。
在步驟815確定地址是否處于本地后援緩沖器(LLB)中。如果地址不在LLB中(例如″否″),則在步驟820啟動用于處理LLB命中失誤的過程(例如訪問全局頁表等等),并且接著過程循環(huán)回到步驟815。
如果地址處于LLB中(例如″否″),則在步驟825確定單元(例如地址)是否處于共享讀狀態(tài)。
如果在步驟825確定單元(例如地址)處于共享讀狀態(tài)(例如″是″),則過程繼續(xù)執(zhí)行步驟830,其中確定當前訪問是否為寫入。如果不是寫入(例如″否″),則在步驟840執(zhí)行指令仿真,并且過程在步驟870結束。
如果在步驟830確定當前訪問為寫入(例如″是″),則在步驟845將單元設置成共享寫,并且在步驟850執(zhí)行指令仿真,在步驟860放入mbar指令。過程接著在步驟870結束。
出于同樣原因,如果在步驟825確定單元(例如地址)不處于共享讀狀態(tài)(例如″否″),則過程繼續(xù)執(zhí)行步驟835,其中確定單元(例如當前地址)是否為共享寫。
如果在步驟835確定單元(地址)為共享寫狀態(tài),過程繼續(xù)執(zhí)行步驟850,其中執(zhí)行指令仿真,并且在步驟860放入mbar指令。過程接著在步驟870結束。
于是,圖8在步驟830/835基本上示出了2個可能性,其中地址為共享寫,或者指令轉(zhuǎn)換成共享寫,這取決于其來源。并且如圖7所示,存在某些情況,其中不處于共享寫但可以轉(zhuǎn)換成共享寫的指令取決于所采取的路徑。例如如圖7所示,″獨占讀取″狀態(tài)720具有通過本地寫入(LW)或遠程寫入(RW)到達″共享寫入″狀態(tài)750的路徑。因此,共享寫指令和可以轉(zhuǎn)換成共享寫的指令(例如轉(zhuǎn)換成寫入(本地或遠程)的共享讀取740等等)需要mbar指令。并且,在共享讀取狀態(tài)740中,在LW之后發(fā)出RW,接著會插入mbar。在轉(zhuǎn)換成共享寫的情況下會以類似方式執(zhí)行mbar的其它插入。
根據(jù)目標系統(tǒng)(放松一致性)的操作之間允許的重新排序范圍,可以進一步減少存儲器屏蔽指令的數(shù)量。
例如,在System/390中,不需要在單指令的操作數(shù)讀取之間保持次序。因此,可以省略System/390的仿真中這樣的讀取之間的mbar插入,從而保持在第二次讀取之后有一個mbar。
另外,因為指令寫入的結果取決于指令讀取的操作數(shù),可以省略390指令中從存儲器讀取操作數(shù)和向存儲器寫入結果之間的mbar,從而保持寫入之后有一個mbar。
上述討論假定仿真的存儲器引用的程序順序與目標系統(tǒng)已經(jīng)執(zhí)行的存儲器引用的程序順序相同。如前面若干已知例子(例如,參見美國專利No.6,031,992,這里參考引用了該專利)中所討論的,通過考慮被一起轉(zhuǎn)換的指令組,并且通過對轉(zhuǎn)換的指令組執(zhí)行優(yōu)化,經(jīng)??梢愿倪M仿真性能。
然而這種優(yōu)化往往會移動指令并且對其進行重新排序,以求找到該指令組的最優(yōu)調(diào)度。當在多處理器環(huán)境中執(zhí)行時,這種重新排序會違反一致性要求,即使每個仿真的引用后面跟有mbar指令也是如此。
參照圖9,本發(fā)明現(xiàn)在提供一種方案,其中當存在這種重新排序時,該方案保持仿真期間的存儲器操作所需的一致性。也就是說,圖9涉及這樣的情況,其中存在將被一起轉(zhuǎn)換的指令組,該情況不同于圖8中逐個轉(zhuǎn)換指令的情況。應當注意,如果按組或逐個地轉(zhuǎn)換指令,可以出現(xiàn)上述情況的組合。因此,在按組的情況下,可能具有引用的組合,其中一些引用是共享寫,而另一些不是共享寫。
為了簡單,假定初始指令序列是具有單個入口和多個出口的順序指令流,其中每個出口對應于轉(zhuǎn)出被轉(zhuǎn)換序列的條件分支。
還假定這個序列中的每個指令最多執(zhí)行一次(即,不存在循環(huán)回到轉(zhuǎn)換內(nèi)的另一個指令的分支)。最終假定目標指令集中的存儲器引用只能是寄存器和存儲器之間的載入和存儲。(這個最后假設不是限制性的,因為更加復雜的CISC指令可以被分散為包含這種載入和存儲指令的適當指令序列。)在圖9中,首先將存根代碼附加到轉(zhuǎn)換的開始處,以便保存可能被組中的指令改變的目標處理器的所有寄存器。如果需要消除指令組的假想轉(zhuǎn)換,這個檢查點是有利的。
接著,指令組中的每個載入和每個存儲與2個編號相關,這2個編號包含(a)指示其在存儲器引用序列中的單元的存儲器序列號,和(b)指示其在存儲引用子集序列中的單元的存儲序列號。
接著如圖9所示,構造被稱作存儲器順序緩沖器(MOB)的表900,其中每個記錄具有4個字段,包含有關其是否載入或存儲的字段910,引用地址920,引用長度930和與引用相關的數(shù)值930(在載入的情況下,為加載或假定的數(shù)值,而在存儲的情況下,為被存儲在存儲器中的數(shù)值)。于是,查看表900中載入/存儲的數(shù)量,3個引用為共享寫,而2個引用不是共享寫。
表中記錄的數(shù)量等于序列中存儲器引用的數(shù)量。圖10示出了目標代碼1010,仿真代碼1020和圖9的表900。也就是說,如圖10的結構1000所示,存儲器引用的序列號是針對表900的索引。因此,共享存儲器訪問被映射到圖9的MOB。
另外如圖11的結構1100所示,構造存儲恢復表(SRT)1110,存儲恢復表含有的記錄的數(shù)量與存儲引用的數(shù)量一樣多,其中每個記錄含有2個字段,包含圖11所示的地址字段和舊值字段。于是在圖11中,存儲被保存到SRT 1110以用于恢復。表1110是有用的,例如在發(fā)生問題時。
例如,當某人針對另一個人已經(jīng)讀取的單元進行寫入,并且已經(jīng)寫入的內(nèi)容是″新″內(nèi)容(不是″舊″內(nèi)容)時,會出現(xiàn)問題。結果,全部計算都是錯誤的。在這種情況下,將數(shù)值設回原值會是有用的。此外,某些計算可能已經(jīng)實際存儲到存儲器,并且期望將那些單元復位回到前面的數(shù)值(例如回到其原始內(nèi)容)。因此,使用表1110是有用的,因為它存儲了用于消除問題的地址和數(shù)值。
更具體地,系統(tǒng)檢測問題,并且現(xiàn)在必須返回并將數(shù)值恢復到為正確數(shù)值時的數(shù)值。通過循環(huán)返回并一次一個地遍歷每個存儲(例如最好在最后的檢查點之后首先執(zhí)行最后一個,等等),并且確定單元和舊數(shù)值,來執(zhí)行這種操作。接著向其插入舊數(shù)值。
在每個存儲器引用的轉(zhuǎn)換中,引入具有圖12示出的形式的代碼。
也就是說,在圖12的方法1200中,通過使用MOB 900和SRT 1110,插入代碼以保持指令組內(nèi)的一致性。
具體地,首先在步驟1205確定指令是否載入或存儲指令。由于載入和存儲是影響存儲器的主要指令,本發(fā)明不必關心其它指令。
如果在步驟1205確定該指令不是載入或存儲指令(例如″否″),則處理前進到步驟1240,其中進行指令仿真,并且接著過程在步驟1290完成。
出于同樣原因,如果在步驟1205確定指令是載入或存儲指令(例如″是″),則處理前進到步驟1210,其中對地址進行解析。這個步驟類似于前面參照圖8描述的步驟810。
在步驟1215確定地址是否處于本地后援緩沖器(LLB)中。如果地址不在LLB中(例如″否″),則在步驟1220啟動用于處理LLB命中失誤的過程(例如訪問全局頁表等等),并且接著過程循環(huán)回到步驟1215。
如果地址處于LLB中(例如″否″),則在步驟1225確定單元(例如地址)是否處于共享讀狀態(tài)。
如果在步驟1225確定單元(例如地址)處于共享讀狀態(tài)(例如″是″),則過程繼續(xù)執(zhí)行步驟1230,其中確定當前訪問是否為寫入。如果不是寫入(例如″否″),則在步驟1240執(zhí)行指令仿真,并且過程在步驟1290結束。
如果在步驟1230確定當前訪問是寫入(例如″是″),則在步驟1245將單元設置成共享寫,并且在步驟1250確定當前訪問是否為載入指令。
如果在步驟1250確定當前訪問為載入(例如″是″),則在步驟1255執(zhí)行載入,并且確定是否從MOB滿足載入(例如先前是否在MOB中出現(xiàn)載入/地址?)。如果滿足載入,則操作在步驟1270終止。如果在步驟1255確定沒有從MOB滿足載入(例如″否″),則過程繼續(xù)到步驟1260。在步驟1260中,記錄被插入到按照存儲器序列號索引的MOB中,并且過程在步驟1290終止。
如果在步驟1250確定當前訪問不是載入(例如″否″),則在步驟1260向按照存儲器序列號索引的MOB插入記錄,并且過程在步驟1290終止。
出于同樣原因,返回到步驟1235,如果確定單元(例如地址)不處于共享寫狀態(tài)(例如″否″),則過程繼續(xù)執(zhí)行步驟1265,其中判斷訪問是否為寫入。
如果在步驟1265確定訪問不是寫入(例如″否″),則過程繼續(xù)執(zhí)行步驟1240,其中執(zhí)行指令仿真,并且過程在步驟1290結束。
出于同樣原因,如果在步驟1265確定訪問是寫入(例如″是″),則過程繼續(xù)到步驟1270,此時讀取該單元的舊數(shù)值。接著,在步驟1275執(zhí)行存儲,并且在步驟1280向按照存儲序列號索引的SRT插入舊數(shù)值。此后,過程在步驟1290終止。
于是如圖12所示,這個代碼確定對應于被引用單元的頁面是否為″共享寫″,如果是,則分支轉(zhuǎn)移到存根代碼。
這個存根代碼使用存儲器引用的序列號索引MOB,并且記錄(a)其是否為載入或存儲,以及(b)引用的地址。如果引用為存儲,則還記錄要存儲的數(shù)值。如果為載入,則執(zhí)行載入并且接著記錄加載的數(shù)值。
對于針對共享寫單元(該單元曾經(jīng)是轉(zhuǎn)換中前面的存儲的目標)的載入,存在特殊情況。在這種情況下,載入應當從MOB接收其內(nèi)容,而載入本身不被記錄在MOB中。
如果引用不針對″共享寫″單元,并且如果它是存儲,則在執(zhí)行存儲之前,單元的舊數(shù)值被讀取和記錄在SRT中。
應當注意,在其余轉(zhuǎn)換過程中可以對這個存根代碼進行優(yōu)化和重新排序。在轉(zhuǎn)換結束時,加入另一個存根,該存根進行檢查以保證沒有其它處理器針對這個塊訪問的″共享寫″單元改變數(shù)值。
如圖13所示,通過首先鎖定共享存儲器單元以防其它處理器訪問,可實現(xiàn)此操作。每個載入單元被重新加載,并且與對應MOB記錄中存儲的數(shù)值相比較。如果發(fā)現(xiàn)所有重新加載與初始載入相同,則從MOB向其在存儲器中的實際單元提交所有存儲是安全的。
如果在載入驗證過程期間發(fā)生失配,則取消該組的整個執(zhí)行。通過將所有寄存器恢復到其舊狀態(tài),并且在SRT中進行撤消操作以撤消針對非″共享寫″單元進行的存儲,可達到這個目的。一旦系統(tǒng)回到其先前的有效狀態(tài),則重新嘗試執(zhí)行。為了避免指令組內(nèi)的重復執(zhí)行-取消循環(huán),可以使用解釋模式或簡單轉(zhuǎn)換模式一次一個地重新執(zhí)行。
因此,圖13圖解了計算結束,于是在一起轉(zhuǎn)換指令組和執(zhí)行指令之后、向存儲器保存每記錄內(nèi)容之前,期望保證在執(zhí)行計算的同時沒有發(fā)生任何改變。也就是說,其它處理器在指令組的執(zhí)行期間可能進行了改變,而本發(fā)明希望保證這種改變不影響當前被仿真的處理器的數(shù)值/指令。
于是,現(xiàn)在逐個步驟地查看圖13中用于在指令組執(zhí)行結束時向存儲器提交共享寫入的過程1300,首先在步驟1305鎖定對共享存儲器單元的訪問。
接著在步驟1310將指針設置到MOB中的第一個記錄,并且在步驟1315確定是否已經(jīng)到達MOB的結束處。應當注意,步驟1315之后過程的左邊涉及載入,而步驟1315之后過程的右邊涉及存儲。
如果步驟1315的結果為″否″,則在步驟1320確定MOB中的記錄是否為空。(如果步驟1315中的結果為″是″,則處理前進到步驟1340)。
接著在步驟1325確定記錄是否為載入。如果步驟1325中的結果為″否″,則在步驟1340遞增針對MOB的指針,并且循環(huán)回到步驟1315。
出于同樣原因,如果在步驟1325確定記錄為載入(例如″是″),則在步驟1330從記錄中的地址重新加載記錄。在步驟1335確定重新加載的數(shù)值是否與記錄中的數(shù)值匹配。
如果步驟1335中的結果為″是″,則在步驟1340遞增針對MOB的指針,并且循環(huán)回到步驟1315。
如果在步驟1335的結果為″否″,則在步驟1345釋放鎖,并且接著在步驟1350通過恢復狀態(tài)并使用SRT恢復非共享寫入,從而恢復到指令組的開始處。此時,仿真的程序計數(shù)器被復位到指令組的開始處,并且重新嘗試執(zhí)行過程。
出于同樣原因,如果在步驟1315的結果為″是″,則過程前進到步驟1355,此時指針被設置到MOB中的第一個記錄。在步驟1360確定是否到達MOB的結束處。
如果為″否″,則在步驟1365確定MOB中的記錄是否為空。(如果步驟1365中的結果為″是″,則處理前進到步驟1380)。
接著在步驟1370確定MOB中的記錄是否為存儲。如果記錄為存儲(例如″是″),則在步驟1375將數(shù)值寫入存儲器,并且在步驟1380在MOB中遞增指針,接著過程循環(huán)回到步驟1360。
如果步驟1370的結果為″否″,則過程繼續(xù)到步驟1380,并且接著循環(huán)回到步驟1360。如果在步驟1360結果為″是″,則在步驟1385釋放鎖,并且過程在步驟1390完成。
于是如上所述,本發(fā)明可以逐個遍歷指令,或者使用MOB和SRT處理指令組。
圖14圖解了用于本發(fā)明的信息處理/計算機系統(tǒng)的典型硬件結構,該系統(tǒng)最好具有至少一個處理器或中央處理單元(CPU)1411。
CPU 1411通過系統(tǒng)總線1412互連到隨機訪問存儲器(RAM)1414,只讀存儲器(ROM)1416,輸入/輸出(I/O)適配器1418(用于將諸如磁盤單元1421和磁帶驅(qū)動器1440的外部設備連接到總線1412),用戶接口適配器1422(用于將鍵盤1424,鼠標1426,揚聲器1428,話筒1432和/或其它用戶接口設備連接到總線1412),用于將信息處理系統(tǒng)連接到數(shù)據(jù)處理網(wǎng)絡,互聯(lián)網(wǎng),內(nèi)部網(wǎng),個人局域網(wǎng)(PAN)等等的通信適配器1434,和用于將總線1412連接到顯示設備1438和/或打印機1439(例如數(shù)字打印機等等)的顯示適配器1436。
除了如上所述的硬件/軟件環(huán)境之外,本發(fā)明的不同方面包含用于執(zhí)行上述方法的計算機實現(xiàn)方法。作為一個例子,可以在上述特定環(huán)境中實現(xiàn)這個方法。
例如可以通過諸如數(shù)字數(shù)據(jù)處理設備的計算機實現(xiàn)這種方法,以執(zhí)行機器可讀指令序列。這些指令可以駐留在各種信號承載介質(zhì)中。
于是,本發(fā)明的這個方面涉及編程產(chǎn)品,包括信號承載介質(zhì),所述信號承載介質(zhì)實際含有可被引入CPU 1411和上述硬件的數(shù)字數(shù)據(jù)處理器運行以便執(zhí)行本發(fā)明的方法的機器可讀指令程序。
這個信號承載介質(zhì)可以包含CPU 1411內(nèi)的RAM,例如快速存取存儲器??蛇x地,指令可以被包含在另一個信號承載介質(zhì)(例如磁性數(shù)據(jù)存儲盤1500(圖15))中,可被CPU 1411直接或間接訪問。
無論是包含在磁盤1500、計算機/CPU 1411或其它地方,指令可以被存儲在各種機器可讀數(shù)據(jù)存儲介質(zhì)中,例如DASD存儲器(例如傳統(tǒng)″硬盤驅(qū)動器″或RAID陣列),磁帶,電子只讀存儲器(例如ROM、EPROM或EEPROM),光學存儲裝置(例如CD-ROM,WORM,DVD,數(shù)字光帶等等),紙張″穿孔″卡或其它適當?shù)男盘柍休d介質(zhì),包含諸如數(shù)字和模擬通信鏈路和無線通信鏈路的傳輸介質(zhì)。在本發(fā)明的圖解實施例中,機器可讀指令可以包括從諸如″C″等等的語言編譯而成的軟件對象代碼。
通過本發(fā)明獨特和非顯而易見的方面,通過多處理系統(tǒng)上仿真的多個處理器可以高效地對臨界段進行仿真。也就是說,本發(fā)明可以對多個處理器進入臨界段進行仿真,而這些臨界段是同時為不同處理器而被仿真的。過去尚未遇到這種問題,因為通常在單處理器上執(zhí)行仿真。在這點上,本發(fā)明人首先認識到這種問題,并且提出了如上所述的獨特和非顯而易見的解決方案。此外,本發(fā)明可以保證上述存儲器一致性。
雖然前面根據(jù)若干優(yōu)選實施例描述了本發(fā)明,然而本領域的技術人員會認識到,可以通過包含在所附權利要求書的宗旨和范圍內(nèi)的修改實施本發(fā)明。
此外應當注意,申請人的意圖是涵蓋所有權利要求的等價表述,即使以后在審查期間有所修改。
權利要求
1.一種多處理器系統(tǒng)中的仿真方法,包括執(zhí)行仿真,其中所述多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
2.如權利要求1所述的方法,還包括確定頁面的共享狀態(tài),所述確定包括確定查找表中的后援屏蔽是否有不止一個位被置位;如果確定后援屏蔽有不止一個位被置位,則確定查找表中的讀/寫屏蔽字段是否有任意位被置位;如果確定讀/寫屏蔽有任意位被置位,則將狀態(tài)設置為″共享寫入″;和如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″共享讀取″。
3.如權利要求2所述的方法,其中所述確定還包括如果確定后援屏蔽沒有不止一個位被置位,則確定查找表中的讀/寫屏蔽字段是否有任意位被置位;和如果確定讀/寫屏蔽有一位或多位被置位,則將狀態(tài)設置為″獨占寫入″。
4.如權利要求2所述的方法,其中所述確定還包括如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″獨占讀取″。
5.如權利要求1所述的方法,其中還包括提供包含關于當前被引用的單元的共享信息的表。
6.如權利要求5所述的方法,其中所述表后援屏蔽字段和讀/寫屏蔽字段,并且包含有關頁面是被讀模式的處理器訪問還是被寫模式的處理器訪問的信息。
7.如權利要求6所述的方法,還包括當頁面被換入系統(tǒng)時,確定頁面具有的狀態(tài),其中當頁面具有共享寫狀態(tài)時,標記這種狀態(tài)。
8.如權利要求6所述的方法,其中所述表包括查找表,所述方法還包括確定頁面的共享狀態(tài),所述確定包括確定所述查找表中的所述后援屏蔽是否有不止一個位被置位;如果確定后援屏蔽有不止一個位被置位,則確定表中的讀/寫屏蔽字段是否有任意位被置位;如果確定讀/寫屏蔽有任意位被置位,則將狀態(tài)設置為″共享寫入″;和如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″共享讀取″。
9.如權利要求8所述的方法,其中所述確定還包括如果確定后援屏蔽沒有不止一個位被置位,則確定查找表中的讀/寫屏蔽字段是否有任意位被置位;如果確定讀/寫屏蔽有一位或多位被置位,則將狀態(tài)設置為″獨占寫入″;如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″獨占讀取″;和當一次一個地仿真指令時,保證順序一致性。
10.多處理器計算系統(tǒng)中用于仿真目標多處理器計算系統(tǒng)的存儲器一致性行為的方法,所述多處理器計算系統(tǒng)包含用于仿真目標多處理器計算系統(tǒng)的行為的仿真器,所述方法包括在存儲器操作之前執(zhí)行存儲器屏蔽指令,存儲器屏蔽指令保證宿主計算系統(tǒng)中的所有處理器已經(jīng)得到執(zhí)行存儲器屏蔽指令之前所執(zhí)行的存儲器操作的結果,其中所述多處理器計算系統(tǒng)的所述宿主計算系統(tǒng)支持弱一致性模型,而多處理器計算系統(tǒng)的目標多處理器系統(tǒng)支持強一致性模型。
11.如權利要求10所述的方法,其中在訪問被識別為具有特定狀態(tài)的存儲器單元之后,立即執(zhí)行在存儲器操作之前執(zhí)行的存儲器屏蔽指令。
12.如權利要求11所述的方法,其中所述特定狀態(tài)包括共享寫狀態(tài)。
13.如權利要求10所述的方法,還包含如果來自目標多處理器計算系統(tǒng)的指令組中的指令在被轉(zhuǎn)換到宿主機時被重新排序,保證存儲器一致性。
14.用于多處理器存儲器一致性的高效仿真的方法,包括構成存儲器屏蔽指令,存儲器屏蔽指令保證多處理器系統(tǒng)的宿主計算系統(tǒng)中的全部處理器已經(jīng)寄存了執(zhí)行存儲器屏蔽指令之前已經(jīng)執(zhí)行的存儲器操作,其中宿主計算系統(tǒng)支持寬松一致性模型,而所述多處理器系統(tǒng)的目標計算系統(tǒng)規(guī)定強一致性模型。
15.如權利要求14所述的方法,其中宿主計算系統(tǒng)支持具有存儲器一致性的所述寬松一致性模型。
16.如權利要求14所述的方法,其中存儲器屏蔽指令保證,在所有處理器寄存的屏蔽指令之前的所有存儲器操作之后,執(zhí)行屏蔽指令之后的所有存儲器操作。
17.如權利要求14所述的方法,還包括提供使用關于當前被所述目標計算系統(tǒng)和所述宿主計算系統(tǒng)引用的單元的共享信息維護的表。
18.如權利要求17所述的方法,其中所述表包含后援屏蔽字段和讀/寫屏蔽字段,并且包含有關頁面是被讀模式的處理器訪問還是被寫模式的處理器訪問的信息。
19.如權利要求14所述的方法,還包括當頁面被換入系統(tǒng)時,確定頁面具有的狀態(tài),其中當頁面具有共享寫狀態(tài)時,標記這種狀態(tài)。
20.如權利要求14所述的方法,還包括確定頁面的共享狀態(tài),所述確定包括確定查找表中的后援屏蔽是否有不止一個位被置位;如果確定后援屏蔽有不止一個位被置位,則確定表中的讀/寫屏蔽字段是否有任意位被置位;如果確定讀/寫屏蔽有任意位被置位,則將狀態(tài)設置為″共享寫入″;和如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″共享讀取″。
21.如權利要求19所述的方法,其中所述確定還包括如果確定后援屏蔽沒有不止一個位被置位,則確定查找表中的讀/寫屏蔽字段是否有任意位被置位;和如果確定讀/寫屏蔽有一位或多位被置位,則將狀態(tài)設置為″獨占寫入″。
22.如權利要求21所述的方法,其中所述確定還包括如果確定讀/寫屏蔽沒有任何位被置位,則將狀態(tài)設置為″獨占讀取″。
23.如權利要求14所述的方法,還包括當一次一個地仿真指令時,保證順序一致性。
24.一種保證多處理系統(tǒng)中存儲器一致性的方法,包括確定指令是否為載入或存儲;如果確定指令是載入或存儲,則解析上述指令的地址,并且確定該地址是否被存儲在本地后援緩沖器(LLB)中;如果地址處于LLB中,則確定單元是否處于共享讀狀態(tài);和如果確定單元處于共享讀狀態(tài),則確定當前地址是否為寫入,其中如果當前地址不是寫入,則執(zhí)行指令的仿真。
25.如權利要求24所述的方法,其中如果地址未存儲在LLB中,則啟動用于處理LLB命中失誤的過程,所述方法還包括如果確定當前訪問為寫入,則將單元設置為共享寫,并且仿真指令,以及放入存儲器屏蔽指令。
26.如權利要求25所述的方法,還包括如果確定單元不處于共享讀狀態(tài),則確定單元是否為共享寫;如果確定單元為共享寫狀態(tài),則仿真指令,并且放入存儲器屏蔽指令。
27.如權利要求24所述的方法,還包括確定地址是否為共享寫,或指令是否變成共享寫;和放入針對共享寫指令和可能轉(zhuǎn)換成共享寫的指令的存儲器屏蔽指令。
28.如權利要求24所述的方法,還包括重新排序指令操作以使存儲器屏蔽指令數(shù)量最小。
29.如權利要求28所述的方法,還包括提供存儲器順序緩沖器(MOB),用于當存在所述重新排序時在仿真期間保持存儲器操作中所需的一致性。
30.如權利要求28所述的方法,還包括當指令組將被一起轉(zhuǎn)換時,將存根代碼附加到轉(zhuǎn)換的開始處,以便保存可能被組中的指令改變的目標處理器的所有寄存器;和使指令組中的每個載入和每個存儲與存儲器序列號和存儲序列號相關,其中存儲器序列號指示其在存儲器引用序列中的單元,存儲序列號指示其在存儲引用子集序列中的單元。
31.如權利要求30所述的方法,還包括構造存儲器順序緩沖器(MOB)表,其中每個記錄具有多個字段,包含其是否為載入或存儲,引用地址,引用長度和與引用相關的數(shù)值,其中表中記錄的數(shù)量等于序列中存儲器引用的數(shù)量;和將共享存儲器訪問映射到MOB表。
32.如權利要求31所述的方法,還包括構造存儲恢復表(SRT),存儲恢復表包含的記錄的數(shù)量與存儲引用的數(shù)量一樣多,其中每個記錄含有多個字段,包含地址字段和舊值字段,其中存儲被保存到SRT以用于恢復,當確定單元的當前數(shù)值不正確并且需要正確數(shù)值時訪問SRT,通過一次一個地循環(huán)返回遍歷每個存儲,確定單元和舊數(shù)值,以及插入舊數(shù)值,由SRT執(zhí)行校正操作。
33.多處理器系統(tǒng)中插入用于保持指令組內(nèi)一致性的代碼的方法,包括確定指令是否為載入或存儲;如果確定指令是載入或存儲,則解析上述指令的地址,并且確定地址是否處于本地后援緩沖器(LLB)中;如果地址處于LLB中,則確定單元是否處于共享讀狀態(tài);如果確定單元處于共享讀狀態(tài),則確定當前訪問是否為寫入;如果確定當前訪問為寫入,則將單元為設置為共享寫,并且確定當前訪問是否為載入指令;如果確定當前訪問為載入,則執(zhí)行載入,并且確定是否從存儲器順序緩沖器(MOB)表滿足載入;和如果不從MOB表滿足載入,則向按照存儲器序列號索引的MOB表插入對應記錄。
34.如權利要求33所述的方法,還包括如果確定當前訪問不是載入,則向按照存儲器序列號索引的MOB表插入記錄。
35.如權利要求34所述的方法,還包括如果確定單元不處于共享寫狀態(tài),則確定訪問是否為寫入;和如果確定訪問不為寫入,則仿真指令。
36.如權利要求35所述的方法,其中如果確定訪問為寫入,則讀取該單元的舊數(shù)值,執(zhí)行存儲,并且將舊數(shù)值插入按照存儲序列號索引的存儲引用表(SRT)。
37.如權利要求33所述的方法,還包括確定對應于被引用單元的頁面是否為″共享寫″,如果是,則分支轉(zhuǎn)移到存根代碼,其中所述存根代碼使用存儲器引用的序列號索引存儲器順序緩沖器(MOB),并且記錄其是否為載入或存儲,以及存儲器引用的地址,其中如果存儲器引用為存儲,則記錄要存儲的數(shù)值,并且如果其為載入,則執(zhí)行載入,并且記錄加載的數(shù)值。
38.如權利要求37所述的方法,其中當載入所針對的是曾經(jīng)作為轉(zhuǎn)換中前面的存儲的目標的共享寫單元時,載入從MOB接收其內(nèi)容,并且載入不被記錄在MOB中,其中如果引用不針對″共享寫″單元,并且如果它是存儲,則在執(zhí)行存儲之前,單元的舊數(shù)值被讀取和記錄在SRT中。
39.在指令的成組執(zhí)行結束時向存儲器提交共享寫入的方法,包括在轉(zhuǎn)換結束時,加入存根代碼,該存根代碼進行檢查以保證沒有多處理器系統(tǒng)的其它處理器針對一個塊訪問的″共享寫″單元改變數(shù)值。
40.如權利要求39所述的方法,還包括鎖定共享存儲器單元以防止其它處理器訪問;和重新加載每個載入單元,并且將其與對應存儲器順序緩沖器(MOB)記錄中存儲的數(shù)值相比較,其中如果確定所有重新加載與初始載入相同,則針對其在存儲器中的實際單元進行來自MOB的所有存儲。
41.如權利要求39所述的方法,還包括如果在載入驗證過程期間發(fā)生失配,通過將所有寄存器恢復到其舊狀態(tài),并且在存儲恢復表(SRT)中進行撤消操作以撤消針對非″共享寫″單元進行的存儲,從而取消指令組的整個執(zhí)行。
42.如權利要求41所述的方法,還包括在使系統(tǒng)回到其先前的有效狀態(tài),重新嘗試執(zhí)行。
43.如權利要求39所述的方法,還包括鎖定對共享存儲器單元的訪問;將指針設置到存儲器順序緩沖器(MOB)中的第一個記錄,并且確定是否已經(jīng)到達MOB的結束處;如果尚未到達結束處,則確定MOB中的記錄是否為空;和如果確定記錄不是載入,則遞增針對MOB的指針。
44.如權利要求43所述的方法,還包括如果確定記錄為載入,則從記錄中的地址重新加載記錄;確定重新加載的數(shù)值是否與記錄中的數(shù)值匹配;如果數(shù)值匹配,則遞增針對MOB的指針;如果數(shù)值不匹配,則釋放鎖,并且通過恢復狀態(tài)和使用存儲恢復表(SRT)恢復非共享寫入,恢復到指令組的開始處。
45.如權利要求44所述的方法,還包括如果已經(jīng)到達MOB的結束處,則將指針設置到MOB中的第一個記錄,并且確定是否已經(jīng)到達MOB的結束處;如果尚未到達結束處,則確定MOB中的記錄是否為空;確定MOB中的記錄是否為存儲;和如果記錄為存儲,則向存儲器寫入數(shù)值并且在MOB中遞增指針。
46.如權利要求45所述的方法,其中如果MOB中的記錄不是存儲,則遞增MOB中的指針。
47.如權利要求39所述的方法,還包括逐個處理指令。
48.如權利要求39所述的方法,還包括使用存儲器順序緩沖器(MOB)和存儲恢復表(SRT)處理指令組中的指令。
49.用于共享多處理器系統(tǒng)的存儲引用表(SRT),包括包含的記錄的數(shù)量與存儲引用的數(shù)量一樣多的表,其中每個記錄含有多個字段,包含地址字段和用于存儲初值以便進行恢復的舊值字段,其中所述表存儲有關所述記錄的共享寫入狀態(tài)的信息。
50.用于共享多處理器系統(tǒng)的存儲器順序緩沖器(MOB),包括使用關于當前被引用的單元的共享信息維護的表,其中所述信息包含區(qū)分記錄的特定狀態(tài)是否包括共享寫狀態(tài)的信息。
51.如權利要求50所述的MOB,其中所述表包含后援屏蔽字段和讀/寫屏蔽字段,并且包含有關頁面是被讀模式的處理器訪問還是被寫模式的處理器訪問的信息,其中所述表還包含有效/狀態(tài)位字段、進程標識字段、虛擬地址字段、實地址字段和保護位字段。
52.用于多處理器系統(tǒng)中的仿真的系統(tǒng),包括用于執(zhí)行仿真的仿真器,其中所述多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
53.一種信號承載介質(zhì),實際包含可被數(shù)字處理設備運行以便實現(xiàn)多處理器系統(tǒng)中的仿真方法的機器可讀指令程序,包括執(zhí)行仿真,其中所述多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而所述多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
全文摘要
在多處理器系統(tǒng)中進行仿真的方法(和系統(tǒng))包含執(zhí)行仿真,其中多處理器系統(tǒng)的宿主多處理系統(tǒng)支持弱一致性模型,而多處理器系統(tǒng)的目標多處理系統(tǒng)支持強一致性模型。
文檔編號G06F12/08GK1492324SQ03157020
公開日2004年4月28日 申請日期2003年9月9日 優(yōu)先權日2002年9月17日
發(fā)明者R·奈爾, J·K·奧布瑞恩, K·M·奧布瑞恩, P·H·奧登, D·A·普雷納, R 奈爾, 奧布瑞恩, 奧登, 普雷納 申請人:國際商業(yè)機器公司