專利名稱:使用空數(shù)據(jù)令牌指令管理存儲設(shè)備中的數(shù)據(jù)的裝置、系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及管理數(shù)據(jù)存儲設(shè)備中的數(shù)據(jù),具體地,涉及使用空數(shù)據(jù)段指令管理存儲設(shè)備中的數(shù)據(jù)。
背景技術(shù):
通常來說,當(dāng)數(shù)據(jù)不再有用時,它將被擦除。在很多文件系統(tǒng)中,擦除命令刪除了文件系統(tǒng)中的目錄項,而仍將數(shù)據(jù)留在了包括該數(shù)據(jù)的存儲設(shè)備中。通常來說,數(shù)據(jù)存儲設(shè)備不參與此種類型的擦除操作。另外一種擦除數(shù)據(jù)的方法是向數(shù)據(jù)存儲設(shè)備寫入O、I或一些其他的無效數(shù)據(jù)字符,以實際替代所擦除的文件。然而,這種方法并不高效,因為發(fā)送正在被覆蓋的數(shù)據(jù)會占用寶貴的帶寬。此外,存儲設(shè)備的空間將由用以覆蓋無效數(shù)據(jù)的數(shù)據(jù)所占據(jù)。一些存儲設(shè)備(如本文所描述的固態(tài)存儲設(shè)備102)并不是隨機存取存儲設(shè)備,由此,更新先前所存儲的數(shù)據(jù)并不會覆蓋現(xiàn)有數(shù)據(jù)。嘗試用一串I字符或一串O字符覆蓋此類設(shè)備中的數(shù)據(jù)會占用寶貴的空間,卻無法實現(xiàn)覆蓋現(xiàn)有數(shù)據(jù)的期望意愿。對于這些非隨機存取設(shè)備(如固態(tài)存儲設(shè)備102)而言,客戶端114 一般來說不具備覆蓋數(shù)據(jù)以將其擦除的能力。當(dāng)接收一串重復(fù)的字符或字符串時,接收到的數(shù)據(jù)是可高度壓縮的,但是一般來說,是在將數(shù)據(jù)發(fā)往存儲設(shè)備之前由文件系統(tǒng)進行壓縮的。典型的存儲設(shè)備無法區(qū)分已壓縮的數(shù)據(jù)和未經(jīng)壓縮的數(shù)據(jù)。存儲設(shè)備還可接收讀取所擦除的文件的命令,從而所述存儲設(shè)備就向請求設(shè)備發(fā)送一串0、1或無效字符。同樣的,需要帶寬來發(fā)送代表所擦除的文件的數(shù)據(jù)。
發(fā)明內(nèi)容
從上述討論中,顯而易見,存在對用于接收數(shù)據(jù)將被擦除的指令的存儲設(shè)備的裝置、系統(tǒng)和方法需要,從而使得該存儲設(shè)備可存儲代表空數(shù)據(jù)段或具有重復(fù)字符或字符串的數(shù)據(jù)的數(shù)據(jù)段令牌。該裝置、系統(tǒng)和方法還可以擦除現(xiàn)有數(shù)據(jù)以使得最終使用的存儲空間包括小數(shù)據(jù)段令牌。本發(fā)明提供一種克服現(xiàn)有技術(shù)中部分或所有缺點的裝置、系統(tǒng)和方法。本發(fā)明是針對現(xiàn)有技術(shù)的現(xiàn)況開發(fā)出來的,具體地,是針對現(xiàn)有技術(shù)中通過現(xiàn)有的數(shù)據(jù)管理系統(tǒng)并未完全解決的問題和需要。因此,本發(fā)明已經(jīng)被開發(fā)出來以提供克服現(xiàn)有技術(shù)中的上述多數(shù)或全部缺陷的管理數(shù)據(jù)的裝置、系統(tǒng)和方法。用于管理數(shù)據(jù)的裝置提供有多個模塊,該多個模塊包括寫入請求接收器模塊和數(shù)據(jù)段令牌存儲模塊。該寫入請求接收器模塊從請求裝置接收存儲請求。該數(shù)據(jù)段包括一連串重復(fù)的、相同字符或一連串重復(fù)、相同的字符串。該數(shù)據(jù)段令牌存儲模塊將數(shù)據(jù)段令牌存儲在存儲設(shè)備中。該數(shù)據(jù)段令牌包括至少一數(shù)據(jù)段標(biāo)識符和一數(shù)據(jù)段長度,且該數(shù)據(jù)段令牌大體上與來自數(shù)據(jù)段的數(shù)據(jù)無關(guān)。在一種實施方式中,該存儲請求包括存儲該數(shù)據(jù)段令牌的令牌指令,其中該存儲請求與數(shù)據(jù)段的數(shù)據(jù)無關(guān)。在另一實施方式中,該數(shù)據(jù)段令牌存儲模塊在存儲該令牌之前生成數(shù)據(jù)段令牌。該數(shù)據(jù)段令牌存儲模塊根據(jù)該令牌指令中的信息生成數(shù)據(jù)段令牌。該令牌指令與該數(shù)據(jù)段令牌無關(guān)。在另一實施方式中,該令牌指令包括該數(shù)據(jù)段令牌,且數(shù)據(jù)段令牌存儲模塊識別出該數(shù)據(jù)段令牌代表該數(shù)據(jù)段。在一種實施方式中,該存儲請求包括來自該數(shù)據(jù)段的數(shù)據(jù),且該裝置包括根據(jù)該數(shù)據(jù)段產(chǎn)生數(shù)據(jù)段令牌的令牌生成模塊。生成所述數(shù)據(jù)段令牌以響應(yīng)存儲所述數(shù)據(jù)段的所述存儲請求。在另一種實施方式中,該令牌生成模塊駐留于該請求設(shè)備。在一種實施方式中,該裝置包括安全擦除模塊,該安全擦除模塊用字符來覆蓋現(xiàn)有數(shù)據(jù)使得現(xiàn)有數(shù)據(jù)不可恢復(fù)。該現(xiàn)有數(shù)據(jù)包括之前存儲在存儲設(shè)備中的數(shù)據(jù)段的數(shù)據(jù),使用與所述存儲請求中的數(shù)據(jù)段標(biāo)識符相同的數(shù)據(jù)段標(biāo)識符來標(biāo)識所述數(shù)據(jù)段的數(shù)據(jù)。在另一種實施方式中,該安全擦除模塊進一步包括擦除確認模塊,該擦除確認模塊發(fā)送指示現(xiàn)有數(shù)據(jù)已經(jīng)被覆蓋的消息。發(fā)送擦除確認消息以響應(yīng)所述安全擦除模塊覆蓋所述現(xiàn)有數(shù)據(jù)。在另一實施方式中,該安全擦除模塊在存儲空間恢復(fù)操作期間覆蓋該現(xiàn)有數(shù)據(jù)。在另一實施方式中,該存儲請求包括覆蓋該現(xiàn)有數(shù)據(jù)的請求,其中所述安全擦除模塊覆蓋所述現(xiàn)有數(shù)據(jù)以響應(yīng)覆蓋所述現(xiàn)有數(shù)據(jù)的請求。在一種實施方式中,該裝置包括讀取請求接收器模塊,其接收讀取該數(shù)據(jù)段的存儲請求;讀取數(shù)據(jù)段令牌模塊,其讀取對應(yīng)于由該存儲請求所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌;和讀取請求響應(yīng)模塊,其向請求裝置發(fā)送響應(yīng)。使用對應(yīng)于經(jīng)請求的數(shù)據(jù)段的該數(shù)據(jù)段令牌生成該響應(yīng)。在進一步的實施方式中,該讀取請求響應(yīng)模塊包括發(fā)送數(shù)據(jù)段令牌模塊,該發(fā)送數(shù)據(jù)段令牌模塊將該響應(yīng)中的消息發(fā)送到請求裝置。該消息至少包括該數(shù)據(jù)段標(biāo)識符和該數(shù)據(jù)段長度,且該消息大體上與該數(shù)據(jù)段的數(shù)據(jù)無關(guān)。在另一進一步實施方式中,該裝置包括重構(gòu)數(shù)據(jù)段模塊,該重構(gòu)數(shù)據(jù)段模塊使用該數(shù)據(jù)段令牌重構(gòu)該數(shù)據(jù)段的數(shù)據(jù),且該讀取請求響應(yīng)模塊包括發(fā)送經(jīng)重構(gòu)的、請求的數(shù)據(jù)段的發(fā)送數(shù)據(jù)段模塊。在一種實施方式中,該一連串重復(fù)的、相同的字符或字符串指示數(shù)據(jù)段為空。在另一種實施方式中,該存儲請求包括在該存儲設(shè)備中保留存儲空間的請求。該請求的保留的存儲空間包括大體上類似于數(shù)據(jù)段長度的存儲空間大小。在一種實施方式中,該裝置包括存儲空間預(yù)留模塊,該存儲空間預(yù)留模塊在所述存儲設(shè)備中預(yù)留與預(yù)留存儲空間的請求相一致的存儲空間大小。在一種實施方式中,該空數(shù)據(jù)段令牌包括在索引中的項,其中該索引對應(yīng)于存儲在存儲設(shè)備中的信息和數(shù)據(jù)。在另一種實施方式中,該數(shù)據(jù)段令牌包括存儲在該存儲設(shè)備上的對象。在另一種實施方式中,該數(shù)據(jù)段令牌包括存儲在該存儲設(shè)備上的元數(shù)據(jù)。在另一實施方式中,該數(shù)據(jù)段令牌包括數(shù)據(jù)段位置指示符、至少一個重復(fù)且相同字符的常數(shù)和至少一個重復(fù)且相同字符串的常數(shù)中的至少一個。用于管理數(shù)據(jù)的另一裝置具有多個模塊,該多個模塊包括讀取請求接收器模塊、讀取數(shù)據(jù)段令牌模塊和讀取請求響應(yīng)模塊。該讀取請求接收器模塊接收用于從存儲設(shè)備讀取數(shù)據(jù)段的存儲請求。該數(shù)據(jù)段由數(shù)據(jù)段令牌表示在該存儲設(shè)備上。該數(shù)據(jù)段包括一連串重復(fù)、相同的字符或一連串重復(fù)、相同的字符串。該數(shù)據(jù)段令牌包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。該數(shù)據(jù)段令牌大體上與該數(shù)據(jù)段無關(guān)。該讀取數(shù)據(jù)段令牌模塊讀取對應(yīng)于存儲請求中所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌。該讀取請求響應(yīng)模塊向該請求裝置傳輸一響應(yīng)。使用對應(yīng)于所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌來生成該響應(yīng)。在一種實施方式中,該讀取請求響應(yīng)模塊包括發(fā)送數(shù)據(jù)段令牌模塊,該發(fā)送數(shù)據(jù)段令牌模塊將該響應(yīng)中的消息傳輸?shù)秸埱笱b置。該消息至少包括該數(shù)據(jù)段標(biāo)識符和該數(shù)據(jù)段長度。該消息大體上與該數(shù)據(jù)段的數(shù)據(jù)無關(guān)。在另一種實施方式中,該裝置包括在該存儲設(shè)備處的重構(gòu)數(shù)據(jù)段模塊,該重構(gòu)數(shù)據(jù)段模塊使用該數(shù)據(jù)段令牌重構(gòu)該數(shù)據(jù)段的數(shù)據(jù),且該讀取請求響應(yīng)模塊包括傳輸經(jīng)重構(gòu)的、請求的數(shù)據(jù)段的發(fā)送數(shù)據(jù)段模塊。在另一種實施方式中,該存儲請求包括讀取該數(shù)據(jù)段的請求,且該裝置包括駐留于該請求裝置處的重構(gòu)數(shù)據(jù)段模塊,該重構(gòu)數(shù)據(jù)段模塊使用該數(shù)據(jù)段令牌重構(gòu)該數(shù)據(jù)段的數(shù)據(jù)。該讀取請求響應(yīng)模塊包括發(fā)送數(shù)據(jù)段模塊,該發(fā)送數(shù)據(jù)段模塊在所述重構(gòu)數(shù)據(jù)段模塊根據(jù)至少包括所述數(shù)據(jù)段標(biāo)識符和所述數(shù)據(jù)段長度的消息重新創(chuàng)建所請求的數(shù)據(jù)段之前,將所述消息發(fā)送給所述請求設(shè)備。本發(fā)明還提出一種用于管理數(shù)據(jù)的系統(tǒng)。該系統(tǒng)包括存儲設(shè)備、控制該存儲設(shè)備的存儲控制器、寫入請求接收模塊和數(shù)據(jù)段令牌存儲模塊。該寫入請求接收模塊從請求裝置接收存儲請求。該存儲請求包括在該存儲設(shè)備中存儲數(shù)據(jù)段的請求。該數(shù)據(jù)段包括一連串重復(fù)的、相同的字符或一連串重復(fù)的、相同的字符串。該數(shù)據(jù)段令牌存儲模塊在該存儲設(shè)備中存儲數(shù)據(jù)段令牌。該數(shù)據(jù)段令牌包括至少數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。該數(shù)據(jù)段令牌大體上與該數(shù)據(jù)段無關(guān)。在一種實施方式中,該系統(tǒng)可包括駐留在該請求設(shè)備的驅(qū)動器。該驅(qū)動器包括下列模塊中的一個或多個中的至少一部分所述寫入請求接收器模塊、所述數(shù)據(jù)段令牌存儲模塊、所述讀取請求接收器模塊、所述讀取數(shù)據(jù)段令牌模塊和所述讀取請求響應(yīng)模塊。該系統(tǒng)還可包括上述關(guān)于該裝置的模塊和實施方式。本發(fā)明還提出一種用于管理數(shù)據(jù)的方法。在實施方式中解釋的方法大體上包括進行與對于所描述的裝置和系統(tǒng)的操作有關(guān)的功能所必須得步驟。在一種實施方式中,該方法包括從請求裝置接收存儲請求。該存儲請求包括在存儲設(shè)備中存儲數(shù)據(jù)段的請求。該數(shù)據(jù)段包括一連串重復(fù)的、相同的字符或一連串重復(fù)的、相同的字符串。該方法還包括在該存儲設(shè)備中存儲數(shù)據(jù)段令牌。該數(shù)據(jù)段令牌包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。該數(shù)據(jù)段令牌大體上與該數(shù)據(jù)段無關(guān)。在一種實施方式中,該存儲請求包括存儲該數(shù)據(jù)段令牌的令牌指令,其中該存儲請求與該數(shù)據(jù)段的數(shù)據(jù)無關(guān)。在另一實施方式中,該存儲請求包括來自該數(shù)據(jù)段的數(shù)據(jù),且該方法包括產(chǎn)生令牌指令以從該數(shù)據(jù)段中產(chǎn)生該數(shù)據(jù)段令牌。創(chuàng)建所述信息指令以響應(yīng)存儲所述數(shù)據(jù)段的所述存儲請求。本說明書全文所提到的特征、優(yōu)點或者類似措辭并不意味著可在本發(fā)明包含在本發(fā)明的任一單獨的實施方式中的情況下實現(xiàn)所有的特征和優(yōu)點。當(dāng)然,涉及特征和優(yōu)點的措辭被理解為意味著與實施方式一起描述的特定的特征、優(yōu)點或者特點包括在本發(fā)明的至少一種實施方式中。因此,在本說明書全文中,關(guān)于特征、優(yōu)點和類似措辭的討論可(但未必)涉及同一實施方式。此外,描述的本發(fā)明的特征、優(yōu)點和特點可采用任何合適的方式與一個或多個實施方式結(jié)合。相關(guān)領(lǐng)域的技術(shù)人員可意識到本發(fā)明可在不具備特定實施方式的一個或多個具體特征或優(yōu)點的情況下被實施。在其他例子中,可意識到附加特征和優(yōu)點出現(xiàn)在某些實施方式中,而不是在本發(fā)明的所有實施方式中都出現(xiàn)。通過下面的說明和附加的權(quán)利要求,本發(fā)明的這些特征和優(yōu)點將變得更加充分的顯而易見,或者可以通過按下文所闡述的實施本發(fā)明的方法而獲悉。
為了使本發(fā)明的優(yōu)點更加容易理解,會參考附圖中示出的特定實施方式給出上面簡要描述的本發(fā)明的更具體的說明。在理解到這些附圖僅描述了本發(fā)明的一般實施方式并且并不因此認為本發(fā)明限于此范圍的情況下,將通過使用附圖并結(jié)合更多的具體特征和細節(jié)描述和解釋本發(fā)明,附圖中圖1A是示意性框圖,示出了根據(jù)本發(fā)明的用于固態(tài)存儲設(shè)備內(nèi)的數(shù)據(jù)管理的系統(tǒng)的一種實施方式;圖1B是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設(shè)備內(nèi)的對象管理的系統(tǒng)的一種實施方式;圖2A是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設(shè)備內(nèi)的對象管理的裝置的一種實施方式;圖2B是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲設(shè)備內(nèi)的固態(tài)存儲設(shè)備控制器的一種實施方式;圖3是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設(shè)備內(nèi)的固態(tài)存儲設(shè)備控制器的一種實施方式的示意性框圖,該固態(tài)存儲設(shè)備控制器具有寫入數(shù)據(jù)管道和讀取數(shù)據(jù)管道;圖4A是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲控制器內(nèi)的內(nèi)存交錯控制器的一種實施方式;圖4B是示意性框圖,示出了根據(jù)本發(fā)明的位于固態(tài)存儲控制器內(nèi)的內(nèi)存交錯控制器的另一種實施方式;圖5是示意性流程圖,示出了根據(jù)本發(fā)明的使用數(shù)據(jù)管道來管理固態(tài)存儲設(shè)備中的數(shù)據(jù)的方法的一種實施方式;圖6是示意性流程圖,示出了根據(jù)本發(fā)明的使用數(shù)據(jù)管道來管理固態(tài)存儲設(shè)備中的數(shù)據(jù)的方法的另一種實施方式;圖7是示意性流程圖,示出了根據(jù)本發(fā)明的使用內(nèi)存交錯來管理固態(tài)存儲設(shè)備中的數(shù)據(jù)的方法的一種實施方式;圖8是示意性框圖,示出了根據(jù)本發(fā)明的用于對固態(tài)存儲設(shè)備進行垃圾收集的裝置的一種實施方式;圖9是示意性流程圖,示出了根據(jù)本發(fā)明的用于對固態(tài)存儲設(shè)備進行垃圾收集的裝置的一種實施方式;圖10是示意性框圖,示出了根據(jù)本發(fā)明的包括用以生成令牌指令的裝置的系統(tǒng)的一種實施方式;圖11是示意性流程圖,示出了根據(jù)本發(fā)明的用于生成并發(fā)送令牌指令的方法的實施方式;圖12是示意性流程圖,示出了根據(jù)本發(fā)明的用于讀取數(shù)據(jù)段令牌的方法的實施方式;圖13是示意性流程圖,示出了根據(jù)本發(fā)明的包括用以管理數(shù)據(jù)段令牌的裝置的系統(tǒng)的一種實施方式;圖14是示意性流程圖,示出了根據(jù)本發(fā)明的用于存儲數(shù)據(jù)段令牌的方法的實施方式;圖15是示意性流程圖,示出了根據(jù)本發(fā)明的用于讀取數(shù)據(jù)段令牌的方法的實施方式。
具體實施例方式為了更顯著地強調(diào)功能性單元運行的獨立性,在本說明書中描述的許多功能性單元已被標(biāo)示為模塊。例如,模塊可作為硬件電路來實施,所述硬件電路包括自定義VLSI電路、門陣列或成品半導(dǎo)體(例如邏輯芯片、晶體管或其他分立元件)。模塊也可在可編程硬件設(shè)備(如現(xiàn)場可編程門陣列、可編程陣列邏輯、可編程邏輯設(shè)備或類似設(shè)備)內(nèi)實施。模塊還可在由不同類型的處理器運行的軟件中實施。例如,可執(zhí)行代碼的識別模塊可以包括一個或多個計算機指令物理塊或邏輯塊,該計算機指令被作為對象、程序或函數(shù)來組織。然而,識別模塊的可執(zhí)行文件不必在物理上位于一起,但是可包括存儲在不同位置的不同命令,當(dāng)這些命令在邏輯上連接在一起時,所述命令包括所述模塊并實現(xiàn)所述模塊的指定目標(biāo)。當(dāng)然,可執(zhí)行代碼的模塊可以為一個或許多指令,并且甚至可以分布在若干不同的代碼段中、分布在不同的程序中并可分布在多個存儲設(shè)備中。類似地,可以在此在模塊內(nèi)識別并示出運算數(shù)據(jù),并且可以以任何合適的形式體現(xiàn)所述運算數(shù)據(jù)并在任意合適類型的數(shù)據(jù)結(jié)構(gòu)中組織所述運算數(shù)據(jù)。所述運算數(shù)據(jù)可作為單數(shù)據(jù)集收集,或者可以分布在不同的位置(包括不同的存儲設(shè)備),并且可在系統(tǒng)或網(wǎng)絡(luò)中至少部分地僅作為電信號存在。當(dāng)模塊或模塊的部分在軟件中實施時,軟件部分被存儲在一個或多個計算機可讀媒體上。本說明書全文所提到的“一種實施方式”、“實施方式”或類似的措辭意味著與實施方式一起描述的特定的特征、結(jié)構(gòu)或特點包括在本發(fā)明的至少一種實施方式中。因此,在本說明書全文中,短語“在一種實施方式中”、“在實施方式中”及類似措辭的出現(xiàn)可(但未必)涉及同一實施方式。提及信號承載媒介可采取任何能夠生成信號、導(dǎo)致信號生成或者導(dǎo)致在數(shù)字處理設(shè)備上執(zhí)行機器可讀命令程序的形式。信號承載媒介可通過下述設(shè)備體現(xiàn)傳輸線、光盤、數(shù)字視頻光盤、磁帶、伯努利驅(qū)動器、磁盤、穿孔卡、閃存、集成電路或其他數(shù)字處理裝置存儲設(shè)備。此外,描述的本發(fā)明的特征、結(jié)構(gòu)或特點可以以任何合適的方式合并在一種或多種實施方式中。在下文的說明中,提供了大量的具體細節(jié)以全面理解本發(fā)明的實施方式,所述具體細節(jié)比如編程、軟件模塊、用戶選擇、網(wǎng)絡(luò)事務(wù)、數(shù)據(jù)庫查詢、數(shù)據(jù)庫結(jié)構(gòu)、硬件模塊、硬件電路、硬件芯片等等的實例。然而,相關(guān)技術(shù)領(lǐng)域的技術(shù)人員可認識到本發(fā)明在可在不具備一個或多個具體實施方式
的具體細節(jié)的情況下被實施,或者本發(fā)明可結(jié)合其他方法、組件、材料等實施。在其他例子中,并沒有顯示或描述公知的結(jié)構(gòu)、材料或操作以使本發(fā)明變得清晰。此處包括的示意性流程圖大體上是作為邏輯流程圖來列舉的。就這點而言,描述的順序和標(biāo)記的步驟是本方法的一種實施方式的指示性說明。可設(shè)想其他在功能上、邏輯上或效果上與圖示方法的一個或多個步驟(或其中部分)相同的步驟和方法。此外,使用的格式和符號被用于解釋方法的邏輯步驟并被理解為不限制本方法的范圍。盡管在流程圖中可使用不同的箭頭類型和線條類型,但這些箭頭類型和線條類型被理解為不限制相應(yīng)方法的范圍。的確,一些箭頭或其他連接器可用于僅表示方法的邏輯流程。例如,箭頭可表示描述的方法的列舉的步驟之間的未指明間期的等待或監(jiān)測時期。此外,特定方法的步驟的順序可或可不嚴格依照所示的對應(yīng)步驟`的順序。固態(tài)存儲系統(tǒng)圖1A是示意性框圖,示出了根據(jù)本發(fā)明的用于固態(tài)存儲設(shè)備內(nèi)的數(shù)據(jù)管理的系統(tǒng)100的一種實施方式。系統(tǒng)100包括固態(tài)存儲設(shè)備102、固態(tài)存儲控制器104、寫入數(shù)據(jù)管道106、讀取數(shù)據(jù)管道108、固態(tài)存儲器110、計算機112、客戶端114和計算機網(wǎng)絡(luò)116,這些裝置描述如下。系統(tǒng)100包括至少一個固態(tài)存儲設(shè)備102。在另一種實施方式中,系統(tǒng)100包括兩個或更多個固態(tài)存儲設(shè)備102,每個固態(tài)存儲設(shè)備102可包括非易失性的、固態(tài)的存儲器110,所述非易失性的、固態(tài)的存儲器例如納米隨機存取存儲器(“納米RAM”或者“NRAM”)、磁電阻式RAM( “MRAM”)、動態(tài)RAM( “DRAM”)、相變RAM( “PRAM”)閃存等等。結(jié)合圖2和圖3更詳細地描述了固態(tài)存儲設(shè)備102。固態(tài)存儲設(shè)備102被描述成位于通過計算機網(wǎng)絡(luò)116與客戶端114相連的計算機112內(nèi)。在一種實施方式中,固態(tài)存儲設(shè)備102位于計算機112內(nèi)部并且采用系統(tǒng)總線連接,所述系統(tǒng)總線例如快速外圍組件互連(“PC1-e”)總線、串行高級技術(shù)附件(“串行ΑΤΑ”)總線或類似總線。在另一種實施方式吧,固態(tài)存儲設(shè)備102位于計算機112外部,并且通過通用串行總線(“USB”)、電氣與電子工程師協(xié)會(“IEEE”)1394總線(“火線”)或類似總線連接。在其他實施方式中,固態(tài)存儲設(shè)備102采用下述方式與計算機112相連接外圍組件互連(“PCIIexpress總線、外部電或光總線擴展或者總線網(wǎng)絡(luò)解決方案,所述總線網(wǎng)絡(luò)解決方案例如無限帶寬或快速PCI高級交換(“PCIe-AS”)或類似技術(shù)。在不同的實施方式中,固態(tài)存儲設(shè)備102可以是雙列直插式內(nèi)存模塊(“DMM”)、子卡或微型模塊的形式。在另一種實施方式中,固態(tài)存儲設(shè)備102是位于機架式刀片內(nèi)的元件。在另一種實施方式中,固態(tài)存儲設(shè)備102包含在直接集成到高級集成裝置(如主板、筆記本電腦、圖形處理器)的封裝內(nèi)。在另一種實施方式中,包括固態(tài)存儲設(shè)備102的單獨元件直接集成到高級集成裝置上而不經(jīng)過中間封裝。固態(tài)存儲設(shè)備102包括一個或多個固態(tài)存儲控制器104,每個固態(tài)存儲控制器104可包括寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108,而且,每個固態(tài)存儲控制器104還包括固態(tài)存儲器110,這將在下文中結(jié)合圖2和圖3詳細說明。系統(tǒng)100包括一臺或多臺連接到固態(tài)存儲設(shè)備102的計算機112。計算機112可以是主機、服務(wù)器、存儲區(qū)域網(wǎng)絡(luò)(“SAN”)的存儲控制器、工作站、個人計算機、筆記本電腦、手持式計算機、超級計算機、計算機集群、網(wǎng)絡(luò)交換機、路由器或設(shè)備、數(shù)據(jù)庫或存儲設(shè)備、數(shù)據(jù)采集或數(shù)據(jù)采集系統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設(shè)備、無線設(shè)備或類似設(shè)備。在另一種實施方式中,計算機112可以是客戶端,并且固態(tài)存儲設(shè)備102自主運行以應(yīng)答發(fā)送自計算機112的數(shù)據(jù)請求。在這種實施方式中,計算機112和固態(tài)存儲設(shè)備102可采用下列方式連接計算機網(wǎng)絡(luò)、系統(tǒng)總線或其他適于在計算機112和自主固態(tài)存儲設(shè)備102之間連接的通信手段。在一種實施方式中,系統(tǒng)100包括一個或多個客戶端114,所述一個或多個客戶端114通過一個或多個計算機網(wǎng)絡(luò)116連接到一臺或多臺計算機112??蛻舳?14可以是主機、服務(wù)器、SAN的存儲控制器、工作站、個人計算機、筆記本電腦、手持式計算機、超級計算機、計算機集群、網(wǎng)絡(luò)交換機、路由器或設(shè)備、數(shù)據(jù)庫或存儲設(shè)備、數(shù)據(jù)采集或數(shù)據(jù)采集系統(tǒng)、診斷系統(tǒng)、測試系統(tǒng)、機器人、便攜式電子設(shè)備、無線設(shè)備或類似設(shè)備。計算機網(wǎng)絡(luò)116可包括因特網(wǎng)、廣域網(wǎng)(“WAN”)、城域網(wǎng)(“MAN”)、局域網(wǎng)(“LAN”)、令牌環(huán)網(wǎng)、無線網(wǎng)絡(luò)、光纖通道網(wǎng)絡(luò)、SAN、網(wǎng)絡(luò)附屬存儲(“NAS”)、ESCON或類似網(wǎng)絡(luò)、或者是網(wǎng)絡(luò)的任意組合。計算機網(wǎng)絡(luò)116還可包括來自IEEE802系列網(wǎng)絡(luò)技術(shù)中的網(wǎng)絡(luò),如以太網(wǎng)、令牌環(huán)網(wǎng)、WiF1、WiMax及類似網(wǎng)絡(luò)。計算機網(wǎng)絡(luò)116可包括服務(wù)器、交換機、路由器、電纜、無線電和其他用于促進計算機112和客戶端114的網(wǎng)絡(luò)連接的設(shè)備。在一種實施方式中,系統(tǒng)100包括通過計算機網(wǎng)絡(luò)116進行對等通信的多臺計算機112。在另一種實施方式中,系統(tǒng)100包括通過計算機網(wǎng)絡(luò)116進行對等通信的多個固態(tài)存儲設(shè)備102。本領(lǐng)域技術(shù)人員可認識到其他計算機網(wǎng)絡(luò)116可包括一個或多個計算機網(wǎng)絡(luò)116以及相關(guān)設(shè)備,所述相關(guān)設(shè)備具有一個或多個客戶端114、其他計算機或與一臺或多臺計算機112相連的一個或多個固態(tài)存儲設(shè)備102之間的單個或冗余連接,所述其他計算機具有一個或多個固態(tài)存儲設(shè)備102。在一種實施方式中,系統(tǒng)100包括兩個或更多個通過計算機網(wǎng)絡(luò)118連接到客戶端116的固態(tài)存儲設(shè)備102,而不包括計算機112。存儲控制器管理的對象圖1B是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設(shè)備內(nèi)的對象管理的系統(tǒng)101的一種實施方式。系統(tǒng)101包括一個或多個存儲設(shè)備150 (每一個存儲設(shè)備150都具有存儲控制器152和一個或多個數(shù)據(jù)存儲設(shè)備154)和一個或多個請求設(shè)備155。存儲設(shè)備152聯(lián)網(wǎng)在一起并與一個或多個請求設(shè)備155連接。請求設(shè)備155將對象請求發(fā)給存儲設(shè)備150a。對象請求可以是創(chuàng)建對象的請求、向?qū)ο髮懭霐?shù)據(jù)的請求、從對象讀取數(shù)據(jù)的請求、刪除對象的請求、檢查對象的請求、復(fù)制對象的請求及類似請求。本領(lǐng)域技術(shù)人員會認識到其他對象請求。在一種實施方式中,存儲控制器152和數(shù)據(jù)存儲設(shè)備154是分離的設(shè)備。在另一種實施方式中,存儲控制器152和數(shù)據(jù)存儲設(shè)備154集成到一個存儲設(shè)備150上。在另一種實施方式中,數(shù)據(jù)存儲設(shè)備154為固態(tài)存儲器110,而存儲控制器為固態(tài)存儲設(shè)備控制器202。在其他實施方式中,數(shù)據(jù)存儲設(shè)備154可以為硬盤驅(qū)動器、光驅(qū)動器、磁帶存儲器或類似存儲設(shè)備。在另一種實施方式中,存儲設(shè)備150可包括兩個或更多個不同類型的數(shù)據(jù)存儲設(shè)備154。在一種實施方式中,數(shù)據(jù)存儲設(shè)備154為固態(tài)存儲器110,并且被布置為固態(tài)存儲元件216、218、220的陣列。在另一種實施方式中,固態(tài)存儲器110被布置在兩個或更多個內(nèi)存庫(bank)214a-n內(nèi)。下文結(jié)合圖2B更詳細地描述了固態(tài)存儲器110。存儲設(shè)備150a_n可聯(lián)網(wǎng)在一起并且可作為分布式存儲設(shè)備運行。與請求設(shè)備155連接的存儲設(shè)備150a控制發(fā)送到所述分布式存儲設(shè)備的對象請求。在一種實施方式中,存儲設(shè)備150和關(guān)聯(lián)的存儲控制器152管理對象并對請求設(shè)備155來說表現(xiàn)為分布式對象文件系統(tǒng)。在這種情況下,一類分布式對象文件系統(tǒng)的實例是并行對象文件系統(tǒng)。在另一種實施方式中,存儲設(shè)備150和關(guān)聯(lián)的存儲控制器152管理對象并對請求設(shè)備155來說表現(xiàn)為分布式對象文件服務(wù)器。在這種情況下,一類分布式對象文件服務(wù)器的實例是并行對象文件服務(wù)器。在這些和其他實施方式中,請求設(shè)備155可只管理對象或者與存儲設(shè)備150結(jié)合而參與管理對象,這通常并不將存儲設(shè)備150的功能限制在為其他客戶端114充分管理對象的范圍內(nèi)。在退化情況下,每個分布式存儲設(shè)備、分布式對象文件系統(tǒng)和分布式對象文件服務(wù)器能作為單個設(shè)備獨立運行。聯(lián)網(wǎng)的存儲設(shè)備150a-n可作為分布式存儲設(shè)備、分布式對象文件系統(tǒng)、分布式對象文件服務(wù)器和它們的任意組合運行,所述組合具有一個或多個為一個或多個請求設(shè)備155配置的這些功能。例如,存儲設(shè)備150可配置為為第一請求設(shè)備155a作為分布式存儲設(shè)備運行,而請求設(shè)備155b作為分布式存儲設(shè)備和分布式對象文件系統(tǒng)為運行。當(dāng)系統(tǒng)101包括一個存儲設(shè)備150a時,存儲設(shè)備150a的存儲控制器152a管理對象并對請求設(shè)備155來說表現(xiàn)為對象文件系統(tǒng)或?qū)ο笪募?wù)器。在一種實施方式中,其中,存儲設(shè)備150作為分布式存儲設(shè)備聯(lián)網(wǎng)在一起,存儲設(shè)備150充當(dāng)由一個或多個分布式存儲控制器152管理的獨立驅(qū)動器冗余陣列(“RAID”)。例如,寫入對象數(shù)據(jù)段的請求導(dǎo)致所述數(shù)據(jù)段根據(jù)RAID級別在數(shù)據(jù)存儲設(shè)備154a-n中被條帶化為具有奇偶校驗條帶的條帶。這種布置的一個好處是這種對象管理系統(tǒng)可在單獨的存儲設(shè)備150 (無論是存儲控制器152、數(shù)據(jù)存儲設(shè)備154或存儲設(shè)備150的其他組件)出現(xiàn)故障時繼續(xù)使用。當(dāng)冗余網(wǎng)絡(luò)用于互連存儲設(shè)備150和請求設(shè)備155時,所述對象管理系統(tǒng)可在出現(xiàn)網(wǎng)絡(luò)故障的情況下(只要網(wǎng)絡(luò)中的一個仍在運行)繼續(xù)使用。具有一個存儲設(shè)備150a的系統(tǒng)101還可包括多個數(shù)據(jù)存儲設(shè)備154a,而存儲設(shè)備150a的存儲控制器152a可作為RAID控制器運行并在存儲設(shè)備150a的數(shù)據(jù)存儲設(shè)備154a間分割數(shù)據(jù)段,存儲設(shè)備150a的存儲控制器152a可包括根據(jù)RAID級別的奇偶校驗條帶。在一種實施方式中,其中,一個或多個存儲設(shè)備150a_n是具有固態(tài)存儲設(shè)備控制器202和固態(tài)存儲器110的固態(tài)存儲設(shè)備102,固態(tài)存儲設(shè)備102可配置為DIMM配置、子卡、微型模塊等,并保留在計算機112內(nèi)。計算機112可以是服務(wù)器或具有固態(tài)存儲設(shè)備102的類似設(shè)備,固態(tài)存儲設(shè)備102聯(lián)網(wǎng)在一起并作為分布式RAID控制器運行。有利地是,存儲設(shè)備102可采用PC1-e、PCIe-AS、無限帶寬或其他高性能總線、交換總線、網(wǎng)絡(luò)總線或網(wǎng)絡(luò)連接,并且可提供極致密型、高性能的RAID存儲系統(tǒng),在該系統(tǒng)中,單獨的或分布式固態(tài)存儲控制器202自主地在固態(tài)存儲器110a-n間條帶化數(shù)據(jù)段。在一種實施方式中,請求設(shè)備155用于與存儲設(shè)備150通信的同一網(wǎng)絡(luò)可被對等存儲設(shè)備150a使用,以與對等存儲設(shè)備150b-n通信以實現(xiàn)RAID功能。在另一種實施方式中,可為了 RAID的目的而在存儲設(shè)備150間使用單獨的網(wǎng)絡(luò)。在另一種實施方式中,請求設(shè)備155可通過向存儲設(shè)備150發(fā)送冗余請求而參與RAID進程。例如,請求設(shè)備155可向第一存儲設(shè)備150a發(fā)送第一對象寫入請求,而向第二存儲設(shè)備150b發(fā)送具有相同數(shù)據(jù)段的第二對象寫入請求以實現(xiàn)簡單的鏡像。當(dāng)具有在存儲設(shè)備102內(nèi)進行對象處理的能力時,只有存儲控制器152具有采用一個RAID級別存儲一個數(shù)據(jù)段或?qū)ο蟮哪芰?,而采用不同的RAID級別或不采用RAID條帶化來存儲另一數(shù)據(jù)段或?qū)ο?。這些多個RAID群組可與存儲設(shè)備150內(nèi)的多個分區(qū)相關(guān)聯(lián)。可同時在各種RAID群組間支持RAIDO、RAIDU RAID5、RAID6和復(fù)合RAID類型10、50、60,所述RAID群組包括數(shù)據(jù)存儲設(shè)備154a-n。本領(lǐng)域技術(shù)人員可認識到還可同時支持的其他RAID類型和配置。而且,由于存儲控制器152像RAID控制器一樣自主運行,所述RAID控制器能夠執(zhí)行漸進RAID并能夠?qū)⒃跀?shù)據(jù)存儲設(shè)備154間條帶化的具有一個RAID級別的對象或?qū)ο蟮哪承┎糠洲D(zhuǎn)換為另一 RAID級別,轉(zhuǎn)換時請求設(shè)備155不受影響、不參與或者甚至不探測RAID級別的變化。在優(yōu)選實施方式中,促進RAID配置從一個級別變?yōu)榱硪患墑e可在對象或甚至在包基上自主實現(xiàn),并且可由運行在存儲設(shè)備150或存儲控制器152中的一個上的分布式RAID控制模塊初始化。通常,RAID漸進是從高性能和低效率的存儲配置(如RAID1)轉(zhuǎn)換為低性能和高存儲效率的存儲配置(如RAID5),其中,轉(zhuǎn)換是基于讀取頻率被動態(tài)地初始化。但是,可以發(fā)現(xiàn),從RAID5到RAIDl的漸進也是可能的??膳渲闷渌糜诔跏蓟疪AID漸進的進程,或者可由客戶端或外部代理(如存儲系統(tǒng)管理服務(wù)器請求)請求該進程。本領(lǐng)域技術(shù)人員可認識到具有存儲控制器152的存儲設(shè)備102的其他特征和優(yōu)點,該存儲控制器152自主管理對象。用于存儲控制器管理的對象的裝置圖2A是示意性框圖,示出了根據(jù)本發(fā)明的用于存儲設(shè)備內(nèi)的對象管理的裝置200的一種實施方式。裝置200包括存儲控制器152,該存儲控制器152具有對象請求接收器模塊260、解析模塊262、命令執(zhí)行模塊264、對象索引模塊266、對象請求排隊模塊268、具有消息模塊270的封包器302、及對象索引重建模塊272,上述模塊描述如下。存儲控制器152大體上與圖1B中的系統(tǒng)102描述的存儲控制器152類似,并且可以是圖2描述的固態(tài)存儲設(shè)備控制器202。裝置200包括對象請求接收器模塊260,該對象請求接收器模塊260接收來自一個或多個請求設(shè)備155的對象請求。例如,對于存儲對象數(shù)據(jù)請求,存儲控制器152在數(shù)據(jù)存儲設(shè)備154中以數(shù)據(jù)包的形式存儲數(shù)據(jù)段,該數(shù)據(jù)存儲設(shè)備154與存儲控制器152相連接。所述對象請求通常由存儲在或?qū)⒁淮鎯υ谝粋€或多個對象數(shù)據(jù)包中的數(shù)據(jù)段指令存儲控制器管理的對象。對象請求可請求存儲控制器152創(chuàng)建對象,該對象隨后會通過可利用本地或遠程直接內(nèi)存讀取(“DMA”、“RDMA”)轉(zhuǎn)換的稍后的對象請求來填充數(shù)據(jù)。在一種實施方式中,對象請求為將對象的全部或一部分寫入先前創(chuàng)建的對象的寫入請求。在一個實例中,所述寫入請求用于對象的數(shù)據(jù)段。可將所述對象的其他數(shù)據(jù)段寫入存儲設(shè)備150或者寫入其他存儲設(shè)備152。在另一個實例中,所述寫入請求用于整個對象。在另一個實例中,所述對象請求為從由存儲控制器152管理的數(shù)據(jù)段中讀取數(shù)據(jù)。在又一種實施方式中,所述對象請求為刪除請求,以刪除數(shù)據(jù)段或?qū)ο?。有利地是,存儲控制?52能接受不僅僅寫新對象或為已存在的對象添加數(shù)據(jù)的寫入請求。例如,由對象請求接收器模塊260接收的寫入請求可包括在由存儲控制器152存儲的數(shù)據(jù)前添加數(shù)據(jù)的請求、在已存儲的數(shù)據(jù)中插入數(shù)據(jù)的請求或者替換數(shù)據(jù)的一段的請求。由存儲控制器152保持的對象索引提供了這些復(fù)雜寫操作所需要的靈活性,所述寫操作在其他存儲控制器內(nèi)不可用,但是目前僅在服務(wù)器和其他計算機文件系統(tǒng)內(nèi)的存儲控制器外可用。裝置200包括解析模塊262,該解析模塊262將所述對象請求解析為一條或多條命令。通常,解析模塊262將所述對象請求解析為一個或多個緩存。例如,所述對象請求中的一條或多條命令可被解析為命令緩存。通常,解析模塊262準(zhǔn)備對象請求,以使得所述對象請求中的信息可以被存儲控制器152理解并執(zhí)行。本領(lǐng)域技術(shù)人員會認識到將對象請求解析為一條或多條命令的解析模塊262的其他功能。裝置200包括命令執(zhí)行模塊264,該命令執(zhí)行模塊264執(zhí)行從所述對象請求解析出的命令。在一種實施方式中,命令執(zhí)行模塊264執(zhí)行一條命令。在另一種實施方式中,命令執(zhí)行模塊264執(zhí)行多條命令。通常,命令執(zhí)行模塊264解釋解析自所述對象請求的命令(如寫入命令),然后創(chuàng)建、排列并且執(zhí)行子命令。例如,解析自對象請求的寫入命令可指令存儲控制器152存儲多個數(shù)據(jù)段。所述對象請求還可包括必要屬性(如加密、壓縮等)。命令執(zhí)行模塊264可命令存儲控制器152壓縮所述數(shù)據(jù)段、加密所述數(shù)據(jù)段、創(chuàng)建一個或多個數(shù)據(jù)包并為每個數(shù)據(jù)包關(guān)聯(lián)包頭、使用媒體加密密鑰加密所述數(shù)據(jù)包、添加錯誤修正碼并將所述數(shù)據(jù)包存儲在指定位置。在指定位置存儲所述數(shù)據(jù)包,并且其他子命令還可被分解為其他更低級別的子命令。本領(lǐng)域技術(shù)人員會認識到命令執(zhí)行模塊264能執(zhí)行一條或多條解析自對象請求的命令的其他方法。裝置200包括對象索引模塊266,該對象索引模塊266在對象索引中創(chuàng)建對象項,以響應(yīng)創(chuàng)建對象或存儲所述對象數(shù)據(jù)段的存儲控制器152。通常,存儲控制器152從所述數(shù)據(jù)段中創(chuàng)建數(shù)據(jù)包,并且在存儲所述數(shù)據(jù)段時,所述數(shù)據(jù)包存儲的位置即被指定。同數(shù)據(jù)段一起接收的或作為對象請求的一部分接收的對象元數(shù)據(jù)可采用類似方法存儲。對象索引模塊266在存儲所述數(shù)據(jù)包和分配所述數(shù)據(jù)包的物理地址時創(chuàng)建進入對象索引的對象項。所述對象項包括所述對象的邏輯標(biāo)識符和一個或多個物理地址之間的映射,所述一個或多個物理地址對應(yīng)于存儲控制器152存儲一個或多個數(shù)據(jù)包和任何對象元數(shù)據(jù)包的位置。在另一種實施方式中,在存儲所述對象的數(shù)據(jù)包之前在所述對象索引中創(chuàng)建項。例如,如果存儲控制器152較早地確定存儲所述數(shù)據(jù)包的物理地址,則對象索引模塊266可較早地在所述對象索引中創(chuàng)建項。通常,當(dāng)對象請求或?qū)ο笳埱蠼M導(dǎo)致對象或數(shù)據(jù)段被修改時(可能在讀修改寫操作期間),所述對象索引模塊266更新所述對象索引中的項以符合修改的對象。在一種實施方式中,所述對象索引創(chuàng)建新對象并在所述對象索引為所述修改的對象創(chuàng)建新項。通常,當(dāng)僅有對象的一部分被修改時,所述對象包括修改過的數(shù)據(jù)包和一些保持不變的數(shù)據(jù)包。在這種情況下,所述新項包括到未變的數(shù)據(jù)包(與最初寫入它們的位置相同)的映射和到寫入新位置的修改后的對象的映射。在另一種實施方式中,對象請求接收器模塊260接收對象請求,該對象請求包括擦除數(shù)據(jù)塊或其他對象元的命令,存儲控制器152可至少存儲一個包(如擦除包,該擦除包具有對象的引用、與對象的關(guān)系和擦除的數(shù)據(jù)塊的大小的信息)。此外,這可進一步表明擦除的對象元素被填充為O。因此,擦除對象請求可用于仿真被擦除的實際的內(nèi)存或存儲器,并且,所述實際的內(nèi)存或存儲器實際上具有合適的內(nèi)存/存儲器的一部分,所述合適的內(nèi)存/存儲器實際上以O(shè)存儲在所述內(nèi)存/存儲器的單元中。有利地是,創(chuàng)建具有項(該項表明了數(shù)據(jù)段和對象元數(shù)據(jù)之間的映射)的對象索引允許存儲控制器152自主的處理和管理對象。這種能力允許在存儲設(shè)備150中十分靈活地存儲數(shù)據(jù)。一旦創(chuàng)建了對象的索引項,存儲控制器152可有效地處理后繼關(guān)于所述對象的對象請求。在一種實施方式中,存儲控制器152包括對象請求排隊模塊,該對象請求排隊模塊在解析模塊262解析之前將一個或多個由對象請求接收器模塊260接收到的對象排隊。對象請求排隊模塊268允許在接收對象請求時和在執(zhí)行所述對象請時之間的靈活性。在另一種實施方式中,存儲控制器152包括封包器302,該封包器302根據(jù)一個或多個數(shù)據(jù)段創(chuàng)建一個或多個數(shù)據(jù)包,其中,數(shù)據(jù)包的大小適于存儲在數(shù)據(jù)存儲設(shè)備154內(nèi)。在下文中結(jié)合圖3更詳細地描述封包器302。在一種實施方式中,封包器302包括為每個包創(chuàng)建包頭的消息模塊270。所述包頭包括包標(biāo)識符和包長度。所述包標(biāo)識符把所述包與對象(為該對象生成所述包)聯(lián)系起來。在一種實施方式中,由于包標(biāo)識符包含足夠的信息以確定對象和在對象內(nèi)的包含在包內(nèi)的對象元素之間的關(guān)系,因此每個包包括自包含的包標(biāo)識符。然而,更有效的優(yōu)選實施方式是在容器中存儲包。容器是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)有助于更有效的存儲數(shù)據(jù)包并幫助建立對象和數(shù)據(jù)包、元數(shù)據(jù)包和其他與存儲在容器內(nèi)的對象有關(guān)的包之間的關(guān)系。注意到存儲控制器152通常以處理作為對象的一部分接收的對象元數(shù)據(jù)的類似方式處理數(shù)據(jù)段。通常,“包”可指包含數(shù)據(jù)的數(shù)據(jù)包、包含元數(shù)據(jù)的元數(shù)據(jù)包或其他包類型的其他包。對象可存儲在一個或多個容器中,并且容器通常包括僅用于一個唯一的對象的包。對象可分布在多個容器之間。容器通常存儲在單個邏輯擦除塊內(nèi)(存儲部)并且通常不分散在邏輯擦除塊間。在一個實例中,容器可分散在兩個或更多個邏輯/虛擬頁間。通過將容器與對象關(guān)聯(lián)起來的容器標(biāo)簽確定容器。容器可包含O個到許多個包并且容器內(nèi)的這些包通常來自一個對象。包可以有許多對象元素類型(包括對象屬性元、對象數(shù)據(jù)元、對象索引元和類似的元素類型)??梢詣?chuàng)建包括不止一個對象元類型的混合包。每個包可包含O個到許多個同一類型的元。容器內(nèi)的每個包通常都包含標(biāo)識與對象關(guān)系的唯一標(biāo)識符。每個包與一個容器相關(guān)聯(lián)。在優(yōu)選實施方式中,容器被限于擦除塊,以使得在每個擦除塊的起始部分或在擦除塊的起始部分附近能發(fā)現(xiàn)容器包。這有助于將數(shù)據(jù)丟失限制在具有損壞的包頭的擦除塊范圍內(nèi)。在這種實施方式中,如果對象索引不可用并且擦除塊內(nèi)的包頭損壞,由于可能沒有可靠的機制確定后繼包的位置,從損壞的包頭到擦除塊尾的內(nèi)容可能會丟失。在另一種實施方式中,更可靠的方法是采用限于頁的邊界的容器。這種實施方式需要更多包頭開銷。在另一種實施方式中,容器可流經(jīng)頁面和擦除塊邊界。這種方法需要較少的包頭開銷,但是,如果包頭損壞,則有可能會丟失更多部分的數(shù)據(jù)。對這些實施方式來說,使用一些類型的RAID以進一步保證數(shù)據(jù)完整性是可以預(yù)期的。在一種實施方式中,裝置200包括對象索引重建模塊272,該對象索引重建模塊272采用來自存儲在數(shù)據(jù)存儲設(shè)備154中的包頭的信息重建所述對象索引中的項。在一種實施方式中,對象索引重建模塊272通過讀取包頭(以確定每個包所屬的對象)和序列信息(以確定數(shù)據(jù)或元數(shù)據(jù)在對象中所屬的位置)來重建所述對象索引的項。對象索引重建模塊272采用每個包的物理地址信息和時間戳或序列信息以創(chuàng)建包的物理地址和對象標(biāo)識符和數(shù)據(jù)段序列間的映射。對象索引重建模塊272使用時間戳或序列信息以再現(xiàn)索引變更的順序并通常因此重建最近的狀態(tài)。在另一種實施方式中,對象索引重建模塊272采用包頭信息以及容器包信息放置包以識別包的物理位置、對象標(biāo)識符和每個包的序列號,從而在所述對象索引中重建項。在一種實施方式中,在寫入數(shù)據(jù)包時,擦除塊被戳記上時間,或者賦給擦除塊序列號,并且擦除塊的時間戳或序列信息和來自容器頭和包頭的信息一起使用以重建對象索引。在另一種實施方式中,當(dāng)擦除塊恢復(fù)時,時間戳或序列信息被寫入該擦除塊。當(dāng)對象索引存儲在易失性存儲器中時,如果不能重建所述對象索引,錯誤、失電、或其他導(dǎo)致存儲控制器152未存儲所述對象索引而停工的因素可能會成為問題。對象索引重建模塊272允許所述對象索引存儲在具有易失性存儲體優(yōu)點(如快速存取)的易失性存儲體中。對象索引重建模塊272允許自主地快速重建所述對象索引,而并不需要依靠位于存儲設(shè)備150外的設(shè)備。在一種實施方式中,易失性存儲體中的所述對象索引周期性地存儲在數(shù)據(jù)存儲設(shè)備154內(nèi)。在具體的實例中,所述對象索引或“索引元數(shù)據(jù)”周期性地存儲固態(tài)存儲器110中。在另一種實施方式中,所述索引元數(shù)據(jù)存儲在固態(tài)存儲器110n(與固態(tài)存儲器IlOa-1lOn-1存儲包分離)中。獨立于數(shù)據(jù)和對象元數(shù)據(jù)管理所述索引元數(shù)據(jù),所述數(shù)據(jù)和對象元數(shù)據(jù)傳送自請求設(shè)備155并且由存儲控制器152/固態(tài)存儲控制器202管理。管理和存儲與其他來自對象的數(shù)據(jù)和元數(shù)據(jù)分離的索引元數(shù)據(jù)允許有效的數(shù)據(jù)流,同時存儲控制器152/固態(tài)存儲設(shè)備控制器202并不會不必要地處理對象元數(shù)據(jù)。在一種實施方式中,其中,由對象請求接收器模塊260接收到的對象請求包括寫入請求,存儲控制器152通過本地或遠程直接存儲器存取(“DMA”、“RDMA”)操作接收來自請求設(shè)備155的內(nèi)存的一個或多個對象數(shù)據(jù)段。在優(yōu)選實例中,存儲控制器152在一次或多次DMA或RDMA操作中從請求設(shè)備155的內(nèi)存中讀取數(shù)據(jù)。在另一實例中,請求設(shè)備155在一次或多次DMA或RDMA操作中將所述數(shù)據(jù)段寫入存儲控制器152。在另一種實施方式中,其中,所述對象請求包括讀請求,存儲控制器152在一次或多次DMA或RDMA操作中將對象的一個或多個數(shù)據(jù)段傳送給請求設(shè)備155的內(nèi)存。在優(yōu)選實例中,存儲控制器152在一次或多次DMA或RDMA操作中將數(shù)據(jù)寫入請求設(shè)備155的內(nèi)存。在另一實例中,請求設(shè)備在一次或多次DMA或RDMA操作中從存儲控制器152中讀取數(shù)據(jù)。在另一實施方式中,存儲控制器152在一次或多次DMA或RDMA操作中從請求設(shè)備155的內(nèi)存中讀取對象命令請求集。在另一實例中,請求設(shè)備155在一次或多次DMA或RDMA操作中將對象命令請求集寫入存儲控制器152。在一種實施方式中,存儲控制器152仿真塊存儲,并且在請求設(shè)備155和存儲控制器152之間通信的對象包括一個或多個數(shù)據(jù)塊。在一種實施方式中,請求設(shè)備155包括驅(qū)動器,以使得存儲設(shè)備150表現(xiàn)為塊存儲設(shè)備。例如請求設(shè)備155可與請求設(shè)備155期望數(shù)據(jù)存儲的物理地址一起發(fā)送特定大小的一組數(shù)據(jù)。存儲控制器152接收所述數(shù)據(jù)塊,并將與所述數(shù)據(jù)塊一起傳送的物理塊地址或者將物理塊地址的轉(zhuǎn)化形式作為對象標(biāo)識符。然后,存儲控制器152通過隨意地封包所述數(shù)據(jù)塊和存儲數(shù)據(jù)塊將所述數(shù)據(jù)塊存儲為對象或?qū)ο蟮臄?shù)據(jù)段。然后,對象索引模塊266利用基于物理塊的對象標(biāo)識符和存儲控制器152存儲所述數(shù)據(jù)包的實際物理位置在所述對象索引中創(chuàng)建項,所述數(shù)據(jù)包包括來自所述數(shù)據(jù)塊的數(shù)據(jù)。在另一種實施方式中,存儲控制器152通過接收塊對象仿真塊存儲。塊對象可包括塊結(jié)構(gòu)中的一個或多個數(shù)據(jù)塊。在一種實施方式中,存儲控制器152像處理任意其他對象一樣處理所述塊對象。在另一種實施方式中,對象可代表整個塊設(shè)備、塊設(shè)備的分區(qū)或塊設(shè)備的一些其他邏輯子元件或物理子元件,所述塊設(shè)備包括磁道、扇區(qū)、通道及類似設(shè)備。值得特別注意的是將塊設(shè)備RAID組重映射到支持不同RAID構(gòu)建(如漸進RAID)的對象。本領(lǐng)域技術(shù)人員會認識到將傳統(tǒng)的或未來的塊設(shè)備映射到對象的其他方法固態(tài)存儲設(shè)備圖2B是示出了根據(jù)本發(fā) 明的位于固態(tài)存儲設(shè)備102內(nèi)的固態(tài)存儲設(shè)備控制器202的一種實施方式201的示意性框圖,該固態(tài)存儲設(shè)備控制器202包括寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108。固態(tài)存儲設(shè)備控制器202可包括若干固態(tài)存儲控制器0-N,104a-n,每個固態(tài)存儲控制器都控制固態(tài)存儲器110。在描述的實施方式中,示出了兩個固態(tài)控制器固態(tài)控制器O 104a和固態(tài)控制器N 104η,并且它們中的每一個都控制固態(tài)存儲器110a-n。在描述的實施方式中,固態(tài)存儲控制器O 104a控制數(shù)據(jù)通道,以使得附屬固態(tài)存儲器IlOa存儲數(shù)據(jù)。固態(tài)存儲控制器N 104η控制與存儲的數(shù)據(jù)關(guān)聯(lián)的索引元數(shù)據(jù)通道,以使得關(guān)聯(lián)的固態(tài)存儲器IlOn存儲索引元數(shù)據(jù)。在替代的實施方式中,固態(tài)存儲設(shè)備控制器202包括具有單個固態(tài)存儲器IlOa的單個固態(tài)控制器104a。在另一種實施方式中,存在大量的固態(tài)存儲控制器104a-n和關(guān)聯(lián)的固態(tài)存儲器110a_n。在一種實施方式中,一個或多個固態(tài)控制器104a-104n-l (與它們的關(guān)聯(lián)固態(tài)存儲器IlOa-1lOn-1連接)控制數(shù)據(jù),而至少一個固態(tài)存儲控制器104η(與其關(guān)聯(lián)固態(tài)存儲器IlOn連接)控制索引元數(shù)據(jù)。在一種實施方式中,至少一個固態(tài)控制器104是現(xiàn)場可編程門陣列(“FPGA”)并且控制器功能被編入FPGA。在特定的實施方式中,F(xiàn)PGA是Xilinx 公司的FPGA。在另一種實施方式中,固態(tài)存儲控制器104包括專門設(shè)計為固態(tài)存儲控制器104的組件(如專用集成電路(“ASIC”)或自定義邏輯解決方案)。每個固態(tài)存儲控制器104通常包括寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108,結(jié)合圖3進一步描述了這兩個管道。在另一種實施方式中,至少一個固態(tài)存儲控制器104由FPGA、ASIC和自定義邏輯組件的組合組成。固態(tài)存儲器固態(tài)存儲器110是非易失性固態(tài)存儲元件216、218、220的陣列,該陣列布置在內(nèi)存庫214中并且通過雙向存儲輸入輸出(I/O)總線210并行訪問。在一種實施方式中,存儲I/O總線210能夠在任何一個時刻進行單向通信。例如,當(dāng)將數(shù)據(jù)寫入固態(tài)存儲器110時,不能從固態(tài)存儲器110中讀取數(shù)據(jù)。在另一種實施方式中,數(shù)據(jù)可同時雙向地流動。然而,雙向(如此處針對數(shù)據(jù)總線使用的)指在同一時間數(shù)據(jù)僅在一個方向流動的數(shù)據(jù)通路,但是,當(dāng)在雙向數(shù)據(jù)總線上流動的數(shù)據(jù)被阻止時,數(shù)據(jù)可在所述雙向總線上沿相反方向流動。固態(tài)存儲元件(如SSS O. O 216a)通常被配置為芯片(一個或多個小片的封裝)或電路板上的小片。正如所描述的那樣,固態(tài)存儲元件(如216a)獨立于或半獨立于其他固態(tài)存儲元件(如218a)運行,即使這些元件被一起封裝在芯片包、芯片包的堆?;蛞恍┢渌獍?nèi)。正如所描述的,一列固態(tài)存儲元件216、218、220被指定為內(nèi)存庫214。正如所描述的,可以有“η”個內(nèi)存庫214a-n并且每個內(nèi)存庫可以有“m”個固態(tài)存儲元件216a_m,218a-m,220a-m,從而在固態(tài)存儲器110中成為固態(tài)存儲元件216、218、220的n*m陣列。在一種實施方式中,固態(tài)存儲器IlOa在每個內(nèi)存庫214(有8個內(nèi)存庫214)中包括20個固態(tài)存儲元件216、218、220,并且,固態(tài)存儲器IlOn在每個內(nèi)存庫214中(只有一個內(nèi)存庫214)包括兩個固態(tài)存儲元件216、218。在一種實施方式中,每個固態(tài)存儲元件216、218、220由單層單元(“SLC”)設(shè)備組成。在另一種實施方式中,每個固態(tài)存儲元件216、218、220由多層單元(“MLC”)設(shè)備組成。在一種實施方式中,用于多個內(nèi)存庫的固態(tài)存儲元件被封包在一起,所述多個內(nèi)存庫共享公用存儲I/o總線210a行(如216b、218b、220b)。在一種實施方式中,固態(tài)存儲兀件216、218、220的每個芯片可具有一個或多個小片,而一個或多個芯片垂直堆疊且每個小片可被獨立存取。在另一種實施方式中,固態(tài)存儲元件(如SSS 0.0 216a)的每個小片可具有一個或多個虛擬小片,每個芯片可具有一個或多個小片,而一個或多個小片中的一些或全部垂直堆疊且每個虛擬小片可被獨立存取。
在一種實施方式中,每組有四個堆,每堆有兩個小片垂直堆疊,從而形成8個存儲元件(如SSS O. O-SSS O. 8)216a-220a,每個存儲元件位于分離的內(nèi)存庫214a-n內(nèi)。在另一種實施方式中,20個存儲元件(如SSS O. O-SSS 20. O) 216形成虛擬內(nèi)存庫214a,因此八個虛擬內(nèi)存庫中的每一個都具有20個存儲元件GnSSSO. 0-SSS20. 8) 216、218、220。通過存儲I/O總線210將數(shù)據(jù)發(fā)送到固態(tài)存儲器110,并發(fā)送到存儲元件(SSS O. O-SSS O. 8) 216a,218a、220a的特定組的所有存儲元件。存儲控制總線212a用于選擇特定的內(nèi)存庫(如內(nèi)存庫-0214a),從而通過連接到所有內(nèi)存庫214的存儲I/O總線210接收到的數(shù)據(jù)僅被寫入選定的內(nèi)存庫214a。在優(yōu)選實施方式中,存儲I/O總線210由一個或多個獨立I/O總線(包括210a.a-m,210n. a-m的“IIOBa-m”)組成,其中,每一行內(nèi)的固態(tài)存儲元件共享獨立I/O總線中的一條,所述獨立I/O總線中的一條平行訪問每個固態(tài)存儲元件216、218、220,從而使得同時訪問所有的內(nèi)存庫214。例如,存儲I/O總線210的一個通道可同時訪問每個內(nèi)存庫214a-n的第一固態(tài)存儲元件216a、218a、220a。存儲I/O總線210的第二通道可同時訪問每個內(nèi)存庫214a-n的第二固態(tài)存儲元件216b、218b、220b。固態(tài)存儲元件216、218、220的每一行都被同時訪問。在一種實施方式中,其中,固態(tài)存儲元件216、218、220是多層的(物理堆疊的),固態(tài)存儲元件216、218、220的所有物理層被同時訪問。正如此處所使用的,“同時”還包括幾乎同時的訪問,其中,以略有不同的時間間隔訪問設(shè)備以避免切換噪聲。在這種情況下,同時被用于與連續(xù)的或系列的訪問相區(qū)別,其中,命令和/或數(shù)據(jù)被單獨地并相繼地發(fā)送。通常,采用存儲控制總線212獨立地選擇內(nèi)存庫214a_n。在一種實施方式中,采用芯片選通或芯片選擇來選擇內(nèi)存庫214。當(dāng)芯片選擇和芯片使能均可用時,存儲控制總線212可選擇多層固態(tài)存儲元件216、218、220中的一層。在其他實施方式中,存儲控制總線212使用其他命令來單獨地選擇多層固態(tài)存儲元件216、218、220中的一層。還可通過控制和地址信息的結(jié)合來選擇固態(tài)存儲元件216、218、220,所述控制和地址信息在存儲I/O總線210和存儲控制總線212上傳輸。在一種實施方式中,每個固態(tài)存儲元件216、218、220被分割成擦除塊,并且每個擦除塊被分割成頁。典型的頁的容量為2000字節(jié)(“2kB”)。在一個實例中,固態(tài)存儲元件(如SSS O. O)包括兩個寄存器并能編程為兩頁,從而雙寄存器固態(tài)存儲元件216、218、220具有4kB的容量。20個固態(tài)存儲元件216、218、220的內(nèi)存庫214就會有80kB的頁訪問容量,同時同一地址流出存儲I/O總線210的通道。在固態(tài)存儲元件216、218、220的內(nèi)存庫214中的這一組80kB大小的頁可稱為虛擬頁。類似地,內(nèi)存庫214a的每個存儲元件216a-m的擦除塊可被分組以形成虛擬塊。在優(yōu)選實施方式中,當(dāng)在固態(tài)存儲元件216、218、220中接收到擦除命令時,擦除位于固態(tài)存儲元件216、218、220內(nèi)的頁擦除塊。然而,在固態(tài)存儲元件216、218、220內(nèi)的擦除塊、頁、平面層或其他邏輯和物理部分的大小和數(shù)量預(yù)計會隨著技術(shù)的進步而變化,可以預(yù)期的是,與新配置一致的許多實施例是可能的并與本文的一般描述相一致。通常,當(dāng)將包寫入固態(tài)存儲元件216、218、220內(nèi)的特定位置時,其中,擬將所述包寫入特定頁內(nèi)的位置,所述特定頁對應(yīng)于特定內(nèi)存庫的特定元件的特定擦除塊的頁,在發(fā)送所述包之后通過存儲I/o總線210發(fā)送物理地址。所述物理地址包含足夠的信息,以使得固態(tài)存儲元件216、218、220將所述包導(dǎo)入頁內(nèi)的指定位置。由于存儲元件行(如SSSO. O-SSS O. N 216a,218a,220a)上的存儲元件通過存儲I/O總線210a. a內(nèi)的合適總線同時被訪問,為了到達合適的頁并將所述數(shù)據(jù)包寫入在存儲元件行(SSS O. O-SSS O. N 216a、218a、220a)中具有相似地址的頁,存儲控制總線212同時選擇內(nèi)存庫214a(包括具有要將所述數(shù)據(jù)包寫入其內(nèi)的正確頁的固態(tài)存儲元件SSS 0.0 216a)。類似地,在存儲I/O總線210上傳輸?shù)淖x命令需要同時在存儲控制總線212上傳輸?shù)拿?,以選擇單個的內(nèi)存庫214a和內(nèi)存庫214內(nèi)的合適頁。在優(yōu)選實施方式中,讀命令讀取整個頁,并且由于在內(nèi)存庫214內(nèi)存在許多并行的固態(tài)存儲元件216、218、220,讀命令讀取整個虛擬頁。然而,所述讀命令可分割為子命令,這將在下文中結(jié)合內(nèi)存庫交錯進行解釋。還可以在寫操作中訪問虛擬頁??赏ㄟ^存儲I/O總線210發(fā)出的擦除塊擦除命令以擦除擦除塊,該擦除塊具有特定的擦除塊地址以擦除特定的擦除塊。通常,可通過存儲I/o總線210的并行通路發(fā)送擦除塊擦除命令以擦除虛擬擦除塊,每個虛擬擦除塊具有特定的擦除塊地址以擦除特定的擦除塊。同時,通過存儲控制總線212選擇特定的內(nèi)存庫(如內(nèi)存庫-0214a)以防止擦除所有的內(nèi)存庫(內(nèi)存庫1-N 214b-n)中的具有類似地址的擦除塊。還可采用存儲I/O總線210和存儲控制總線212的結(jié)合將其他命令發(fā)送到特定位置。本領(lǐng)域技術(shù)人員會認識到采用雙向存儲I/O總線210和存儲控制總線212選擇特定存儲單元的其他方法。
在一種實施方式中,將包順頁序地寫入固態(tài)存儲器110。例如,包流到存儲元件216的內(nèi)存庫214a的存儲寫入緩沖器,并且當(dāng)所述緩沖器飽和時,所述包被編程入指定的虛擬頁。然后所述包再次填充所述存儲寫入緩沖器,并且當(dāng)所述存儲緩沖器再次飽和時,所述包被寫入下一虛擬頁。所述下一個虛擬頁可位于同一個內(nèi)存庫214a內(nèi)或可位于另一個內(nèi)存庫(如214b)內(nèi)。這個過程(一個虛擬頁接一個虛擬頁)通常一直持續(xù)到虛擬塊被填滿時。在另一種實施方式中,當(dāng)這個過程(一個虛擬擦除塊接一個虛擬擦除塊)持續(xù)時,數(shù)據(jù)流可繼續(xù)越過虛擬擦除塊邊界。在讀、修改、寫操作中,在讀操作中定位并讀取與所述對象關(guān)聯(lián)的數(shù)據(jù)包。已被修改的修改對象的數(shù)據(jù)段并不寫入讀取它們的位置。取而代之,修改的數(shù)據(jù)段再次被轉(zhuǎn)化為數(shù)據(jù)包并隨后被寫入正在被寫入的虛擬頁中的下一個可用位置。各個數(shù)據(jù)包的所述對象索引項被修改為指向包含已修改的數(shù)據(jù)段的包。所述對象索引中用于與同一對象(未被修改)關(guān)聯(lián)的數(shù)據(jù)包的項(或多個項)會包括指向未被修改的數(shù)據(jù)包的源位置的指針。因此,如果源對象保持不變(例如保持所述對象的先前版本不變),所述源對象將在所述對象索引中具有指向所有與最初寫入的一樣的數(shù)據(jù)包的指針。新對象將在所述對象索引中具有指向一些源數(shù)據(jù)包的指針和指向正在被寫入的虛擬頁中的修改的數(shù)據(jù)包的指針。在復(fù)制操作中,所述對象索引包括用于源對象的項,該源對象映射到若干存儲在固態(tài)存儲器110中的包。當(dāng)復(fù)制完拷貝時,創(chuàng)建了新對象并在所述對象索引中創(chuàng)建將所述新對象映射到源包的新項。還將所述新對象寫入固態(tài)存儲器110,且所述新對象的地址映射到所述對象索引中的新項。新對象包可用于確定在源對象中的包,該包被引用以防在未復(fù)制的源對象中發(fā)生改變并以防對象索引丟失或損壞。有利地是,順序地寫入包有助于更平滑地使用固態(tài)存儲器110并允許固態(tài)存儲設(shè)備控制器202監(jiān)測固態(tài)存儲器110內(nèi)的存儲熱點和不同虛擬頁的層使用狀況。相繼地寫入包還可有助于建立強大、高效的垃圾收集系統(tǒng),這將在下文中詳細描述。本領(lǐng)域技術(shù)人員會認識到順序地存儲數(shù)據(jù)包的其他好處。固態(tài)存儲設(shè)備控制器在不同的實施方式中,固態(tài)存儲設(shè)備控制器202還可包括數(shù)據(jù)總線204、局部總線206、緩沖控制器208、緩沖器O-N 222a-n,主控制器224、直接存儲器存取(“DMA”)控制器226、存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài)隨機存儲器陣列232、管理控制器234、管理總線236、連接系統(tǒng)總線240的網(wǎng)橋238和雜項邏輯塊242,這些將在下文中描述。在其他實施方式中,系統(tǒng)總線240與一個或多個網(wǎng)絡(luò)接口卡(“NIC”) 244相連接,這些網(wǎng)絡(luò)接口卡中的一些可包括遠程DMA( “RDMA”)控制器246、一個或多個中央處理器(“CPU”) 248、一個或多個外部存儲器控制器250和關(guān)聯(lián)的外部存儲器陣列252、一個或多個存儲控制器254、對等控制器256和專用處理器258,這將在下文描述。連接到系統(tǒng)總線240的組件244-258可位于計算內(nèi)112內(nèi)或者可以為其他設(shè)備。通常,固態(tài)存儲控制器104通過存儲I/O總線210與固態(tài)存儲器110進行數(shù)據(jù)通信。在典型的實施方式中,固態(tài)存儲器布置在內(nèi)存庫214內(nèi),且每個內(nèi)存庫214包括多個并行訪問的存儲元件216、218、220,存儲I/O總線210是多條總線的陣列,每一條總線用于內(nèi)存庫214內(nèi)的存儲元件216、218、220的每一行。正如此處所使用的,術(shù)語“存儲I/O總線”可指一條存儲I/O總線210或多條獨立的數(shù)據(jù)總線204的陣列。在優(yōu)選實施方式中,訪問存儲元件的行(如216、218a、220a)的每條存儲I/O總線210可包括在存儲元件216、218a、220a的行中訪問的存儲部(如擦除塊)的邏輯-物理映射。如果第一存儲部失效、部分失效、不可訪問或出現(xiàn)一些其他問題時,這種映射允許映射到存儲部的物理地址的邏輯地址重映射到不同的存儲部。相對于圖3中重映射模塊314進一步解釋了重映射。還可通過系統(tǒng)總線240、網(wǎng)橋238、局部總線206、緩沖器22并最終通過數(shù)據(jù)總線204將數(shù)據(jù)從請求設(shè)備155傳送到固態(tài)存儲控制器104。數(shù)據(jù)總線204通常連接到一個或多個由緩沖控制器208控制的緩沖器222a-n。緩沖控制器208通常控制數(shù)據(jù)從局部總線206傳遞到緩沖器222并通過數(shù)據(jù)總線204傳遞到管道輸入緩沖器306和輸出緩沖器330。為了解決時鐘域差異、防止數(shù)據(jù)沖突等等,緩沖控制器208通常控制在緩沖器222中暫時存儲來自請求設(shè)備的數(shù)據(jù)的方式,并控制此后傳送給數(shù)據(jù)總線204(或相反)的方式。緩沖控制器208通常與主控制器224結(jié)合使用以協(xié)調(diào)數(shù)據(jù)流。當(dāng)數(shù)據(jù)到達時,所述數(shù)據(jù)會到達系統(tǒng)總線240并通過網(wǎng)橋238傳遞給局部總線206.通常,數(shù)據(jù)在主控制器 224和緩沖控制器208的控制下從局部總線206傳遞給一個或多個數(shù)據(jù)緩沖器222。然后,所述數(shù)據(jù)通過固態(tài)控制器104從緩沖器222流向數(shù)據(jù)總線204并到達固態(tài)存儲器110 (如NAND閃存或其他存儲媒體)。在優(yōu)選實施方式中,數(shù)據(jù)與與所述數(shù)據(jù)一起到達的關(guān)聯(lián)的帶外元數(shù)據(jù)(“對象元數(shù)據(jù)”)采用一個或多個的數(shù)據(jù)通道被送達,所述數(shù)據(jù)通道包括一個或多個固態(tài)存儲控制器104a-104n-l和關(guān)聯(lián)的固態(tài)存儲器llOa-llOn-Ι,而至少一個通道(固態(tài)存儲控制器104η、固態(tài)存儲器IlOn)用于帶內(nèi)元數(shù)據(jù)(如索引信息和其他固態(tài)存儲設(shè)備102內(nèi)部生成的元數(shù)據(jù))。局部總線206通常為雙向總線或總線組,所述雙向總線或總線組允許數(shù)據(jù)和命令在固態(tài)存儲設(shè)備控制器202內(nèi)部的設(shè)備間通信,也允許命令和數(shù)據(jù)在固態(tài)存儲設(shè)備102內(nèi)部的設(shè)備和與系統(tǒng)總線240連接的設(shè)備244-258之間通信。網(wǎng)橋238有助于在局部總線206和系統(tǒng)總線240之間的通信。本領(lǐng)域技術(shù)人員會認識到其他實施方式,如總線240、206、204,210和網(wǎng)橋238的環(huán)結(jié)構(gòu)或交換式星形配置和功能。系統(tǒng)總線240通常是計算機、安裝有或連接有固態(tài)存儲設(shè)備102的其他設(shè)備的總線。在一種實施方式中,系統(tǒng)總線240可以為PC1-e總線、串行高級技術(shù)附件(“串行ΑΤΑ”)總線、并行ATA或類似總線。在另一種實施方式中,系統(tǒng)總線240為外部總線,例如小型計算機系統(tǒng)接口( “SCSI”)、防火墻、光纖通道、USB、PCIe-As或類似總線。固態(tài)存儲設(shè)備102可被封裝為適于置于設(shè)備內(nèi)部或被封裝為外部連接設(shè)備。固態(tài)存儲設(shè)備控制器202包括在固態(tài)存儲設(shè)備102內(nèi)控制較高級別功能的主控制器224。在不同的實施方式中,主控制器224通過解釋對象請求和其他請求來控制數(shù)據(jù)流,指導(dǎo)創(chuàng)建索引,該索引將與數(shù)據(jù)關(guān)聯(lián)的對象標(biāo)識符映射到關(guān)聯(lián)的數(shù)據(jù)(或協(xié)調(diào)的DMA請求等)的物理地址。主控制器224完全地或部分地控制此處描述的許多功能。在一種實施方式中,主控制器224采用嵌入式控制器。在另一種實施方式中,主控制器224采用局部存儲器,如動態(tài)存儲器陣列230 (動態(tài)隨機存取存儲器“DRAM”)、靜態(tài)存儲器陣列323 (靜態(tài)隨機存取存儲器“SRAM”)等。在一種實施方式中,采用主控制器224控制局部存儲器。在另一實施方式中,主控制器通過存儲器控制器228訪問局部存儲器。在另一種實施方式中,所述主控制器運行Linux服務(wù)器并可支持各種常用服務(wù)器接口,如萬維網(wǎng)、超文本標(biāo)記語言(“HTML”)等。在另一種實施方式中,主控制器224采用納米處理器。可采用可編程或標(biāo)準(zhǔn)邏輯或上述控制器類型的任意組合來構(gòu)建主控制器224。本領(lǐng)域技術(shù)人員會認識到主控制器的許多實施方式。在一種實施方式中,其中,存儲設(shè)備152/固態(tài)存儲設(shè)備控制器202管理多個數(shù)據(jù)存儲設(shè)備/固態(tài)存儲器110a-n,主控制器224在內(nèi)部控制器(如固態(tài)存儲控制器104a_n)之間分配工作負載。例如,主控制器224可分割將要被寫入數(shù)據(jù)存儲設(shè)備(如固態(tài)存儲器110a-n)中的對象,使得每個附屬的數(shù)據(jù)存儲設(shè)備存儲所述對象的一部分。這種特征是允許更快地存儲和訪問對象的性能增強。在一種實施方式中,主控制器224利用FPGA實施。在另一種實施方式中,位于主控制器224內(nèi)的固件可通過管理總線236、通過網(wǎng)絡(luò)連接到NIC244的系統(tǒng)總線240或其他連接到系統(tǒng)總線240的設(shè)備更新。在一種實施方式中,管理對象的主控制器224仿真塊存儲,從而使得計算機102或其他連接到存儲設(shè)備152/固態(tài)存儲設(shè)備102的設(shè)備將存儲設(shè)備152/固態(tài)存儲設(shè)備102視為塊存儲設(shè)備并將數(shù)據(jù)發(fā)送給存儲設(shè)備152/固態(tài)存儲設(shè)備120中的特定物理地址。然后,主控制器224分配塊并像存儲對象一樣存儲數(shù)據(jù)塊。然后,主控制器224將塊和與塊一起發(fā)送的物理地址映射到由主控制器224確定的實際位置。映射存儲在對象索引中。通常,對于塊仿真來說在計算機112、客戶端114或其他希望將存儲設(shè)備152/固態(tài)存儲設(shè)備102當(dāng)成塊存儲設(shè)備來使用的設(shè)備中提供有塊設(shè)備應(yīng)用程序接口( “API”)。在另一種實施方式中,主控制器224與NIC控制器244和嵌入式RDMA控制器246協(xié)同運行以提供準(zhǔn)時的RDMA數(shù)據(jù)和命令集傳輸。NIC控制器244可隱藏在非透明端口后以使得能夠使用自定義的驅(qū)動器。同樣地,客戶端114上的驅(qū)動器可通過采用標(biāo)準(zhǔn)棧API的并與NIC244結(jié)合運行的I/O存儲驅(qū)動器訪問計算機網(wǎng)絡(luò)118。在一種實施方式中,主控制器224也是獨立驅(qū)動器冗余陣列(“RAID”)控制器。當(dāng)數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備120與一個或多個其他數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備120聯(lián)網(wǎng)時,主控制器224可以是用于單層RAID、多層RAID、漸進RAID等的RAID控制器。主控制器224還允許一些對象存儲在RAID陣列內(nèi)而其他對象不通過RAID存儲。在另一種實施方式中,主控制器224可以是分布式RAID控制器兀件。在另一種實施方式中,主控制器224可包括許多RAID、分布式RAID和另行描述的其他功能。在一種實施方式中,主控制器224與單個或多個網(wǎng)絡(luò)管理器(如交換機)協(xié)同運行以建立路由、平衡帶寬使用率、故障轉(zhuǎn)移等。在另一種實施方式中,主控制器224與集成專用邏輯器件(通過局部總線206)和關(guān)聯(lián)的驅(qū)動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與附屬專用處理器258或邏輯器件(通過外部系統(tǒng)總線240)和關(guān)聯(lián)的驅(qū)動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與遠程專用邏輯器件(通過計算機網(wǎng)絡(luò)118)和關(guān)聯(lián)的驅(qū)動器軟件協(xié)同運行。在另一種實施方式中,主控制器224與局部總線206或附屬于硬盤驅(qū)動器(“HDD”)存儲控制器的外部總線協(xié)同運行。在一種實施方式中,主控制器224與一個或多個存儲控制器254通信,其中存儲設(shè)備/固態(tài)存儲設(shè)備120可表現(xiàn)為通過SCSI總線、因特網(wǎng)SCSI ( “iSCSI”)、光纖通道等連接的存儲設(shè)備。同時,存儲設(shè)備/固態(tài)存儲設(shè)備120可自主地管理對象并可表現(xiàn)為對象文件系統(tǒng)或分布式對象文件系統(tǒng)。還可通過對等控制器256和/或?qū)S锰幚砥?58訪問主控制器 224。在另一種實施方式中,主控制器224與自主集成管理控制器協(xié)同運行以周期性地驗證FPGA碼和/或控制器軟件、在運行(復(fù)位)時驗證FPGA碼和/或在通電(復(fù)位)期間驗證控制器軟件、支持外部復(fù)位請求、支持由于檢查包而超時的復(fù)位請求,并支持電壓、電流、功率、溫度及其他環(huán)境測量和閾值中斷設(shè)置。在另一種實施方式中,主控制器224管理垃圾收集以釋放擦除塊用于再次使用。在另一種實施方式中,主控制器224管理耗損均衡。在另一種實施方式中,主控制器224允許數(shù)據(jù)存儲設(shè)備/固態(tài)存儲設(shè)備102被分割成多個虛擬設(shè)備并允許基于分區(qū)的媒體加密。在又一種實施方式中,主控制器224支持具有高級的、多位的ECC修正的固態(tài)存儲控制器104。本領(lǐng)域技術(shù)人員會認識到位于存儲控制器152內(nèi)(或更具體地說位于固態(tài)存儲設(shè)備102內(nèi))的主控制器224的其他特征和功能。在一種實施方式中,固態(tài)存儲設(shè)備控制器202包括存儲器控制器228,該存儲器控制器228控制動態(tài)隨機存儲器陣列230和/或靜態(tài)隨機存儲器陣列232。如上所述,存儲器控制器228可獨立于主控制器224使用或與主控制器224集成使用。存儲器控制器228通??刂乞炞C一些存儲器類型,如DRAM(動態(tài)隨機存儲器陣列230)和SRAM(靜態(tài)隨機存儲器陣列232)。在其他實例中,存儲器控制器228還控制其他存儲器類型,如電可擦可編程序只讀存儲器(“EEPR0M”)等。在其他實施方式中,存儲器控制器228控制兩種或更多種存儲器類型且存儲器控制器228可包括不止一個控制器。通常,存儲器控制器228在可行情況下控制盡可能多的SRAM232,并且通過DRAM230補足SRAM232。在一種實施方式中,所述對象索引存儲在存儲器230、232中并周期性的被卸載到固態(tài)存儲器IlOn或其他非易失性存儲器的通道內(nèi)。本領(lǐng)域技術(shù)人員會認識到存儲器控制器228、動態(tài)存儲器陣列230、靜態(tài)存儲器陣列232的其他運用和配置。在一種實施方式中,固態(tài)存儲設(shè)備控制器202包括DMA控制器226,該DMA控制器226控制在下列設(shè)備之間的DMA操作存儲設(shè)備/固態(tài)存儲設(shè)備102、一個或多個外部存儲器控制器250、關(guān)聯(lián)的外部存儲器陣列252和CPU248。應(yīng)該注意到,外部存儲器控制器250和外部存儲器陣列252之所以被稱為外部是因為它們位于存儲設(shè)備/固態(tài)存儲設(shè)備102的外部。此外,DMA控制器226還可通過NIC244和關(guān)聯(lián)的RDMA控制器246控制請求設(shè)備的RDMA操作。DMA和RDMA在下文中有詳細說明。在一種實施方式中,固態(tài)存儲設(shè)備控制器202包括連接到管理總線236的管理控制器234。通常管理控制器234管理存儲設(shè)備/固態(tài)存儲設(shè)備102的環(huán)境指標(biāo)和狀態(tài)。管理控制器234可通過管理總線236監(jiān)測設(shè)備溫度、風(fēng)扇轉(zhuǎn)速、電力供應(yīng)設(shè)置等。管理控制器可支持電可擦可編程序只讀存儲器(“EEPR0M”)以存儲FPGA碼和控制器軟件。通常,管理總線236連接到存儲設(shè)備/固態(tài)存儲設(shè)備102內(nèi)的不同組件。管理控制器234可通過局部總線206進行警報、中斷等的通信或可包括單獨的到系統(tǒng)總線240或其他總線的連接。在一種實施方式中,管理總線236為內(nèi)部集成電路(“I2C”)總線。本領(lǐng)域技術(shù)人員會認識到通過管理總線236連接到存儲設(shè)備/固態(tài)存儲設(shè)備102的組件的管理控制器234的其他功能和運用。在一種實施方式中,固態(tài)存儲設(shè)備控制器202包括雜項邏輯塊242,該雜項邏輯塊242可被定制為專用。通常,當(dāng)固態(tài)設(shè)備控制器202或主控制器224被配置為使用FPGA或其他可配置控制器時,可基于特定應(yīng)用、用戶需求、存儲需求等而包括定制邏輯。數(shù)據(jù)管道圖3是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設(shè)備102內(nèi)的固態(tài)存儲設(shè)備控制器104的一種實施方式300的示意性框圖,該固態(tài)存儲設(shè)備控制器具有寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108。實施方式300包括數(shù)據(jù)總線204、局部總線206和緩沖控制器208,這些設(shè)備大體上類似于相對于圖2中固態(tài)存儲設(shè)備控制器202描述的設(shè)備。所述寫入數(shù)據(jù)管道包括封包器302和糾錯碼(“ECC”)發(fā)生器304。在其他實施方式中,所述寫入數(shù)據(jù)管道包括輸入緩沖器306、寫入同步緩沖器308、寫入程序模塊310、壓縮模塊312、加密模塊314、垃圾收集器旁路316 (部分位于所述讀取數(shù)據(jù)管道內(nèi))、媒體加密模塊318和寫入緩沖器320。讀取數(shù)據(jù)管道108包括讀取同步緩沖器328、ECC糾錯模塊322、解包器324、對齊模塊326和輸出緩沖器330。在另一種實施方式中,讀取數(shù)據(jù)管道108可包括媒體解密模塊332、垃圾收集器旁路316的一部分、解密模塊334、解壓縮模塊336和讀取程序模塊338。固態(tài)存儲控制器104還可包括控制與狀態(tài)寄存器340和控制隊列342、內(nèi)存庫交錯控制器344、同步緩沖器346、存儲總線控制器348及多路轉(zhuǎn)換器(“MUX”)350。固態(tài)控制器104的組件和關(guān)聯(lián)的寫入數(shù)據(jù)管道106和讀取數(shù)據(jù)管道108描述如下。在其他實施方式中,可采用同步固態(tài)存儲器110并且可不使用同步緩沖器308、328。寫入數(shù)據(jù)管道寫入數(shù)據(jù)管道106包括封包器302,該封包器直接地或間接地通過另一寫入數(shù)據(jù)管道106的級接收將要被寫入固態(tài)存儲器的數(shù)據(jù)或元數(shù)據(jù)段,并創(chuàng)建一個或多個大小適于固態(tài)存儲器110的包。所述數(shù)據(jù)或元數(shù)據(jù)段通常是對象的一部分,但也可包括整個對象。在另一種實施方式中,所述數(shù)據(jù)段是數(shù)據(jù)塊的一部分,但也可包括整個數(shù)據(jù)塊。通常,對象接收自計算機112、客戶端114或其他計算機或設(shè)備并被以流向固態(tài)存儲設(shè)備102或計算機112的數(shù)據(jù)段的形式傳送給固態(tài)存儲設(shè)備102。數(shù)據(jù)段也可被稱為另一名稱(如數(shù)據(jù)包裹),本文所提及的數(shù)據(jù)段包括對象或數(shù)據(jù)塊的全部或一部分。每個對象被存為一個或多個包。每個對象可具有一個或多個容器包。每個包包含包頭。所述包頭可包括包頭類型字段。類型字段可包括數(shù)據(jù)、對象屬性、元數(shù)據(jù)、數(shù)據(jù)段定界符(多包)、對象結(jié)構(gòu)、對象連接及類似物。所述包頭還可包括關(guān)于包的大小的信息(如包內(nèi)的數(shù)據(jù)的字節(jié)數(shù))。所述包的長度可由包類型確實。一個實例可能是利用數(shù)據(jù)包包頭的偏移值來確定對象內(nèi)數(shù)據(jù)段的位置。本領(lǐng)域技術(shù)人員會認識到其他包含在由封包器302添加到數(shù)據(jù)上的包頭內(nèi)的信息和其他添加到數(shù)據(jù)包的信息。每個包包括包頭,還可能包括來自所述數(shù)據(jù)和元數(shù)據(jù)段的數(shù)據(jù)。每個包的包頭包括用于將包與包所屬對象聯(lián)系起來的相關(guān)信息。例如,所述包頭可包括對象標(biāo)識符和偏移值,該偏移值表明了用于數(shù)據(jù)包形成的數(shù)據(jù)段、對象或數(shù)據(jù)塊。所述包頭還可包括存儲總線控制器348用以存儲包的邏輯地址。所述包頭還可包括關(guān)于包的大小的信息(如包內(nèi)字節(jié)數(shù))。所述包頭還可包括序列號,當(dāng)生建數(shù)據(jù)段或?qū)ο髸r,該序列號識別數(shù)據(jù)段相對于對象內(nèi)的其他包所屬的位置。所述包頭可包括包頭類型字段。類型字段可包括數(shù)據(jù)、對象屬性、元數(shù)據(jù)、數(shù)據(jù)段定界符(多包)、對象結(jié)構(gòu)、對象連接及類似物。本領(lǐng)域技術(shù)人員會認識到其他包含在由封包器302加到數(shù)據(jù)上的包頭內(nèi)的信息和其他添加到數(shù)據(jù)包的信息。寫入數(shù)據(jù)管道106包括ECC發(fā)生器304,該ECC發(fā)生器為一個或多個接收自封包器302的包生成一個或多個糾錯碼(“ECC”)。ECC發(fā)生器304通常采用糾錯算法生成ECC,該ECC與包一起存儲。與包一起存儲的ECC通常用于探測和糾正由于傳送和存儲而引起的錯誤。在一種實施方式中,包作為長度為N的未編碼塊流入ECC發(fā)生器304。計算并添加長度為S的并發(fā)位,并作為長度為N+S的編碼塊輸出。N和S的值依賴于算法的特點,該算法被選擇用于實現(xiàn)特定的性能、效率和魯棒性指標(biāo)。在優(yōu)選實施方式中,在ECC塊和包之間并沒有固定關(guān)系;包可包括不止一個ECC塊;ECC塊可包括不止一個包;且第一包可在ECC塊內(nèi)的任何位置終止而第二包可始于同一 ECC塊內(nèi)的第一包終止的位置。在優(yōu)選實施方式中,ECC算法不能被動態(tài)修改。在優(yōu)選實施方式中,與數(shù)據(jù)包一起存儲的ECC足夠穩(wěn)健以在兩個以上的位內(nèi)糾正錯誤。有利地是,采用允許不止一位的修正或甚至是兩位修正的穩(wěn)健ECC算法允許延長固態(tài)存儲器110的使用壽命。例如,如果固態(tài)存儲器110內(nèi)使用閃存作為存儲媒體,閃存在每個擦除周期內(nèi)可被寫入大約100000次不出現(xiàn)錯誤。這種使用期限可通過穩(wěn)健ECC算法延長。固態(tài)存儲設(shè)備102板載有ECC發(fā)生器304和相應(yīng)的ECC糾錯模塊322,固態(tài)存儲設(shè)備102可在其內(nèi)部糾正錯誤并具有比采用不甚穩(wěn)健的ECC算法(如單位錯誤修正)更長的使用壽命。然而,在其他實施方式中,ECC發(fā)生器304可采用不甚穩(wěn)健的算法并可修正單位或雙位錯誤。在另一種實施方式中,固態(tài)存儲設(shè)備110可包括不甚可靠的存儲器以增加容量,所述不甚可靠的存儲器例如多級單元(“MLC”)閃存,所述不甚可靠的存儲器在沒有穩(wěn)健ECC算法的情況下可以不充分可靠。在一種實施方式中,寫入數(shù)據(jù)管道包括輸入緩沖器306,該輸入緩沖器接收將要被寫入固態(tài)存儲器110的數(shù)據(jù)段并存儲輸入的數(shù)據(jù)段直到寫入數(shù)據(jù)管道106的下一級,例如封包器302 (或其他更復(fù)雜寫入數(shù)據(jù)管道106的其他級)準(zhǔn)備處理下一個數(shù)據(jù)段。通過使用適當(dāng)容量的數(shù)據(jù)緩沖器,輸入緩沖器306通常允許寫入數(shù)據(jù)管道106接收和處理數(shù)據(jù)段之間存在速率差異。輸入緩沖器306還允許數(shù)據(jù)總線204將數(shù)據(jù)傳送給寫入數(shù)據(jù)管道106的速率大于寫入數(shù)據(jù)管道106能支持的速率,從而改進數(shù)據(jù)總線204運行的效率。通常,當(dāng)寫入數(shù)據(jù)管道106不包括輸入緩沖器306時,緩沖功能在別處(如固態(tài)存儲設(shè)備102)實現(xiàn),但所述別處位于寫入數(shù)據(jù)管道106外、位于計算機內(nèi),例如當(dāng)使用遠程直接存儲器讀取(“RMDA”)時,如在網(wǎng)絡(luò)接口卡(“NIC”)內(nèi)或其他設(shè)備上。在另一種實施方式中,寫入數(shù)據(jù)管道106還包括寫入同步緩沖器308,該寫入同步緩沖器308在將包寫入固態(tài)存儲器110之前緩沖接收自ECC發(fā)生器304的包。寫入同步緩沖器308位于本地時鐘域和固態(tài)存儲時鐘域之間的邊界上,并且提供緩沖以解決時鐘域差異。在其他實施方式中,可采用同步固態(tài)存儲器110而移除同步緩沖器308、328。在一種實施方式中,寫入數(shù)據(jù)管道106還包括媒體加密模塊318,該媒體加密模塊318直接地或間接地從封包器302接收一個或多個包,并在將包發(fā)送給ECC發(fā)生器304之前利用對固態(tài)存儲設(shè)備102唯一的加密密鑰加密所述一個或多個包。通常,整個包(包括包頭)都被加密。在另一種實施方式中,并不加密包頭。在本文中,在一種實施方式中,加密密鑰被理解為意味著在外部管理的秘密加密密鑰,這種密鑰將固態(tài)存儲器110和需要加密保護的設(shè)備集成在一起。媒體加密模塊318和相應(yīng)的媒體解密模塊332為存儲在固態(tài)存儲器110中數(shù)據(jù)提供安全等級。例如,當(dāng)數(shù)據(jù)利用媒體加密模塊加密時,如果固態(tài)存儲器110連接到不同的固態(tài)存儲控制器104、固態(tài)存儲設(shè)備102或計算機112,通常,在不使用同一加密密鑰(在將數(shù)據(jù)寫入固態(tài)存儲器110期間使用)時,如果不經(jīng)過合理的努力,則不能讀取固態(tài)存儲器110的內(nèi)容。在典型的實施方式中,固態(tài)存儲設(shè)備102不將所述加密密鑰存儲在非易失性存儲器中并且不允許從外部訪問所述加密密鑰。在初始化期間為固態(tài)存儲控制器104提供加密密鑰。固態(tài)存儲設(shè)備102可使用并存儲非秘密性加密臨時值,該非秘密性加密臨時值與加密密鑰結(jié)合使用。不同的臨時值可與每個包一起存儲。為了加強保護,加密算法可利用唯一臨時值在多個包之間分割數(shù)據(jù)段。所述加密密鑰可接收自客戶端114、計算機112、密鑰管理器或其他管理固態(tài)存儲控制器104使用的加密密鑰的設(shè)備。在另一種實施方式中,固態(tài)存儲器110可具有兩個或更多個分區(qū),并且固態(tài)存儲控制器104顯得就像有兩個或更多個固態(tài)存儲控制器104,每一個固態(tài)存儲控制器104在固態(tài)存儲器110內(nèi)的單個分區(qū)上運行。在這種實施方式中,唯一的媒體加密密鑰可與每個分區(qū)一起使用。在另一種實施方式中,寫入數(shù)據(jù)管道106還包括加密模塊314,該加密模塊314在將數(shù)據(jù)段發(fā)送給封包器302之前直接地或間接地加密接收自輸入緩沖器306的數(shù)據(jù)或元數(shù)據(jù)段,利用與數(shù)據(jù)段一同接收的加密密鑰來加密數(shù)據(jù)段。加密模塊314與媒體加密模塊318不同,這是由于加密模塊318用以加密數(shù)據(jù)的加密密鑰對存儲在固態(tài)存儲設(shè)備102內(nèi)的數(shù)據(jù)來說不是共同的并在對象基礎(chǔ)上可能不同,并且加密密鑰可不與數(shù)據(jù)段一起接收(如下所述)。例如,加密模塊318用以加密數(shù)據(jù)段的加密密鑰可與數(shù)據(jù)段一起被接收或可作為將對象寫入數(shù)據(jù)段所屬位置的命令的一部分被接收。固態(tài)存儲設(shè)備102可在每個與加密密鑰結(jié)合使用的對象包中使用并存儲非秘密性加密臨時值。不同的臨時值可與每個包一起存儲。為了通過加密算法加強保護,可利用唯一臨時值在多個包之間分割數(shù)據(jù)段。在一種實施方式中,媒體加密模塊318使用的臨時值與加密模塊314使用的臨時值相同。加密密鑰可接收自客戶端114、計算機112、密鑰管理器或其他保存用于加密數(shù)據(jù)段的加密密鑰的設(shè)備。在一種實施方式中,加密密鑰被從固態(tài)存儲設(shè)備102、計算機112、客戶端114或其他外部代理中的一個傳送到固態(tài)存儲控制器104,所述外部代理能夠執(zhí)行工業(yè)標(biāo)準(zhǔn)方法以安全地傳送并保護私有密鑰和公共密鑰。在一種實施方式中,加密模塊318利用與第一包一起接收的第一加密密鑰加密第一包,并利用與第二包一起接收的第二加密密鑰加密第二包。在另一種實施方式中,加密模塊318利用與第一包一起接收的第一加密密鑰加密第一包,而將第二數(shù)據(jù)包傳遞給下一級(未經(jīng)加密)。有利地是,包括在固態(tài)存儲設(shè)備102的寫入數(shù)據(jù)管道106內(nèi)的加密模塊318允許對象接對象或段接段的數(shù)據(jù)加密,而不需要單獨的文件系統(tǒng)或其他外部系統(tǒng)來追蹤不同的用于存儲相應(yīng)對象或數(shù)據(jù)段的加密密鑰。每個請求設(shè)備155或相關(guān)密鑰管理器獨立地管理加密密鑰,該加密密鑰僅用于加密請求設(shè)備155發(fā)送的對象或數(shù)據(jù)段。在另一種實施方式中,寫入數(shù)據(jù)管道106包括壓縮模塊312,該壓縮模塊312在將數(shù)據(jù)段發(fā)送給封包器302之前為元數(shù)據(jù)段壓縮數(shù)據(jù)。壓縮模塊312通常利用本領(lǐng)域技術(shù)人員熟知的壓縮程序來壓縮數(shù)據(jù)或元數(shù)據(jù)段以減少段占用的的存儲空間大小。例如,如果數(shù)據(jù)段包括一串512個O位,壓縮模塊312可用表明512個O位的編碼或令牌來替換這512個O位,其中,所述編碼所占的空間比512個O位所占的空間要小得多。在一種實施方式中,壓縮模塊312利用第一壓縮程序壓縮第一段,而輸送第二段(未經(jīng)壓縮)。在另一種實施方式中,壓縮模塊312利用第一壓縮程序壓縮第一段并利用第二壓縮程序壓縮第二段。在固態(tài)存儲設(shè)備102內(nèi)具有這種靈活性是有利的,以便客戶端或其他將數(shù)據(jù)寫入固態(tài)存儲設(shè)備102內(nèi)的設(shè)備中每一個都可指定壓縮程序或以便一個設(shè)備指定壓縮程序而另一個設(shè)備指定無壓縮。還可根據(jù)每個對象類型或?qū)ο箢惢A(chǔ)的默認設(shè)置來選擇壓縮程序。例如,特定對象的第一對象可以能夠廢除默認壓縮程序設(shè)置,同一對象類和對象類型的第二對象可采用默認壓縮程序,而同一對象類和對象類型的第三對象可不壓縮。在一種實施方式中,寫入數(shù)據(jù)管道106包括垃圾收集器旁路316,該垃圾收集器旁路316接收來自讀取數(shù)據(jù)管道的108 (在垃圾收集系統(tǒng)中作為數(shù)據(jù)旁路的一部分)的數(shù)據(jù)段。垃圾收集系統(tǒng)通常標(biāo)記不再有效的包,不再有效的原因通常是由于包被標(biāo)記為刪除或包已被修改且修改過的數(shù)據(jù)存儲在不同的位置。在某一時刻,垃圾收集系統(tǒng)確定存儲器的某個區(qū)域可被恢復(fù)。之所以確定某個區(qū)域可被恢復(fù)可能是由于缺乏可用的存儲空間、標(biāo)記為無效的的數(shù)據(jù)百分比達到閾值、有效數(shù)據(jù)的合并、存儲器的該區(qū)域錯誤檢出率達到閾值或基于數(shù)據(jù)分布提高性能等。垃圾收集算法可考慮大量的因素以確定何時存儲器的區(qū)域?qū)⒁换謴?fù)。一旦存儲器的區(qū)域被標(biāo)記為恢復(fù),該區(qū)域內(nèi)的有效包通常必須被重新存放。垃圾收集器旁路316允許將包讀入讀取數(shù)據(jù)管道108,并允許然后將包直接傳送給寫入數(shù)據(jù)管道106而不會將包路由出固態(tài)存儲控制器104。在優(yōu)選實施方式中,垃圾收集器旁路316是運行在固態(tài)存儲設(shè)備102內(nèi)的自主垃圾收集系統(tǒng)的一部分。這允許固態(tài)存儲設(shè)備102管理數(shù)據(jù),從而數(shù)據(jù)系統(tǒng)地傳播到整個固態(tài)存儲器110以提升性能、數(shù)據(jù)可靠性并避免過度使用和不充分使用固態(tài)存儲器110的任何一個位置或區(qū)域,并且延長了固態(tài)存儲器110的使用壽命。垃圾收集器旁路316協(xié)調(diào)將數(shù)據(jù)段插入寫入數(shù)據(jù)管道106而其他數(shù)據(jù)段由客戶端116或其他設(shè)備寫入。在描述的實施方式中,垃圾收集器旁路316位于寫入數(shù)據(jù)管道106內(nèi)的封包器302之前、讀取數(shù)據(jù)管道內(nèi)的解包器314之后,但也可位于寫入和讀取數(shù)據(jù)管道106,118內(nèi)的其他位置??稍谇逑磳懭霐?shù)據(jù)管道106期間使用垃圾收集器旁路316,以填充虛擬頁的剩余部分,從而提升固態(tài)存儲器110內(nèi)的存儲效率并因此減少垃圾收集的頻率。在一種實施方式中,寫入數(shù)據(jù)管道106包括寫入緩沖器320,該寫入緩沖器320為了高效的寫操作而緩沖數(shù)據(jù)。通常,寫入緩沖器320包括用于包的足夠容量,以填充固態(tài)存儲器110內(nèi)的至少一個虛擬頁。這允許寫操作將數(shù)據(jù)的整個頁沒有中斷地發(fā)送給固態(tài)存儲器110。通過選擇寫入數(shù)據(jù)管道106的寫入緩沖器320的容量并將讀取數(shù)據(jù)管道108內(nèi)的緩沖器的容量選為同樣大小容量或比固態(tài)存儲器110內(nèi)存儲寫入緩沖器的容量大,由于單個寫入命令可被設(shè)計為將數(shù)據(jù)的整個虛擬頁發(fā)送給固態(tài)存儲器110,從而以單條命令替代多條命令,寫入和讀取數(shù)據(jù)的效率更高。當(dāng)填充寫入緩沖器320時,固態(tài)存儲器110可用于其他讀操作。這是有利的,原因是當(dāng)將數(shù)據(jù)寫入存儲寫入緩沖器時和注入數(shù)據(jù)緩沖器的數(shù)據(jù)失速時,具有更小容量的寫入緩沖器的或不具有寫入緩沖器的其他固態(tài)設(shè)備可綁定固態(tài)存儲器。讀操作會被攔截直到整個存儲寫入緩沖器被填充或被編程。用于不具寫入緩沖器或具有小容量的寫入緩沖器的系統(tǒng)的另一種方法是清洗未滿的存儲寫入緩沖器以使得能進行讀操作。同樣地,由于需要多寫入/編程周期來填充頁,因此這種方法的效率低下。對于描述的具有容量比虛擬頁容量大的寫入緩沖器320的實施方式,單個的寫入命令(包括大量子命令)的后續(xù)命令可以是單個程序命令,以將來自每個固態(tài)存儲元件216,218,220中的存儲寫入緩沖器的數(shù)據(jù)頁傳遞給每個固態(tài)存儲元件216、218、220中的指定頁。這種技術(shù)帶來的好處是減少了部分頁編程,眾所周知,這降低了數(shù)據(jù)的可靠性和穩(wěn)定性并在當(dāng)緩沖器填充時,為讀命令和其他命令釋放了目標(biāo)內(nèi)存庫。在一種實施方式中,寫入緩沖器320為交替緩沖器,其中,所述交替緩沖器的一側(cè)被填充,然后當(dāng)所述交替緩沖器的另一側(cè)被填充時,所述交替緩沖器的一側(cè)被指定為在適當(dāng)?shù)臅r間傳送數(shù)據(jù)。在另一種實施方式中,寫入緩沖器320包括先進先出(“FIFO”)寄存器,該FIFO寄存器的容量比數(shù)據(jù)段虛擬頁的容量大。本領(lǐng)域技術(shù)人員會認識到允許在將數(shù)據(jù)寫入固態(tài)存儲器110之前存儲數(shù)據(jù)虛擬頁的其他寫入緩沖器320配置。在另一種實施方式中,寫入緩沖器320的容量比虛擬頁小,從而少于一頁的信息可被寫入固態(tài)存儲器110內(nèi)的存儲寫入緩沖器。在這種實施方式中,為了防止寫入數(shù)據(jù)管道106的失速阻止讀操作,采用需要從一個位置移動到另一個位置的垃圾收集系統(tǒng)將數(shù)據(jù)排隊,這個過程是垃圾收集進程的一部分。為了防止寫入數(shù)據(jù)管道106中的數(shù)據(jù)失速,可通過垃圾收集器旁路316將所述數(shù)據(jù)供應(yīng)給寫入緩沖器320并然后將所述數(shù)據(jù)供應(yīng)給固態(tài)存儲器110中的存儲寫入緩沖器,從而在編程所述數(shù)據(jù)之前填充虛擬頁的頁面。這樣,寫入數(shù)據(jù)管道106中的數(shù)據(jù)失速不會使讀取自固態(tài)存儲設(shè)備102的數(shù)據(jù)失速。在另一種實施方式中,寫入數(shù)據(jù)管道106包括寫入程序模塊310,該寫入程序模塊310具有寫入數(shù)據(jù)管道106內(nèi)的一個或多個用戶可定義的功能。寫入程序模塊310允許用戶自定義寫入數(shù)據(jù)管道106。用戶可基于特定數(shù)據(jù)請求或應(yīng)用自定義寫入數(shù)據(jù)管道106。當(dāng)固態(tài)存儲控制器104為FPGA時,用戶可相對輕松地編程具有自定義命令和功能的寫入數(shù)據(jù)管道106。用戶還可利用寫入程序模塊310以使ASIC包括自定義功能,然而自定義ASIC可能比使用FPGA時更困難。寫入程序模塊310可包括緩沖器和旁路機制,以允許第一數(shù)據(jù)段在寫入程序模塊310中執(zhí)行,而第二數(shù)據(jù)段通過寫入數(shù)據(jù)管道106可繼續(xù)傳送。在另一種實施方式中,寫入程序模塊310可包括能通過軟件編程的處理器內(nèi)核。應(yīng)注意,寫入程序模塊310被示為位于輸入緩沖器306和壓縮模塊312之間,然而寫入程序模塊310可位于寫入數(shù)據(jù)管道106內(nèi)的任何位置,并且可分布在不同的級302-320之間。此外,在不同的、已編程的且獨立運行的級302-320之間可分布有多個寫入程序模塊310。此外,級302-320的順序可以改變。本領(lǐng)域技術(shù)人員會認識到基于特定用戶需求的級302-320的順序的可行改變。讀取數(shù)據(jù)管道讀取數(shù)據(jù)管道108包括ECC糾錯模塊322,該ECC糾錯模塊322通過使用與請求包中的每個ECC塊一起存儲的ECC來確定接收自固態(tài)存儲器110的請求包的ECC塊中是否存在錯誤。然后,如果存在任何錯誤并且所述錯誤可使用ECC修正,則ECC糾錯模塊322修正請求包中的任何錯誤。例如,如果ECC能夠探測6位的錯誤但只能修正3位的錯誤,那么ECC糾錯模塊322修正具有3位錯誤的請求包ECC塊。ECC糾錯模塊322通過把出錯的位改變?yōu)檎_的I或O狀態(tài)來修正出錯的位,從而請求數(shù)據(jù)包與其被寫入固態(tài)存儲器110并且為包生成ECC時一致。如果ECC糾錯模塊322確定請求包包含了比ECC能修正的位數(shù)多的出錯位,則ECC糾錯模塊322不能修正請求包毀壞的ECC塊的錯誤并發(fā)送中斷。在一種實施方式中,ECC糾錯模塊322發(fā)送中斷以及指示請求包出錯的消息。所述消息可包括指出ECC糾錯模塊322不能修正錯誤或ECC糾錯模塊322沒有能力修正錯誤的信息。在另一種實施方式中,ECC糾錯模塊322與所述中斷和/或消息一起發(fā)送請求包中毀壞的ECC塊。在優(yōu)選的實施方式中,請求包中毀壞的ECC塊或毀壞的ECC塊的一部分(不能被ECC糾錯模塊322修正)由主控制器224讀取,并被修正和返回給ECC糾錯模塊322以被讀取數(shù)據(jù)管道108進一步處理。在一種實施方式中,請求包中毀壞的ECC塊或毀壞的ECC塊的一部分被發(fā)送給請求數(shù)據(jù)的設(shè)備。請求設(shè)備155可修正所述ECC塊或用另一拷貝替換數(shù)據(jù)(如備份或鏡像拷貝),然后可使用請求數(shù)據(jù)包的替換的數(shù)據(jù)或?qū)⑺鎏鎿Q的數(shù)據(jù)返回給讀取數(shù)據(jù)管道108。請求設(shè)備155可使用出錯請求包中的包頭信息以識別替換毀壞請求包或替換包所屬的對象所需的數(shù)據(jù)。在另一種優(yōu)選實施方式中,固態(tài)存儲控制器104采用一些類型的RAID存儲數(shù)據(jù)并能夠恢復(fù)毀壞的數(shù)據(jù)。在另一種實施方式中,ECC糾錯模塊322發(fā)送中斷和/或消息,并且接收設(shè)備停止與請求數(shù)據(jù)包關(guān)聯(lián)的讀操作。本領(lǐng)域技術(shù)人員會認識到ECC糾錯模塊322確定請求包的一個或多個ECC塊為毀壞的且ECC糾錯模塊322不能修正錯誤后采取的其他選擇和操作。讀取數(shù)據(jù)管道108包括解包器324,該解包器324直接地或間接地接收來自ECC修正模塊322的請求包ECC塊,并檢查和刪除一個或多個包頭。解包器324可通過檢查包頭內(nèi)的包標(biāo)識符、數(shù)據(jù)長度、數(shù)據(jù)位置等驗證包頭。在一種實施方式中,所述包頭包括散列碼,該散列碼可用于驗證傳遞給讀取數(shù)據(jù)管道108的包為請求包。解包器324還從請求包中刪除由封包器302添加的包頭。解包器324可被指定為不對某些包起作用而將這些包未經(jīng)修改地向前傳送。一個實例可以是容器標(biāo)簽,當(dāng)對象索引重建模塊272需要包頭信息時,該容器標(biāo)簽在重建進程期間被請求。另外的實例包括傳送不同類型的包(預(yù)定在固態(tài)存儲設(shè)備102內(nèi)使用)。在另一種實施方式中,解包器324操作可以依賴于包的類型。讀取數(shù)據(jù)管道326包括對齊模塊326,該對齊模塊326接收來自解包器324的數(shù)據(jù)并刪除多余的數(shù)據(jù)。在一種實施方式中,發(fā)送給固態(tài)存儲器110的讀命令恢復(fù)數(shù)據(jù)包。請求數(shù)據(jù)的設(shè)備可不需要恢復(fù)的數(shù)據(jù)包內(nèi)的所有數(shù)據(jù),并且對齊模塊326刪除多余的數(shù)據(jù)。如果恢復(fù)頁內(nèi)的所有數(shù)據(jù)都是請求的數(shù)據(jù),對齊模塊326不刪除任何數(shù)據(jù)。對齊模塊326在數(shù)據(jù)段傳輸?shù)较乱患壷耙耘c請求數(shù)據(jù)段的設(shè)備兼容的形式按對象的數(shù)據(jù)段重新格式化數(shù)據(jù)。通常,由于數(shù)據(jù)由讀取數(shù)據(jù)管道108處理,數(shù)據(jù)段或包的大小在不同級間改變。對齊模塊326使用接收到的數(shù)據(jù)以將數(shù)據(jù)格式化為適于發(fā)送給請求設(shè)備155的數(shù)據(jù)段,該數(shù)據(jù)段還適于連接在一起以形成響應(yīng)。例如,來自第一數(shù)據(jù)包的一部分的數(shù)據(jù)可與來自第二數(shù)據(jù)包的一部分的數(shù)據(jù)結(jié)合。如果數(shù)據(jù)段比由請求設(shè)備請求的數(shù)據(jù)大,對齊模塊326可丟棄不需要的數(shù)據(jù)。在一種實施方式中,讀取數(shù)據(jù)管道108包括讀取同步緩沖器328,該讀取同步緩沖器328在讀取數(shù)據(jù)管道108處理之前緩沖一個或多個讀取自固態(tài)存儲器110的請求包。讀取同步緩沖器328位于固態(tài)存儲時鐘域和本地總線時鐘域之間的邊界上并提供緩沖以解決時鐘域差異。在另一種實施方式中,讀取數(shù)據(jù)管道108包括輸出緩沖器330,該輸出緩沖器330接收來自對齊模塊326的請求包并在數(shù)據(jù)包傳送到所述請求設(shè)備前存儲該包。輸出緩沖器330解決當(dāng)從讀取數(shù)據(jù)管道108接收數(shù)據(jù)段時和當(dāng)將數(shù)據(jù)段傳送給固態(tài)存儲控制器104的其他部分或傳送給請求設(shè)備時之間的差異。輸出緩沖器330還允許數(shù)據(jù)總線以比讀取數(shù)據(jù)管道108能夠支持的速率高的速率接收來自讀取數(shù)據(jù)管道108的數(shù)據(jù),以提升數(shù)據(jù)總線204運行的效率。在一種實施方式中,讀取數(shù)據(jù)管道108包括媒體解密模塊332,該媒體解密模塊332接收一個或多個來自ECC糾錯模塊322的加密過的請求包并在將一個或多個所述請求包發(fā)送給解包器324之前利用對于固態(tài)存儲設(shè)備102唯一的加密密鑰解密一個或多個所述請求包。通常,媒體解密模塊332用以解密數(shù)據(jù)的加密密鑰與媒體加密模塊318使用的加密密鑰一致。在另一種實施方式中,固態(tài)存儲器110可具有兩個或更多個分區(qū)且固態(tài)存儲控制器104表現(xiàn)得好像有兩個或更多個固態(tài)存儲控制器104 (每個都在固態(tài)存儲器110內(nèi)的單獨分區(qū)內(nèi)運行)一樣。在這種實施方式中,可對每個分區(qū)使用唯一的媒體加密密鑰。在另一種實施方式中,讀取數(shù)據(jù)管道108包括解密模塊334,該解密模塊334在將數(shù)據(jù)段發(fā)送給輸出緩沖器330之前解密由解包器324格式化的所述數(shù)據(jù)段。采用與讀請求一起接收的加密密鑰解密所述數(shù)據(jù)段,所述讀請求初始化恢復(fù)由讀取同步緩沖器328接收的請求包。解密模塊334可利用與用于第一包的讀請求一起接收的加密密鑰解密第一包,然后可利用不同的加密密鑰解密第二包或可將第二包未經(jīng)解密地傳送給讀取數(shù)據(jù)管道108的下一級。通常,解密模塊334使用與媒體解密模塊332用以解密請求數(shù)據(jù)包的加密密鑰不同的加密密鑰解密數(shù)據(jù)段。當(dāng)包與非秘密性加密臨時值一起存儲時,該臨時值與加密密鑰一起使用以解密數(shù)據(jù)包。加密密鑰可接收自客戶端114、計算機112、密鑰管理器或管理固態(tài)存儲控制器104使用的加密密鑰的其他設(shè)備。在另一種實施方式中,讀取數(shù)據(jù)管道108包括解壓縮模塊336,該解壓縮模塊336解壓縮由解包器324格式化的數(shù)據(jù)段。在優(yōu)選實施方式中,解壓縮模塊336使用存儲在包頭和容器標(biāo)簽中的一個或兩個中的壓縮信息以選擇補充程序,壓縮模塊312使用該補充程序來壓縮數(shù)據(jù)。在另一種實施方式中,解壓縮模塊336所使用的解壓縮程序由請求解壓縮的數(shù)據(jù)段確定。在另一種實施方式中,解壓縮模塊336根據(jù)每個對象類型或?qū)ο箢惢A(chǔ)的默認設(shè)置選擇解壓縮程序。第一對象的第一包可以能夠廢除默認解壓縮程序設(shè)置,具有相對的對象類和對象類型的第二對象的第二包可采用默認解壓縮程序,而具有相同的對象類和對象類型的第三對象的第三包可不經(jīng)過解壓縮。在另一種實施方式中,讀取數(shù)據(jù)管道108包括讀取程序模塊338,該讀取程序模塊338包括一個或多個在讀取數(shù)據(jù)管道108內(nèi)的用戶可定義功能。讀取程序模塊338具有與寫入程序模塊310類似的特點并允許用戶提供自定義功能給讀取數(shù)據(jù)管道108。讀取程序模塊338可位于圖3中所示的位置、可位于讀取數(shù)據(jù)管道108內(nèi)的其他位置、或者可包括讀取數(shù)據(jù)管道108內(nèi)多個位置的多個部分。此外,在讀取數(shù)據(jù)管道108內(nèi)的多個不同位置可有多個獨立運行的讀取程序模塊338。本領(lǐng)域技術(shù)人員會認識到讀取數(shù)據(jù)管道108內(nèi)的讀取程序模塊338的其他形式。正如寫入數(shù)據(jù)管道,讀取數(shù)據(jù)管道108的級可重新排序,本領(lǐng)域技術(shù)人員會認識到讀取數(shù)據(jù)管道108內(nèi)的級的其他排列順序。固態(tài)存儲控制器104包括控制和狀態(tài)寄存器340和相應(yīng)的控制隊列342。控制和狀態(tài)寄存器340和控制隊列342有助于控制并按順序排列與在寫入和讀取數(shù)據(jù)管道106、108內(nèi)處理的數(shù)據(jù)相關(guān)聯(lián)的命令和子命令。例如,封包器302中的數(shù)據(jù)段可具有一個或多個在與ECC發(fā)生器關(guān)聯(lián)的控制隊列342內(nèi)的相應(yīng)控制命令或指令。當(dāng)數(shù)據(jù)段被封包時,可在封包器302內(nèi)執(zhí)行一些指令或命令中。當(dāng)從數(shù)據(jù)段建立的、最新形成的數(shù)據(jù)包被傳送給下一級時,其他命令或指令可通過控制和狀態(tài)寄存器340直接傳送給下一個控制隊列342。
可同時將命令和指令加載到控制隊列342上以將包轉(zhuǎn)發(fā)給寫入數(shù)據(jù)管道106,同時,由于每個管道級要執(zhí)行各自的包,因此每個管道級讀取合適的命令或指令。類似地,可同時將命令和指令加載到控制隊列342上以從讀取數(shù)據(jù)管道108請求包,而且,由于每個管道級要執(zhí)行各自的包,因此每個管道級讀取合適的命令或指示。本領(lǐng)域技術(shù)人員會認識到控制和狀態(tài)寄存器340和控制隊列342的其他特征和功能。固態(tài)存儲控制器104和/或固態(tài)存儲設(shè)備102還可包括內(nèi)存庫交錯控制器344、同步緩沖器346、存儲總線控制器348及多路轉(zhuǎn)換器(“MUX”) 350,這些設(shè)備相對于圖4A和圖4B描述。內(nèi)存庫交錯圖4A是根據(jù)本發(fā)明的位于固態(tài)存儲控制器104內(nèi)的內(nèi)存庫交錯控制器344 —種實施方式400的示意性框圖。內(nèi)存庫交錯控制器344連接到控制和狀態(tài)寄存器340并通過MUX350、存儲總線控制器348和同步緩沖器346連接到存儲I/O總線210和存儲控制總線212上,這在下文中有所描述。內(nèi)存庫交錯控制器包括讀取代理402、寫入代理404、擦除代理406、管理代理408、讀取隊列410a-n、寫入隊列412a_n、擦除隊列414a_n、用于固態(tài)存儲器110中的內(nèi)存庫214的管理隊列416a-n、內(nèi)存庫控制器418a_n、總線仲裁器420和狀態(tài)MUX422,這些設(shè)備在下文中描述。存儲總線控制器348包括具有重映射模塊430的映射模塊424、狀態(tài)捕捉模塊426和NAND總線控制器438,這些設(shè)備在下文中描述。內(nèi)存庫交錯控制器344將一條或多條命令送往內(nèi)存庫交錯控制器344中的兩個或更多個隊列,并在固態(tài)存儲器110的內(nèi)存庫214之間協(xié)調(diào)存儲在隊列中的命令的執(zhí)行,以使得第一類型的命令在一個內(nèi)存庫241a上執(zhí)行而第二類型的命令在第二內(nèi)存庫214b上執(zhí)行。所述一條或多條命令按命令類型分別送入隊列中。固態(tài)存儲器110的每個內(nèi)存庫214在內(nèi)存庫交錯控制器344內(nèi)具有相應(yīng)的隊列集,且每個隊列集包括每個命令類型的隊列。內(nèi)存庫交錯控制器344在固態(tài)存儲器110的內(nèi)存庫214之間協(xié)調(diào)存儲在隊列中的命令的執(zhí)行。例如,第一類型的命令在在一個內(nèi)存庫241a上執(zhí)行而第二類型的命令在第二內(nèi)存庫214b上執(zhí)行。通常,命令類型和隊列類型包括讀取和寫入命令和隊列410、412,但是還可包括存儲媒介指定的其他命令和隊列。例如,在圖4A所描述的實施方式中,擦除和管理隊列414、416被包括在其中且適于閃存、NRAM、MRAM、DRAM、PRAM等。對于其他類型的固態(tài)存儲器110,可包括其他類型的命令和相應(yīng)的隊列而不脫離本發(fā)明的范圍。FPGA固態(tài)存儲控制器104的靈活性質(zhì)允許存儲媒介的靈活性。如果將閃存換成另一種固態(tài)存儲類型,可改變內(nèi)存庫交錯控制器344、存儲總線控制器348和MUX350以適應(yīng)媒介類型而不顯著地影響數(shù)據(jù)管道106、108和其他固態(tài)存儲控制器104運行。在圖4A所描述的實施方式中,對每個內(nèi)存庫214來說,內(nèi)存庫交錯控制器344包括用于從固態(tài)存儲器110讀取數(shù)據(jù)的讀取隊列410、用于將命令寫入固態(tài)存儲器110的寫入隊列412、用于擦除固態(tài)存儲器中的擦除塊的擦除隊列414、用于管理命令的管理隊列416。內(nèi)存庫交錯控制器344還包括相應(yīng)的讀取、寫入、擦除和管理代理402、404、406、408。在另一種實施方式中,控制和狀態(tài)寄存器340和控制隊列342或類似元件在沒有內(nèi)存庫交錯控制器344的情況為了發(fā)送給固態(tài)存儲器110的內(nèi)存庫214的數(shù)據(jù)而將命令排隊。在一種實施方式中,代理402、404、406、408將預(yù)定用于特定內(nèi)存庫214a的合適類型的命令送到內(nèi)存庫214a的修正隊列。例如,讀取代理402可接收用于內(nèi)存庫-1 214b的讀命令并將所述讀命令送到內(nèi)存庫-1讀取隊列410b。寫入代理404可接收將數(shù)據(jù)寫入固態(tài)存儲器110的內(nèi)存庫-O 214a的寫入命令并然后會將所述寫入命令發(fā)送給內(nèi)存庫_0寫入隊列412a。類似地,擦除代理406可接收擦除命令以擦除內(nèi)存庫-1 214b中的擦除塊并然后會將所述擦除命令傳送給內(nèi)存庫-1擦除隊列414b。管理代理408通常接收管理命令、狀態(tài)請求及其類似消息,如復(fù)位命令或讀取內(nèi)存庫214(如內(nèi)存庫-O 214a)的配置寄存器的請求。管理代理408將所述管理命令發(fā)送給內(nèi)存庫-O管理隊列416a。代理402、404、406、408通常還監(jiān)測隊列410、412、414、416的狀態(tài)并當(dāng)隊列402、404、406、408滿、接近滿、喪失功能時,發(fā)送狀態(tài)、中斷或其他消息。在一種實施方式中,代理402、404、406、408接收命令并生成相應(yīng)的子命令。在一種實施方式中,代理402、404、406、408通過控制和狀態(tài)寄存器340接收命令并生成相應(yīng)的子命令,所述子命令被轉(zhuǎn)發(fā)給隊列410、412、414、416。本領(lǐng)域技術(shù)人員會認識到代理402、404、406、408的其他功能。隊列410、412、414、416通常接收命令并存儲所述命令直到所述命令被要求傳送給固態(tài)存儲器內(nèi)存庫214。在典型的實施方式中,隊列410、412、414、416是先進先出(“FIFO”)寄存器或以FIFO運行的類似組件。在另一種實施方式中,隊列410、412、414、4166按與數(shù)據(jù)、重要性或其他標(biāo)準(zhǔn)相匹配的順序來存儲命令。內(nèi)存庫控制器418通常接收來自隊列410、412、414、416的命令并生成合適的子命令。例如,內(nèi)存庫-O寫入隊列412a可接收將數(shù)據(jù)包的頁寫入內(nèi)存庫-0214a的命令。內(nèi)存庫-O控制器418a可在合適的時間接收寫入命令并可為每個存儲在寫入緩沖器320中的數(shù)據(jù)包生成一個或多個寫入子命令(將要被寫入內(nèi)存庫-O 214a的頁中)。例如,內(nèi)存庫-O控制器418a可生成驗證內(nèi)存庫-O 214a和固態(tài)存儲陣列216狀態(tài)的命令、選擇寫入一個或多個數(shù)據(jù)包的合適位置的命令、清除位于固態(tài)存儲陣列216內(nèi)的輸入緩沖器的命令、將一個或多個數(shù)據(jù)包傳送所述輸入緩沖器的命令、將輸入緩沖器放到選定位置中的命令、檢驗數(shù)據(jù)被正確編程的命令,并且如果發(fā)生程序故障,則一次或多次地中斷主控制器、重試寫入同一物理地址并重試寫入不同的物理地址。此外,與實例中的寫入命令一起,存儲總線控制器348會將一條或多條命令乘以每條存儲I/O總線210a-n從而翻倍,而所述命令的邏輯地址映射到用于存儲I/O總線210a的第一物理地址,并映射到用于存儲I/O總線210a的第二物理地址,下面將詳細描述。通常,總線仲裁器420選自內(nèi)存庫控制器418并從內(nèi)存庫控制器418的輸出隊列提取子命令,并且將這些子命令以最優(yōu)化內(nèi)存庫214性能的序列形式發(fā)給存儲總線控制器348。在另一種實施方式中,總線仲裁器420可響應(yīng)高級中斷并修改普通選擇標(biāo)準(zhǔn)。在另一種實施方式中,主控制器224可通過控制和狀態(tài)寄存器340控制總線仲裁器420。本領(lǐng)域技術(shù)人員會認識到總線控制器420可控制和交錯從內(nèi)存庫控制器418傳送到固態(tài)存儲器110的命令序列。通常,總線仲裁器420協(xié)調(diào)來自內(nèi)存庫控制器418適當(dāng)?shù)拿詈兔铑愋退璧南鄳?yīng)數(shù)據(jù)的選擇,并將所述命令和數(shù)據(jù)發(fā)送給存儲總線控制器348。總線仲裁器420通常還將命令發(fā)送給存儲控制總線212以選擇合適的內(nèi)存庫214。對于閃存或其他具有異步、雙向串行的存儲I/O總線210的固態(tài)存儲器110而言,一次只能傳送一條命令(控制信息)或數(shù)據(jù)集。例如,當(dāng)將寫入命令或數(shù)據(jù)通過存儲I/O總線210傳送給固態(tài)存儲器110時,讀取命令、讀取的數(shù)據(jù)、擦除命令、管理命令或其他狀態(tài)命令不能在存儲I/O總線210上傳輸。例如,當(dāng)從存儲I/o總線210讀取數(shù)據(jù)時,不能向固態(tài)存儲器110寫入數(shù)據(jù)。例如,在內(nèi)存庫-O的寫操作期間,總線仲裁器420選擇在其隊列頂部具有寫入命令或一連串寫入子命令的內(nèi)存庫-O控制器418a,所述一連串寫入子命令使得存儲總線控制器348執(zhí)行后繼的序列??偩€仲裁器420將寫入命令轉(zhuǎn)發(fā)給存儲總線控制器348,該存儲總線控制器348通過下列方式建立了寫入命令通過存儲控制總線212選擇內(nèi)存庫-O214a、發(fā)送清除與內(nèi)存庫-O 214a關(guān)聯(lián)的固態(tài)存儲元件110的輸入緩沖器的命令、發(fā)送驗證與內(nèi)存庫-O 214a關(guān)聯(lián)的固態(tài)存儲元件216、218、220的狀態(tài)的命令。然后,存儲總線控制器348通過包含了物理地址存儲I/O總線210傳送寫入命令,該物理地址如同映射自邏輯擦除塊地址一樣包括用于每個單獨的物理擦除固態(tài)存儲元件216a-m的邏輯擦除塊地址。然后,存儲總線控制器348通過多路轉(zhuǎn)換器350將寫入緩沖器經(jīng)寫入同步緩沖器多路復(fù)用到存儲I/O總線210并使寫入數(shù)據(jù)流向合適的頁。當(dāng)所述頁寫滿時,然后,存儲總線控制器348促使與內(nèi)存庫-O 214a關(guān)聯(lián)的固態(tài)存儲元件216a-m將輸入緩沖器編入固態(tài)存儲元件216a_m的內(nèi)存單元。最終,存儲總線控制器348驗證狀態(tài)以確保所述頁被正確編程。讀操作與上文的寫操作實例類似。在讀操作期間,通常,總線仲裁器420或內(nèi)存庫交錯控制器344的其他組件接收數(shù)據(jù)和相應(yīng)的狀態(tài)信息并將數(shù)據(jù)發(fā)送給讀取數(shù)據(jù)管道108,同時將狀態(tài)信息發(fā)送給控制和狀態(tài)寄存器340。通常,從總線仲裁器420傳送給存儲總線控制器348的讀數(shù)據(jù)命令會促使多路轉(zhuǎn)換器350將讀數(shù)據(jù)通過存儲I/O總線210傳送給讀取數(shù)據(jù)管道108并通過狀態(tài)多路轉(zhuǎn)換器422向控制和狀態(tài)寄存器340發(fā)送狀態(tài)信息??偩€仲裁器420協(xié)調(diào)不同的命令類型和數(shù)據(jù)存取模式,使得在任意給定的時間內(nèi),在總線上只有合適的命令類型或?qū)?yīng)數(shù)據(jù)。如果總線仲裁器420已選擇了寫入命令,且寫入子命令和對應(yīng)數(shù)據(jù)正在被寫入固態(tài)存儲器110,總線仲裁器420不會允許在存儲I/O總線210存在其他命令類型。有利地是,總線仲裁器420使用定時信息(如預(yù)定的命令執(zhí)行時間)以及接收到的關(guān)于內(nèi)存庫214狀態(tài)的信息,以協(xié)調(diào)總線上不同命令的執(zhí)行,這樣做的目標(biāo)是最小化或消除總線的停工時間。通過總線仲裁器420的主控制器224通常使用存儲在隊列410、412、414、416中的命令的預(yù)定完成時間以及狀態(tài)信息,使得在一個內(nèi)存庫214a上執(zhí)行與命令關(guān)聯(lián)的子命令時,而在其他內(nèi)存庫241b-n上執(zhí)行其他命令的其他子命令。當(dāng)內(nèi)存庫214a完全執(zhí)行完一條命令時,總線仲裁器420將其他命令傳給內(nèi)存庫214a。總線仲裁器420還可與協(xié)調(diào)存儲在隊列410、412、414、416的命令一起協(xié)調(diào)不存儲在隊列410、412、414、416的其他命令。例如,可發(fā)出擦除命令以擦除固態(tài)存儲器110內(nèi)的一組擦除塊。執(zhí)行擦除命令可消耗比執(zhí)行寫入或讀取命令多10到1000倍的時間,或消耗比執(zhí)行程序命令多10到100倍的時間。對于N個內(nèi)存庫214,內(nèi)存庫交錯控制器可將擦除命令分割為N條命令,每條命令擦除內(nèi)存庫214a的虛擬擦除塊。當(dāng)內(nèi)存庫-0214a執(zhí)行擦除命令時,總線仲裁器420可選擇在其他內(nèi)存庫214b-n上執(zhí)行的其他命令??偩€仲裁器420還可與其他組件(如存儲總線控制器348、主控制器224等)一起工作以在總線之間協(xié)調(diào)命令的執(zhí)行。利用總線仲裁器420、內(nèi)存庫控制器418、隊列410、412、414、416、和內(nèi)存庫交錯控制器的代理402、404、406,408協(xié)調(diào)命令的執(zhí)行可顯著的提升性能(相比于其他沒有內(nèi)存庫交錯功能的固態(tài)存儲系統(tǒng))。在一種實施方式中,固態(tài)控制器104包括一個內(nèi)存庫交錯控制器344,該內(nèi)存庫交錯控制器344為固態(tài)存儲器110的所有存儲元件216、218、220提供服務(wù)。在另一種實施方式中,固態(tài)控制器104內(nèi)存庫包括用于每個存儲元件行216a-m、218a-m、220a-m的交錯控制器344。例如一個內(nèi)存庫交錯控制器344服務(wù)存儲元件的一行SSS O. O-SSS O. N 216a、218a、220a,第二內(nèi)存庫交錯控制器344服務(wù)存儲元件的第二行SSS1. O-SSS 1.N 216b、218b、220b,等等。圖4B是示出了根據(jù)本發(fā)明的位于固態(tài)存儲設(shè)備內(nèi)的內(nèi)存庫交錯控制器的一種替代實施方式401的示意性框圖。圖4B所示實施方式中描述的組件210、212、340、346、348、350、402-430大體上與相對于圖4A描述的內(nèi)存庫交錯裝置400類似,除了下述不同點每個內(nèi)存庫214包括單獨的隊列432a-n及用于內(nèi)存庫的(如內(nèi)存庫_0 214a)讀取命令、寫入命令、擦除命令、管理命令等被傳送給內(nèi)存庫214的單獨隊列432a。在一種實施方式中,隊列432是FIFO。在另一種實施方式中,隊列432可具有以不同于存儲的順序的順序從隊列432中提取的命令。在另一種替代實施方式(未示出)中,讀取代理402、寫入代理404、擦除代理406和管理代理408可結(jié)合成單個代理,所述單個代理將命令分配給合適的隊列432a_n0在另一種替代的實施方式(未示出)中,命令存儲在單獨的隊列中,其中,可以以不同于存儲的順序的順序從隊列中提取命令,從而使得內(nèi)存庫交錯控制器344在余下的內(nèi)存庫214b-n上執(zhí)行。本領(lǐng)域技術(shù)人員會輕易地認識到其他能夠在一個內(nèi)存庫214a上執(zhí)行命令而在其他內(nèi)存庫214b-n上執(zhí)行其他命令的隊列配置和類型。特定存儲組件固態(tài)存儲控制器104包括同步緩沖器346,該同步緩沖器346從固態(tài)存儲器110發(fā)送和接收的命令和狀態(tài)消息。同步緩沖器346位于固態(tài)存儲時鐘域和本地總線時鐘域之間的邊界上,并提供緩沖以解決時鐘域差異。同步緩沖器346、寫入同步緩沖器308和讀取同步緩沖器328可獨立地或共同運作以緩沖數(shù)據(jù)、命令、狀態(tài)消息等等。在優(yōu)選實施方式中,同步緩沖器346所處的位置使得跨越時鐘域的信號數(shù)量最少。本領(lǐng)域技術(shù)人員會認識到時鐘域間的同步可任意運行在固態(tài)存儲設(shè)備102的其他位置,以優(yōu)化設(shè)計實施方案的某些方面。固態(tài)存儲控制器104包括存儲總線控制器348,該存儲總線控制器348解釋和翻譯用于發(fā)送給或讀取自固態(tài)存儲器110的數(shù)據(jù)的命令并基于固態(tài)存儲器110的類型接收自固態(tài)存儲器110的狀態(tài)消息。例如,存儲總線控制器348可針對不同的存儲類型、不同性能特點、不同制造商的存儲器等而具有不同的定時要求。存儲總線控制器348還將控制命令發(fā)送給存儲控制總線212。在優(yōu)選實施方式中,固態(tài)存儲控制器104包括MUX350,該MUX350包括多路轉(zhuǎn)換器350a-n的陣列,其中,每個多路轉(zhuǎn)換器用于固態(tài)存儲陣列110的一行。例如,多路轉(zhuǎn)換器350a與固態(tài)存儲元件216a、218a、220a關(guān)聯(lián)。MUX350通過存儲總線控制器348、同步緩沖器346和內(nèi)存庫交錯控制器344將來自寫入數(shù)據(jù)管道106的數(shù)據(jù)和來自存儲總線控制器348的命令經(jīng)存儲I/O總線210路由至固態(tài)存儲器110,并將來自固態(tài)存儲器110的數(shù)據(jù)和狀態(tài)消息經(jīng)存儲I/O總線210路由至讀取數(shù)據(jù)管道108和控制和狀態(tài)寄存器340。在優(yōu)選實施方式中,固態(tài)存儲控制器104包括用于固態(tài)存儲元件的每一行的(如SSS O.1 216a,SSS O. 2 218a,SSS O. N 220a)的 MUX350。MUX350 將來自寫入數(shù)據(jù)管道 106的數(shù)據(jù)和發(fā)送給固態(tài)存儲器110的命令通過存儲I/O總線210結(jié)合起來,并將需要由讀取數(shù)據(jù)管道108處理的數(shù)據(jù)從命令中分離出來。存儲在寫入緩沖器320中的包通過用于固態(tài)存儲元件的每一行(SSS X. O to SSS x.N 216,218,220)的寫入緩沖器308由寫入緩沖器外的總線傳給用于固態(tài)存儲元件的每一行(SSS X. O to SSS x.N 216,218,220)的MUX350。MUX350從存儲I/O總線210接收命令和讀取數(shù)據(jù)。MUX350還將狀態(tài)消息傳給存儲總線控制器348。存儲總線控制器348包括映射模塊424。映射模塊424將擦除塊的邏輯地址映射到擦除塊的一個或多個物理地址。例如,每個內(nèi)存庫214a具有20個存儲元件的陣列(如SSS O. O至SSS M. O 216)的固態(tài)存儲器110可具有映射到擦除塊的20個物理地址的特定擦除塊的邏輯地址(每個存儲元件有一個物理地址)。由于平行訪問存儲元件,所以位于存儲元件216a、218a、220a的行中的每個存儲元件中的同一位置的擦除塊會分享物理地址。為了選擇一個擦除塊(如在存儲元件SSS 0.0 216a中)代替行(如在存儲元件SSS O. O、O.1, ...O. N 216a、218a、220a中)中的所有擦除塊,可選擇一個內(nèi)存庫(在這種情況下為內(nèi)存庫-O 214a) ο這種用于擦除塊的邏輯到物理的映射是有好處的,這是由于如果一個擦除塊已損壞或不可訪問,所述映射可改為映射到另一擦除塊。當(dāng)一個元件的擦除塊出錯時,這種方法減少了失去整個虛擬擦除塊的損失。重映射模塊430將擦除塊的邏輯地址的映射改為虛擬擦除塊的一個或多個物理地址(遍布存儲元件的陣列)。例如,虛擬擦除塊I可映射到存儲元件SSS O. O 216a的擦除塊1、映射到存儲元件SSS1. O 216b的擦除塊1、. . ·和映射到存儲元件M. O 216m,虛擬擦除塊2可映射到存儲元件SSS O.1 218a的擦除塊2、映射到存儲元件SSS1. 1218b的擦除塊2、...和映射到存儲元件M.1 218m,等等。如果存儲元件SSS 0.0 216a的擦除塊I損壞、由于損耗遇到錯誤或由于一些原因不能被使用,重映射模塊可將從邏輯到物理的映射改為指向虛擬擦除塊I的擦除塊I的邏輯地址的映射。如果存儲元件SSS 0.0 216a的空閑擦除塊(將其稱為擦除塊221)可用且當(dāng)前并未被映射,重映射模塊可改變虛擬擦除塊I的映射為映射到指向存儲元件SSS O. O216的擦除塊221,而繼續(xù)指向存儲元件SSS 1.0 216b的擦除塊1、存儲元件SSS 2. O (未示出)的擦除塊1、...和指向存儲元件M. O 216m。映射模塊424或重映射模塊430可按固定順序映射擦除塊(虛擬擦除塊I到存儲元件的擦除塊1,虛擬擦除塊2到存儲元件的擦除塊2,等等)或可按基于其他一些標(biāo)準(zhǔn)的順序映射存儲元件216、218、220的擦除塊。在一種實施方式中,可按訪問時間分組擦除塊。按訪問時間分組、均衡命令執(zhí)行的時間(如將數(shù)據(jù)編入或?qū)懭胫付ú脸龎K的頁)可平均命令補齊,從而使得在虛擬擦除塊的擦除塊之間執(zhí)行的命令不會由于最慢的擦除塊而被限制。在另一種實施方式中,可按損耗程度、運行狀況來分組擦除塊。本領(lǐng)域技術(shù)人員會認識到當(dāng)映射或重映射擦除塊時需要考慮的其他問題。在一種實施方式中,存儲總線控制器348包括狀態(tài)捕捉模塊426,該狀態(tài)捕捉模塊426接收來自固態(tài)存儲器110的狀態(tài)消息并將該狀態(tài)消息發(fā)送給狀態(tài)MUX422。在另一種實施方式中,當(dāng)固態(tài)存儲器110為閃存時,存儲總線控制器348包括NAND總線控制器428。NANA總線控制器428將命令從讀取和寫入數(shù)據(jù)管道106、108傳送給固態(tài)存儲器110中的正確位置,并根據(jù)所述閃存的特點協(xié)調(diào)命令執(zhí)行的時間,等等。如果固態(tài)存儲器110為另一種類型的固態(tài)存儲器,則將NAND總線控制器428替換為針對存儲類型的總線控制器。本領(lǐng)域技術(shù)人員會認識到NAND總線控制器428的其他功能。流程5是根據(jù)本發(fā)明的在固態(tài)存儲設(shè)備102內(nèi)采用數(shù)據(jù)管道管理數(shù)據(jù)的方法500的一種實施方式的示意性流程圖。方法500始于步驟502,輸入緩沖器306接收一個或多個將要被寫入固態(tài)存儲器110的數(shù)據(jù)段(步驟504)。通常來說,所述一個或多個數(shù)據(jù)段包括對象的至少一部分,但也可以是整個對象。封包器302可創(chuàng)建一個或多個對象指定包以及對象。封包器302為每個包添加包頭,所述包頭通常包括包的長度和對象內(nèi)包的序列號。封包器302接收一個或多個存儲在輸入緩沖器306的數(shù)據(jù)或元數(shù)據(jù)段(步驟504),并通過創(chuàng)建一個或多個大小適于固態(tài)存儲器110的包來封包所述一個或多個數(shù)據(jù)或元數(shù)據(jù)段(步驟506),其中,每個包包括一個包頭和來自一個或多個段的數(shù)據(jù)。通常,第一包包括對象標(biāo)識符,該對象標(biāo)識符確定對象,為了該對象而創(chuàng)建包。第二包可包括具有信息的包頭,該信息由固態(tài)存儲設(shè)備102用于關(guān)聯(lián)第二包和第一包中確定的對象,該包頭還具有在對象內(nèi)定位第二包的偏移信息和數(shù)據(jù)。固態(tài)存儲設(shè)備控制器202管理內(nèi)存庫214和包流向的物理區(qū)域。ECC發(fā)生器304接收來自封包器302的包并為數(shù)據(jù)包生成ECC (步驟508)。通常,在包和ECC塊之間沒有固定關(guān)系。ECC塊可包括一個或多個包。包可包括一個或多個ECC塊。包可始于ECC塊內(nèi)的任意位置并可在ECC塊內(nèi)的任意位置結(jié)束。包可始于第一 ECC塊內(nèi)的任意位置并可在相繼的ECC塊中的任意位置結(jié)束。寫入同步緩沖器308在將ECC塊寫入固態(tài)存儲器110之前緩沖分布在對應(yīng)ECC塊中的包(步驟510),然后固態(tài)存儲控制器104在考慮到時鐘域差異的適當(dāng)?shù)臅r間寫入數(shù)據(jù)(步驟512),方法500終止于步驟514。寫入同步緩沖器308位于本地時鐘域和固態(tài)存儲器110時鐘域的邊界上。注意到為方便起見,方法500描述了接收一個或多個數(shù)據(jù)段并寫入一個或多個數(shù)據(jù)包, 但通常接收數(shù)據(jù)段流或組。通常,若干包括完整固態(tài)存儲器110的虛擬頁的ECC塊被寫入固態(tài)存儲器110。通常,封包器302接收某個大小的數(shù)據(jù)段并生成另一大小的包。這必然需要數(shù)據(jù)或元數(shù)據(jù)段或數(shù)據(jù)或元數(shù)據(jù)段的部分結(jié)合起來,以形成將段的所有數(shù)據(jù)捕捉進包的數(shù)據(jù)包。圖6是根據(jù)本發(fā)明的在固態(tài)存儲設(shè)備102內(nèi)采用數(shù)據(jù)管道管理數(shù)據(jù)的方法600的再一種實施方式的示意性流程圖。方法600始于步驟602,輸入緩沖器306接收一個或多個將要被寫入固態(tài)存儲器110的數(shù)據(jù)或元數(shù)據(jù)段(步驟604)。封包器302為每個包添加包頭,所述包頭通常包括對象內(nèi)包的長度。封包器302接收一個或多個存儲在輸入緩沖器306中的段(步驟604),并通過創(chuàng)建一個或多個大小適于固態(tài)存儲器110的包來封包所述一個或多個段(步驟606),其中每個包包括包頭和來自一個或多個段的數(shù)據(jù)。ECC發(fā)生器304接收來自封包器302的包并生成一個或多個用于包的ECC塊(步驟608)。寫入同步緩沖器308在將ECC塊寫入固態(tài)存儲器110之前緩沖分布在對應(yīng)ECC塊中的包(步驟610),然后固態(tài)存儲控制器104在考慮到時鐘域差異的合適的時間寫入數(shù)據(jù)(步驟612)。當(dāng)從固態(tài)存儲器110請求數(shù)據(jù)時,包括一個或多個數(shù)據(jù)包的ECC塊被讀入讀取同步緩沖器328并被緩沖(步驟614)。通過存儲I/O總線210接收包的ECC塊。由于存儲I/O總線210是雙向,當(dāng)讀取數(shù)據(jù)時,寫操作、命令操作等被停止。
ECC糾錯模塊322接收暫存在讀取同步緩沖器328中的請求包的ECC塊,并在必要時修正每個ECC塊中的錯誤(步驟616)。如果ECC糾錯模塊322確定在ECC塊中存在一個或多個錯誤并且錯誤可利用ECC —并修正,ECC糾錯模塊322修正ECC塊中的錯誤(步驟616)。如果ECC糾錯模塊322確定探測到的錯誤不可用ECC修正,則ECC糾錯模塊322發(fā)送中斷。解包器324在ECC糾錯模塊322修正任何錯誤之后接收請求包(步驟618)并通過檢查和刪除每個包的包頭解包所述包(步驟618)。對齊模塊326接收經(jīng)過解包的包、刪除多余的數(shù)據(jù)、并采用與請求數(shù)據(jù)段的設(shè)備兼容的形式按對象的數(shù)據(jù)段重新格式化所述數(shù)據(jù)(步驟620)。輸入緩沖器330接收經(jīng)過解包的請求包,并在包傳送給請求設(shè)備之間緩沖包(步驟622),方法600終止于步驟624。圖7是示意性流程圖,示出了根據(jù)本發(fā)明的用于在固態(tài)存儲設(shè)備102內(nèi)利用內(nèi)存庫交錯管理數(shù)據(jù)的方法700的一種實施方式。方法600始于步驟602,內(nèi)存庫交錯控制器344將一條或多條命令傳給兩個或多個隊列410、412、414、416 (步驟604)。通常,代理402、404,406,408根據(jù)命令類型將所述命令傳給隊列410、412、414、416 (步驟604)。隊列410、412、414、416的每個集包括用于每個命令類型的隊列。內(nèi)存庫交錯控制器344在內(nèi)存庫214之間協(xié)調(diào)存儲在隊列410、412、414、416的所述命令的執(zhí)行(步驟606),以使得第一類型的命令在一個內(nèi)存庫214a上執(zhí)行,而第二類型的命令在第二內(nèi)存庫214b上執(zhí)行,方法600結(jié)束于步驟608。存儲空間恢復(fù)圖8是示意性框圖,示出了根據(jù)本發(fā)明的在固態(tài)存儲設(shè)備102中收集垃圾的裝置800的一種實施方式。裝置800包括順序存儲模塊802、存儲部選擇模塊804、數(shù)據(jù)恢復(fù)模塊806及存儲部恢復(fù)模塊808,這些模塊將在下文中描述。在其他實施方式中,裝置800包括垃圾標(biāo)記模塊812和擦除模塊810。裝置800包括順序存儲模塊802,該順序存儲模塊802將數(shù)據(jù)包順序地寫入存儲部內(nèi)的頁。無論是新的包還是修改過的包,這些包都按順序存儲。在這種實施方式中,通常不將修改過的包寫回其先前存儲的位置。在一種實施方式中,順序存儲模塊802將包寫入存儲部的頁中的第一位置,然后寫入該頁中的下一個位置,并繼續(xù)寫入下一個位置和再下一個位置,直到該頁被寫滿。然后,順序存儲模塊802開始填充所述存儲部中的下一頁。這個過程一直持續(xù)到所述存儲部被寫滿。在優(yōu)選實施方式中,順序存儲模塊802開始將包寫入內(nèi)存庫(內(nèi)存庫-0214a)的存儲元件(如SSS O. O到SSS M.0 216)中的存儲寫入緩沖器。當(dāng)所述存儲寫入緩沖器寫滿時,固態(tài)存儲控制器104使得所述存儲寫入緩沖器中的數(shù)據(jù)被編入內(nèi)存庫214a的存儲元件216中的指定頁。然后,另一個內(nèi)存庫(如內(nèi)存庫-1 214b)被選定,并且當(dāng)一個內(nèi)存庫-O編程所述指定頁時,順序存儲模塊802開始將包寫入內(nèi)存庫214b的存儲元件218的存儲寫入緩沖器。當(dāng)內(nèi)存庫214b的存儲寫入緩沖器寫滿時,該存儲寫入緩沖器中的內(nèi)容被編入每個存儲元件218中的另一指定頁。這個過程是有效率的,這是因為當(dāng)一個內(nèi)存庫214a編程頁時,可填充另一個內(nèi)存庫214b的存儲寫入緩沖器。所述存儲部包括固態(tài)存儲設(shè)備102中的固態(tài)存儲器110的一部分。通常,所述存儲部為擦除塊。對于閃存來說,擦除塊上的擦除操作通過為每個單元充電將I寫入所述擦除塊中的每一位。相比于始于全為I的位置的程序操作,這是一個冗長過程,并且,當(dāng)數(shù)據(jù)被寫入時,一些位通過給被寫為O的單元放電而改變?yōu)镺。然而,當(dāng)固態(tài)存儲器110不是閃存時或固態(tài)存儲器110具有擦除周期消耗的時間和其他操作(如讀取或編程)消耗的時間差不多的閃存時,所述存儲部可不需要被擦除。正如此處所使用的,存儲部在大小上與擦除塊等同,但可(或可不)被擦除。當(dāng)在此處使用擦除塊時,擦除塊可指存儲元件(如SSS 0.0 216a)內(nèi)指定大小的特定區(qū)域,并通常包括一定數(shù)量的頁。當(dāng)“擦除塊”與閃存結(jié)合使用時,擦除塊通常是在寫入之前被擦除的存儲部。當(dāng)“擦除塊”與“固態(tài)存儲器”一起使用時,擦除塊可(或可不)被擦除。正如此處所使用的,擦除塊可包括一個擦除塊或擦除塊組,存儲元件(如SSS O. O到SSS M. O216a-n)的每一行都具有該擦除塊組中的一個擦除塊,擦除塊或擦除塊組在此處還可被稱為虛擬擦除塊。當(dāng)擦除塊指與所述虛擬擦除塊關(guān)聯(lián)的邏輯構(gòu)建時,所述擦除塊在此處可被稱為邏輯擦除塊(“LEB”)。通常,按照處理的順序順序地存儲所述包。在一種實施方式中,當(dāng)使用寫入數(shù)據(jù)管道106時,順序存儲模塊802按照包從寫入數(shù)據(jù)管道106出來的順序存儲包。這種順序可能是由于下述原因來自請求設(shè)備155的數(shù)據(jù)段與讀取自另一存儲部的有效數(shù)據(jù)包(正如在下述的恢復(fù)操作期間從存儲部恢復(fù)數(shù)據(jù)一樣)混合。將恢復(fù)的、有效的數(shù)據(jù)包重路由到寫入數(shù)據(jù)管道可包括如上文中相對于圖3的固態(tài)存儲控制器104描述的垃圾收集器旁路316。裝置800包括選擇恢復(fù)的存儲部的存儲部選擇模塊804。選擇恢復(fù)的存儲部可以使順序存儲模塊802將所述存儲部重新用于寫入數(shù)據(jù),因此將所述恢復(fù)的存儲部添加到存儲池中,或者所述存儲部被重新用于在確定下述條件后從所述存儲部中恢復(fù)有效數(shù)據(jù)所述存儲部失效、不可靠、應(yīng)該被刷新、或其他將所述存儲部暫時地或永久地移出所述存儲池的理由。在另一種實施方式中,存儲部選擇模塊804通過識別具有大量無效數(shù)據(jù)的存儲部或擦除塊來選擇恢復(fù)的存儲部。在另一種實施方式中,存儲部選擇模塊804通過識別具有低額損耗的存儲部或擦除塊來選擇恢復(fù)的存儲部。例如,識別具有低額損耗的存儲部或擦除塊可包括識別無效數(shù)據(jù)少、擦除重復(fù)的次數(shù)少、位出錯率低或程序計數(shù)低(緩沖器中一頁數(shù)據(jù)寫入所述存儲部中的頁的次數(shù)少;程序計數(shù)可從下列情況開始被測量制造設(shè)備時、所述存儲部最近一次被擦除時、其他任意事件發(fā)生時及這些情況的組合)的存儲部。存儲部選擇模塊804還可使用上述參數(shù)中的任意組合或其他參數(shù)以確定具有低額損耗的存儲部。通過確定具有低額損耗的存儲部來選擇恢復(fù)的存儲部可有助于發(fā)現(xiàn)未充分利用的存儲部,還可由于損耗均衡而被恢復(fù),等等。在另一種實施方式中,存儲部選擇模塊804通過識別具有高額損耗的存儲部或擦除塊來選擇恢復(fù)的存儲部。例如,識別具有高額損耗的存儲部或擦除塊來選擇恢復(fù)的存儲部包括識別擦除重復(fù)次數(shù)多、位出錯率高、具有不可恢復(fù)的ECC塊或程序計數(shù)高的存儲部。存儲部選擇模塊804還可使用上述參數(shù)的任意組合或其他參數(shù)以確定具有高額損耗的存儲部。通過確定具有高額損耗的存儲部來選擇恢復(fù)的存儲部可有助于發(fā)現(xiàn)被過度使用的存儲部,還可通過利用擦除周期刷新所述存儲部而被恢復(fù)等等,或者使所述存儲部像不能使用那樣不提供服務(wù)。裝置800包括數(shù)據(jù)恢復(fù)模塊806,該數(shù)據(jù)恢復(fù)模塊806從選定為恢復(fù)的存儲部中讀取有效數(shù)據(jù)包、將所述有效數(shù)據(jù)包與其他將要由順序存儲模塊802順序地寫入的數(shù)據(jù)包排隊并更新具有由順序存儲模塊802寫入的有效數(shù)據(jù)的新物理地址的索引。通常,所述索引為對象索引,該對象索引將對象的數(shù)據(jù)對象標(biāo)識符映射到形成包的位置的物理地址,所述數(shù)據(jù)對象存儲在固態(tài)存儲器110中。在一種實施方式中,裝置800包括存儲部恢復(fù)模塊808,該存儲部恢復(fù)模塊808為使用或再使用而準(zhǔn)備所述存儲部并將所述存儲部標(biāo)記為對順序存儲模塊802可用,以在數(shù)據(jù)恢復(fù)模塊806完成從所述存儲部中復(fù)制有效數(shù)據(jù)之后順序地寫入數(shù)據(jù)包。在另一種實施方式中,裝置800包括存儲部恢復(fù)模塊808,該存儲部恢復(fù)模塊808將選定為恢復(fù)的存儲部標(biāo)記為無法存儲數(shù)據(jù)。通常,這是由于存儲部選擇模塊804識別具有高額損耗的存儲部或擦除塊來選擇恢復(fù)的存儲部,從而使得所述存儲部或擦除塊沒有條件被用于可靠的數(shù)據(jù)存儲。在一種實施方式中,裝置800位于固態(tài)存儲設(shè)備102的固態(tài)存儲設(shè)備控制器202內(nèi)。在另一種實施方式中,裝置800控制固態(tài)存儲設(shè)備控制器202。在另一種實施方式中,裝置800的一部分位于固態(tài)存儲設(shè)備控制器202內(nèi)。在另一種實施方式中,由數(shù)據(jù)恢復(fù)模塊806更新的對象索引也位于固態(tài)存儲設(shè)備控制器202內(nèi)。在一種實施方式中,所述存儲部為擦除塊,并且裝置800包括擦除模塊810,該擦除模塊810在數(shù)據(jù)恢復(fù)模塊806完成從所述選定的擦除塊中復(fù)制有效數(shù)據(jù)包之后并在存儲部恢復(fù)模塊808將所述擦除塊標(biāo)記為可用之前,擦除選定為恢復(fù)的擦除塊。對于閃存和其他擦除操作消耗的時間比讀取或?qū)懭氩僮飨牡臅r間長得多的固態(tài)存儲器來說,在使數(shù)據(jù)塊可以寫入新數(shù)據(jù)之前擦除所述數(shù)據(jù)塊有助于高效的操作。當(dāng)固態(tài)存儲器110布置在內(nèi)存庫214內(nèi)時,擦除模塊810的擦除操作可在一個內(nèi)存庫上執(zhí)行,而其他內(nèi)存庫可執(zhí)行讀取、寫入或其他操作。在一種實施方式中,裝置800包括垃圾標(biāo)記模塊812,該垃圾標(biāo)記模塊812將存儲部中的數(shù)據(jù)包識別為無效,以響應(yīng)指示所述數(shù)據(jù)包不再有效的操作。例如,如果數(shù)據(jù)包被刪除,垃圾標(biāo)記模塊812可將所述數(shù)據(jù)包識別為無效。讀-修改-寫操作是用于將數(shù)據(jù)包識別為無效的另一種方法。在一種實施方式中,垃圾標(biāo)記模塊812可通過更新索引將所述數(shù)據(jù)包識別為無效。在另一種實施方式中,垃圾標(biāo)記模塊812可通過存儲另一數(shù)據(jù)包將所述數(shù)據(jù)包識別為無效,所述另一數(shù)據(jù)包指示無效的數(shù)據(jù)包已經(jīng)被刪除。這種方法是有利的,這是由于在固態(tài)存儲器110中存儲所述數(shù)據(jù)包已被刪除的信息允許對象索引重建模塊262或類似模塊重建具有項的對象索引,所述項指示所述無效的數(shù)據(jù)包已經(jīng)被刪除。在一種實施方式中,裝置800可被用于在清洗命令之后填充數(shù)據(jù)的虛擬頁中的剩余部分,以提升整體的性能,其中,所述清洗命令使數(shù)據(jù)停止流入寫入數(shù)據(jù)管道106,直到寫入數(shù)據(jù)管道106為空且所有的包已被永久地寫入非易失性固態(tài)存儲器110。這具有以下好處降低了需要的垃圾收集的量、減少了用于擦除存儲部的時間并減少了編程虛擬頁所需的時間。例如,可僅在準(zhǔn)備將一個小包寫入固態(tài)存儲器100的虛擬頁內(nèi)時,接收清洗命令。編程這個幾乎為空的頁可能會引起下述結(jié)果需要立即恢復(fù)浪費的空間;導(dǎo)致所述存儲部內(nèi)的有效數(shù)據(jù)被當(dāng)作垃圾不必要的收集;及擦除、恢復(fù)所述存儲空間并將所述存儲空間返回到可用空間池以被順序存儲模塊802寫入。將所述數(shù)據(jù)包標(biāo)記為無效而不是實際上擦除無效的數(shù)據(jù)包是有效率的,這是因為,如上所述,對于閃存和其他類似存儲器來說,擦除操作消耗相當(dāng)長的時間。允許垃圾收集系統(tǒng)(如裝置800中所述的)在固態(tài)存儲器110內(nèi)自主地運行提供了一種將擦除操作與讀取、寫入或其他更快的操作分開的方法,從而使得固態(tài)存儲設(shè)備102能比其他許多固態(tài)存儲系統(tǒng)或數(shù)據(jù)存儲設(shè)備運行得快得多。圖9是示意性流程圖,示出了根據(jù)本發(fā)明的用于存儲恢復(fù)的方法900的一種實施方式。方法900始于步驟902,順序存儲模塊802將數(shù)據(jù)包順序地寫入存儲部(步驟904)。所述存儲部是固態(tài)存儲設(shè)備102中的固態(tài)存儲器110的一部分。通常,存儲部為擦除塊。所述數(shù)據(jù)包源于對象,而且所述數(shù)據(jù)包按處理的順序被順序地存儲。存儲部選擇模塊804選擇恢復(fù)的存儲部(步驟906),并且數(shù)據(jù)恢復(fù)模塊806從選定為恢復(fù)的存儲部中讀取有效的數(shù)據(jù)包(步驟908)。通常,有效的數(shù)據(jù)包為未被標(biāo)記為擦除、刪除或其他一些無效數(shù)據(jù)標(biāo)識符的數(shù)據(jù)包,所述數(shù)據(jù)包被視為有效或“好”的數(shù)據(jù)。數(shù)據(jù)恢復(fù)模塊806將有效的數(shù)據(jù)包與其他預(yù)定由順序存儲模塊802順序地寫入的數(shù)據(jù)包排隊(步驟910)。數(shù)據(jù)恢復(fù)模塊806更新具有由順序存儲模塊802所寫入的數(shù)據(jù)的新物理地址的索引(步驟912)。所述索引包括從數(shù)據(jù)包的物理地址到對象標(biāo)識符的映射。這些數(shù)據(jù)包存儲在固態(tài)存儲器110中,并且所述對象標(biāo)識符對應(yīng)于所述數(shù)據(jù)包。在數(shù)據(jù)恢復(fù)模塊806完成從所述存儲部復(fù)制有效數(shù)據(jù)后,存儲部恢復(fù)模塊將選定為恢復(fù)的存儲部標(biāo)記為對順序存儲模塊802可用(步驟914),以順序地寫入數(shù)據(jù)包,方法900結(jié)束于步驟916??諗?shù)據(jù)段指令一般來說,當(dāng)數(shù)據(jù)不再有用時就會被擦除。在許多文件系統(tǒng)中,擦除命令刪除文件系統(tǒng)中的目錄項,而仍將數(shù)據(jù)保持在包含該數(shù)據(jù)的存儲設(shè)備中。一般來說,數(shù)據(jù)存儲設(shè)備并不涉及此類擦除操作。另一種擦除數(shù)據(jù)的方法是向數(shù)據(jù)存儲設(shè)備寫入O、I或一些其他空數(shù)據(jù)字符,以實際上替代所擦除的文件。然而,這樣做效率不高,因為在傳送將被覆蓋的數(shù)據(jù)時會使用寶貴的帶寬。此外,用來覆蓋無效數(shù)據(jù)的數(shù)據(jù)會占據(jù)存儲設(shè)備中的空間。一些存儲設(shè)備(如本文所描述的固態(tài)存儲設(shè)備102)不是隨機存取存儲設(shè)備,因此,更新先前所存儲的數(shù)據(jù)并不會覆蓋現(xiàn)有數(shù)據(jù)。嘗試在此類設(shè)備中使用一串I字符或一串O字符來覆蓋數(shù)據(jù)會占據(jù)寶貴的空間,而且也無法滿足所期望的覆蓋現(xiàn)存數(shù)據(jù)的意愿。對于這些非隨機存儲設(shè)備(諸如固態(tài)存儲設(shè)備102)而言,客戶端114 一般來說不具備覆蓋數(shù)據(jù)以擦除數(shù)據(jù)的能力。在接收到一串重復(fù)的字符或字符串時,所接收到的數(shù)據(jù)是可高度壓縮的,但通常在將所述數(shù)據(jù)發(fā)往存儲設(shè)備之前先由文件系統(tǒng)來執(zhí)行壓縮。一般的存儲設(shè)備無法區(qū)分已經(jīng)壓縮的數(shù)據(jù)和未經(jīng)壓縮的數(shù)據(jù)。存儲設(shè)備還可接收讀取所擦除的文件的命令,從而存儲設(shè)備能夠向請求設(shè)備傳送一連串的0、1或空字符。同樣的,需要帶寬來傳送表示了所擦除的文件的數(shù)據(jù)。由上述討論可知,很明顯地存在對使得存儲設(shè)備接收數(shù)據(jù)將被擦除的指令的裝置、系統(tǒng)和方法,以使得存儲設(shè)備能夠存儲表示了空數(shù)據(jù)段、具有重復(fù)的字符或字符串的數(shù)據(jù)的數(shù)據(jù)段令牌。該裝置、系統(tǒng)和方法還可擦除現(xiàn)有數(shù)據(jù),由此產(chǎn)生的使用后的存儲空間包括有小的數(shù)據(jù)段令牌。提出了能夠克服現(xiàn)有技術(shù)的一些缺陷或所有缺陷的裝置、系統(tǒng)和方法。
圖10是示出了根據(jù)本發(fā)明的具有用于生成令牌指令的裝置的系統(tǒng)1000的一種實施方式的示意性框圖。該裝置包括令牌指令生成模塊1002、令牌指令傳輸模塊1004、讀取接收器模塊1006、讀取請求傳輸模塊1008、讀取令牌指令接收器模塊1010、請求客戶端響應(yīng)模塊1012和數(shù)據(jù)段重新生成模塊1014,將在下文中描述這些模塊。在一種實施方式中,所述裝置位于服務(wù)器112中,該服務(wù)器112與具有存儲控制器152、數(shù)據(jù)存儲設(shè)備154(大體與上文所描述的相類似)的存儲設(shè)備150相連。在一種實施方式中,該裝置包括令牌指令生成模塊1002,該令牌指令生成模塊1002用于生成具有令牌指令的存儲請求。令牌指令包括在存儲設(shè)備150上存儲數(shù)據(jù)段的請求。令牌指令旨在代替待發(fā)往存儲設(shè)備150并作為數(shù)據(jù)段存儲的(如果數(shù)據(jù)段令牌不在其位置發(fā)送的話)一連串的重復(fù)的、相同的字符或一連串的重復(fù)的、相同的字符串。在一種實施方式中,所述一連串的重復(fù)的、相同的字符指示所述數(shù)據(jù)段為空。例如,一連串的重復(fù)的、相同的字符可以是O也可以是1,都為O或都為I的數(shù)據(jù)段可被看作是空的。令牌指令至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。數(shù)據(jù)段標(biāo)識符一般來說是設(shè)法在存儲設(shè)備中存儲重復(fù)的、相同的字符或字符串的對象ID、文件名稱或其他為文件系統(tǒng)、應(yīng)用、服務(wù)器112所悉知的標(biāo)識符等等。數(shù)據(jù)段長度一般來說是一連串的重復(fù)的、相同的字符或字符串所需的存儲空間。數(shù)據(jù)段令牌和令牌指令一般來說不包括數(shù)據(jù)段的數(shù)據(jù),如一連串重復(fù)的、相同的字符。然而,令牌指令可以包括用于形成數(shù)據(jù)段令牌的其他相關(guān)信息,如所述重復(fù)的、相同的字符或字符串中的至少一個實例。令牌指令還可包括元數(shù)據(jù),如數(shù)據(jù)段位置、自文件系統(tǒng)的地址、對應(yīng)于數(shù)據(jù)段的數(shù)據(jù)存儲設(shè)備中的位置等等。本領(lǐng)域的技術(shù)人員將會認識到可包括在令牌指令中的其他信息。在一種實施方式中,指令生成模塊1002生成令牌指令以及數(shù)據(jù)段令牌。在一種實施方式中,令牌指令生成模塊1002生成令牌指令和安全擦除命令以響應(yīng)于覆蓋存儲設(shè)備150中的現(xiàn)存數(shù)據(jù)的請求?,F(xiàn)存數(shù)據(jù)包括存儲設(shè)備中的使用與令牌指令中的數(shù)據(jù)段標(biāo)識符相同的數(shù)據(jù)段標(biāo)識符來標(biāo)識的數(shù)據(jù)。一般來說,在下列情況下發(fā)送覆蓋數(shù)據(jù)的請求僅僅將數(shù)據(jù)標(biāo)記為無效的或垃圾已經(jīng)不夠了 ;刪除指向數(shù)據(jù)的指針;或者其他典型的刪除操作,但是,其中,需要以不可恢復(fù)所述數(shù)據(jù)的方式來覆蓋所述數(shù)據(jù)。比方說,當(dāng)認為數(shù)據(jù)是敏感信息,為了安全因素的考慮而必須將其刪除時,就需要覆蓋數(shù)據(jù)的命令。安全擦除命令指令存儲設(shè)備150覆蓋現(xiàn)有數(shù)據(jù),由此現(xiàn)有數(shù)據(jù)是不可恢復(fù)的。存儲設(shè)備150隨后創(chuàng)建數(shù)據(jù)段令牌,并對現(xiàn)有數(shù)據(jù)執(zhí)行覆蓋、恢復(fù)、擦除等操作。由此,現(xiàn)有數(shù)據(jù)是不可恢復(fù)的,數(shù)據(jù)段令牌存儲在存儲設(shè)備150中,其中,數(shù)據(jù)段令牌所占據(jù)的存儲空間比現(xiàn)有數(shù)據(jù)小得多。在另一種實施方式中,所述裝置包括擦除確認模塊1016,該擦除確認模塊1016用于接收確認,即,存儲設(shè)備中的現(xiàn)有數(shù)據(jù)已經(jīng)由字符覆蓋了,從而現(xiàn)有數(shù)據(jù)是不可恢復(fù)的。該確認可被轉(zhuǎn)發(fā)至請求設(shè)備或客戶端114,并可用于驗證現(xiàn)有數(shù)據(jù)已經(jīng)處于不可恢復(fù)的狀況中。在其他實施方式中,安全擦除命令可指令存儲設(shè)備150使用特定的字符、字符串來覆蓋現(xiàn)有數(shù)據(jù),或者可執(zhí)行多次執(zhí)行命令。本領(lǐng)域的技術(shù)人員將會認識到用于配置一個或多個安全擦除命令以確保現(xiàn)有數(shù)據(jù)不可恢復(fù)的其他方式??梢詫?shù)據(jù)進行加密并隨后將其存儲在存儲設(shè)備150中,其中,使用存儲設(shè)備150在存儲所述數(shù)據(jù)時接收到的加密密鑰來完成加密過程。在另一種實施方式中,在存儲現(xiàn)有數(shù)據(jù)之前先使用該接收到的加密密鑰來加密現(xiàn)有數(shù)據(jù)的情況下,令牌指令生成模塊1002生成令牌指令以及加密擦除命令,以響應(yīng)接收了覆蓋現(xiàn)有數(shù)據(jù)的請求。所述加密擦除命令擦除用于存儲現(xiàn)有數(shù)據(jù)的加密密鑰,由此,加密密鑰不可恢復(fù)。在一種實施方式中,擦除加密密鑰包括擦除來自于請求設(shè)備的加密密鑰。在另一種實施方式中,擦除加密密鑰包括擦除來自服務(wù)器、密鑰金庫(key vault)或存儲加密密鑰的其他位置的加密密鑰。擦除加密密鑰可包括使用其他數(shù)據(jù)或使用一連串的字符來替代加密密鑰,以使得用任何方式都無法恢復(fù)該加密密鑰。一般來說,在使用足夠穩(wěn)健以至于能夠阻撓對解密現(xiàn)有數(shù)據(jù)的嘗試的加密程序來加密現(xiàn)有數(shù)據(jù)的情況下,擦除加密密鑰會使得存儲設(shè)備150中的現(xiàn)有數(shù)據(jù)不可恢復(fù)。在如下情況下,覆蓋現(xiàn)有數(shù)據(jù)的請求可以是安全擦除指令(由于安全因素的原因而覆蓋數(shù)據(jù));覆蓋數(shù)據(jù)以擦除數(shù)據(jù)的請求;設(shè)法將現(xiàn)有數(shù)據(jù)替換為重復(fù)的、相同的字符或字符串的請求等等。在一種實施方式中,安全擦除指令使得設(shè)備能夠安全地擦除加密密鑰以及能夠安全地擦除現(xiàn)有數(shù)據(jù)。在一種實施方式中,擦除加密密鑰可允許安全地擦除存儲設(shè)備中的數(shù)據(jù)得以延遲,直到垃圾收集進程(存儲空間恢復(fù)進程的一部分)擦除了數(shù)據(jù)為止。本領(lǐng)域的技術(shù)人員將會認識到擦除加密密鑰的其他方法和接收覆蓋現(xiàn)有數(shù)據(jù)的請求的其他方法。在一種實施方式中,令牌指令包括數(shù)據(jù)段令牌,令牌指令傳輸模塊1004發(fā)送令牌指令以及數(shù)據(jù)段令牌。在另一種實施方式中,令牌指令不包括數(shù)據(jù)段令牌,而包括使得存儲設(shè)備150生成數(shù)據(jù)段令牌的命令。在該實施方式中,令牌指令傳輸模塊1004發(fā)送命令以及令牌指令以生成數(shù)據(jù)段令牌,但并不發(fā)送數(shù)據(jù)段令牌。所述裝置包括令牌指令傳輸模塊1004,后者用于向存儲設(shè)備150發(fā)送令牌指令。一般來說,令牌指令傳輸模塊1004發(fā)送作為存儲請求的一部分的令牌指令。存儲請求可以是對象請求的形式、數(shù)據(jù)請求的形式或本領(lǐng)域的技術(shù)人員所知的其他形式。在令牌指令生成模塊1002生成了安全擦除指令的情況下,令牌指令傳輸模塊1004將所述安全擦除指令發(fā)送給存儲設(shè)備150。在令牌指令生成模塊1002生成了擦除加密密鑰命令的情況下,當(dāng)需要時,擦除加密密鑰命令被發(fā)往另一個設(shè)備來執(zhí)行該命令。在一種實施方式中,令牌指令傳輸模塊1004發(fā)送不包括數(shù)據(jù)段令牌的令牌指令。在這種實施方式中,令牌指令包括可由存儲設(shè)備150用來產(chǎn)生數(shù)據(jù)段令牌的指令和信息。在另一種實施方式中,令牌指令傳輸模塊1004發(fā)送包括數(shù)據(jù)段令牌的令牌指令。在這種實施方式中,存儲設(shè)備150能夠識別出與令牌指令接收的數(shù)據(jù)段令牌表示了數(shù)據(jù)段,存儲設(shè)備150采取適當(dāng)?shù)牟僮鱽泶鎯?shù)據(jù)段令牌,以使得數(shù)據(jù)段令牌表示了數(shù)據(jù)段,而不僅僅是將數(shù)據(jù)段令牌作為普通數(shù)據(jù)來存儲。在特定的實施方式中,所述裝置包括讀取接收器模塊1006,用于接收來自存儲設(shè)備150的讀取數(shù)據(jù)段的存儲請求;讀取請求傳輸模塊1008,用于向存儲設(shè)備150發(fā)送存儲請求。一般來說,存儲請求是從請求客戶端114(如外部客戶端114)、服務(wù)器112內(nèi)部的客戶端114(如在服務(wù)器112上運行的應(yīng)用或文件服務(wù)器等等)接收的。本領(lǐng)域的技術(shù)人員將會認識到可作為讀取接收器模塊1006能從其接收存儲請求的請求客戶端114的其他設(shè)備以及軟件。存儲請求包括讀取對應(yīng)于數(shù)據(jù)段令牌的數(shù)據(jù)段的請求,其中,數(shù)據(jù)段令牌被請求存儲在由令牌指令傳輸模塊1004發(fā)往存儲設(shè)備150的令牌指令中。在一種實施方式中,請求客戶端114不知道已經(jīng)以數(shù)據(jù)段令牌的形式存儲了數(shù)據(jù)段。在另一種實施方式中,請求設(shè)備知道已經(jīng)以數(shù)據(jù)段令牌的形式存儲了數(shù)據(jù)段,但并不清楚存儲于數(shù)據(jù)段令牌中的信
肩、O在一種特定的實施方式中,裝置還可包括讀取令牌指令接收器模塊1010,該令牌指令接收器模塊1010用于從存儲設(shè)備接收對應(yīng)于所請求的數(shù)據(jù)段令牌的消息,其中,所述消息至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。一般來說,所述消息并不包括數(shù)據(jù)段中的數(shù)據(jù)。所述消息還包括存儲在數(shù)據(jù)段令牌中的其他信息,如數(shù)據(jù)段位置或重復(fù)的、相同的字符或字符串。在這種特定的實施方式中,裝置包括請求客戶端響應(yīng)模塊1012,該客戶端響應(yīng)模塊1012用于向請求客戶端113發(fā)送根據(jù)從存儲設(shè)備150接收的消息而形成的響應(yīng)。在一種實施方式中,讀取令牌指令接收器模塊1010還接收消息中的有關(guān)現(xiàn)有數(shù)據(jù)已經(jīng)被字符覆蓋從而現(xiàn)有數(shù)據(jù)不可恢復(fù)的確認,其中,所述現(xiàn)有數(shù)據(jù)預(yù)先存儲在存儲設(shè)備中并且使用來自在消息中接收的數(shù)據(jù)段令牌的相同的數(shù)據(jù)段標(biāo)識符來標(biāo)記。確認還可以獨立于任何讀取數(shù)據(jù)段的存儲請求從存儲設(shè)備150接收到。在另一種實施方式中,其中,請求客戶端114需要數(shù)據(jù)段,所述裝置包括數(shù)據(jù)段重新生成模塊1014,該數(shù)據(jù)段重新生成模塊1014用于使用包含在消息中的信息來重構(gòu)數(shù)據(jù)段中的數(shù)據(jù)。在這種情況下,發(fā)往請求客戶端的響應(yīng)包括經(jīng)重構(gòu)的數(shù)據(jù)段。在另一種實施方式中,發(fā)往請求客戶端的響應(yīng)包括包含在從存儲設(shè)備150接收到的消息中的信息。請求客戶端114隨后重構(gòu)數(shù)據(jù)段或以一些其他的方式來使用該信息。在另一種實施方式中,所述消息包括數(shù)據(jù)段令牌。數(shù)據(jù)段重新生成模塊1014使用該數(shù)據(jù)段令牌以在將數(shù)據(jù)段令牌向請求客戶端114轉(zhuǎn)發(fā)之前重構(gòu)數(shù)據(jù)段,或者,請求客戶端響應(yīng)模塊1012可以簡單地轉(zhuǎn)發(fā)該數(shù)據(jù)段令牌。在一種實施方式中,具有令牌指令的存儲請求還包括在存儲設(shè)備150預(yù)留存儲空間的請求,其中,所請求的預(yù)留存儲空間的存儲空間大小與數(shù)據(jù)段長度大致相同。在另一種實施方式,所請求的預(yù)留存儲空間的存儲空間大小不同于數(shù)據(jù)段長度。例如,如果存儲設(shè)備150是固態(tài)存儲設(shè)備102,固態(tài)存儲設(shè)備102可以連接到硬驅(qū)動器或其他的長期、廉價存儲器,而固態(tài)存儲器110則被配置為長期存儲器的緩存。預(yù)留存儲空間的請求使得固態(tài)存儲設(shè)備102將一部分緩存清洗到長期存儲器以準(zhǔn)備向固態(tài)存儲設(shè)備102寫入數(shù)據(jù)。本領(lǐng)域的技術(shù)人員將會認識到期望請求預(yù)留存儲空間的其他情況。在一種實施方式中,裝置可具有讀取接收器模塊1006、讀取請求傳輸模塊1008、讀取令牌指令接收器模塊1010、請求客戶端響應(yīng)模塊1012,這些模塊大體類似于上文所描述的那些模塊。在這種實施方式中,模塊1006-1012獨立于包括有令牌生成模塊1002或令牌指令傳輸模塊1004的裝置。在一種實施方式中,所述裝置包括大體類似于上文所描述的數(shù)據(jù)段重新生成模塊1014的數(shù)據(jù)段重新生成模塊1014。圖11是示意性框圖,示出了根據(jù)本發(fā)明的用于生成和發(fā)送令牌指令的方法1100的實施方式。方法1100始于步驟1102,令牌指令生成模塊1002生成包括令牌指令的存儲請求(步驟1104),其中,令牌指令包括在存儲設(shè)備150中存儲數(shù)據(jù)段令牌的請求。令牌指令傳輸模塊1004向存儲設(shè)備150發(fā)送令牌指令(步驟1106),方法1100在1108結(jié)束。在一種實施方式中,存儲請求包括令牌指令以存儲數(shù)據(jù)段令牌,其中,存儲請求大體上與數(shù)據(jù)段中的數(shù)據(jù)無關(guān)。在另一種實施方式中,存儲請求包括來自于數(shù)據(jù)段的數(shù)據(jù)。在優(yōu)選實施方式中,軟件應(yīng)用程序使用令牌指令創(chuàng)建存儲請求,從而避免了創(chuàng)建數(shù)據(jù)段。在另一種實施方式中,軟件應(yīng)用程序請求生成令牌指令。圖12是示意性流程圖,示出了根據(jù)本發(fā)明的用于讀取數(shù)據(jù)段令牌的方法1200的實施方式。方法1200始于步驟1202,讀取接收器模塊1006從請求客戶端114接收從存儲設(shè)備150讀取數(shù)據(jù)段的存儲請求(步驟1204)。讀取請求傳輸模塊1008將存儲請求發(fā)往存儲設(shè)備150 (步驟1206)。讀取令牌指令接收器模塊1008從存儲設(shè)備150接收對應(yīng)于所請求的數(shù)據(jù)段令牌的消息(步驟1208),其中,所述消息至少包括數(shù)據(jù)段標(biāo)示符和數(shù)據(jù)段長度。所述消息大體上與數(shù)據(jù)段中的數(shù)據(jù)無關(guān)。請求客戶端響應(yīng)模塊1012向請求客戶端發(fā)送響應(yīng)(步驟1210),其中,該響應(yīng)是根據(jù)從存儲設(shè)備150接收到的消息而形成的,方法1200結(jié)束于步驟1212。圖13是示意性框圖,示出了根據(jù)本發(fā)明的包括用于管理數(shù)據(jù)段令牌的裝置的系統(tǒng)1300的實施方式。系統(tǒng)1300包括具有寫入請求接收器模塊1302和數(shù)據(jù)段令牌存儲模塊1304的裝置,在多個實施方式中,所述系統(tǒng)還包括具有令牌指令生成模塊1306、讀取請求接收器模塊1308、讀取數(shù)據(jù)段令牌模塊1310、讀取請求響應(yīng)模塊1312(具有發(fā)送數(shù)據(jù)段令牌模塊1314和發(fā)送數(shù)據(jù)段模塊1316)、重構(gòu)數(shù)據(jù)段模塊1318、安全擦除模塊1320(具有擦除確認模塊1322)和存儲空間預(yù)留模塊1324,下文將描述這些模塊。系統(tǒng)1300包括具有存儲控制器152和數(shù)據(jù)存儲設(shè)備154的存儲設(shè)備150 (與上文所描述的設(shè)備大體類似)。系統(tǒng)1300包括與存儲設(shè)備150進行通信的請求設(shè)備1326 (下文將描述)。在所描述的實施方式中,模塊1302-1324被包括在存儲設(shè)備150或存儲控制器152中。在另一種實施方式中,模塊1302-1324中的一個或多個模塊的至少一部分位于存儲設(shè)備150之外。在又一種實施方式中,請求設(shè)備1326以驅(qū)動器、軟件或模塊1302-1324中的一個或多個模塊的其他功能形式包括模塊1302-1324的一部分。例如,在請求設(shè)備1326中示出了令牌生成模塊1306和重構(gòu)數(shù)據(jù)段模塊1318。本領(lǐng)域的技術(shù)人員將會認識到用以分布和實現(xiàn)模塊1302-1324的功能的其他方式。所述裝置包括寫入請求接收器模塊1302,該寫入請求接收器模塊1302用于接收來自請求設(shè)備1326的存儲請求,其中,所述存儲請求包括將數(shù)據(jù)段存儲到存儲設(shè)備150的請求。數(shù)據(jù)段包括一連串的重復(fù)的、相同的字符或字符串。一般來說,所述一連串的重復(fù)的、相同的字符表明數(shù)據(jù)段為空。當(dāng)一連串的重復(fù)的、相同的字符為I或O的時候,尤為如此。所述裝置包括用于在存儲設(shè)備150中存儲數(shù)據(jù)段令牌的數(shù)據(jù)段令牌存儲模塊1304。數(shù)據(jù)段令牌至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。數(shù)據(jù)段令牌大體上與數(shù)據(jù)段中的實際數(shù)據(jù)無關(guān)。可以以多種方式存儲數(shù)據(jù)段令牌。在一種實施方式中,數(shù)據(jù)段令牌包括索引中的項,其中,所述索引對應(yīng)于存儲在存儲設(shè)備150中的信息和數(shù)據(jù)。比方說,索引可以是上文結(jié)合圖2所描繪的裝置200而描述的對象索引。索引還可以是文件系統(tǒng)索引、塊存儲索引或本領(lǐng)域技術(shù)人員所知的其他索引。在另一種實施方式中,數(shù)據(jù)段令牌包括存儲在存儲設(shè)備150中的元數(shù)據(jù),或是采用了存儲在存儲設(shè)備150中的元數(shù)據(jù)的形式。在另一種實施方式中,數(shù)據(jù)段令牌作為元數(shù)據(jù)存儲在存儲設(shè)備中,并且數(shù)據(jù)段令牌包括索引中的項。本領(lǐng)域技術(shù)人員將會認識到存儲數(shù)據(jù)段令牌的其他方式。
在一種實施方式中,存儲請求包括用以存儲數(shù)據(jù)段令牌的令牌指令,其中,存儲請求本質(zhì)上與數(shù)據(jù)段中的數(shù)據(jù)無關(guān)。令牌指令包括數(shù)據(jù)段令牌或用以生成數(shù)據(jù)段令牌的命令。其中,令牌指令不包括數(shù)據(jù)段令牌,數(shù)據(jù)段令牌存儲模塊1304根據(jù)令牌指令中的信息生成數(shù)據(jù)段令牌。如果令牌指令包括數(shù)據(jù)段令牌,那么數(shù)據(jù)段令牌存儲模塊1304執(zhí)行如下操作將數(shù)據(jù)段令牌辨識為表示了令牌指令中的數(shù)據(jù)段標(biāo)識符所標(biāo)識的數(shù)據(jù)段的數(shù)據(jù)結(jié)構(gòu);適當(dāng)?shù)卮鎯?shù)據(jù)段令牌?!銇碚f,在數(shù)據(jù)段令牌存儲模塊1304辨識出了數(shù)據(jù)段令牌的情況下,該數(shù)據(jù)段令牌在某些方面不同于存儲在存儲設(shè)備150中的其他數(shù)據(jù)。例如,請求設(shè)備1326可以僅僅壓縮數(shù)據(jù)并發(fā)送經(jīng)壓縮的對象、文件或數(shù)據(jù)段,從而存儲設(shè)備150不將經(jīng)壓縮的數(shù)據(jù)段與通過其他存儲請求而接收到的其他數(shù)據(jù)相區(qū)分。在數(shù)據(jù)段令牌存儲模塊1304辨識出了接收到的數(shù)據(jù)段令牌是數(shù)據(jù)段令牌的情況下,數(shù)據(jù)段令牌存儲模塊1304以如下方式存儲數(shù)據(jù)段令牌使得當(dāng)讀取時,該數(shù)據(jù)段令牌表現(xiàn)為數(shù)據(jù)段而非數(shù)據(jù)段令牌。本領(lǐng)域的技術(shù)人員將會認識到數(shù)據(jù)段令牌存儲模塊1304在辨識出所接收到的數(shù)據(jù)段令牌是數(shù)據(jù)段令牌而非數(shù)據(jù)段之后可存儲數(shù)據(jù)段令牌的其他方式。在另一種實施方式中,存儲請求包括來自數(shù)據(jù)段的數(shù)據(jù)。在該實施方式中,所述裝置包括用于根據(jù)數(shù)據(jù)段生成數(shù)據(jù)段令牌的令牌生成模塊1306,其中,為響應(yīng)存儲數(shù)據(jù)段的存儲請求而創(chuàng)建所述數(shù)據(jù)段令牌。在又一種實施方式中,令牌生成模塊1306(可能以驅(qū)動器的形式)位于請求設(shè)備1326中。在一種實施方式中,裝置包括安全擦除模塊1320,該安全擦除模塊1320用于使用字符覆蓋現(xiàn)有數(shù)據(jù),以使得現(xiàn)有數(shù)據(jù)不可恢復(fù),其中,所述現(xiàn)有數(shù)據(jù)包括先前存儲在存儲設(shè)備中的數(shù)據(jù)段中的數(shù)據(jù),所述數(shù)據(jù)段是使用與標(biāo)識存儲請求中的數(shù)據(jù)段時所使用的數(shù)據(jù)段標(biāo)識符相同的數(shù)據(jù)段標(biāo)識符來標(biāo)識的。在該實施方式中,數(shù)據(jù)段令牌與數(shù)據(jù)段標(biāo)識符一起存儲,并且通過覆蓋現(xiàn)有數(shù)據(jù)擦除了數(shù)據(jù)段長度和由存儲在數(shù)據(jù)段令牌中的相同的數(shù)據(jù)段標(biāo)識符來標(biāo)識的現(xiàn)有數(shù)據(jù)。一般來說,現(xiàn)有的字符由O、I或一些其他的字符串來覆蓋,從而使得現(xiàn)有數(shù)據(jù)被破壞且不可恢復(fù)。在又一種實施方式中,安全擦除模塊還包括擦除確認模塊1322,用于發(fā)送指示了現(xiàn)有數(shù)據(jù)已被覆蓋的消息。一般來說,消息是發(fā)往請求設(shè)備1326的。擦除確認消息在安全擦除模塊1320覆蓋了現(xiàn)有數(shù)據(jù)之后發(fā)送。所述消息可以與存儲請求在相同的交易過程中發(fā)送,也可以在與存儲請求不同的交易過程中發(fā)送。在另一種實施方式中,安全擦除模塊1320在存儲空間恢復(fù)操作期間覆蓋現(xiàn)有數(shù)據(jù)。例如,如上文所述,如果存儲設(shè)備150是固態(tài)存儲設(shè)備102,那么存儲空間恢復(fù)操作與結(jié)合圖8中描繪的裝置800而描述的垃圾收集相關(guān)。然而,通常會加快涉及覆蓋現(xiàn)有數(shù)據(jù)的請求的存儲空間恢復(fù)操作,以便在擦除確認模塊1322發(fā)送任何確認消息之前先必要地恢復(fù)存儲現(xiàn)有數(shù)據(jù)的存儲位置。在一種實施方式中,標(biāo)記或是標(biāo)識現(xiàn)有數(shù)據(jù)以指示已經(jīng)請求了安全擦除。一般來說,直到標(biāo)記為要擦除的現(xiàn)有數(shù)據(jù)已經(jīng)被覆蓋并已不可恢復(fù)時才發(fā)送確認消息。在另一種實施方式中,安全擦除模塊1320僅僅將現(xiàn)有數(shù)據(jù)標(biāo)記為無效,以便隨后的存儲空間恢復(fù)。在另一種實施方式中,安全擦除操作更新索引,以指示現(xiàn)有數(shù)據(jù)無效且在隨后的存儲空間恢復(fù)期間防止在數(shù)據(jù)被覆蓋之前訪問該數(shù)據(jù)。
在一種實施方式中,安全擦除模塊1320在每次存儲數(shù)據(jù)段令牌時都覆蓋現(xiàn)有數(shù)據(jù)。在另一種實施方式中,存儲請求具體包括覆蓋現(xiàn)有數(shù)據(jù)的請求,安全擦除模塊1320覆蓋現(xiàn)有數(shù)據(jù)以響應(yīng)于覆蓋現(xiàn)有數(shù)據(jù)的請求。在另一種實施方式中,安全擦除模塊1320存儲與確認現(xiàn)有數(shù)據(jù)已經(jīng)被擦除相關(guān)的元數(shù)據(jù)信息,從而隨后的讀取能夠指示該擦除。在其他實施方式中,當(dāng)未接收到安全擦除時,則刪除現(xiàn)有數(shù)據(jù)。在一種實施方式中,刪除數(shù)據(jù)包括刪除索引項和地址等等。在優(yōu)選實施方式中,在存儲了數(shù)據(jù)段令牌時,相應(yīng)的現(xiàn)有數(shù)據(jù)被標(biāo)記為無效或已可進行存儲恢復(fù)。所述數(shù)據(jù)可隨后在存儲恢復(fù)操作、垃圾收集操作等操作中恢復(fù)。在特定的實施方式中,所述裝置包括讀取請求接收器模塊1308,用于接收讀取數(shù)據(jù)段的存儲請求;讀取數(shù)據(jù)段令牌模塊1310,用于讀取對應(yīng)于存儲請求所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌;讀取請求響應(yīng)模塊1312,用于向請求設(shè)備1326發(fā)送響應(yīng)。所述響應(yīng)是使用對應(yīng)于所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌生成的。在一種實施方式中,讀取數(shù)據(jù)段的請求與存儲請求相關(guān)聯(lián)并用于確認存儲請求已經(jīng)成功。在另一種實施方式中,讀取數(shù)據(jù)段的請求獨立于存儲請求,所述請求可由生成所述存儲請求的請求設(shè)備1326發(fā)起,也可由另外的不同的請求設(shè)備1326發(fā)起。在一種實施方式中,在請求設(shè)備能夠接收來自數(shù)據(jù)段令牌的信息而不是實際的數(shù)據(jù)的情況下,讀取請求響應(yīng)模塊1312包括發(fā)送數(shù)據(jù)段令牌模塊1314,該數(shù)據(jù)段令牌模塊1314用于向請求設(shè)備1326發(fā)送響應(yīng)中的消息。所述消息至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度,但還可包括數(shù)據(jù)段位置;重復(fù)的、相同的字符或字符串的至少一個例子;或其他相關(guān)信息。一般來說,所述消息并不包括數(shù)據(jù)段中的實際數(shù)據(jù),而是包括數(shù)據(jù)段令牌所包括的其他息。在另一種實施方式中,在請求設(shè)備1326期望接收數(shù)據(jù)段的情況下,所述裝置包括重構(gòu)數(shù)據(jù)段模塊1318,該重構(gòu)數(shù)據(jù)段模塊1318用于使用數(shù)據(jù)段令牌重構(gòu)數(shù)據(jù)段中的數(shù)據(jù)。讀取請求響應(yīng)模塊1312還包括用于向請求設(shè)備1326發(fā)送經(jīng)重構(gòu)的請求的數(shù)據(jù)段的發(fā)送數(shù)據(jù)段模塊1316。在另一種實施方式中,重構(gòu)數(shù)據(jù)段模塊1318(可能以驅(qū)動器的形式)位于請求設(shè)備1326中,發(fā)送數(shù)據(jù)段令牌模塊1314向請求設(shè)備1326發(fā)送包括數(shù)據(jù)段令牌信息的消息。請求設(shè)備1326的重構(gòu)數(shù)據(jù)段模塊1318根據(jù)消息重構(gòu)所請求的數(shù)據(jù)段。在一種實施方式中,系統(tǒng)1300包括一個獨立的裝置,該裝置包括讀取請求接收器模塊1308、讀取數(shù)據(jù)段令牌模塊1310、讀取請求響應(yīng)模塊1312,這些模塊大體上類似于上文所描述的那些模塊。所述裝置獨立于包括寫入請求接收器模塊1302和數(shù)據(jù)段令牌存儲模塊1304的裝置。在一種實施方式中,讀取請求響應(yīng)模塊1312包括發(fā)送數(shù)據(jù)段令牌模塊1314和/或發(fā)送數(shù)據(jù)段模塊1316,所述裝置包括重構(gòu)數(shù)據(jù)段模塊1318,其中,模塊1314、1316和1318大體上類似于上文所描述的那些模塊。圖14是示意性流程圖,示出了根據(jù)本發(fā)明的用于存儲數(shù)據(jù)段令牌的方法1400的實施方式。方法1400始于步驟1402,寫入請求接收器模塊1302從請求設(shè)備1326接收存儲請求(步驟1404),其中,所述存儲請求包括將數(shù)據(jù)段存儲到存儲設(shè)備150的請求。數(shù)據(jù)段包括一連串重復(fù)的、相同的字符或字符串。數(shù)據(jù)段令牌存儲模塊1304在存儲設(shè)備150處存儲數(shù)據(jù)段令牌(步驟1406),方法1400結(jié)束于步驟1408。數(shù)據(jù)段令牌至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度,在大部分情況下,數(shù)據(jù)段令牌不包括數(shù)據(jù)段中的數(shù)據(jù)。
圖15是示意性流程圖,示出了根據(jù)本發(fā)明的用于讀取數(shù)據(jù)段令牌的方法1500的實施方式。方法1500始于步驟1502,讀取請求接收器模塊1308接收從存儲設(shè)備150中讀取數(shù)據(jù)段的存儲請求(步驟1504)。所述數(shù)據(jù)段以數(shù)據(jù)段令牌的形式存在于存儲設(shè)備中,所述數(shù)據(jù)段包括一連串重復(fù)的、相同的字符或字符串。所述數(shù)據(jù)段令牌至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度,數(shù)據(jù)段令牌不包括數(shù)據(jù)段中的數(shù)據(jù)。讀取數(shù)據(jù)段令牌模塊1310讀取對應(yīng)于存儲請求所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌(步驟1506),讀取請求響應(yīng)模塊1312向請求設(shè)備150發(fā)送響應(yīng)(步驟1508),方法1500在1510結(jié)束。所述響應(yīng)是使用對應(yīng)于所請求的數(shù)據(jù)段的數(shù)據(jù)段令牌生成的。本發(fā)明可采用其他指定形式實施而不脫離本發(fā)明的宗旨或本質(zhì)特點。描述的實施方式在各個方面被視為僅僅是示例性而不是限制性的。因此,本發(fā)明的范圍由附屬的權(quán)利要求確定,而不是由上述說明書確定。在本發(fā)明的權(quán)利要求的含義和等價范圍內(nèi)的所有改變被包含在本發(fā)明的保護范圍內(nèi)。
權(quán)利要求
1.一種裝置,包括 固態(tài)存儲器; 順序存儲模塊,用于將數(shù)據(jù)包順序地寫至固態(tài)存儲器; 垃圾標(biāo)記模塊,用于響應(yīng)于表示數(shù)據(jù)包不再有效的操作,將存儲在固態(tài)存儲器的存儲部中的數(shù)據(jù)包標(biāo)識為無效, 其中,垃圾標(biāo)記模塊還用于通過存儲另一數(shù)據(jù)包將所述數(shù)據(jù)包識別為無效,所述另一數(shù)據(jù)包表示已經(jīng)刪除無效數(shù)據(jù)包。
2.根據(jù)權(quán)利要求1所述的裝置,其中,所述數(shù)據(jù)存儲在與無效數(shù)據(jù)包不同的位置。
3.根據(jù)權(quán)利要求1所述的裝置,還包括垃圾收集系統(tǒng),其用于使用分離的自主處理擦除無效數(shù)據(jù)包。
4.根據(jù)權(quán)利要求1所述的裝置,其中垃圾標(biāo)記模塊還用于通過更新索引將無效數(shù)據(jù)包識別為無效,所述索引包括存儲在固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對象標(biāo)識符的映射。
5.根據(jù)權(quán)利要求4所述的裝置,還包括對象索引重建模塊,其用于重建索引的最近的狀態(tài)。
6.根據(jù)權(quán)利要求1所述的裝置,還包括用于重建索引的對象索引重建模塊,所述索引包括存儲在固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對象標(biāo)識符的映射,其中在固態(tài)存儲器中存儲數(shù)據(jù)包已被刪除的信息允許對象索引重建模塊重建具有項的索引,所述項指示所述無效數(shù)據(jù)包已經(jīng)被刪除。
7.一種裝置,包括 固態(tài)存儲器; 對象請求接收器模塊,用于接收包括擦除數(shù)據(jù)塊的命令的對象請求;以及 存儲控制器,用于將數(shù)據(jù)存儲在固態(tài)存儲器上以表示所述數(shù)據(jù)塊被擦除,其中所述數(shù)據(jù)存儲在與擦除的數(shù)據(jù)塊不同的位置。
8.根據(jù)權(quán)利要求7所述的裝置,其中所述數(shù)據(jù)用于仿真填充有零的存儲器。
9.一種方法,包括 將數(shù)據(jù)包順序地寫至固態(tài)存儲器; 響應(yīng)于表示數(shù)據(jù)包不再有效的操作,將存儲在固態(tài)存儲器中的數(shù)據(jù)包識別為無效,其中將數(shù)據(jù)包識別為無標(biāo)包括將另一數(shù)據(jù)包存儲在固態(tài)存儲器上,所述另一數(shù)據(jù)包表示已經(jīng)刪除了無效數(shù)據(jù)包;以及 通過分離的自主操作擦除無效數(shù)據(jù)包。
10.根據(jù)權(quán)利要求9所述的方法,其中識別無效數(shù)據(jù)包包括更新索引,所述索引包括存儲在固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對象標(biāo)識符的映射。
11.根據(jù)權(quán)利要求10所述的方法,還包括重建索引的項以重建索引的最近的狀態(tài)。
12.根據(jù)權(quán)利要求9所述的方法,還包括 重建索引,所述索引包括存儲在固態(tài)存儲器中的數(shù)據(jù)包的物理地址到對象標(biāo)識符的映射,其中在固態(tài)存儲器中存儲無效數(shù)據(jù)包已被刪除的信息允許重建索引中的項,所述項識別所述無效數(shù)據(jù)包已經(jīng)被刪除。
全文摘要
本發(fā)明公開了在存儲設(shè)備(150)中使用空數(shù)據(jù)段指令管理數(shù)據(jù)的裝置、系統(tǒng)和方法。用于管理數(shù)據(jù)的所述裝置、系統(tǒng)和方法包括寫入請求接收器模塊(1302)和數(shù)據(jù)段令牌存儲模塊(1304)。該寫入請求接收器模塊(1302)接收來自請求設(shè)備(1326)的存儲請求。該存儲請求包括在存儲設(shè)備(150)中存儲數(shù)據(jù)段的請求。該數(shù)據(jù)段包括一連串重復(fù)的、相同的字符或一連串重復(fù)的、相同的字符串。該數(shù)據(jù)段令牌存儲模塊(1304)在存儲設(shè)備(150)中存儲數(shù)據(jù)段令牌。數(shù)據(jù)段令牌至少包括數(shù)據(jù)段標(biāo)識符和數(shù)據(jù)段長度。該數(shù)據(jù)段令牌大體上與所述數(shù)據(jù)段無關(guān)。
文檔編號G06F9/52GK103049058SQ201210539998
公開日2013年4月17日 申請日期2007年12月6日 優(yōu)先權(quán)日2006年12月6日
發(fā)明者大衛(wèi)·弗林, 喬納森·撒切爾, 邁克爾·扎佩 申請人:弗森-艾奧公司