是”),則主控制器命令DRAM控制器將請求的數(shù)據(jù)放置在SATA總線上(步驟614)。DRAM配置SATA DMA用于數(shù)據(jù)的傳送(步驟616)。數(shù)據(jù)被放置在SATA總線上并且被CPU接收(步驟618)。
[0095]如果請求的數(shù)據(jù)不被存儲在DRAM邏輯閃存中(“否”),則主控制器將指令發(fā)送到各種閃存控制器以將數(shù)據(jù)放置在內(nèi)部總線上。閃存控制器配置它們的個(gè)別DMA以進(jìn)行從NAND閃存管芯到內(nèi)部總線的數(shù)據(jù)傳送(步驟620)。邏輯閃存控制器配置總線DMA以接收數(shù)據(jù)并且將它傳送到DRAM邏輯閃存中。邏輯閃存控制器也配置SATA DMA以從DRAM邏輯閃存中向外并且到SATA總線上傳送數(shù)據(jù)(步驟625)。從閃存存儲器的該傳送以每秒300到400兆字節(jié)的速度來進(jìn)行。針對相同數(shù)據(jù)的后續(xù)請求通過DRAM邏輯閃存而不是從閃存存儲器以全SATA速率來實(shí)現(xiàn)(步驟630)。在從閃存存儲器的數(shù)據(jù)傳送之后,DRAM邏輯閃存允許以最大的SATA速度(每秒從300到1000 MB)來執(zhí)行所有后續(xù)事務(wù)。
[0096]CPU在程序操作中使用數(shù)據(jù)并且可以周期地將數(shù)據(jù)重新寫入到SSD(步驟635)。邏輯閃存控制器追蹤數(shù)據(jù)的變化并且合并文件,使得它一直準(zhǔn)備好以單個(gè)寫入來寫入到NAND閃存裝置(步驟640)。如果新的文件從CPU被接收并且它是對當(dāng)前存在DRAM邏輯閃存中的文件的更新,則與新的文件相關(guān)聯(lián)的所有邏輯記錄被寫入到DRAM邏輯閃存中的新的位置并且新的文件被寫入。使舊的數(shù)據(jù)文件的位置可用于未來寫入中含有的數(shù)據(jù)。這意味著所有當(dāng)前文件在DRAM中的一個(gè)地方,使得它們能夠在掉電時(shí)被高效地存儲在閃存存儲器。然而,如果DRAM邏輯閃存中的數(shù)據(jù)沒有被改變(如對于許多可執(zhí)行文件的情況那樣),則不需要將它寫回到NAND閃存存儲器,因?yàn)樗耐瑯痈北疽呀?jīng)被存儲在閃存存儲器中。對存儲在DRAM邏輯閃存中的數(shù)據(jù)的改變能夠使用“臟位(dirty bit)”來指定。如果存儲在DRAM邏輯閃存中的文件不被改變,則臟位仍然不改變并且文件不在保存點(diǎn)處重新寫入到閃存存儲器。如果數(shù)據(jù)在它在DRAM邏輯閃存中時(shí)已經(jīng)被改變,則由臟位和數(shù)據(jù)指示的這個(gè)在系統(tǒng)掉電之前被寫入到非易失性閃存存儲器(步驟645 ) ο使用臟位來追蹤存儲在DRAM邏輯閃存中的數(shù)據(jù)的改變允許系統(tǒng)在NAND閃存存儲器上保存時(shí)間和耗損。貫穿上面描述的過程,以邏輯記錄級來處理所有通信。這使數(shù)據(jù)處理過程對于所有控制器和對于CPU均勻和透明。
[0097]快照
圖7是用于存儲系統(tǒng)狀態(tài)的快照的說明性方法的流程圖。如上面討論的,將DRAM邏輯閃存結(jié)合到SSD中允許系統(tǒng)“快照”和其它頻繁寫入操作在沒有負(fù)面地影響閃存存儲器的壽命情況下由操作系統(tǒng)來執(zhí)行??煺詹蛔鳛檫壿嬘涗洷粋魉?存儲。如上面關(guān)于圖4討論的,具有分離指令的特殊路徑被用于存儲和取回快照??煺毡淮鎯υ贒RAM邏輯閃存中的快照區(qū)域并且僅在掉電時(shí)被傳送到閃存存儲器??煺詹皇褂眠壿嬘涗泚泶鎯ΑL娲?,使用被稱為快照記錄的表。具有特殊指令的特殊路徑被用于存儲和取回快照。因?yàn)榉蛛x路徑和指令被用于管理快照,所以快照能夠在沒有干擾使用邏輯記錄的正常數(shù)據(jù)流的情況下來保存。大多數(shù)快照不被永久存儲在非易失性閃存存儲器上,而是被暫時(shí)存儲在DRAM邏輯閃存中。當(dāng)計(jì)算裝置被關(guān)斷或斷電時(shí),選擇的快照從DRAM邏輯閃存被傳送到閃存存儲器。該傳送和恢復(fù)過程由操作系統(tǒng)來協(xié)調(diào)。
[0098]現(xiàn)在參考圖7,用戶/操作系統(tǒng)/CPU決定快照應(yīng)當(dāng)被保存(705)。計(jì)算裝置的狀態(tài)被保存到DRAM邏輯閃存上的受保護(hù)區(qū)域(“快照區(qū)域”)。操作系統(tǒng)做出關(guān)于哪個(gè)數(shù)據(jù)被保存的決定。例如,沒有理由包含先前已經(jīng)被保存到文件的快照中的數(shù)據(jù)。快照傳送不使用邏輯記錄來執(zhí)行并且數(shù)據(jù)不使用邏輯記錄或塊查找表來存儲??煺諈^(qū)域中的存儲有數(shù)據(jù)的表(“快照記錄”)被用來索引/組織各種快照。典型地,通過拍攝快照的時(shí)間來組織快照(710)o
[0099]當(dāng)CPU發(fā)送關(guān)斷命令或者電源電路感測到功率損失并且發(fā)送中斷時(shí),快照保存序列作為優(yōu)先將最近兩個(gè)快照存儲到閃存存儲器中。該過程也不使用邏輯記錄或塊查找表。指定的塊作好準(zhǔn)備來接收快照數(shù)據(jù)。關(guān)于快照的組織和如何取回它們的相關(guān)數(shù)據(jù)被存儲在具有快照的表中(715)。
[0100]當(dāng)系統(tǒng)恢復(fù)/重啟時(shí),快照恢復(fù)代碼從閃存到DRAM邏輯閃存并且回到CPU存儲器中取回快照(720)。計(jì)算裝置然后能夠從快照保存的狀態(tài)重新恢復(fù)操作。
[0101]快速加載操作
圖8是用于快速加載操作的說明性方法(800)的流程圖。程序在制造/配置期間被存儲在SSD中的閃存存儲器的受保護(hù)程序區(qū)域的存儲部分中。用戶不能夠直接訪問受保護(hù)程序區(qū)域(805)。當(dāng)用戶接收適當(dāng)權(quán)限來使用特定程序時(shí),程序從存儲部分被傳送到受保護(hù)程序區(qū)域的活動(dòng)部分(810)。
[0102]為了預(yù)備在活動(dòng)區(qū)域中使用一個(gè)或多個(gè)程序,程序文件被移動(dòng)到DRAM邏輯閃存的受保護(hù)程序區(qū)域中。該傳送不使用邏輯記錄,而是批量傳送。受保護(hù)程序區(qū)域類似地對于用戶不可直接訪問(815)。
[0103]DRAM邏輯閃存的受保護(hù)程序區(qū)域中的程序被傳送到CPU存儲器用于執(zhí)行。程序文件典型地不被包含在快照或轉(zhuǎn)儲/恢復(fù)操作中,因?yàn)槌绦蛭募趫?zhí)行期間不被改變。由程序文件生成的文件(包含配置和數(shù)據(jù)文件)能夠被包含在快照和轉(zhuǎn)儲/恢復(fù)操作中(820)。
[0104]對程序文件(包含用戶還沒有權(quán)限訪問的程序文件)的更新能夠使用后臺操作從網(wǎng)絡(luò)被流傳送到SSD的受保護(hù)程序區(qū)域(825)。這些更新的程序然后能夠在用戶支付或授權(quán)請求時(shí)迅速地成為可用。
[0105]在掉電期間保存數(shù)據(jù)
圖9是用于當(dāng)機(jī)器關(guān)斷或斷電時(shí)將存儲在DRAM邏輯閃存中的數(shù)據(jù)保存到非易失性閃存存儲器的說明性方法(700)的流程圖。功率電容器電路或其它能量存儲裝置也可以被包含在SSD中。能量存儲裝置存儲足夠的能量來將存儲在易失性DRAM存儲器中的所有數(shù)據(jù)寫入到非易失性NAND閃存存儲器中(步驟905)。當(dāng)存在對SSD的功率中斷時(shí),電源中的傳感器開始斷電存儲操作。此外,斷電存儲操作可以被用戶或操作系統(tǒng)觸發(fā)(步驟910)。在斷電存儲操作期間,來自功率電容器的能量被用來刷新DRAM以保護(hù)數(shù)據(jù)、操作控制器、將數(shù)據(jù)傳送到存儲器控制器、以及將數(shù)據(jù)寫入在NAND閃存存儲器中。主控制器建立數(shù)據(jù)路徑,并且DRAM控制器開始經(jīng)由內(nèi)部總線將數(shù)據(jù)發(fā)送到存儲器控制器。數(shù)據(jù)以全速度被寫入到每個(gè)存儲器模塊中。每個(gè)數(shù)據(jù)文件包含將文件使識別為斷電存儲操作的部分的報(bào)頭(步驟915)。每個(gè)數(shù)據(jù)片段包含允許轉(zhuǎn)儲和恢復(fù)程序精確地按存儲的那樣恢復(fù)邏輯閃存數(shù)據(jù)的邏輯記錄標(biāo)志。八個(gè)閃存存儲器控制器中的每個(gè)監(jiān)視其邏輯記錄標(biāo)志。當(dāng)閃存控制器識別其邏輯記錄標(biāo)志時(shí),控制器將后續(xù)數(shù)據(jù)存儲在其閃存存儲器中(步驟920)。因?yàn)檗D(zhuǎn)儲順序加載整個(gè)閃存存儲器,所以沒有擦除周期并且寫入速度能夠接近每秒300 MB。理論上,完整的8GB DRAM存儲器能夠在24秒內(nèi)被轉(zhuǎn)儲到閃存中。在DRAM邏輯閃存不是全滿或者含有沒有被改變的文件的情況下,傳送時(shí)間能夠顯著更少。能量存儲裝置具有電容性功率電路,該電容性功率電路被設(shè)計(jì)成維持向SSD驅(qū)動(dòng)器的功率用于DRAM邏輯閃存中所有數(shù)據(jù)到閃存存儲器的最大速度數(shù)據(jù)傳送。
[0106]在一個(gè)實(shí)施例中,閃存管芯中的備用塊被用來在斷電存儲操作期間存儲數(shù)據(jù)。備用塊已經(jīng)是空白的,所以擦除延遲不發(fā)生。備用塊貫穿每個(gè)管芯來分布。因此,快照物理上不位于一個(gè)接連的位置。然而,被包含在每個(gè)數(shù)據(jù)片段中的報(bào)頭識別下一個(gè)數(shù)據(jù)片段。因此,通過將第一數(shù)據(jù)片段存儲在已知的位置,主控制器能夠以它們被寫入的相同次序(先入先出)恢復(fù)所有數(shù)據(jù)文件。
[0107]在電容性功率電路被耗盡之前,指針能夠被存儲以幫助重啟。在一個(gè)實(shí)施方式中,主處理器積累被加載到閃存中的邏輯記錄的目錄。該目錄被寫入在閃存存儲器上的受保護(hù)區(qū)域中。當(dāng)計(jì)算裝置被重啟時(shí),從受保護(hù)區(qū)域取回目錄。主控制器然后使用表來控制邏輯閃存的操作。
[0108]恢復(fù)過程是斷電存儲過程的反轉(zhuǎn)。操作系統(tǒng)感測重啟并且使快照被取回。任何必要的表或其它索引數(shù)據(jù)首先從閃存中的轉(zhuǎn)儲區(qū)域被取回(935)。這些表可以被存儲在主控制器的存儲器中或被存儲在DRAM邏輯閃存中。主控制器然后使用這些表來訪問快照并且在斷電存儲操作之前重構(gòu)操作系統(tǒng)狀態(tài)(940)。在一個(gè)實(shí)施方式中,保存的數(shù)據(jù)的第一片段被傳送回到邏輯閃存,后面是數(shù)據(jù)的第二片段等等直到所有數(shù)據(jù)被再次存儲在DRAM邏輯閃存上。該操作將數(shù)據(jù)的干凈版本恢復(fù)到DRAM邏輯閃存?;謴?fù)的操作系統(tǒng)然后使用邏輯記錄表來命令主控制器從邏輯閃存取回所要求的文件。
[0109]大體上,恢復(fù)的序列將在CPU和操作系統(tǒng)的控制下。操作系統(tǒng)將命令所需的各種文件的加載。在一些實(shí)施方式中,可以存在對是開放的程序的轉(zhuǎn)儲引用。如果轉(zhuǎn)儲引用是恒定的,則這些不被重新寫入。主控制器可以維持針對每個(gè)開放程序的面包肩(breadcrumbs)的集合,使得恢復(fù)過程能夠?qū)⒋a重設(shè)到運(yùn)行的最新位置。然而,并非所有程序?qū)⒕哂忻姘?,而是將被加載為恢復(fù)序列的部分。
[0110]誤處理文件恢復(fù)
圖10是用于恢復(fù)存儲在DRAM邏輯閃存中的誤處理數(shù)據(jù)文件的說明性方法(1000)的流程圖。例如,用戶可能偶然關(guān)閉文件而沒有正確地保存它。CPU將指令發(fā)送到SSD以刪除文件(1005)。
[0111]文件的刪除被記錄在FAT表中。然而,文件中的數(shù)據(jù)仍然被存儲在DRAM邏輯閃存中一時(shí)間段,并且被有限的文件歷史索引(1010)。用戶發(fā)現(xiàn)文件被關(guān)閉而沒有正確地保存它,并且請求操作系統(tǒng)恢復(fù)文件(1015)。操作系統(tǒng)訪問有限的文件歷史以確定組成“刪除的”文件的數(shù)據(jù)是否仍然存在DRAM邏輯閃存上(1020)。如果“刪除的”文件仍然存在,則它從DRAM邏輯閃存中被取回并且被發(fā)送到CPU存儲器(1025)。
[0112]結(jié)論
總而言之,上面描述的說明性SSD體系結(jié)構(gòu)提供硬盤驅(qū)動(dòng)器的即插即用備選。上面描述許多原理,其允許閃存存儲器被有效地用作非易失性存儲而不管它的有限數(shù)目的擦除/寫入周期。DRAM邏輯閃存的使用模仿閃存的行為,允許以全接口速度處理所有閃存命令并且最小化到NAND閃存存儲器的寫入。就系統(tǒng)處理器而言,它一直在SSD內(nèi)寫入到閃存存儲器。然而,系統(tǒng)處理器正在寫入到DRAM,其充當(dāng)邏輯閃存但沒有NAND閃存存儲器的壽命或?qū)ぶ废拗?。DRAM邏輯閃存以與閃存相同的方式來存儲文件并且響應(yīng)于閃存命令。進(jìn)一步,DRAM邏輯閃存使用FAT表、更新邏輯記錄、組合文件、并且被附著到SATA總線。因?yàn)镈RAM邏輯閃存具有實(shí)際上無限數(shù)目的讀/寫周期,所以系統(tǒng)處理器和操作系統(tǒng)能存儲與期望的一樣多的更新和快照。進(jìn)一步,DRAM邏輯閃存在讀取和寫入數(shù)據(jù)兩者上極其快速。SSD存儲足夠功率以在外部功率被中斷的情況下將存儲在DRAM邏輯閃存中的整個(gè)數(shù)據(jù)內(nèi)容移動(dòng)到閃存存儲器。
[0113]SSD中的閃存控制器處理邏輯記錄轉(zhuǎn)化、錯(cuò)誤檢測和恢復(fù)、和裝置優(yōu)化。在一些實(shí)施例中,出于使用的速度和舒適性,每個(gè)閃存接口裝置可以控制2到4個(gè)管芯。主控制器(并且在一些實(shí)施例中總線控制器)控制DRAM邏輯閃存與每個(gè)閃存控制器之間的數(shù)據(jù)傳送。
[0114]如上面討論的,DRAM存儲器及其控制器組成DRAM邏輯閃存。DRAM邏輯閃存中的數(shù)據(jù)由局域微處理器(DRAM控制器、邏輯閃存控制器、和主控制器)來管理以完全看來是閃存驅(qū)動(dòng)器。針對與SATA系統(tǒng)的所有通信的所有事務(wù)僅經(jīng)過該接口發(fā)生。DRAM邏輯閃存一直以全SATA速度從SATA總線讀取并且寫入到SATA總線。因此,DRAM邏輯閃存完全看來是閃存裝置,但具有顯著更高的數(shù)據(jù)傳送速率。這使SSD操作對于計(jì)算裝置透明,該計(jì)算裝置能夠正如它正在寫入到標(biāo)準(zhǔn)閃存或硬驅(qū)動(dòng)器裝置那樣運(yùn)行。
[0115]DRAM邏輯閃存不是高速緩存,并且不用作高速緩存。DRAM邏輯閃存中的文件正如它們將在閃存中那樣通過邏輯記錄到物理位置映射和文件管理來寫入。DRAM控制器接受閃存命令并且實(shí)施它們使得CPU —直相信它正在寫入到閃存存儲器驅(qū)動(dòng)器。然而,CPU—直讀取并寫入到DRAM邏輯閃存。CPU不直接訪問閃存存儲器。閃存僅在由主控制器確定的特定預(yù)定的點(diǎn)處被寫入。這些點(diǎn)獨(dú)立于CPU命令并且不能夠直接被CPU觸發(fā)。
[0116]上面給出的實(shí)施方式只是在本文中描述的原理的說明性示例。能夠使用各種其它配置和體系結(jié)構(gòu)。例如,DRAM控制器和邏輯閃存控制器的功能能夠被組合成單個(gè)控制器。在其它實(shí)施方式中,主控制器和總線控制器的功能能夠被組合。總線、易失性存儲器、以及非易失性存儲器裝置的數(shù)目和類型能夠變化以適應(yīng)各種設(shè)計(jì)參數(shù)和新的技術(shù)。例如,雖然在上面的示例中描述SATA總線、DRAM存儲器、和NAND存儲器,但是能夠使用各種其它總線和存儲器技術(shù)。
[0117]此外,在圖1-4中示出并且上面描述的體系結(jié)構(gòu)只是示例。能夠使用許多備選體系結(jié)構(gòu)。雖然上面討論的原理示出充當(dāng)CPU與一系列閃存存儲器之間的看門者的DRAM邏輯閃存,但是DRAM邏輯閃存也能夠被插入在CPU與常規(guī)旋轉(zhuǎn)盤片硬驅(qū)動(dòng)器