亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的設(shè)備控制器和方法與流程

文檔序號(hào):12167128閱讀:295來(lái)源:國(guó)知局
用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的設(shè)備控制器和方法與流程

本發(fā)明涉及用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的設(shè)備控制器和方法。



背景技術(shù):

存在希望對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的不同位置以原子的方式(atomically)執(zhí)行多個(gè)寫(xiě)事務(wù)的若干情況。例如,這可能是由于正寫(xiě)入的數(shù)據(jù)文件太大以不適合一個(gè)位置,或者是由于操作需要多個(gè)位置的更新。后一種情境的示例是當(dāng)在文件夾中創(chuàng)建新文件時(shí)。文件需要被寫(xiě)至非易失性存儲(chǔ)設(shè)備中的適當(dāng)位置,但是此外,描述放置文件的文件夾結(jié)構(gòu)的元數(shù)據(jù)也需要被更新。完成這些步驟中的一個(gè)步驟而不完成其它步驟將會(huì)導(dǎo)致文件系統(tǒng)指示存在實(shí)際上并沒(méi)有的文件,或者替換地存儲(chǔ)設(shè)備內(nèi)將存在占用空間的文件,但是由于該文件沒(méi)有被文件系統(tǒng)提及,因此該文件不可訪(fǎng)問(wèn)。

通過(guò)布置多個(gè)寫(xiě)事務(wù)以原子的方式發(fā)生,這將確保所有那些多個(gè)寫(xiě)事務(wù)都被完成或者都不完成,因此避免了由于只執(zhí)行事務(wù)的子集而導(dǎo)致非易失性數(shù)據(jù)存儲(chǔ)設(shè)備結(jié)束在未定義的狀態(tài)的可能性。

通常,一系列寫(xiě)事務(wù)將會(huì)由主機(jī)設(shè)備(例如,CPU)發(fā)起,并且主機(jī)設(shè)備之后將經(jīng)由與數(shù)據(jù)存儲(chǔ)設(shè)備相關(guān)聯(lián)的設(shè)備控制器來(lái)與非易失性數(shù)據(jù)存儲(chǔ)設(shè)備進(jìn)行通信以使得事務(wù)被執(zhí)行。當(dāng)處理上述寫(xiě)原子性問(wèn)題(write atomicity issue)時(shí),現(xiàn)有技術(shù)中通常由主機(jī)系統(tǒng)負(fù)責(zé)確保寫(xiě)事務(wù)被以原子的方式執(zhí)行,導(dǎo)致主機(jī)設(shè)備的軟件系統(tǒng)和/或文件系統(tǒng)的開(kāi)銷(xiāo)。

特別地,一種已知的方法是采用日志技術(shù)(joumaling technique),通過(guò)在實(shí)際事務(wù)被執(zhí)行之前,主機(jī)設(shè)備生成用于存儲(chǔ)在非易失性存儲(chǔ)設(shè)備上的一些日志數(shù)據(jù),以使得如果發(fā)生故障,則不一致的數(shù)據(jù)可以被發(fā)現(xiàn)并且被重新存儲(chǔ)為一致?tīng)顟B(tài)。這些日志技術(shù)導(dǎo)致生成了額外的事務(wù),其中相關(guān)聯(lián)的額外的寫(xiě)動(dòng)作在存儲(chǔ)設(shè)備內(nèi)被執(zhí)行。在日志最糟糕的情況下(從性能的角度,但是最好的情況是從可靠性的角度),為了確保準(zhǔn)確性發(fā)送兩次實(shí)際數(shù)據(jù)。然而,該方法對(duì)性能和功率有負(fù)面影響。已知的日志機(jī)制通常獨(dú)立于非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的底層技術(shù),并且形成構(gòu)成主機(jī)設(shè)備的文件系統(tǒng)的一部分。

希望提供用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的改善機(jī)制,而無(wú)需使用主機(jī)側(cè)實(shí)施的安全機(jī)制。



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

一方面,本發(fā)明提供了操作設(shè)備控制器的方法用以在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù),每一事務(wù)指定邏輯地址,方法包括:通過(guò)參考非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄來(lái)確定每一邏輯地址在數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的相應(yīng)的物理地址,創(chuàng)建針對(duì)由多個(gè)寫(xiě)事務(wù)指定的邏輯地址的地址轉(zhuǎn)換圖,并且如果地址轉(zhuǎn)換記錄中所指示的相應(yīng)的物理地址已經(jīng)包括有效數(shù)據(jù),則在地址轉(zhuǎn)換圖中將邏輯地址重新映射至新的物理地址;使用上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射來(lái)執(zhí)行上述多個(gè)寫(xiě)事務(wù);并且只有在上述多個(gè)寫(xiě)事務(wù)在上述非易失性存儲(chǔ)設(shè)備中被執(zhí)行的情況下,更新非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄以標(biāo)識(shí)上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射。

根據(jù)本發(fā)明,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備被約束為使得如果寫(xiě)事務(wù)正在執(zhí)行寫(xiě)操作以便更新數(shù)據(jù)存儲(chǔ)設(shè)備上已經(jīng)存儲(chǔ)的有效數(shù)據(jù),則在執(zhí)行寫(xiě)操作時(shí),數(shù)據(jù)存儲(chǔ)設(shè)備上之前存在的數(shù)據(jù)不被覆蓋,相反,新的數(shù)據(jù)被寫(xiě)入數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的不同的物理地址。這種約束已經(jīng)存在于若干已知的非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中,并且在本文中被稱(chēng)為不適當(dāng)?shù)?out-of-place)重寫(xiě)約束。例如,NAND閃存要求一旦一頁(yè)數(shù)據(jù)已經(jīng)被寫(xiě)入,則其在新數(shù)據(jù)可以被寫(xiě)入該頁(yè)之前必須被擦除。因此,當(dāng)針對(duì)頁(yè)內(nèi)已經(jīng)存儲(chǔ)的數(shù)據(jù)執(zhí)行寫(xiě)入時(shí),新數(shù)據(jù)通常被存儲(chǔ)在不同頁(yè)內(nèi),其中閃存維護(hù)操作之后被執(zhí)行以將當(dāng)前不存在的數(shù)據(jù)無(wú)效并擦除。根據(jù)本發(fā)明,當(dāng)開(kāi)發(fā)用于以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的新事務(wù)序列協(xié)議時(shí),該不適當(dāng)?shù)闹貙?xiě)請(qǐng)求被使用,如果多個(gè)寫(xiě)事務(wù)例如由于系統(tǒng)故障未完成,則該新的事務(wù)序列協(xié)議允許數(shù)據(jù)存儲(chǔ)設(shè)備上的狀態(tài)之后退回至多個(gè)寫(xiě)事務(wù)之前存在的狀態(tài)。

特別地,根據(jù)本發(fā)明,為由多個(gè)寫(xiě)事務(wù)所指定的邏輯地址創(chuàng)建地址轉(zhuǎn)換圖。為了執(zhí)行該操作,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄被參考以確定每一邏輯地址在數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)相應(yīng)的物理地址。如果地址轉(zhuǎn)換記錄中所指示的相應(yīng)的物理地址已經(jīng)包括有效數(shù)據(jù),則在創(chuàng)建地址轉(zhuǎn)換圖時(shí),在地址轉(zhuǎn)換圖中相關(guān)聯(lián)的邏輯地址被重新映射至新物理地址。然而,在該階段,不執(zhí)行對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄的更新。

替換地,之后使用至地址轉(zhuǎn)換圖中的信息來(lái)執(zhí)行多個(gè)寫(xiě)事務(wù),并且只有在全部那些多個(gè)寫(xiě)事務(wù)已經(jīng)被執(zhí)行的情況下,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄之后才被更新。

因此,如果任何事件導(dǎo)致被要求以原子的方式執(zhí)行的全部多個(gè)寫(xiě)事務(wù)沒(méi)有被全部完成,則非易失性存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄將會(huì)仍然正確地針對(duì)多個(gè)寫(xiě)事務(wù)被執(zhí)行之前存在的、非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上的數(shù)據(jù)的狀態(tài)來(lái)提供正確的邏輯地址至物理地址的映射。此外,由于非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的不適當(dāng)?shù)闹貙?xiě)屬性,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上的之前存儲(chǔ)的狀態(tài)將不會(huì)在執(zhí)行多個(gè)寫(xiě)事務(wù)期間被物理地重寫(xiě),并且因此,如果多個(gè)寫(xiě)事務(wù)的原子性被阻止,則可能使用非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄來(lái)退回至數(shù)據(jù)存儲(chǔ)設(shè)備之前的狀態(tài)。

存在若干種方式,可以以該方式維護(hù)關(guān)于多個(gè)寫(xiě)事務(wù)的信息以便使得之后能夠檢測(cè)到那些多個(gè)寫(xiě)事務(wù)不能夠被以原子的方式執(zhí)行的狀況。在一個(gè)實(shí)施例中,方法還包括:在執(zhí)行多個(gè)寫(xiě)事務(wù)之前,執(zhí)行意圖保存操作以在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的區(qū)域內(nèi)存儲(chǔ)標(biāo)識(shí)將被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)的意圖信息以及所述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射。

因此,這將在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上提供旨在被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)的記錄,并且該信息之后可以被參考以便確定寫(xiě)事務(wù)事實(shí)上是否已經(jīng)被以原子的方式執(zhí)行。特別地,由于只有在所有多個(gè)寫(xiě)事務(wù)已經(jīng)被執(zhí)行的情況下,非易失性存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄才會(huì)被更新,因此如果寫(xiě)事務(wù)已經(jīng)被以原子的方式執(zhí)行,則對(duì)地址轉(zhuǎn)換記錄的這種更新才會(huì)發(fā)生。如果某一事件已經(jīng)阻止了寫(xiě)事務(wù)被以原子的方式執(zhí)行,則在非易失性存儲(chǔ)設(shè)備中所存儲(chǔ)的地址轉(zhuǎn)換記錄中的信息和經(jīng)由上述意圖保存操作所保存的信息之間將存在某種失配。

在一個(gè)實(shí)施例中,意圖保存操作作為寫(xiě)事務(wù)被執(zhí)行,該寫(xiě)事務(wù)比將被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)優(yōu)先級(jí)高。這確保了在一系列實(shí)際的寫(xiě)事務(wù)開(kāi)始之前,標(biāo)識(shí)將被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)的信息被寫(xiě)入非易失性存儲(chǔ)設(shè)備。

關(guān)于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的哪個(gè)地方保存意圖信息存在各種選項(xiàng)。在一個(gè)實(shí)施例中,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備包括主非易失性存儲(chǔ)單元和被配置為在將數(shù)據(jù)寫(xiě)入主非易失性存儲(chǔ)單元之前緩沖數(shù)據(jù)的非易失性緩存,并且存儲(chǔ)意圖信息的非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的上述區(qū)域在上述非易失性緩存內(nèi)。在數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)提供非易失性緩存的實(shí)施例中,將意圖信息存儲(chǔ)在非易失性緩存內(nèi)避免了僅為了存儲(chǔ)意圖信息而需要主非易失性存儲(chǔ)單元內(nèi)直接執(zhí)行任意寫(xiě)操作。由于意圖信息只是暫時(shí)令人關(guān)注的,因此這有益于允許確定寫(xiě)事務(wù)還未被以原子的方式執(zhí)行的情況。通常,期望寫(xiě)事務(wù)將被以原子的方式執(zhí)行,并且地址轉(zhuǎn)換記錄之后將隨著寫(xiě)事務(wù)的性能而被更新。一旦該過(guò)程完成,則數(shù)據(jù)存儲(chǔ)設(shè)備的狀態(tài)將正確地反映由多個(gè)寫(xiě)事務(wù)所更新的數(shù)據(jù),并且相應(yīng)地,此時(shí)將不再需要意圖信息。

在一個(gè)實(shí)施例中,在執(zhí)行多個(gè)寫(xiě)事務(wù)之前所創(chuàng)建的地址轉(zhuǎn)換圖被存儲(chǔ)在與設(shè)備控制器相關(guān)聯(lián)的易失性存儲(chǔ)設(shè)備中,當(dāng)執(zhí)行多個(gè)寫(xiě)事務(wù)時(shí)供設(shè)備控制器參考。這確保了設(shè)備控制器所需要的用以執(zhí)行多個(gè)寫(xiě)事務(wù)的信息已經(jīng)是可用的,而無(wú)需為了獲得用于寫(xiě)事務(wù)所需要的地址映射來(lái)從非易失性數(shù)據(jù)存儲(chǔ)設(shè)備執(zhí)行任意讀操作。

在一個(gè)實(shí)施例中,垃圾收集過(guò)程被用于將非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上所維持的任意廢棄(out of date)數(shù)據(jù)無(wú)效。然而,根據(jù)一個(gè)實(shí)施例,將垃圾收集過(guò)程激活的步驟跟隨更新非易失性存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄的步驟。通過(guò)確保直到地址轉(zhuǎn)換記錄被更新之后垃圾收集過(guò)程才被激活,以及假定直到所有多個(gè)寫(xiě)事務(wù)已被執(zhí)行(即,寫(xiě)事務(wù)已被以原子的方式地正確執(zhí)行)地址轉(zhuǎn)換記錄才被更新,這確保了在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)沒(méi)有數(shù)據(jù)被無(wú)效,直到已知無(wú)需退回該數(shù)據(jù)(因?yàn)橐阎鄠€(gè)寫(xiě)事務(wù)已經(jīng)如所期望的那樣被以原子的方式正確執(zhí)行)。

在一個(gè)實(shí)施例中,設(shè)備控制器從主機(jī)實(shí)體接收多個(gè)寫(xiě)事務(wù),主機(jī)實(shí)體向設(shè)備控制器標(biāo)識(shí)多個(gè)寫(xiě)事務(wù)將以原子的方式被處理。因此,主機(jī)實(shí)體決定了多個(gè)寫(xiě)事務(wù)將被以原子的方式處理。然而,對(duì)比于現(xiàn)有技術(shù),根據(jù)本發(fā)明,主機(jī)實(shí)體本身不需要采取任何措施來(lái)試圖確保事務(wù)被以原子的方式執(zhí)行。替換地,當(dāng)與數(shù)據(jù)存儲(chǔ)設(shè)備進(jìn)行通信時(shí),由設(shè)備控制器所執(zhí)行的上述一系列步驟確保了寫(xiě)事務(wù)將被以原子的方式執(zhí)行,否則,如果事件阻止其發(fā)生,則數(shù)據(jù)存儲(chǔ)設(shè)備的之前的狀態(tài)可以被可靠地獲取,因此允許退回至其之前的狀態(tài)。

在檢測(cè)到可能已經(jīng)發(fā)生不完全轉(zhuǎn)換的情況下,使得多個(gè)寫(xiě)事務(wù)可能未被以原子的方式執(zhí)行,那么觸發(fā)情況可能被喚起以執(zhí)行某些檢查。例如,這種觸發(fā)情況可能在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上執(zhí)行重啟過(guò)程期間被自動(dòng)生成,因?yàn)榭赡苡捎谙到y(tǒng)內(nèi)的一些故障或者功率損失發(fā)生重啟,并且因此這為檢查多個(gè)寫(xiě)事務(wù)是否已經(jīng)被以原子的方式執(zhí)行提供了合適的情況。然而,應(yīng)該認(rèn)識(shí)到,還可能在預(yù)計(jì)可能需要恢復(fù)過(guò)程的其他情況下喚起觸發(fā)情況。

在一個(gè)實(shí)施例中,響應(yīng)于這種觸發(fā)情況,方法包括執(zhí)行以下步驟:從非易失性存儲(chǔ)設(shè)備獲得地址轉(zhuǎn)換表和意圖信息;并且針對(duì)意圖信息中所標(biāo)識(shí)的每一寫(xiě)事務(wù)來(lái)確定由意圖信息所指示的邏輯地址至物理地址的映射是否與地址轉(zhuǎn)換表中的邏輯地址至物理地址的映射相匹配。

如上所述,如果寫(xiě)事務(wù)以原子的方式完成,則預(yù)計(jì)當(dāng)前所存儲(chǔ)的意圖信息將與地址轉(zhuǎn)換表中所維持的信息相匹配。然而,如果在執(zhí)行一系列寫(xiě)事務(wù)期間存在阻止那些事務(wù)以原子的方式完成的任意中斷,則地址轉(zhuǎn)換記錄將不會(huì)被更新,并且因此在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備上所存儲(chǔ)的地址轉(zhuǎn)換記錄中的信息和所存儲(chǔ)的意圖信息之間將會(huì)存在失配。

因此,在一個(gè)實(shí)施例中,針對(duì)意圖信息中所標(biāo)識(shí)的任意寫(xiě)事務(wù),如果由意圖信息所指示的邏輯地址至物理地址的映射與地址轉(zhuǎn)換表中的邏輯地址至物理地址的映射不匹配,則方法還包括以下步驟:將針對(duì)意圖信息中的每一寫(xiě)事務(wù)所標(biāo)識(shí)的物理地址處的數(shù)據(jù)無(wú)效。因此,這使得由之前被要求以原子的方式執(zhí)行的多個(gè)事務(wù)內(nèi)的任意事務(wù)所寫(xiě)入的數(shù)據(jù)無(wú)效。此外,由于地址轉(zhuǎn)換記錄將不會(huì)被更新,因此在那些多個(gè)寫(xiě)事務(wù)被發(fā)起之前,其將仍然正確地反映數(shù)據(jù)存儲(chǔ)設(shè)備的狀態(tài)。

在一個(gè)實(shí)施例中,在數(shù)據(jù)被有效地退回至之前狀態(tài)的這種情況下,隨后向主機(jī)實(shí)體發(fā)布提供以下指示的通知:多個(gè)寫(xiě)事務(wù)還未被執(zhí)行。這使得主機(jī)能夠采取適當(dāng)?shù)膭?dòng)作,例如重新嘗試執(zhí)行多個(gè)寫(xiě)事務(wù)。

在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備除了主非易失性存儲(chǔ)單元之外還包括非易失性緩存的某些實(shí)施例中,則在一個(gè)實(shí)施例中,執(zhí)行多個(gè)寫(xiě)事務(wù)的步驟可以包括:最初將每一寫(xiě)事務(wù)的數(shù)據(jù)寫(xiě)入非易失性緩存,并且隨后將來(lái)自非易失性緩存的每一寫(xiě)事務(wù)的數(shù)據(jù)存入由地址轉(zhuǎn)換圖所指定的物理地址處的主非易失性存儲(chǔ)單元中。

從耗損平衡和性能的角度,在實(shí)際將數(shù)據(jù)提交至主非易失性存儲(chǔ)單元之前將數(shù)據(jù)緩存可能是有吸引力的,特別是在要被寫(xiě)入的數(shù)據(jù)本身可能將在數(shù)據(jù)被提交至主非易失性存儲(chǔ)單元之前被更新的情況下,由于在該情況下,可減少主非易失性存儲(chǔ)單元內(nèi)所執(zhí)行的寫(xiě)操作的數(shù)量。然而,這些情況下需要注意的是,如果事務(wù)不能夠被以原子的方式執(zhí)行,則可能退回至正確的狀態(tài)。

在一個(gè)實(shí)施例中,多個(gè)寫(xiě)事務(wù)形成第一原子寫(xiě)序列,并且設(shè)備控制器被請(qǐng)求執(zhí)行包括第二多個(gè)寫(xiě)事務(wù)的第二原子寫(xiě)序列。針對(duì)上述問(wèn)題,如果多個(gè)第二寫(xiě)事務(wù)中的至少一個(gè)指定了與還未將數(shù)據(jù)存儲(chǔ)在主非易失性存儲(chǔ)單元內(nèi)的第一原子寫(xiě)序列的寫(xiě)事務(wù)相關(guān)聯(lián)的邏輯地址,則第一和第二原子寫(xiě)序列被合并為單個(gè)原子寫(xiě)序列,以使得被寫(xiě)入非易失性緩存的數(shù)據(jù)表示單個(gè)原子寫(xiě)序列。

此外,在一個(gè)實(shí)施例中,方法還包括:在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的區(qū)域內(nèi)對(duì)標(biāo)識(shí)將被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)的意圖信息以及上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射進(jìn)行更新,以使得意圖信息反映單個(gè)原子寫(xiě)序列。

此外,在一個(gè)實(shí)施例中,對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄進(jìn)行更新的步驟只在經(jīng)合并的單個(gè)原子寫(xiě)序列的寫(xiě)事務(wù)已經(jīng)被執(zhí)行之后才被執(zhí)行。

通過(guò)以上步驟,在事件將操作的原子性中斷的情況下,系統(tǒng)能夠退回兩個(gè)完整的狀態(tài),即退回至執(zhí)行第一原子寫(xiě)序列或者第二原子寫(xiě)序列之前存在的狀態(tài)。其將仍然是穩(wěn)定的狀態(tài),并且因此系統(tǒng)可以恢復(fù)到可行的環(huán)境。

當(dāng)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備被頻繁使用時(shí),合并原子寫(xiě)序列的上述技術(shù)可能長(zhǎng)時(shí)間地推遲非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄的更新,有可能幾乎無(wú)限期地推遲。然而,期望避免這種情況發(fā)生,并且在一個(gè)實(shí)施例中,通過(guò)對(duì)可以被合并的原子寫(xiě)序列的數(shù)量設(shè)置上限來(lái)實(shí)現(xiàn)。因此,在達(dá)到上限的情況下,在允許進(jìn)一步的原子寫(xiě)序列被執(zhí)行之前,設(shè)備控制器使得當(dāng)前經(jīng)合并的原子寫(xiě)序列完成,并且對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄進(jìn)行更新。

為了實(shí)現(xiàn)相同的效果,還可以提供預(yù)定的命令而不是等待達(dá)到上限。因此,在這些實(shí)施例中,響應(yīng)于該預(yù)定的命令,在允許進(jìn)一步的原子寫(xiě)序列被執(zhí)行之前,設(shè)備控制器使得當(dāng)前經(jīng)合并的原子寫(xiě)序列完成,并且對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄進(jìn)行更新。因此,該預(yù)定的命令可以被用于確保設(shè)備間的狀態(tài)同步。只有在所有之前的事務(wù)已經(jīng)完成的情況下,命令才會(huì)被確認(rèn),并且特別地寫(xiě)數(shù)據(jù)被寫(xiě)入非易失性數(shù)據(jù)存儲(chǔ)設(shè)備。

非易失性數(shù)據(jù)存儲(chǔ)設(shè)備可以采取各種形式,但是在一個(gè)實(shí)施例中,非易失性數(shù)據(jù)存儲(chǔ)設(shè)備是包括若干存儲(chǔ)模塊的閃存存儲(chǔ)設(shè)備,每一存儲(chǔ)模塊包括一個(gè)或多個(gè)存儲(chǔ)頁(yè)。閃存存儲(chǔ)設(shè)備是具有上述不適當(dāng)?shù)闹貙?xiě)屬性的存儲(chǔ)設(shè)備的示例,并且因此上述技術(shù)可能已經(jīng)在該閃存存儲(chǔ)設(shè)備內(nèi)被使用。

第二方面,本發(fā)明提供了用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的設(shè)備控制器,每一事務(wù)指定邏輯地址,設(shè)備控制器包括:地址轉(zhuǎn)換圖生成電路,其被配置為通過(guò)參考非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄來(lái)確定每一邏輯地址在數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的相應(yīng)的物理地址,創(chuàng)建針對(duì)由多個(gè)寫(xiě)事務(wù)指定的邏輯地址的地址轉(zhuǎn)換圖,如果地址轉(zhuǎn)換記錄中所指示的相應(yīng)的物理地址已經(jīng)包括有效數(shù)據(jù),則地址轉(zhuǎn)換圖生成電路還被配置為在地址轉(zhuǎn)換圖中將邏輯地址重新映射至上述新物理地址;事務(wù)控制電路,其被配置為使用上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射來(lái)執(zhí)行上述多個(gè)寫(xiě)事務(wù);以及地址轉(zhuǎn)換記錄更新電路,其被配置為只有在上述非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的上述多個(gè)寫(xiě)事務(wù)已經(jīng)被執(zhí)行的情況下,才更新非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄以標(biāo)識(shí)上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射。

同時(shí),在一個(gè)實(shí)施例中,設(shè)備控制器可以由被用于控制對(duì)非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的訪(fǎng)問(wèn)的專(zhuān)用硬件形成,在替換實(shí)施例中,設(shè)備控制器可以通過(guò)在通用處理器(例如,CPU)上運(yùn)行的軟件來(lái)實(shí)現(xiàn)。因此,根據(jù)第三方面,本發(fā)明提供包括計(jì)算機(jī)程序的計(jì)算機(jī)程序產(chǎn)品,當(dāng)該計(jì)算機(jī)程序在計(jì)算機(jī)上執(zhí)行時(shí),使得計(jì)算機(jī)執(zhí)行根據(jù)本發(fā)明的第一方面的方法。在一個(gè)實(shí)施例中,計(jì)算機(jī)程序產(chǎn)品以非暫態(tài)的形式存儲(chǔ)程序。

第四方面,本發(fā)明提供了用于在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)以原子的方式執(zhí)行多個(gè)寫(xiě)事務(wù)的設(shè)備控制器,每一事務(wù)指定邏輯地址,設(shè)備控制器包括:地址轉(zhuǎn)換圖生成裝置用于通過(guò)參考非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄來(lái)確定每一邏輯地址在數(shù)據(jù)存儲(chǔ)設(shè)備內(nèi)的相應(yīng)的物理地址,創(chuàng)建針對(duì)由多個(gè)寫(xiě)事務(wù)指定的邏輯地址的地址轉(zhuǎn)換圖,如果地址轉(zhuǎn)換記錄中所指示的相應(yīng)的物理地址已經(jīng)包括有效數(shù)據(jù),則地址轉(zhuǎn)換圖生成裝置還被配置為在地址轉(zhuǎn)換圖中將邏輯地址重新映射至上述新物理地址;事務(wù)控制裝置以用于使用上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射來(lái)執(zhí)行上述多個(gè)寫(xiě)事務(wù);以及地址轉(zhuǎn)換記錄更新裝置以用于只有在上述非易失性存儲(chǔ)設(shè)備中的上述多個(gè)寫(xiě)事務(wù)已經(jīng)被執(zhí)行的情況下,才更新非易失性數(shù)據(jù)存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換記錄以標(biāo)識(shí)上述地址轉(zhuǎn)換圖中的邏輯地址至物理地址的映射。

附圖說(shuō)明

本發(fā)明將只以示例的方式參考附圖中所示的其實(shí)施例被進(jìn)一步描述,其中:

圖1A是根據(jù)第一實(shí)施例示出系統(tǒng)的框圖;

圖1B是根據(jù)替換實(shí)施例示出系統(tǒng)的框圖;

圖1C根據(jù)一個(gè)實(shí)施例示意性地示出了圖1A或圖1B的閃存存儲(chǔ)設(shè)備的布置。

圖2是根據(jù)一個(gè)實(shí)施例更詳細(xì)地示出圖1A或圖1B的閃存控制器的操作的框圖;

圖3是根據(jù)一個(gè)實(shí)施例的事務(wù)流的序列圖;

圖4是根據(jù)一個(gè)實(shí)施例,示出當(dāng)主機(jī)設(shè)備具有需要被以原子的方式執(zhí)行的多個(gè)更新時(shí)由主機(jī)設(shè)備所執(zhí)行的步驟的流程圖;

圖5是根據(jù)一個(gè)實(shí)施例,示出當(dāng)以原子的方式處理多個(gè)更新時(shí),由存儲(chǔ)設(shè)備控制器(例如,圖1A或圖1B的閃存控制器)所執(zhí)行的步驟的流程圖;

圖6是根據(jù)一個(gè)實(shí)施例,示出在啟動(dòng)閃存設(shè)備時(shí)或者在出于任意其他原因發(fā)起恢復(fù)過(guò)程時(shí)所執(zhí)行的步驟的流程圖;

圖7A示出了寫(xiě)數(shù)據(jù)在被寫(xiě)入閃存設(shè)備之前被緩存在非易失性RAM內(nèi)的實(shí)施例;

圖7B根據(jù)一個(gè)實(shí)施例,示出了圖7A的方法,但是其中兩個(gè)原子事務(wù)序列被合并;以及

圖8A和圖8B是根據(jù)一個(gè)實(shí)施例,意圖保存信息還被提交至閃存存儲(chǔ)設(shè)備的圖7A和圖7B的版本。

具體實(shí)施方式

圖1A是根據(jù)一個(gè)實(shí)施例的系統(tǒng)的框圖。在該實(shí)施例中,假定非易失性數(shù)據(jù)存儲(chǔ)設(shè)備20采取被管理的存儲(chǔ)設(shè)備的形式,其中其自己的內(nèi)部設(shè)備控制器25用于控制至非易失性存儲(chǔ)設(shè)備30的寫(xiě)事務(wù)的執(zhí)行。在該具體示例中,假定非易失性存儲(chǔ)設(shè)備30是非易失性閃存存儲(chǔ)設(shè)備,并且相應(yīng)地設(shè)備控制器25是閃存控制器。閃存存儲(chǔ)器通常由NAND設(shè)備形成,并且被布置為多個(gè)模塊,例如,圖1C中所示的閃存存儲(chǔ)設(shè)備70的塊72、73、74、75、76。在每一塊內(nèi),存在多個(gè)頁(yè)82、84、86。

NAND閃存存儲(chǔ)器是頁(yè)可讀的并且可編程的。讀動(dòng)作通常比寫(xiě)動(dòng)作少十倍。此外,一旦頁(yè)被寫(xiě)入,則其在新數(shù)據(jù)可以再次被寫(xiě)入該頁(yè)之前必須被擦除,并且因此,如果數(shù)據(jù)文件需要被更新,則文件(或者其一部分)通常在閃存盤(pán)上被物理地移除,盡管邏輯地址可以保持不變。因此,新數(shù)據(jù)之后通常將被寫(xiě)入不同的頁(yè)。同時(shí),廢棄的數(shù)據(jù)之后將仍然物理地駐留于盤(pán)上,閃存維護(hù)操作(例如,垃圾收集和耗損平衡)在閃存盤(pán)中被執(zhí)行以將廢棄的數(shù)據(jù)無(wú)效并隨后擦除(在被管理的存儲(chǔ)設(shè)備(例如,被管理的存儲(chǔ)設(shè)備20)的情況下由設(shè)備本身進(jìn)行無(wú)效和擦除,或者在如之后參考圖1B所討論的未被管理的存儲(chǔ)設(shè)備的示例中由在主機(jī)端上進(jìn)行操作的主機(jī)軟件進(jìn)行無(wú)效和擦除)。該維護(hù)功能通常被捆綁在被稱(chēng)為閃存轉(zhuǎn)換層(FTL)的抽象層中。

本文中將以下動(dòng)作稱(chēng)為不適當(dāng)?shù)闹貙?xiě):將經(jīng)更新的數(shù)據(jù)寫(xiě)入閃存存儲(chǔ)器內(nèi)新的物理位置,而不是在執(zhí)行寫(xiě)操作時(shí)直接重寫(xiě)數(shù)據(jù)之前的版本。如之后將更詳細(xì)討論的,當(dāng)在閃存存儲(chǔ)設(shè)備和閃存控制器之間提供事務(wù)序列協(xié)議時(shí)可以利用閃存存儲(chǔ)器的該屬性該事務(wù)序列協(xié)議允許一系列寫(xiě)事務(wù)以原子的方式被執(zhí)行并允許檢測(cè)和退回機(jī)制被合并以處理寫(xiě)事務(wù)未被以原子的方式執(zhí)行(例如,由于中斷一系列事務(wù)的系統(tǒng)故障等)的情況。

在NAND閃存存儲(chǔ)器中,擦除動(dòng)作還通常必須以塊為基礎(chǔ)來(lái)執(zhí)行,其中,一個(gè)塊包括多個(gè)頁(yè)(如圖1C中所顯而易見(jiàn)的)。將經(jīng)更新的數(shù)據(jù)寫(xiě)入新頁(yè)的動(dòng)作以及之后標(biāo)記為無(wú)效廢棄數(shù)據(jù)的相關(guān)聯(lián)的閃存維護(hù)操作,可以被用于允許閃存存儲(chǔ)設(shè)備的整個(gè)塊隨時(shí)間達(dá)到其不再包括任意有效數(shù)據(jù)的狀態(tài),隨后其可以被擦除,騰出該塊的頁(yè)以再次被用于隨后的寫(xiě)操作。

回到圖1A,假定CPU 10希望發(fā)起需要被管理的存儲(chǔ)設(shè)備20來(lái)以原子的方式執(zhí)行的一系列寫(xiě)事務(wù)。如后面將更詳細(xì)討論的,主機(jī)設(shè)備CPU將通過(guò)路徑17向被管理的存儲(chǔ)設(shè)備20發(fā)布存在將被以原子的方式執(zhí)行的一系列被捆綁的事務(wù)的指示,其之后將使得閃存控制器25從事例如之后參考圖5所討論的一系列特定操作。這將包括將某些控制信息存儲(chǔ)在閃存控制器本地的易失性存儲(chǔ)設(shè)備35中,以允許閃存控制器執(zhí)行被要求以原子的方式執(zhí)行的各種寫(xiě)事務(wù)中的每一寫(xiě)事務(wù)。被管理的存儲(chǔ)設(shè)備20可以可選地包括某一緩存存儲(chǔ)設(shè)備40,并且通常在提供該緩存存儲(chǔ)設(shè)備的情況下,其作為非易失性的緩存存儲(chǔ)設(shè)備(例如,NVRAM)被提供,例如通過(guò)使用備份電源來(lái)維持緩存內(nèi)的狀態(tài)。

當(dāng)構(gòu)建用于轉(zhuǎn)換給被管理的存儲(chǔ)設(shè)備的寫(xiě)事務(wù)時(shí),CPU可以將事務(wù)數(shù)據(jù)寫(xiě)入與CPU相關(guān)聯(lián)的系統(tǒng)的主機(jī)側(cè)上所提供的隨機(jī)存取存儲(chǔ)器(RAM)15中。在執(zhí)行一系列寫(xiě)事務(wù)期間,無(wú)論是以什么方式和在什么時(shí)候需要,閃存控制器之后都可以從RAM獲取數(shù)據(jù)。如之后將更詳細(xì)討論的,在一個(gè)實(shí)施例中,數(shù)據(jù)可以由閃存控制器直接寫(xiě)入非易失性閃存存儲(chǔ)設(shè)備中,但在提供可選的緩存的情況下,其可以首先被存儲(chǔ)在緩存40內(nèi),并且隨后被從緩存寫(xiě)入非易失性閃存存儲(chǔ)設(shè)備30中。當(dāng)一系列事務(wù)已經(jīng)完成時(shí),閃存控制器25通常將確認(rèn)發(fā)布回CPU 10。確認(rèn)信號(hào)的準(zhǔn)確時(shí)序可以依據(jù)實(shí)施例而改變。

雖然在圖1A中考慮的是具有其自己的閃存控制器25的被管理的存儲(chǔ)設(shè)備20,在替換實(shí)施例中,未被管理的存儲(chǔ)設(shè)備50可以被使用,如圖1B所示。在該實(shí)施例中,閃存控制器通常采取在CPU 10上執(zhí)行的軟件的形式,例如圖1B中所示的閃存控制器60所指示的。此外,閃存控制器將訪(fǎng)問(wèn)某一本地易失性存儲(chǔ)設(shè)備65。雖然在該實(shí)施例中閃存控制器由CPU上所執(zhí)行的軟件形成,其仍然可以被認(rèn)為是被包含在系統(tǒng)的設(shè)備側(cè)內(nèi),如圖1B中虛線(xiàn)所示。

圖2是根據(jù)一個(gè)實(shí)施例,詳細(xì)地示出圖1A的閃存控制器內(nèi)所提供的組件的框圖。閃存控制器100包括用于控制所要求的一系列事務(wù)的事務(wù)控制電路110。事務(wù)控制電路110與主機(jī)設(shè)備(例如,圖1A的CPU 10)進(jìn)行通信以便獲得將被執(zhí)行的事務(wù)的細(xì)節(jié),以及確認(rèn)完成了哪些事務(wù)。在執(zhí)行事務(wù)期間,事務(wù)控制電路將會(huì)將各種控制信號(hào)發(fā)布至閃存控制器內(nèi)的其他組件。具體地,地址轉(zhuǎn)換圖生成電路115被用于針對(duì)由形成將被以原子的方式執(zhí)行的一組寫(xiě)事務(wù)的每一寫(xiě)事務(wù)所指定的邏輯地址來(lái)生成地址轉(zhuǎn)換圖。

為了這么做,地址轉(zhuǎn)換圖生成電路115參考閃存存儲(chǔ)設(shè)備105內(nèi)所維持的將邏輯地址映射至包括與那些邏輯地址相關(guān)聯(lián)的數(shù)據(jù)的物理地址的地址轉(zhuǎn)換記錄130。如果地址轉(zhuǎn)換圖生成電路確定了在該過(guò)程期間,地址轉(zhuǎn)換記錄中所指示的相應(yīng)的物理地址已經(jīng)包括有效數(shù)據(jù),則地址轉(zhuǎn)換圖生成電路在地址轉(zhuǎn)換圖中將邏輯地址重新映射至新的有效的物理地址。然而,此時(shí),不更新閃存存儲(chǔ)設(shè)備內(nèi)所維持的地址轉(zhuǎn)換記錄130。替換地,地址轉(zhuǎn)換圖的本地副本被存儲(chǔ)在閃存控制器100的易失性存儲(chǔ)設(shè)備120內(nèi),以在將各種寫(xiě)事務(wù)發(fā)布至閃存存儲(chǔ)設(shè)備105時(shí)供事務(wù)控制電路110使用。

特別地,針對(duì)每一寫(xiě)事務(wù),事務(wù)控制電路會(huì)將命令發(fā)布至閃存存儲(chǔ)設(shè)備以使得寫(xiě)數(shù)據(jù)被寫(xiě)入由易失性存儲(chǔ)設(shè)備120內(nèi)的邏輯地址至物理地址的映射所標(biāo)識(shí)的物理存儲(chǔ)位置。只有在所有事務(wù)都已被處理的情況下,事務(wù)控制電路之后才會(huì)使得地址轉(zhuǎn)換記錄更新電路125更新閃存存儲(chǔ)設(shè)備105內(nèi)的地址轉(zhuǎn)換記錄130。特別地,此時(shí),易失性存儲(chǔ)設(shè)備120中的地址轉(zhuǎn)換圖中所維持的信息可以被合并在地址轉(zhuǎn)換記錄內(nèi),以便生成存儲(chǔ)在閃存存儲(chǔ)設(shè)備105內(nèi)的經(jīng)更新的轉(zhuǎn)換記錄130。

雖然在圖2中地址轉(zhuǎn)換記錄130被示為閃存存儲(chǔ)設(shè)備105內(nèi)所存儲(chǔ)的離散的數(shù)據(jù)塊,在替換實(shí)施例中,地址轉(zhuǎn)換記錄130被替代地由與閃存存儲(chǔ)設(shè)備內(nèi)的每一閃存頁(yè)相關(guān)聯(lián)地存儲(chǔ)的額外數(shù)據(jù)位來(lái)形成,而不是所有地址轉(zhuǎn)換記錄信息被存儲(chǔ)為閃存存儲(chǔ)設(shè)備內(nèi)的物理上分開(kāi)的記錄。

雖然圖2示出了圖1A中的閃存控制器25內(nèi)所提供的電路組件,應(yīng)該認(rèn)識(shí)到,根據(jù)圖1B的閃存控制器的軟件實(shí)現(xiàn)方式,圖2內(nèi)的各個(gè)塊可以由CPU 10上運(yùn)行的合適的軟件例程實(shí)現(xiàn)。

圖3是根據(jù)第一實(shí)施例示出事務(wù)流的序列圖。如圖3所示,某些通信發(fā)生在主機(jī)200和閃存控制器205之間,并且此外,通信還發(fā)生在閃存控制器205和實(shí)際閃存存儲(chǔ)設(shè)備210之間。首先,如箭頭215所示,主機(jī)將會(huì)將捆綁指示發(fā)送至閃存控制器,該捆綁指示標(biāo)識(shí)了存在主機(jī)要求以原子的方式發(fā)生的一系列寫(xiě)事務(wù)。主機(jī)之后將對(duì)事務(wù)數(shù)據(jù)進(jìn)行排隊(duì),如塊220所示。例如,這可以通過(guò)主機(jī)對(duì)RAM 15內(nèi)的相關(guān)的事務(wù)數(shù)據(jù)進(jìn)行構(gòu)建和排隊(duì)而發(fā)生以用于在適當(dāng)?shù)臅r(shí)候由閃存控制器訪(fǎng)問(wèn)。

一旦閃存控制器已經(jīng)確認(rèn)了事務(wù)捆綁(如箭頭225所示),則各個(gè)數(shù)據(jù)事務(wù)可以開(kāi)始被從主機(jī)發(fā)送至閃存控制器,如箭頭230所示。

針對(duì)每一所接收的事務(wù),閃存控制器將會(huì)使用閃存存儲(chǔ)設(shè)備上的地址轉(zhuǎn)換記錄中所存儲(chǔ)的信息來(lái)將指定的邏輯地址轉(zhuǎn)換為物理地址。在被映射至的物理地址已經(jīng)包括有效數(shù)據(jù)的情況下,閃存控制器之后將額外地將邏輯地址重新映射至新的可用的物理地址。因此,在由圖3中的塊235所指示的序列期間,上述地址轉(zhuǎn)換圖將被創(chuàng)建,并且將被本地存儲(chǔ)在閃存控制器的易失性存儲(chǔ)設(shè)備內(nèi)。

根據(jù)一個(gè)實(shí)施例,在發(fā)起由一系列事務(wù)所要求的各種寫(xiě)操作之前,閃存控制器將指定意圖保存操作的命令發(fā)送至閃存存儲(chǔ)設(shè)備210。具體地,命令可以采取標(biāo)識(shí)要被存儲(chǔ)在非易失性數(shù)據(jù)存儲(chǔ)設(shè)備的區(qū)域中的意圖信息的專(zhuān)用寫(xiě)事務(wù)的形式(本文中還被稱(chēng)為意圖保存寫(xiě)事務(wù)),該意圖信息在步驟235處,標(biāo)識(shí)被以原子的方式執(zhí)行的多個(gè)寫(xiě)事務(wù)以及地址轉(zhuǎn)換圖中所創(chuàng)建的邏輯地址至物理地址的映射。在一個(gè)實(shí)施例中,該意圖保存寫(xiě)事務(wù)的優(yōu)先級(jí)高于標(biāo)準(zhǔn)寫(xiě)事務(wù),并且因此,可以確保意圖保存寫(xiě)事務(wù)將首先被處理,并且因此,在寫(xiě)事務(wù)的任意數(shù)據(jù)開(kāi)始被寫(xiě)入閃存之前,意圖信息將被存儲(chǔ)在閃存存儲(chǔ)設(shè)備中。在一個(gè)具體實(shí)施例中,該更高優(yōu)先級(jí)的寫(xiě)事務(wù)的示例為諸如由合并的UFS標(biāo)準(zhǔn)(參見(jiàn):http://www.jedec.org/standards-documents/results/jesd220)所提供的設(shè)備專(zhuān)用寫(xiě)事務(wù)。然而,應(yīng)該認(rèn)識(shí)到,不要求使用該形式的寫(xiě)事務(wù),并且可將意圖保存事務(wù)可以被標(biāo)記為高的優(yōu)先級(jí)事務(wù)的任意其他機(jī)制可以被使用。

在執(zhí)行了意圖保存操作之后,在步驟245,事務(wù)之后可以被確認(rèn)返回至主機(jī)。特別地,一旦意圖保存操作已經(jīng)被執(zhí)行,則閃存控制器現(xiàn)在能夠確保事務(wù)將被以原子的方式執(zhí)行,或者在任意事情中斷那些事務(wù)的原子的執(zhí)行的情況下,閃存設(shè)備的狀態(tài)可以被退回至任意寫(xiě)事務(wù)被執(zhí)行之前存在的狀態(tài)。因此,此時(shí),主機(jī)無(wú)需監(jiān)控和確保寫(xiě)事務(wù)的原子性而自主承擔(dān)其他任務(wù)。特別地,主機(jī)系統(tǒng)可以假定底層閃存盤(pán)上的連續(xù)的并且正確的文件系統(tǒng),只要其遵照?qǐng)D3的左手邊中的主機(jī)和閃存控制器之間的事務(wù)中所示的協(xié)議。

如圖3所示,在執(zhí)行了意圖保存操作之后,如箭頭250所示,由每一寫(xiě)事務(wù)請(qǐng)求的各種寫(xiě)操作之后可以被執(zhí)行。只有在所有那些寫(xiě)事務(wù)已被執(zhí)行的情況下,轉(zhuǎn)換表之后才如箭頭255所示被更新,以便反映閃存控制器的易失性存儲(chǔ)設(shè)備內(nèi)的地址轉(zhuǎn)換圖中所維持的信息。此時(shí),由于由一系列寫(xiě)事務(wù)所要求的各種寫(xiě)操作被執(zhí)行,正對(duì)閃存設(shè)備上已經(jīng)存儲(chǔ)的有效數(shù)據(jù)進(jìn)行更新的任意數(shù)據(jù)將被存儲(chǔ)至閃存設(shè)備內(nèi)的不同物理位置,因此在該階段除了存儲(chǔ)新數(shù)據(jù)之外還保存正被覆蓋的舊數(shù)據(jù),并且考慮到轉(zhuǎn)換表將只在這些系列的寫(xiě)事務(wù)如所期望的那樣以原子的方式完成的情況下才被更新,則在寫(xiě)事務(wù)不被以原子的方式執(zhí)行的情況下,轉(zhuǎn)換表將不會(huì)被更新,并且可以被用于將閃存設(shè)備的狀態(tài)退回至任意寫(xiě)事務(wù)被執(zhí)行之前存在的狀態(tài)。這將在之后參考圖6進(jìn)行討論。

圖4是示出當(dāng)主機(jī)具有需要被以原子的方式執(zhí)行的多個(gè)更新時(shí)由主機(jī)所執(zhí)行的步驟的流程圖。在步驟300,主機(jī)構(gòu)建包括需要針對(duì)每一次更新而進(jìn)行轉(zhuǎn)換的數(shù)據(jù)的數(shù)據(jù)事務(wù)結(jié)構(gòu),并且例如可以將那些數(shù)據(jù)事務(wù)結(jié)構(gòu)存儲(chǔ)在主機(jī)側(cè)上的RAM 15內(nèi)。此外,在步驟305,主機(jī)構(gòu)建指示需要以原子的方式發(fā)生的一捆事務(wù)的事務(wù)結(jié)構(gòu)(本文中還被稱(chēng)為捆綁指示),并且在步驟310,捆綁指示之后被從主機(jī)發(fā)送至閃存控制器。

在步驟315,主機(jī)將數(shù)據(jù)事務(wù)排隊(duì)并發(fā)送至存儲(chǔ)設(shè)備控制器,通常一旦閃存控制器已經(jīng)確認(rèn)了捆綁指示,則該操作發(fā)生。此后,在步驟320,主機(jī)只等待來(lái)自閃存控制器的數(shù)據(jù)事務(wù)的確認(rèn)。如之前參考圖3所討論的,一旦已經(jīng)發(fā)生意圖保存操作,則該確認(rèn)通常將被發(fā)送。特別地,此時(shí),閃存控制器具有確保寫(xiě)事務(wù)實(shí)際被以原子的方式執(zhí)行所需要的所有信息,或者在原子性被損害的情況下,其可以將閃存設(shè)備的狀態(tài)恢復(fù)回在執(zhí)行任意寫(xiě)事務(wù)之前存在的狀態(tài)。

圖5是示出為了以原子的方式處理多個(gè)更新而由閃存控制器執(zhí)行的步驟的流程圖。在步驟330,等待捆綁指示,并且在收到捆綁指示時(shí),然后在步驟335對(duì)到來(lái)的數(shù)據(jù)事務(wù)進(jìn)行排隊(duì)。特別地,如果閃存控制器具有足夠大的易失性存儲(chǔ)設(shè)備來(lái)維持被以原子的方式執(zhí)行的數(shù)據(jù)事務(wù),則那些數(shù)據(jù)事務(wù)在此刻被存入易失性存儲(chǔ)設(shè)備。否則,數(shù)據(jù)事務(wù)此時(shí)將仍然被緩沖在主機(jī)側(cè)上,例如圖1所示的RAM 15內(nèi)。

在步驟340,針對(duì)捆綁中的每一數(shù)據(jù)事務(wù),閃存存儲(chǔ)設(shè)備中的地址轉(zhuǎn)換表被用于標(biāo)識(shí)針對(duì)所指定的邏輯地址的物理地址。如上所述,如果物理地址已經(jīng)包括有效數(shù)據(jù),則邏輯地址被重新映射至新的物理地址,其中,所得到的邏輯地址至物理地址的映射被存儲(chǔ)在閃存控制器的易失性存儲(chǔ)設(shè)備中以作為由閃存控制器所構(gòu)建的地址轉(zhuǎn)換圖的一部分。雖然為了本應(yīng)用,由主機(jī)針對(duì)事務(wù)所指定的地址將被稱(chēng)為邏輯地址;它們還可以被稱(chēng)為虛擬地址。

在步驟345,意圖保存命令被發(fā)布至閃存存儲(chǔ)設(shè)備的非易失性存儲(chǔ)器以針對(duì)要被執(zhí)行的數(shù)據(jù)事務(wù)來(lái)標(biāo)識(shí)邏輯地址至物理地址對(duì)。在存儲(chǔ)設(shè)備內(nèi)提供非易失性緩存結(jié)構(gòu)(例如,圖1A所示的NVRAM 40)的實(shí)施例中,意圖保存信息之后可以被直接存儲(chǔ)在NVRAM 40內(nèi)而不是被存儲(chǔ)在閃存存儲(chǔ)設(shè)備30中。這避免了執(zhí)行涉及閃存存儲(chǔ)設(shè)備30本身的、與只被要求保留相對(duì)短暫的時(shí)段的信息有關(guān)的寫(xiě)操作。特別地,如果一系列寫(xiě)事務(wù)確實(shí)根據(jù)需要以原子的方式完成,導(dǎo)致轉(zhuǎn)換表之后被更新,則一旦轉(zhuǎn)換表已經(jīng)被更新以反映與各種寫(xiě)事務(wù)相關(guān)聯(lián)的物理地址,則將不再需要意圖保存信息。

然而,如果未提供非易失性緩存結(jié)構(gòu),則替換地,意圖保存信息可以被存儲(chǔ)在系統(tǒng)信息專(zhuān)用的一個(gè)或多個(gè)閃存塊中。

在之后的步驟345處,事務(wù)被確認(rèn)返回至主機(jī)。如圖5所示,其可以在執(zhí)行步驟350至步驟360中的任意步驟之前,或者在執(zhí)行那些步驟期間的某一時(shí)刻被執(zhí)行。

在步驟350,針對(duì)每一數(shù)據(jù)事務(wù),閃存控制器將寫(xiě)命令發(fā)布至閃存存儲(chǔ)設(shè)備以使得寫(xiě)數(shù)據(jù)被寫(xiě)入其易失性存儲(chǔ)設(shè)備中所維持的地址轉(zhuǎn)換圖中所標(biāo)識(shí)的物理地址中。一旦捆綁指示中所標(biāo)識(shí)的所有寫(xiě)事務(wù)已經(jīng)被執(zhí)行,則易失性存儲(chǔ)設(shè)備中的邏輯地址至物理地址的信息被用于對(duì)閃存存儲(chǔ)設(shè)備中所維持的地址轉(zhuǎn)換表進(jìn)行更新(參見(jiàn)步驟355)。此后,在步驟360,如果需要可以激活垃圾收集,以便使得不被經(jīng)更新的轉(zhuǎn)換表映射至邏輯地址的任意物理地址無(wú)效。垃圾收集過(guò)程之后還可以從事背景任務(wù),例如將不再包括任意有效數(shù)據(jù)的塊擦除。

圖6根據(jù)一個(gè)實(shí)施例,示出了在啟動(dòng)閃存存儲(chǔ)設(shè)備時(shí)所采取的一系列步驟。在步驟400,清除閃存控制器的所有工作存儲(chǔ)設(shè)備(包括易失性存儲(chǔ)設(shè)備中的邏輯地址至物理地址的映射)。這確保了在啟動(dòng)過(guò)程期間,閃存控制器只參考存儲(chǔ)在閃存存儲(chǔ)設(shè)備30、50中以及與閃存存儲(chǔ)設(shè)備(例如,圖1A的緩存40)相關(guān)聯(lián)地被提供的任意非易失性緩存中的寫(xiě)事務(wù)信息。

在步驟405,從閃存存儲(chǔ)設(shè)備構(gòu)建地址轉(zhuǎn)換表。如上所述,地址轉(zhuǎn)換表可以被單獨(dú)存儲(chǔ)在閃存存儲(chǔ)設(shè)備內(nèi),或者在替換實(shí)施例中,可以根據(jù)與各種物理地址處所存儲(chǔ)的數(shù)據(jù)相關(guān)聯(lián)的閃存頁(yè)本身中所存儲(chǔ)的額外位而被重新構(gòu)建。

此外,在步驟410,意圖保存信息被從非易失性存儲(chǔ)器獲取以便標(biāo)識(shí)應(yīng)該已經(jīng)被以原子的方式執(zhí)行的最后一捆事務(wù)。如上所述,在一個(gè)實(shí)施例中,意圖保存信息被存儲(chǔ)在存儲(chǔ)設(shè)備內(nèi)的非易失性緩存內(nèi)。替換地,其可以駐留于閃存存儲(chǔ)設(shè)備本身內(nèi)的系統(tǒng)信息專(zhuān)用的閃存塊內(nèi)。

在步驟415,針對(duì)捆中所標(biāo)識(shí)的每一寫(xiě)事務(wù)進(jìn)行檢查以確定由意圖保存信息中的邏輯地址所指向的物理地址是否與地址轉(zhuǎn)換表中的邏輯地址至物理地址的映射相匹配。如果所有事務(wù)已經(jīng)被以原子的方式執(zhí)行,則應(yīng)該是這種情形,由于在執(zhí)行那些事務(wù)之后,地址轉(zhuǎn)換表將會(huì)被更新以與形成意圖保存信息的一部分的邏輯地址至物理地址的映射相匹配。然而,如果針對(duì)捆中的任意事務(wù)所執(zhí)行的任意檢查未生成匹配,則其指示事務(wù)未以原子的方式完成。

因此,在步驟420,確定任意檢查是否標(biāo)識(shí)了不存在匹配。如果不是,則推定最后一捆事務(wù)已以原子的方式完成,并且過(guò)程可以直接進(jìn)行至步驟425,其中如果必要,垃圾收集機(jī)制可以被激活以便將廢棄的數(shù)據(jù)無(wú)效并且執(zhí)行任意所需要的擦除過(guò)程。在步驟430,正常處理之后可以繼續(xù)進(jìn)行。

然而,如果在步驟420檢測(cè)到針對(duì)數(shù)據(jù)事務(wù)中的至少一項(xiàng)事務(wù),在地址轉(zhuǎn)換表中的信息和意圖保存信息中的相應(yīng)的地址映射信息之間不存在匹配,則在步驟435,意圖保存信息中所標(biāo)識(shí)的物理地址位置被無(wú)效。此外,在步驟440,存儲(chǔ)意圖保存信息的物理地址被無(wú)效,假定意圖保存信息已經(jīng)被寫(xiě)入閃存存儲(chǔ)設(shè)備。否則,緩存中的意圖保存信息僅僅被標(biāo)記為無(wú)效。然后,在步驟445,消息被發(fā)送至主機(jī)以指示最后一捆事務(wù)還未被執(zhí)行,隨后在步驟425過(guò)程繼續(xù)進(jìn)行。

在事務(wù)未以原子的方式完成的情況下,之后地址轉(zhuǎn)換表將不會(huì)被更新,并且因此,將仍然提供指向閃存設(shè)備內(nèi)所維持的仍然有效的之前的數(shù)據(jù)的邏輯地址至物理地址的映射。因此,通過(guò)將意圖保存信息中所標(biāo)識(shí)的所有物理地址位置無(wú)效,這有效地將閃存設(shè)備的狀態(tài)退回至執(zhí)行捆中的任意事務(wù)之前其所處的狀態(tài)。因此,這是處理可以被重新開(kāi)始的穩(wěn)定狀態(tài)。例如,主機(jī)此時(shí)可以試圖重新嘗試該捆事務(wù)。

如上所述,在閃存存儲(chǔ)設(shè)備內(nèi),讀次數(shù)明顯小于寫(xiě)次數(shù)。盡管閃存設(shè)備中的隨機(jī)訪(fǎng)問(wèn)性能很好,但隨后的訪(fǎng)問(wèn)性能經(jīng)常比傳統(tǒng)的硬盤(pán)驅(qū)動(dòng)器糟糕。這已經(jīng)導(dǎo)致了在閃存驅(qū)動(dòng)器(主要是SSD設(shè)備)中實(shí)施緩存和緩存驅(qū)逐方案。然而,從可靠性的角度,這可能引起問(wèn)題,因?yàn)轵?qū)逐方案通常不會(huì)區(qū)分日志數(shù)據(jù)和正常數(shù)據(jù),使得數(shù)據(jù)被寫(xiě)入閃存盤(pán)的順序?qū)τ诓僮飨到y(tǒng)是不可預(yù)測(cè)的。這通常通過(guò)針對(duì)緩存使用非易失性RAM(通常為支持電池的RAM模塊)來(lái)解決。然而,其相當(dāng)昂貴。此外,研究表明,因?yàn)殡姵氐馁|(zhì)量隨著時(shí)間推移降低,因此功率損耗可能仍然會(huì)使文件系統(tǒng)惡化。

閃存存儲(chǔ)設(shè)備內(nèi)的緩存可以被看作兩個(gè)緩沖器,即一個(gè)讀緩沖器和一個(gè)寫(xiě)緩沖器。讀緩沖器的驅(qū)逐動(dòng)作從持續(xù)性的角度看是不重要的,因?yàn)榭梢杂眯碌捻?yè)來(lái)替換被驅(qū)逐的頁(yè),并且對(duì)閃存盤(pán)上的數(shù)據(jù)沒(méi)有影響。如果盤(pán)在驅(qū)逐之前處于穩(wěn)定狀態(tài),則其在驅(qū)逐之后將處于穩(wěn)定狀態(tài)。

然而,寫(xiě)操作更復(fù)雜。一旦數(shù)據(jù)已經(jīng)被寫(xiě)入緩存,則可以認(rèn)為轉(zhuǎn)換已經(jīng)完成,并且可以被確認(rèn)返回至主機(jī)。然而,只有在緩存中的數(shù)據(jù)已經(jīng)被驅(qū)逐并且被存儲(chǔ)在閃存存儲(chǔ)設(shè)備內(nèi)之后狀態(tài)才是穩(wěn)定的,因?yàn)樵诖酥伴W存存儲(chǔ)設(shè)備只包括數(shù)據(jù)的舊的狀態(tài)。在將數(shù)據(jù)從緩存返回至閃存存儲(chǔ)設(shè)備的同時(shí),新數(shù)據(jù)可能到達(dá),其可以替換還未被寫(xiě)入閃存盤(pán)的舊數(shù)據(jù)。如果閃存控制器僅僅假定其可能替換等待被寫(xiě)入閃存盤(pán)的頁(yè),那么實(shí)際上,事務(wù)將不按照主機(jī)系統(tǒng)已經(jīng)發(fā)送它們的順序來(lái)發(fā)生,這將會(huì)違反事務(wù)的獨(dú)立原則。此外,這甚至可能將閃存盤(pán)帶入舊狀態(tài)和新?tīng)顟B(tài)之間的中間狀態(tài),其中針對(duì)下一狀態(tài),一些事務(wù)已經(jīng)被處理,同時(shí)之前的一批事務(wù)還未完成。

然而,從耗損平衡和性能的角度,緩存在閃存存儲(chǔ)設(shè)備中是有吸引力的命題,由于它避免了不必要地將數(shù)據(jù)寫(xiě)入閃存存儲(chǔ)設(shè)備本身,如果數(shù)據(jù)在不久之后被更新,這將會(huì)花費(fèi)不必要的時(shí)間。例如,如果數(shù)據(jù)的第一塊被寫(xiě)入自由頁(yè),但是不久之后被更新,則數(shù)據(jù)的第一頁(yè)需要被無(wú)效,并且新數(shù)據(jù)需要被寫(xiě)入不同頁(yè)。垃圾收集機(jī)制之后將被用于將不再包括有用數(shù)據(jù)的頁(yè)無(wú)效并隨后擦除。所有這些過(guò)程都消耗時(shí)間和經(jīng)歷,并且還導(dǎo)致減少閃存存儲(chǔ)設(shè)備的使用期。

圖7A和圖7B是示出可以被用在為了允許有效處理解決某些上述問(wèn)題的事務(wù)而將非易失性緩存合并的實(shí)施例中的事務(wù)流的序列圖。針對(duì)每一捆事務(wù),在發(fā)布來(lái)自設(shè)備控制器的意圖保存命令之前所執(zhí)行的一系列步驟(例如,參考圖3被討論的步驟)為了簡(jiǎn)單起見(jiàn)在圖7A和圖7B中被忽略。因此,圖7A中所示的與第一捆事務(wù)有關(guān)的第一步驟是意圖保存命令被從設(shè)備控制器500發(fā)布至非易失性RAM 505。由于存在非易失性RAM,在該實(shí)施例中,意圖保存信息被存儲(chǔ)在非易失性RAM中而不是被存儲(chǔ)在閃存設(shè)備510本身中。在步驟520,針對(duì)捆中的每一寫(xiě)事務(wù)的數(shù)據(jù)之后還被寫(xiě)入緩存505。一旦數(shù)據(jù)已經(jīng)被寫(xiě)入緩存,則確認(rèn)通過(guò)路徑525被從設(shè)備控制器500返回至主機(jī)。確認(rèn)的準(zhǔn)確時(shí)序可以根據(jù)實(shí)施例改變。

一旦各種事務(wù)的數(shù)據(jù)已經(jīng)被寫(xiě)入非易失性緩存,則驅(qū)逐機(jī)制之后將被用于驅(qū)逐數(shù)據(jù)以存儲(chǔ)在閃存存儲(chǔ)設(shè)備510中。該過(guò)程通常將包括對(duì)閃存存儲(chǔ)設(shè)備的多個(gè)寫(xiě)操作,并且如圖7A中的標(biāo)號(hào)528所示將花費(fèi)一段時(shí)間。一旦所有數(shù)據(jù)實(shí)際上已經(jīng)被提交至閃存存儲(chǔ)設(shè)備,則存儲(chǔ)完成信號(hào)將通過(guò)路徑530被返回至設(shè)備控制器500。

如果隨后的一捆事務(wù)之后需要在設(shè)備控制器已經(jīng)接收了存儲(chǔ)完成確認(rèn)之后被執(zhí)行,則下一捆事務(wù)將以與第一捆相同的方式被準(zhǔn)確處理,如圖7A所示的各種階段535、540、545、550、555所示。

然而,如圖7B所示,在一個(gè)實(shí)施例中,在某些情況下,事務(wù)流允許兩個(gè)獨(dú)立的原子寫(xiě)序列被合并在存儲(chǔ)設(shè)備內(nèi)。如圖7B所示,第一原子寫(xiě)序列以與如上參考圖7A討論的方式相同的方式進(jìn)行,其中意圖保存信息被存儲(chǔ)在NVRAM 505內(nèi),隨后是事務(wù)的寫(xiě)數(shù)據(jù),并且確認(rèn)被發(fā)送回主機(jī)。在該示例中,假定在周期528期間將第一原子寫(xiě)序列的數(shù)據(jù)寫(xiě)入閃存存儲(chǔ)設(shè)備的過(guò)程中,第二原子寫(xiě)序列被發(fā)起,其中,第二原子寫(xiě)序列中的至少一個(gè)寫(xiě)事務(wù)指定與還未將數(shù)據(jù)存入閃存存儲(chǔ)設(shè)備510的第一原子寫(xiě)序列的寫(xiě)事務(wù)相關(guān)聯(lián)的邏輯地址。設(shè)備控制器500將檢測(cè)這種情況,并且在一個(gè)實(shí)施例中,除了通過(guò)路徑560將意圖保存信息發(fā)送至NVRAM 505,其還發(fā)送指示該意圖保存信息應(yīng)該與通過(guò)路徑515接收的之前的意圖保存信息合并的合并命令565。緩存內(nèi)的控制邏輯之后如標(biāo)號(hào)570所指示的那樣執(zhí)行意圖合并操作,以便生成意圖保存信息的經(jīng)合并的版本。實(shí)際上,此時(shí),兩個(gè)原子寫(xiě)序列已經(jīng)被合并為單個(gè)經(jīng)合并的原子寫(xiě)序列。

第二原子寫(xiě)序列的事務(wù)的寫(xiě)數(shù)據(jù)之后被提供給緩存,如信號(hào)線(xiàn)575所示,并且之后那些事務(wù)的寫(xiě)數(shù)據(jù)被寫(xiě)入閃存盤(pán),如標(biāo)號(hào)585所示。此外,一旦設(shè)備控制器已經(jīng)將用于之后存儲(chǔ)在閃存內(nèi)的寫(xiě)數(shù)據(jù),則設(shè)備控制器可以將關(guān)于第二原子寫(xiě)序列的確認(rèn)發(fā)送至主機(jī)580。然而,由于設(shè)備控制器能夠確保事務(wù)以原子的方式發(fā)生,或者閃存設(shè)備的狀態(tài)可以返回至發(fā)生寫(xiě)事務(wù)之前存在的穩(wěn)定狀態(tài),因此在發(fā)送確認(rèn)之前無(wú)需等待任意事務(wù)已經(jīng)被寫(xiě)入閃存。圖7B的示例中,如果所得到的經(jīng)合并的原子寫(xiě)序列的原子性被例如電源故障中斷,則之前參考圖6描述的重啟過(guò)程將會(huì)使得原子寫(xiě)序列的故障被檢測(cè),并且閃存盤(pán)的狀態(tài)退回至兩種狀態(tài)而不是一種狀態(tài),即,退回至第一原子寫(xiě)序列或者第二原子寫(xiě)序列被執(zhí)行之前存在的狀態(tài)。

如圖7B所示,一旦所有數(shù)據(jù)已經(jīng)被寫(xiě)入閃存,則存儲(chǔ)完成命令590可以被返回至設(shè)備控制器500,在該示例中,標(biāo)識(shí)經(jīng)合并的寫(xiě)序列已經(jīng)完成。

由設(shè)備控制器500所接收的存儲(chǔ)完成命令(不論是圖7A的單獨(dú)的存儲(chǔ)完成命令530、555,還是圖7B的經(jīng)合并的存儲(chǔ)完成命令590)之后被設(shè)備控制器用于標(biāo)識(shí)寫(xiě)已經(jīng)發(fā)生,并且因此閃存內(nèi)的地址轉(zhuǎn)換表可以使用之前參考圖3所討論的過(guò)程而被更新。因此,應(yīng)該認(rèn)識(shí)到,閃存存儲(chǔ)設(shè)備內(nèi)所存儲(chǔ)的轉(zhuǎn)換表只在原子寫(xiě)序列(不論是原始的原子寫(xiě)序列還是經(jīng)合并的原子寫(xiě)序列)完成的情況下被更新。

當(dāng)盤(pán)被大量使用時(shí),應(yīng)該認(rèn)識(shí)到,被用于創(chuàng)建經(jīng)合并的原子寫(xiě)序列的圖7B的過(guò)程可以使得轉(zhuǎn)換表更新可能幾乎無(wú)限期地被推遲(通過(guò)每一新的寫(xiě)序列處理之前寫(xiě)序列中的頁(yè))。這可能是不可取的,并且因此在一個(gè)實(shí)施例中,硬約束策略可以被應(yīng)用。特別地,設(shè)備控制器可以對(duì)原子寫(xiě)序列可以被合并的次數(shù)設(shè)置上限。一旦達(dá)到該上限,則即使一捆新的事務(wù)被接收,地址頁(yè)為之前合并的原子寫(xiě)序列的主題,但是狀態(tài)將不會(huì)被合并,并且替換地,在允許進(jìn)行下一捆事務(wù)之前,當(dāng)前經(jīng)合并的原子寫(xiě)序列將完成,并且轉(zhuǎn)換表將被更新。

該策略可以通過(guò)說(shuō)明在X個(gè)事務(wù)捆綁之后存在硬約束而被盡可能簡(jiǎn)單地實(shí)現(xiàn)。替換地,其可以被布置為使得當(dāng)頁(yè)已經(jīng)被更新為第一原子寫(xiě)序列(其本身可以是經(jīng)合并的原子寫(xiě)序列)的一部分,但是由意圖保存信息所標(biāo)識(shí)的所有事務(wù)還未完成,并且該頁(yè)將被再次更新為新的一捆事務(wù)(進(jìn)一步的原子寫(xiě)序列)的一部分時(shí),在新的一捆事務(wù)之前放置硬約束。例如,考慮到第一捆事務(wù)A(對(duì)頁(yè)1、2、3、4、5進(jìn)行寫(xiě))和第二捆事務(wù)B(對(duì)頁(yè)2、6、7進(jìn)行寫(xiě))被合并的情況,并且之后第三捆事務(wù)C(對(duì)頁(yè)2、8、9進(jìn)行寫(xiě))到達(dá)。假定由經(jīng)合并的捆A和B所請(qǐng)求的頁(yè)2的更新已經(jīng)在捆C到達(dá)時(shí)發(fā)生,所以硬約束將被置于捆C之前,因?yàn)樗噲D再次寫(xiě)入頁(yè)2。

此外,或者替換地,專(zhuān)用命令(例如,SCSI中的緩存刷新命令)可以被用于在期望使用圖7B的方法來(lái)阻止寫(xiě)序列繼續(xù)被合并的某些實(shí)例中確保設(shè)備間的狀態(tài)同步。命令將被布置為使得只有在上一捆的所有事務(wù)已經(jīng)被寫(xiě)入閃存設(shè)備的情況下其才可以被確認(rèn)。這可以被用于避免否則可能引起的以下問(wèn)題,即系統(tǒng)中的其他實(shí)體基于閃存盤(pán)的新?tīng)顟B(tài)進(jìn)行狀態(tài)轉(zhuǎn)換。例如,如果文件被從USB剪貼并被存儲(chǔ)在PC上,那么如果事務(wù)是成功的,則PC將會(huì)將文件從閃存驅(qū)動(dòng)器擦除。然而,如果該擦除在PC中的SSD上的緩存已經(jīng)被驅(qū)逐之前完成,則系統(tǒng)故障可能使得文件消失。可以通過(guò)使用上述專(zhuān)用命令來(lái)阻止該操作以確保發(fā)生設(shè)備間的狀態(tài)同步,并且由此確保SSD上的緩存在發(fā)生擦除之前被驅(qū)逐。

圖8A和圖8B與圖7A和圖7B基本相同,但是示出了意圖保存信息被傳播至閃存設(shè)備510的替換實(shí)施例,如圖8A中的線(xiàn)517、537和圖8B中的線(xiàn)517、572所示。如果未確保緩存在所有情況下均保持非易失性,例如因?yàn)閭溆秒姵氐馁|(zhì)量已經(jīng)下降,則可以采取該附加步驟。

根據(jù)上述實(shí)施例,應(yīng)該認(rèn)識(shí)到,這些技術(shù)介紹了在不使用在主機(jī)側(cè)實(shí)施的安全機(jī)制的情況下,用于確保狀態(tài)保留設(shè)備的原子的和可靠的事務(wù)的機(jī)制。該機(jī)制不需要在繼續(xù)該過(guò)程之前確認(rèn)盤(pán)的狀態(tài)。只要存儲(chǔ)設(shè)備依照該機(jī)制(通過(guò)設(shè)備控制器上運(yùn)行的硬件或軟件),寫(xiě)事務(wù)就可以在存儲(chǔ)設(shè)備內(nèi)以存儲(chǔ)設(shè)備自己的速度進(jìn)行處理,而無(wú)需擔(dān)心在功率故障之后可恢復(fù)的可靠的狀態(tài)。該機(jī)制將針對(duì)各種非易失性數(shù)據(jù)存儲(chǔ)設(shè)備具有適用性,包括與習(xí)慣上不被用作存儲(chǔ)數(shù)據(jù)的設(shè)備相關(guān)聯(lián)的非易失性數(shù)據(jù)存儲(chǔ)設(shè)備,例如,從中央點(diǎn)接收更新服務(wù)的請(qǐng)求的傳感器節(jié)點(diǎn)。

由于以原子的方式執(zhí)行寫(xiě)事務(wù)的管理由與非易失性數(shù)據(jù)存儲(chǔ)設(shè)備相關(guān)聯(lián)的設(shè)備控制器承擔(dān),因此主機(jī)設(shè)備無(wú)需對(duì)寫(xiě)事務(wù)的執(zhí)行進(jìn)行監(jiān)控和管理,同時(shí)仍然使得事務(wù)能夠以原子的方式被處理,并且同時(shí)提供可靠機(jī)制以用于對(duì)阻止事務(wù)被以原子的方式執(zhí)行的事件進(jìn)行檢測(cè)和恢復(fù)。

盡管本文對(duì)特定的實(shí)施例進(jìn)行了描述,應(yīng)該認(rèn)識(shí)到,本發(fā)明不限于此,并且在本發(fā)明的范圍內(nèi)可以做出許多修改和添加。例如,在不背離本發(fā)明的范圍的情況下,所附從屬權(quán)利要求的特征能夠與獨(dú)立權(quán)利要求的特征做出各種組合。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1