本公開(kāi)涉及數(shù)據(jù)處理裝置。更具體地,本公開(kāi)涉及具有回寫(xiě)緩存的數(shù)據(jù)處理裝置。
背景技術(shù):
已知提供了具有對(duì)非易失性存儲(chǔ)器的訪問(wèn)的數(shù)據(jù)處理裝置,在非易失性存儲(chǔ)器中存儲(chǔ)了該數(shù)據(jù)處理裝置對(duì)其執(zhí)行數(shù)據(jù)處理操作的數(shù)據(jù)項(xiàng)。作為非易失性存儲(chǔ)器,在數(shù)據(jù)處理系統(tǒng)的供電無(wú)論由于受控的重啟還是由于突發(fā)事件而被中斷并恢復(fù)后,該非易失性存儲(chǔ)器的內(nèi)容將是持久的。
還已知提供了具有回寫(xiě)緩存的數(shù)據(jù)處理裝置,該回寫(xiě)緩存與該數(shù)據(jù)處理裝置的處理器相關(guān)聯(lián),從存儲(chǔ)器取回并被寫(xiě)出到存儲(chǔ)器的數(shù)據(jù)項(xiàng)的本地副本被臨時(shí)地存儲(chǔ)在該回寫(xiě)緩存中。由于緩存具有回寫(xiě)配置,存儲(chǔ)在緩存中并且經(jīng)修改的數(shù)據(jù)項(xiàng)僅當(dāng)必需被寫(xiě)出到存儲(chǔ)器時(shí)(例如,因?yàn)楸4嬖摂?shù)據(jù)項(xiàng)的緩存線被從緩存驅(qū)逐)才被寫(xiě)出到存儲(chǔ)器。
但是,同時(shí)提供回寫(xiě)緩存和對(duì)非易失性存儲(chǔ)器的訪問(wèn)可能存在困難。本文所描述的技術(shù)改進(jìn)了包括回寫(xiě)緩存和非易失性存儲(chǔ)器的裝置。
技術(shù)實(shí)現(xiàn)要素:
根據(jù)第一示例配置,提供了一種數(shù)據(jù)處理裝置,包括:處理器核,該處理器核能響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中所述存儲(chǔ)器是非易失性存儲(chǔ)器;回寫(xiě)緩存,該回寫(xiě)緩存能在運(yùn)行指令序列時(shí)存儲(chǔ)處理器核從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本;以及存儲(chǔ)單元,該存儲(chǔ)單元能存儲(chǔ)對(duì)由處理器核發(fā)起的寫(xiě)操作的指示,并且處理器核能通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng):使作為處理器核的下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中對(duì)所述寫(xiě)操作的指示已被存儲(chǔ)到所述存儲(chǔ)單元;以及將存儲(chǔ)單元中存儲(chǔ)的對(duì)寫(xiě)操作的指示清除。
根據(jù)第二示例配置,提供了一種數(shù)據(jù)處理方法,包括以下步驟:響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中所述存儲(chǔ)器是非易失性存儲(chǔ)器;運(yùn)行指令序列時(shí)在回寫(xiě)緩存中存儲(chǔ)從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本;存儲(chǔ)對(duì)在執(zhí)行數(shù)據(jù)處理操作步驟時(shí)發(fā)起的寫(xiě)操作的指示;以及通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng):使作為下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中在存儲(chǔ)本地副本的步驟中已存儲(chǔ)了對(duì)所述寫(xiě)操作的指示;以及將在存儲(chǔ)指示的步驟中存儲(chǔ)的對(duì)所述寫(xiě)操作的指示清除。
根據(jù)第三示例配置,提供了一種數(shù)據(jù)處理設(shè)備,包括:用于響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作的裝置,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向所述存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中存儲(chǔ)器是非易失性存儲(chǔ)器;用于運(yùn)行指令序列時(shí)存儲(chǔ)從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本的裝置,其中用于存儲(chǔ)的裝置具有對(duì)于存儲(chǔ)器的回寫(xiě)配置;用于存儲(chǔ)對(duì)由用于執(zhí)行數(shù)據(jù)處理操作的裝置發(fā)起的寫(xiě)操作的指示的裝置;以及用于通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng)的裝置:使作為下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中用于存儲(chǔ)本地副本的裝置已存儲(chǔ)了對(duì)所述寫(xiě)操作的指示;以及將在用于存儲(chǔ)指示的裝置中存儲(chǔ)的對(duì)寫(xiě)操作的指示清除。
附圖說(shuō)明
將參照在附圖中示出的本技術(shù)的實(shí)施例來(lái)僅通過(guò)示例的方式進(jìn)一步描述本技術(shù),其中:
圖1示意性地示出了一個(gè)實(shí)施例中的包括數(shù)據(jù)處理裝置的數(shù)據(jù)處理系統(tǒng);
圖2示意性地示出了一個(gè)實(shí)施例中的數(shù)據(jù)處理裝置用于確定虛擬到物理地址轉(zhuǎn)換的頁(yè)表;
圖3示意性地示出了一個(gè)實(shí)施例的處理器核中所提供的FIFO存儲(chǔ)單元;
圖4示意性地示出了一個(gè)實(shí)施例中的一級(jí)緩存;
圖5示出了一個(gè)實(shí)施例的數(shù)據(jù)處理裝置可以執(zhí)行的示例指令序列;
圖6示出了一個(gè)實(shí)施例中的對(duì)兩條指令的每條指令中的控制信息的編碼;
圖7到圖10示出了在一個(gè)實(shí)施例的數(shù)據(jù)處理裝置中執(zhí)行的一系列步驟;以及
圖11示意性地示出了一個(gè)實(shí)施例中的在數(shù)據(jù)處理裝置中發(fā)生的一系列步驟。
具體實(shí)施方式
至少一些實(shí)施例提供了一種數(shù)據(jù)處理裝置,包括:處理器核,該處理器核能響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中所述存儲(chǔ)器是非易失性存儲(chǔ)器;回寫(xiě)緩存,該回寫(xiě)緩存能在運(yùn)行指令序列時(shí)存儲(chǔ)處理器核從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本;以及存儲(chǔ)單元,該存儲(chǔ)單元能存儲(chǔ)對(duì)由處理器核發(fā)起的寫(xiě)操作的指示,并且處理器核能通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng):使作為處理器核的下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中對(duì)所述寫(xiě)操作的指示已被存儲(chǔ)到所述存儲(chǔ)單元;以及將存儲(chǔ)單元中存儲(chǔ)的對(duì)寫(xiě)操作的指示清除。
本技術(shù)解決了處理器核尋求從非易失性存儲(chǔ)器讀取數(shù)據(jù)項(xiàng)和將那些(修改后的)數(shù)據(jù)項(xiàng)寫(xiě)到非易失性存儲(chǔ)器產(chǎn)生的上述問(wèn)題,其中將數(shù)據(jù)項(xiàng)寫(xiě)到非易失性存儲(chǔ)器是經(jīng)由回寫(xiě)緩存居間實(shí)現(xiàn)的。具體而言,該裝置包括存儲(chǔ)單元,該存儲(chǔ)單元能存儲(chǔ)對(duì)由處理器核發(fā)起的對(duì)非易失性存儲(chǔ)器的寫(xiě)操作的指示。與提供該存儲(chǔ)單元相關(guān)聯(lián)地,指令被添加到處理器核執(zhí)行其數(shù)據(jù)處理操作期間能響應(yīng)的指令范圍,并且響應(yīng)于該指令(“結(jié)束指令”),處理器核使回寫(xiě)緩存中的下述條目被從回寫(xiě)緩存清理到非易失性存儲(chǔ)器,對(duì)于這些條目對(duì)由處理器核發(fā)起的寫(xiě)操作的相應(yīng)指示當(dāng)前已被存儲(chǔ)在存儲(chǔ)單元中。這里從回寫(xiě)緩存到非易失性存儲(chǔ)器的數(shù)據(jù)項(xiàng)的“清理(clean)”應(yīng)當(dāng)理解為指,存儲(chǔ)在回寫(xiě)緩存中的數(shù)據(jù)項(xiàng)的修改后副本被用來(lái)更新存儲(chǔ)在非易失性存儲(chǔ)器中的原始數(shù)據(jù)項(xiàng)。存儲(chǔ)單元的內(nèi)容然后也被清除。因此,在數(shù)據(jù)處理裝置的編程者希望保證(通過(guò)運(yùn)行寫(xiě)指令發(fā)起的)對(duì)非易失性存儲(chǔ)裝置的寫(xiě)操作按特定排序發(fā)生時(shí),可以通過(guò)增加結(jié)束指令到該編程者給出的指令序列中來(lái)定義該裝置應(yīng)當(dāng)執(zhí)行的數(shù)據(jù)處理操作來(lái)實(shí)現(xiàn)。
在一些實(shí)施例中,非易失性存儲(chǔ)器是按字節(jié)尋址的。但是,也可以設(shè)想其它類型的可尋址能力,依據(jù)其自身非易失性存儲(chǔ)器可以是按字尋址的、按緩存線尋址的,等等。
在一些實(shí)施例中,處理器核還能使在指令序列中的開(kāi)始指令之后,對(duì)處理器核發(fā)起的寫(xiě)操作的指示被存儲(chǔ)到存儲(chǔ)單元中。因此,進(jìn)一步的指令可以被添加到處理器核響應(yīng)的指令集,這使得系統(tǒng)程序員能封裝寫(xiě)操作的“寫(xiě)集合”(以開(kāi)始指令開(kāi)始,以結(jié)束指令終止)。按照回寫(xiě)緩存的操作而不是處理器核的操作(由于調(diào)度原因,處理器核的操作可能會(huì)改變特定指令運(yùn)行的順序),可以保證在非易失性存儲(chǔ)器的內(nèi)容中,程序員期望的(該寫(xiě)集合相當(dāng)于其它寫(xiě)操作的)寫(xiě)順序?qū)⒌玫街匾暋?/p>
在一些實(shí)施例中,處理器核能如果指定存儲(chǔ)器的預(yù)定部分的未決寫(xiě)指令在開(kāi)始指令后且在結(jié)束指令前,則僅能執(zhí)行對(duì)存儲(chǔ)器的預(yù)定部分的寫(xiě)操作。類似地,在一些實(shí)施例中,處理器核能如果指定所述存儲(chǔ)器的預(yù)定部分的未決寫(xiě)指令不是在開(kāi)始指令后且在結(jié)束指令前,則防止執(zhí)行對(duì)存儲(chǔ)器的預(yù)定部分的寫(xiě)操作。這使得處理器核能訪問(wèn)的存儲(chǔ)器地址空間的特定部分(例如可以是非易失性存儲(chǔ)器提供的部分)能得到保護(hù),因?yàn)樵摬糠植荒鼙粚?xiě)入,除非尋求寫(xiě)該部分的寫(xiě)指令在開(kāi)始指令之后且在結(jié)束指令之前。這保護(hù)了該存儲(chǔ)器部分,例如非易失性存儲(chǔ)器,免遭“誤寫(xiě)”(例如,由于程序中的缺陷)使其出錯(cuò)。
可以以多種方式布置處理器核,來(lái)在識(shí)別出結(jié)束指令(可能還有開(kāi)始指令)的存在時(shí)處理處理器核運(yùn)行的指令序列中的其它指令。例如,在一些實(shí)施例中,處理器核能通過(guò)以下過(guò)程來(lái)對(duì)結(jié)束指令和指令序列中的后續(xù)開(kāi)始指令作出響應(yīng):使指令序列中的后續(xù)開(kāi)始指令暫停,直到結(jié)束指令完成。程序員可用開(kāi)始指令來(lái)定義下一個(gè)寫(xiě)集合的開(kāi)始,從而當(dāng)處理器核遇到結(jié)束指令后的后續(xù)開(kāi)始指令時(shí),通過(guò)使后續(xù)開(kāi)始指令暫停直到結(jié)束指令完成(即,從處理器核流水線排干),從而能夠保證該下一寫(xiě)集合不被處理,直到已處理了前一個(gè)寫(xiě)集合。
在一些實(shí)施例中,處理器核能通過(guò)以下過(guò)程來(lái)對(duì)結(jié)束指令和指令序列中的后續(xù)存儲(chǔ)器操作指令作出響應(yīng):使指令序列中的后續(xù)存儲(chǔ)器操作指令暫停,直到結(jié)束指令完成。因此,當(dāng)(響應(yīng)于指令序列中的一個(gè)或多個(gè)存儲(chǔ)器操作指令將被執(zhí)行的)一個(gè)或多個(gè)存儲(chǔ)器操作接著指令序列中的結(jié)束指令時(shí),可以使這些存儲(chǔ)器操作暫停,從而保證這些存儲(chǔ)器操作的結(jié)果不會(huì)在非易失性存儲(chǔ)器中生效,直到預(yù)先定義的結(jié)束指令完成,這對(duì)以結(jié)束指令終止的寫(xiě)集合提供了更高級(jí)保護(hù)。
實(shí)際上,在一些實(shí)施例中,處理器核能通過(guò)以下過(guò)程來(lái)對(duì)結(jié)束指令和指令序列中的后續(xù)指令作出響應(yīng):使指令序列中的后續(xù)指令暫停,直到結(jié)束指令完成。因此,對(duì)以結(jié)束指令終止的寫(xiě)集合提供了又一級(jí)保護(hù),因?yàn)榭梢允怪噶钚蛄兄械娜魏魏罄m(xù)指令暫停,直到結(jié)束指令完成。
對(duì)由處理器核發(fā)起的對(duì)非易失性存儲(chǔ)器的寫(xiě)操作的指示存儲(chǔ)在其中的存儲(chǔ)單元可以采用多種形式,但是在一些實(shí)施例中,該存儲(chǔ)單元是先進(jìn)先出(FIFO)存儲(chǔ)單元??梢栽谠撗b置的多個(gè)不同位置中提供該FIFO結(jié)構(gòu),只要是對(duì)處理器核可訪問(wèn)的,但是在一些實(shí)施例中,處理器核包括該先進(jìn)先出存儲(chǔ)單元。這便于處理器核對(duì)該FIFO結(jié)構(gòu)的訪問(wèn)和維護(hù)。
作為替換,在一些實(shí)施例中,存儲(chǔ)單元是由回寫(xiě)緩存提供的,并且對(duì)由處理器核發(fā)起的寫(xiě)操作的指示被作為與回寫(xiě)緩存中存儲(chǔ)的緩存線相關(guān)聯(lián)的標(biāo)記存儲(chǔ),其中對(duì)這些標(biāo)記中的一個(gè)標(biāo)記的設(shè)置指示形成緩存線中的一條緩存線的至少一部分的數(shù)據(jù)項(xiàng)的本地副本是否是處理器核的寫(xiě)操作的操作對(duì)象。因此,當(dāng)數(shù)據(jù)項(xiàng)被存儲(chǔ)在回寫(xiě)緩存的每條緩存線中時(shí),標(biāo)記(例如,可以被設(shè)置或清除的位)可以被存儲(chǔ)在該緩存線中,對(duì)該標(biāo)記的設(shè)置指示該緩存線中的至少一個(gè)數(shù)據(jù)項(xiàng)是處理器核對(duì)非易失性存儲(chǔ)器的寫(xiě)操作的操作對(duì)象。尤其是由于所需信息的直接可用性(即,不參考該裝置中的分離的結(jié)構(gòu)),這便于實(shí)現(xiàn)以與標(biāo)識(shí)這種數(shù)據(jù)項(xiàng)相關(guān)的多種方式對(duì)回寫(xiě)緩存進(jìn)行配置。
在一些實(shí)施例中,存儲(chǔ)單元能將由處理器核發(fā)起的寫(xiě)操作的至少部分存儲(chǔ)器地址作為指示存儲(chǔ)。同樣也可以存儲(chǔ)完整的存儲(chǔ)器地址,但是顯然需要更大的存儲(chǔ)容量,部分存儲(chǔ)器地址就足夠了,只要其使得能夠標(biāo)識(shí)出回寫(xiě)緩存的緩存線中的相應(yīng)條目。
在一些實(shí)施例中,存儲(chǔ)在存儲(chǔ)單元中的指示指示回寫(xiě)緩存中存儲(chǔ)了與寫(xiě)操作相對(duì)應(yīng)的數(shù)據(jù)項(xiàng)的至少一個(gè)緩存塊。這尤其便于聯(lián)合對(duì)同一緩存塊的寫(xiě),因?yàn)槿绻耙粚?xiě)操作已對(duì)與緩存中的同一緩存塊相關(guān)的存儲(chǔ)單元進(jìn)行了寫(xiě),那么沒(méi)有必要存儲(chǔ)對(duì)該存儲(chǔ)單元的后續(xù)寫(xiě)操作的額外指示,這是因?yàn)閺幕貙?xiě)緩存到非易失性存儲(chǔ)器的清理通常逐緩存塊發(fā)生,因此針對(duì)前一寫(xiě)操作存儲(chǔ)的指示將保證后續(xù)寫(xiě)操作的清理也將發(fā)生。
在一些實(shí)施例中,處理器核還能參考頁(yè)表來(lái)確定虛擬地址到物理地址存儲(chǔ)器地址映射,該頁(yè)表中的每一條目包括指示該條目是否與預(yù)定存儲(chǔ)器地址空間相對(duì)應(yīng)的標(biāo)志,并且處理器核能使對(duì)由所述處理器核發(fā)起的對(duì)預(yù)定存儲(chǔ)器地址空間的寫(xiě)操作的指示存儲(chǔ)到存儲(chǔ)單元中。處理器核能訪問(wèn)非易失性存儲(chǔ)器之外的其它存儲(chǔ)器設(shè)備,頁(yè)表中存儲(chǔ)的額外信息可以標(biāo)識(shí)出非易失性存儲(chǔ)器提供的完整可訪問(wèn)地址空間的區(qū)域,并且使得處理器核能使存儲(chǔ)單元僅被填充有與對(duì)非易失性存儲(chǔ)器的寫(xiě)操作相關(guān)的信息。
取決于特定系統(tǒng)需求,對(duì)于對(duì)回寫(xiě)緩存中存儲(chǔ)的數(shù)據(jù)項(xiàng)的本地副本到非易失性存儲(chǔ)器的清理,可能要求不同級(jí)別的密級(jí)。這樣,在一些實(shí)施例中,處理器核能響應(yīng)于開(kāi)始指令中的編碼來(lái)暫停結(jié)束指令之后的任何指令,直到存儲(chǔ)器中的控制器確認(rèn)接收到提交從回寫(xiě)緩存向存儲(chǔ)器清理的數(shù)據(jù)項(xiàng)的本地副本的命令。因此,通過(guò)確認(rèn)緩存的數(shù)據(jù)項(xiàng)到存儲(chǔ)器的提交,可以保證非易失性存儲(chǔ)器的存儲(chǔ)器控制器已處理了由開(kāi)始指令和結(jié)束指令封裝的寫(xiě)集合。
然而,對(duì)于某些應(yīng)用,知道寫(xiě)集合在非易失性存儲(chǔ)器中已變?yōu)槌志玫氖顷P(guān)鍵的,因此,在一些實(shí)施例中,處理器核能響應(yīng)于開(kāi)始指令中的編碼來(lái)暫停結(jié)束指令之后的任何指令,直到存儲(chǔ)器中的控制器指示從回寫(xiě)緩存向存儲(chǔ)器清理的數(shù)據(jù)項(xiàng)的本地副本已被提交給存儲(chǔ)器。因此,結(jié)束指令之后的任何指令都可以被暫停,直到明確地知道(通過(guò)來(lái)自非易失性存儲(chǔ)器控制器的指示)回寫(xiě)緩存中緩存的相應(yīng)數(shù)據(jù)項(xiàng)已實(shí)際被提交給非易失性存儲(chǔ)器。
除了處理器核對(duì)結(jié)束指令的響應(yīng)之外,回寫(xiě)緩存中緩存的、與非易失性存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)項(xiàng)相關(guān)的數(shù)據(jù)項(xiàng)的清理也可以在其它時(shí)間發(fā)生,并且在一些實(shí)施例中,該裝置還能響應(yīng)于清理?xiàng)l件,使回寫(xiě)緩存中存儲(chǔ)的本地副本中的下述至少一個(gè)本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,并且清除存儲(chǔ)單元中存儲(chǔ)的對(duì)至少一個(gè)寫(xiě)操作的至少一個(gè)相應(yīng)指示,其中,所述至少一個(gè)本地副本是處理核的、對(duì)其的指示已被存儲(chǔ)到存儲(chǔ)單元中的至少一個(gè)寫(xiě)操作的操作對(duì)象。因此,可以定義一個(gè)或多個(gè)將使得回寫(xiě)緩存中的(至少部分)內(nèi)容被從回寫(xiě)緩存清理到非易失性存儲(chǔ)器的清理?xiàng)l件。
在一些實(shí)施例中,當(dāng)存儲(chǔ)單元滿時(shí),清理?xiàng)l件得到滿足。一旦存儲(chǔ)單元滿了,就不能在其中存儲(chǔ)其它指示,因此這是使得清理發(fā)生的合適情形。在該情形中,典型的是回寫(xiě)緩存中存儲(chǔ)的、在存儲(chǔ)單元中有相應(yīng)條目的任意數(shù)據(jù)項(xiàng)都將被清理到非易失性存儲(chǔ)器,盡管也可以設(shè)想僅釋放存儲(chǔ)單元的容量的一部分的部分清理。
在一些實(shí)施例中,當(dāng)回寫(xiě)緩存中存儲(chǔ)的本地副本被驅(qū)逐到存儲(chǔ)器時(shí),清理?xiàng)l件得到滿足。當(dāng)然,將該本地副本驅(qū)逐到存儲(chǔ)器將本質(zhì)上導(dǎo)致本地副本的清理,但是根據(jù)本技術(shù),僅與該被驅(qū)逐的本地副本相對(duì)應(yīng)的存儲(chǔ)單元中的相應(yīng)條目被清除,或者設(shè)想回寫(xiě)緩存中存儲(chǔ)的所有數(shù)據(jù)項(xiàng)都被清理到非易失性存儲(chǔ)器并且存儲(chǔ)單元的所有內(nèi)容都被清除的完全清理。
在一些實(shí)施例中,當(dāng)回寫(xiě)緩存中存儲(chǔ)的本地副本被緩存一致性機(jī)制偵測(cè)到并且對(duì)其的指示被存儲(chǔ)到存儲(chǔ)單元時(shí),清理?xiàng)l件得到滿足。可以以多種方式處理(由該裝置所屬的數(shù)據(jù)處理系統(tǒng)中的另一個(gè)緩存發(fā)起的)緩存一致性機(jī)制的這種偵測(cè),但是清理回寫(xiě)緩存中存儲(chǔ)的本地副本使得能夠?qū)崿F(xiàn)對(duì)偵測(cè)的相對(duì)簡(jiǎn)單的響應(yīng),指示出數(shù)據(jù)項(xiàng)現(xiàn)在是最新的。
在一些實(shí)施例中,回寫(xiě)緩存能存儲(chǔ)與回寫(xiě)緩存中存儲(chǔ)的緩存線相關(guān)聯(lián)的偵測(cè)則清理標(biāo)記,其中對(duì)偵測(cè)則清理標(biāo)記的設(shè)置指示相應(yīng)的指示被存儲(chǔ)到存儲(chǔ)單元中。偵測(cè)則清理標(biāo)記指示存儲(chǔ)了相應(yīng)的指示(即,該緩存線包含最終將需要被清理到非易失性存儲(chǔ)器的至少一個(gè)數(shù)據(jù)項(xiàng)),并且如果被偵測(cè)到則該條目應(yīng)當(dāng)被清理;偵測(cè)則清理標(biāo)記使得回寫(xiě)緩存能直接對(duì)緩存一致性機(jī)制作出的偵測(cè)作出響應(yīng),而無(wú)需另外再參考存儲(chǔ)單元來(lái)確定存儲(chǔ)單元中是否存儲(chǔ)了相應(yīng)的指示。取決于存儲(chǔ)單元的性質(zhì)和配置,這例如可能要求存儲(chǔ)單元是按內(nèi)容尋址的,或者可能要求通過(guò)存儲(chǔ)單元的迭代搜索。
然而,在其它實(shí)施例中,存儲(chǔ)單元是內(nèi)容尋址存儲(chǔ)單元,這可以便于確定特定指示(即,與回寫(xiě)緩存中存儲(chǔ)的特定數(shù)據(jù)項(xiàng)相關(guān)的)當(dāng)前是否存儲(chǔ)在存儲(chǔ)單元中。
至少一些實(shí)施例提供了一種數(shù)據(jù)處理方法,包括以下步驟:響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中所述存儲(chǔ)器是非易失性存儲(chǔ)器;運(yùn)行指令序列時(shí)在回寫(xiě)緩存中存儲(chǔ)從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本;存儲(chǔ)對(duì)在執(zhí)行數(shù)據(jù)處理操作步驟時(shí)發(fā)起的寫(xiě)操作的指示;以及通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng):使作為下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中在存儲(chǔ)本地副本的步驟中已存儲(chǔ)了對(duì)所述寫(xiě)操作的指示;以及將在存儲(chǔ)指示的步驟中存儲(chǔ)的對(duì)所述寫(xiě)操作的指示清除。
至少一些實(shí)施例提供了一種數(shù)據(jù)處理設(shè)備,包括:用于響應(yīng)于指令序列執(zhí)行數(shù)據(jù)處理操作的裝置,其中數(shù)據(jù)處理操作包括從存儲(chǔ)器取回?cái)?shù)據(jù)項(xiàng)的讀操作和向所述存儲(chǔ)器寫(xiě)數(shù)據(jù)項(xiàng)的寫(xiě)操作,其中存儲(chǔ)器是非易失性存儲(chǔ)器;用于運(yùn)行指令序列時(shí)存儲(chǔ)從存儲(chǔ)器取回和向存儲(chǔ)器寫(xiě)的數(shù)據(jù)項(xiàng)的本地副本的裝置,其中用于存儲(chǔ)的裝置具有對(duì)于存儲(chǔ)器的回寫(xiě)配置;用于存儲(chǔ)對(duì)由用于執(zhí)行數(shù)據(jù)處理操作的裝置發(fā)起的寫(xiě)操作的指示的裝置;以及用于通過(guò)以下過(guò)程來(lái)對(duì)指令序列中的結(jié)束指令作出響應(yīng)的裝置:使作為下述寫(xiě)操作的操作對(duì)象的數(shù)據(jù)項(xiàng)的本地副本被從回寫(xiě)緩存清理到存儲(chǔ)器,其中用于存儲(chǔ)本地副本的裝置已存儲(chǔ)了對(duì)所述寫(xiě)操作的指示;以及將在用于存儲(chǔ)指示的裝置中存儲(chǔ)的對(duì)寫(xiě)操作的指示清除。
圖1示意性地示出了數(shù)據(jù)處理系統(tǒng)10,數(shù)據(jù)處理系統(tǒng)10包括經(jīng)由系統(tǒng)總線14耦合到DRAM存儲(chǔ)器16和非易失性字節(jié)尋址存儲(chǔ)器18的CPU12。該DRAM存儲(chǔ)器包括DRAM控制器20和DRAM存儲(chǔ)裝置22。類似地,非易失性存儲(chǔ)器18包括非易失性存儲(chǔ)器控制器24和非易失性存儲(chǔ)裝置26。
在該示例實(shí)施例中構(gòu)成片上系統(tǒng)設(shè)備的一部分的CPU 12包括處理器核30和兩級(jí)緩存,即一級(jí)(LI)緩存32和二級(jí)(L2)緩存34。核30本身包括執(zhí)行流水線36,這里純粹為了說(shuō)明的簡(jiǎn)單和清楚起見(jiàn),僅示出了執(zhí)行流水線36的四個(gè)級(jí),即取回/解碼/發(fā)布級(jí)38,兩個(gè)執(zhí)行級(jí)40、42,以及提交級(jí)44。核30內(nèi)還提供了FIFO存儲(chǔ)單元46,F(xiàn)IFO存儲(chǔ)單元46包括FIFO控制器48和FIFO存儲(chǔ)裝置本身50。執(zhí)行流水線36的取回/解碼/發(fā)布級(jí)38被配置為識(shí)別核30從存儲(chǔ)器(例如,DRAM 16或非易失性存儲(chǔ)器18中的任一者)取回的指令序列中的指令,具體而言,參考本技術(shù),指尋求將數(shù)據(jù)項(xiàng)寫(xiě)入到非易失性字節(jié)尋址(NVBA)存儲(chǔ)器18的那些寫(xiě)指令。對(duì)于這些寫(xiě)指令,取回/解碼/發(fā)布級(jí)38向FIFO 46的控制單元38發(fā)信號(hào),通知指示該寫(xiě)指令正試圖執(zhí)行的寫(xiě)操作的條目應(yīng)當(dāng)被存儲(chǔ)在FIFO存儲(chǔ)裝置50中。在該實(shí)施例中,這對(duì)應(yīng)于寫(xiě)指令所指示的存儲(chǔ)器地址的一部分,該部分足以唯一地標(biāo)識(shí)在L1緩存32的緩存線中的相應(yīng)條目。L1緩存32被配置為具有回寫(xiě)配置,根據(jù)該回寫(xiě)配置,L1緩存32所存儲(chǔ)的經(jīng)修改數(shù)據(jù)項(xiàng)不會(huì)立即更新到最初從中取回該數(shù)據(jù)項(xiàng)的存儲(chǔ)器中,而是可以被保存在L1緩存32中達(dá)一過(guò)渡時(shí)期,直到例如保存該數(shù)據(jù)項(xiàng)的緩存線被驅(qū)逐、或者L1緩存接收到“清理”該數(shù)據(jù)項(xiàng)的明確命令、或者接收到L1緩存對(duì)作為緩存一致性機(jī)制的一部分的偵測(cè)的響應(yīng)(L1緩存32通過(guò)清理該數(shù)據(jù)項(xiàng)對(duì)偵測(cè)作出響應(yīng))。
在核30內(nèi)提供FIFO存儲(chǔ)單元46以使得數(shù)據(jù)處理系統(tǒng)10能夠特別是在面對(duì)電源故障或在系統(tǒng)崩潰的可能性的情況時(shí),在非易失性存儲(chǔ)器18中維護(hù)可靠的內(nèi)容。因?yàn)榉且资源鎯?chǔ)器18是持續(xù)性的(與DRAM 16不同),在此假定,處理器核30具有使得其軟件獲知指向非易失性存儲(chǔ)器18的某一寫(xiě)指令集的所有指令在另一寫(xiě)指令集開(kāi)始前已被提交的機(jī)制,以確保非易失性存儲(chǔ)器18中所存儲(chǔ)的數(shù)據(jù)處于一致?tīng)顟B(tài)。例如,如果處理器核30正在執(zhí)行的程序指令序列(軟件)涉及向鏈接列表的添加,則該鏈接列表的新元素必須在指向該塊的指針被更新并寫(xiě)回到非易失性存儲(chǔ)器18之前被寫(xiě)回到非易失性存儲(chǔ)器18。注意,對(duì)于諸如DRAM 16之類的易失性存儲(chǔ)器,因?yàn)镈RAM內(nèi)容是非持續(xù)的,所以由處理器核30執(zhí)行的壁壘(barrier)能夠確保這種可靠性,但是在非易失性存儲(chǔ)器18的情境下,壁壘是不足夠的,因?yàn)檫@僅確保了核流水線36的指令/執(zhí)行的某種排序。相比之下,L1緩存32和L2緩存34的操作對(duì)核30而言是透明的,因此當(dāng)處理非易失性存儲(chǔ)器和至少一個(gè)回寫(xiě)緩存(比如,在該示例中為L(zhǎng)1緩存32)時(shí),壁壘不能確保非易失性存儲(chǔ)器18的內(nèi)容的一致?tīng)顟B(tài)將一直被維持,以使得數(shù)據(jù)處理系統(tǒng)10中的電源故障或崩潰不會(huì)導(dǎo)致不一致的數(shù)據(jù)被存儲(chǔ)于此。
圖2示出了處理器核30用來(lái)將(處理器核30內(nèi)部使用的)虛擬存儲(chǔ)器地址轉(zhuǎn)換為(DRAM 16和非易失性存儲(chǔ)器18所使用的)物理存儲(chǔ)器地址的頁(yè)表。頁(yè)表中的附加標(biāo)記(在圖中標(biāo)注為NVBA-設(shè)定/非設(shè)定位)指示對(duì)應(yīng)于非易失性存儲(chǔ)器18的那些存儲(chǔ)器地址。這種對(duì)與非易失性存儲(chǔ)器相對(duì)應(yīng)的地址轉(zhuǎn)換的標(biāo)注使得處理器核30能夠標(biāo)識(shí)它在指令序列中遇到的寫(xiě)指令何時(shí)將使對(duì)非易失性存儲(chǔ)器的寫(xiě)操作被執(zhí)行。一般而言,處理器核30然后可以被配置為在FIFO 46中填入與該寫(xiě)操作相對(duì)應(yīng)的條目,盡管在這里所描述的具體實(shí)施例中,處理器核30的架構(gòu)使得,為了允許執(zhí)行對(duì)被標(biāo)記為非易失性的存儲(chǔ)器的區(qū)域的寫(xiě)操作,相應(yīng)的寫(xiě)指令可以在nvba_begin指令(nvba_開(kāi)始指令,用于標(biāo)識(shí)與該非易失性存儲(chǔ)器有關(guān)的寫(xiě)集合的開(kāi)始)后,nvba_end指令(nvba_結(jié)束指令,用于標(biāo)識(shí)與該非易失性存儲(chǔ)器有關(guān)的寫(xiě)集合的結(jié)束)前。在遇到與被標(biāo)記為NVBA的任何存儲(chǔ)器區(qū)域有關(guān)的寫(xiě)指令,但是該寫(xiě)指令不在nvba_開(kāi)始指令后且在nvba_結(jié)束指令前的情況下,處理器核30被配置為阻止該寫(xiě)指令所指定的寫(xiě)操作被執(zhí)行。這種安排防止非易失性存儲(chǔ)器遭受誤寫(xiě)(即,處理器核30執(zhí)行的指令序列中的錯(cuò)誤),否則這種誤寫(xiě)會(huì)破壞該非易失性存儲(chǔ)器。
然而,當(dāng)遇到與非易失性存儲(chǔ)器有關(guān)的寫(xiě)指令并且該寫(xiě)指令被夾在nvba_開(kāi)始指令和nvba_結(jié)束指令之間時(shí),處理器核30向FIFO控制器48和L1緩存32指示,對(duì)響應(yīng)于該寫(xiě)指令將被執(zhí)行的寫(xiě)操作的指示應(yīng)當(dāng)被添加到FIFO存儲(chǔ)裝置50。圖3中在示例配置中示出了FIFO 46,在該示例配置中FIFO存儲(chǔ)裝置50的四個(gè)條目當(dāng)前填充有對(duì)寫(xiě)操作A-D的指示。如該圖中所指示的,這些指示可以包括寫(xiě)操作的目標(biāo)存儲(chǔ)器地址(或者實(shí)際上僅部分存儲(chǔ)器地址,如果部分存儲(chǔ)器地址足以標(biāo)識(shí)L1緩存32中的響應(yīng)條目的話),或者可以替代地是示出在L1緩存32中找到相應(yīng)的條目的位置的緩存塊指示符。FIFO控制單元48維護(hù)對(duì)FIFO 46的整體控制,以根據(jù)需要管理對(duì)條目的添加和對(duì)條目的刪除(無(wú)論單獨(dú)地還是針對(duì)FIFO的整體內(nèi)容)。在要求FIFO 46對(duì)來(lái)自L1緩存的、關(guān)于L1緩存中的特定數(shù)據(jù)項(xiàng)是否在FIFO存儲(chǔ)裝置50中具有相應(yīng)的條目的查詢作出響應(yīng)的情況下,可以以內(nèi)容可尋址的方式配置FIFO存儲(chǔ)裝置50,以提供該功能。何時(shí)這樣的單獨(dú)查詢可以被接收的一個(gè)示例可以是在從L1緩存驅(qū)逐數(shù)據(jù)項(xiàng)時(shí),響應(yīng)于從L1緩存驅(qū)逐數(shù)據(jù)項(xiàng),F(xiàn)IFO控制器48可以被配置為使得FIFO存儲(chǔ)裝置50中的相應(yīng)的條目被移除??商娲?,來(lái)自L1緩存的內(nèi)容查詢可以響應(yīng)于由L1緩存作為其在緩存一致性機(jī)制中的參與的一部分接收的偵測(cè)查詢而被接收,但是如下文將參考圖4進(jìn)行描述的,L1緩存本身可以被配置為存儲(chǔ)對(duì)關(guān)于相應(yīng)的條目當(dāng)前是否被保存在FIFO 46中的指示,以避免必須向FIFO 46提供內(nèi)容尋址存儲(chǔ)器配置,從而便于作為對(duì)核30的相對(duì)較小的添加提供FIFO 46。最后,如圖3中所示,F(xiàn)IFO控制器48還被配置為監(jiān)視FIFO存儲(chǔ)裝置50是否變得被填滿(并因此將不能填充其它條目)。在FIFO存儲(chǔ)裝置50被填滿的情況下,F(xiàn)IFO控制器48向L1緩存32發(fā)送信號(hào)來(lái)表明該事實(shí),使得L1緩存中的相應(yīng)的條目然后被迅速地寫(xiě)回到非易失性存儲(chǔ)器18,并且FIFO 46的內(nèi)容被清除。
圖4示意性地示出了L1緩存32的某些更具體的細(xì)節(jié),示出了該回寫(xiě)緩存具有控制器60和多個(gè)緩存線62。緩存控制器60監(jiān)視從核30接收的控制信號(hào)和數(shù)據(jù)項(xiàng),這些控制信號(hào)是從流水線36和FIFO控制器48兩者接收的。緩存線62被配置為存儲(chǔ)處理器核在其數(shù)據(jù)處理操作中使用的數(shù)據(jù)項(xiàng),并且每個(gè)緩存線存儲(chǔ)數(shù)據(jù)項(xiàng)自身和相關(guān)聯(lián)的狀態(tài)標(biāo)記(按照通常方式,臟/有效等)。但是,請(qǐng)注意,每個(gè)緩存線的一個(gè)額外位在這里被定義為指示該緩存線包含針對(duì)NVBA存儲(chǔ)器的寫(xiě)數(shù)據(jù)項(xiàng)的專用標(biāo)記64。這可以等價(jià)地被看作是偵測(cè)則清理(clean-on-snoop)標(biāo)記,其中如果接收到來(lái)自另一緩存/CPU的偵測(cè),命中緩存線62之一,則標(biāo)記64的存在使得該緩存線被清理到NVBA存儲(chǔ)器。實(shí)際上,更一般的情況是,標(biāo)記64可被用來(lái)指示下述行:當(dāng)發(fā)生表示本地L1緩存32不再具有對(duì)該行的內(nèi)容的獨(dú)占控制的事件時(shí),應(yīng)當(dāng)被清理的行。對(duì)緩存線進(jìn)行驅(qū)逐僅是一個(gè)這樣的示例,對(duì)此,標(biāo)記64因此可被看作是驅(qū)逐即清理(clean-on-evict)標(biāo)記。在所示出的配置中,緩存控制器60被配置為監(jiān)視從數(shù)據(jù)處理裝置10的存儲(chǔ)器系統(tǒng)中的其它緩存接收的偵測(cè),并且當(dāng)接收到與緩存32的緩存線62(對(duì)于該緩存線,標(biāo)記64指示該緩存線與NVBA存儲(chǔ)器中的數(shù)據(jù)項(xiàng)有關(guān))中所存儲(chǔ)的數(shù)據(jù)項(xiàng)有關(guān)的、來(lái)自另一緩存的偵測(cè)時(shí),緩存控制器60被配置為立即使得該緩存線被驅(qū)逐。發(fā)送信號(hào)向FIFO控制器48表明該事件,以使得FIFO 46中任何相應(yīng)的內(nèi)容可以被清除。對(duì)來(lái)自另一緩存的偵測(cè)的響應(yīng)然后可以指示該偵測(cè)的數(shù)據(jù)項(xiàng)是有效的。
圖5示出了示例指令序列,該指令序列可以被圖1中所示的處理器核30執(zhí)行。該序列的第一部分(標(biāo)注為A)具有與訪問(wèn)未被存儲(chǔ)在非易失性字節(jié)尋址存儲(chǔ)器中的數(shù)據(jù)項(xiàng)的讀、寫(xiě)和數(shù)據(jù)處理指令有關(guān)的多條指令。之后是定義第一區(qū)域(寫(xiě)集合)的開(kāi)始的nvba_開(kāi)始指令,在第一區(qū)域中讀、數(shù)據(jù)處理和寫(xiě)指令(至少部分地)與非易失性字節(jié)尋址存儲(chǔ)器18中所存儲(chǔ)的數(shù)據(jù)項(xiàng)有關(guān)。第一區(qū)域(寫(xiě)集合)(標(biāo)注為B)以nvba_結(jié)束指令終止。之后是與非易失性字節(jié)尋址存儲(chǔ)器中所存儲(chǔ)的數(shù)據(jù)項(xiàng)無(wú)關(guān)的第二指令集(A)。最后,(至少部分地)與非易失性字節(jié)尋址存儲(chǔ)器18中所存儲(chǔ)的數(shù)據(jù)項(xiàng)有關(guān)的讀、數(shù)據(jù)處理和寫(xiě)指令(B)的第二區(qū)域(寫(xiě)集合)由第二nvba_開(kāi)始指令和第二nvba_結(jié)束指令來(lái)定義。提供nvba_開(kāi)始指令和nvba_結(jié)束指令使得程序員能夠定義本技術(shù)可以保持其(相對(duì)于彼此)排序的寫(xiě)集合,即使當(dāng)所訪問(wèn)的數(shù)據(jù)項(xiàng)被存儲(chǔ)在對(duì)其訪問(wèn)由回寫(xiě)緩存來(lái)進(jìn)行緩存的非易失性存儲(chǔ)器中時(shí)也如此。
圖6示出了在一個(gè)實(shí)施例中對(duì)nvba_開(kāi)始指令和nvba_結(jié)束指令的示例編碼。每條指令包括一個(gè)操作碼,該操作碼將其自定義為nvba_開(kāi)始指令或nvba_結(jié)束。另外,每條指令中的編碼空間被用于提供與本技術(shù)相關(guān)的控制信息。nvba_開(kāi)始指令包括定義清理類型的控制信息。清理類型指定當(dāng)L1緩存32將內(nèi)容清理到NVBA存儲(chǔ)器18時(shí)所要求的來(lái)自非易失性存儲(chǔ)器控制器24的響應(yīng)的類型。示出了響應(yīng)的兩種示例類型。在第一示例類型中,非易失性存儲(chǔ)器控制器可以僅告知已接收到清理內(nèi)容的命令。在第二示例類型中,非易失性存儲(chǔ)器控制器可以確認(rèn)清理命令已經(jīng)被執(zhí)行,即,該內(nèi)容在非易失性存儲(chǔ)器中已經(jīng)被更新,并且因此確保是持續(xù)性的。nvba_結(jié)束指令包括定義在nvba_結(jié)束指令完成前如何處置nvba_結(jié)束指令后的指令的控制信息??梢允遣粚?duì)這些后面的指令施加限制,但是示出了各種示例限制級(jí)別,這些限制級(jí)別指示出可使得暫停直到nvba_結(jié)束指令完成為止的多種類型的指令。如圖所示,這些指令有:全部后續(xù)nvba_開(kāi)始指令;全部后續(xù)向NVBA寫(xiě);全部后續(xù)存儲(chǔ)器操作;或全部后續(xù)指令。從而可以實(shí)現(xiàn)對(duì)由nvba_開(kāi)始指令和nvba_結(jié)束指令封裝的寫(xiě)集合的各種程度的保護(hù)。
現(xiàn)在將描述為了實(shí)現(xiàn)本技術(shù)而在一個(gè)實(shí)施例的數(shù)據(jù)處理裝置中執(zhí)行的或者可替代地在一個(gè)實(shí)施例的方法中的各個(gè)步驟。圖7-10示出了在支持本技術(shù)的各個(gè)特征數(shù)據(jù)處理裝置中正在進(jìn)行的操作和監(jiān)視的不同方面。例如,圖7示意性地示出了監(jiān)視與NVBA存儲(chǔ)器18有關(guān)的特定指令的一系列步驟。該流程被看作是開(kāi)始于步驟70,在該步驟中數(shù)據(jù)處理裝置正在執(zhí)行其指令序列。在步驟72,確定是否已經(jīng)遇到指向NVBA存儲(chǔ)器的寫(xiě)指令,該寫(xiě)指令不在nvba_開(kāi)始指令之后、nvba_結(jié)束指令之前。當(dāng)是這種情形時(shí),使從而識(shí)別出的這寫(xiě)指令不被執(zhí)行(步驟74),并且流程返回到步驟70。可以采取多種形式來(lái)不執(zhí)行該寫(xiě)指令,例如,僅抑制該指令、生成處理故障等。如果在步驟72中未識(shí)別出這樣的寫(xiě)指令,則流程直接返回到步驟70。
圖8示意性地示出了實(shí)現(xiàn)來(lái)支持寫(xiě)集合排序的一系列步驟。該流程可以被看作是開(kāi)始于步驟76,在該步驟中數(shù)據(jù)處理裝置正在執(zhí)行其指令序列。之后,在步驟78,確定是否已經(jīng)遇到nvba_開(kāi)始指令,同時(shí)先前的nvba_結(jié)束指令尚待完成。換言之,已經(jīng)發(fā)現(xiàn)指令序列中的第二寫(xiě)集合的開(kāi)始,而先前的寫(xiě)集合仍在被數(shù)據(jù)處理裝置處理的過(guò)程中。在此實(shí)施例中,為了嚴(yán)格地保證這些寫(xiě)集合的排序,當(dāng)在步驟78中滿足這樣的條件時(shí),流程進(jìn)行到步驟80,在該步驟中,新nvba_開(kāi)始指令被暫停,直到先前的nvba_結(jié)束指令已完成為止。之后,流程返回到步驟76??商娲?,如果在步驟78中不滿足該條件,則流程也返回到步驟76。
圖9示意性地示出了與L1緩存32參與的緩存一致性機(jī)制有關(guān)的一系列步驟。步驟82表示數(shù)據(jù)處理裝置正在執(zhí)行指令序列,可以認(rèn)為這些步驟的流程開(kāi)始于此。在步驟84,確定回寫(xiě)緩存32中的條目是已被選定為要被驅(qū)逐到存儲(chǔ)器還是正被緩存一致性機(jī)制偵測(cè)。在這兩種事件都未發(fā)生時(shí),流程只是返回到步驟82。然而,當(dāng)它們中的任一發(fā)生時(shí),則(在步驟86)L1緩存32中的相應(yīng)的條目被清理到存儲(chǔ)器,并且L1緩存32向FIFO控制器48發(fā)信號(hào)表明FIFO 46中的相應(yīng)的條目應(yīng)當(dāng)被清除。
圖10涉及對(duì)FIFO 46本身的監(jiān)管。在處理器核30執(zhí)行指令序列(步驟88)的過(guò)程中,在步驟90確定FIFO存儲(chǔ)裝置50是否已變滿。當(dāng)并非如此時(shí),流程只是返回到步驟88。然而,如果FIFO變滿,則流程進(jìn)行到步驟92,在該步驟中,回寫(xiě)緩存中所有在FIFO中有相應(yīng)條目的條目被清理(到非易失性存儲(chǔ)器18)并且FIFO存儲(chǔ)裝置50被清除。
圖11示出了在一個(gè)實(shí)施例的方法中執(zhí)行的一系列步驟。步驟100表示數(shù)據(jù)處理裝置正在執(zhí)行指令序列。之后,確定是否遇到指令序列中的封裝了針對(duì)NVBA的存儲(chǔ)器的寫(xiě)集合的nvba_開(kāi)始/nvba_結(jié)束指令對(duì)。當(dāng)并非如此時(shí),流程返回到步驟100。一旦識(shí)別出這樣的寫(xiě)集合,然后,在步驟104,根據(jù)nvba_開(kāi)始指令確定對(duì)于該寫(xiě)集合將要求的回寫(xiě)清理的類型。在步驟106,根據(jù)nvba_結(jié)束指令確定處理nvba_結(jié)束指令之后的指令的方式。然后(步驟108),可以執(zhí)行實(shí)質(zhì)上形成該寫(xiě)集合的指令,并且對(duì)于被配置為引起到NVBA存儲(chǔ)器的寫(xiě)操作的那些指令,在FIFO 46中添加條目并且將經(jīng)修改的數(shù)據(jù)項(xiàng)緩存到L1緩存32。一旦nvba_結(jié)束指令本身已經(jīng)被執(zhí)行(步驟110),就發(fā)起對(duì)L1緩存32中的在FIFO 46中有相應(yīng)條目的數(shù)據(jù)項(xiàng)到NVBA存儲(chǔ)器18的清理,并且清除FIFO。然后在步驟114,確定是否已經(jīng)完成所要求類型的清理(如nvba_開(kāi)始中所指定的),即,NVBA存儲(chǔ)器控制器24是否已經(jīng)確認(rèn)對(duì)清理命令的接收,或者(如果需要的話)已經(jīng)確認(rèn)清理的完成。當(dāng)并非如此時(shí),該流程經(jīng)由步驟116循環(huán),在該步驟中,使得nvba_結(jié)束指令之后的(具有nvba_結(jié)束指令中指定的類型)的指令暫停。一旦確認(rèn)了清理,該流程返回到步驟100。
雖然在此已經(jīng)參照附圖詳細(xì)描述了本發(fā)明的說(shuō)明性實(shí)施例,但是應(yīng)理解本發(fā)明不限于這些精確的實(shí)施例,并且本領(lǐng)域技術(shù)人員可以在不背離由所附權(quán)利要求限定的本發(fā)明的范圍和精神的情況下實(shí)踐各種改變、添加和修改。例如,可以在不脫離本發(fā)明的范圍的情況下,作出獨(dú)立權(quán)利要求的特征與從屬權(quán)利要求的特征的各種組合。