本公開涉及計算機技術領域,具體地,涉及一種數(shù)據(jù)存儲的方法、裝置及固態(tài)硬盤。
背景技術:
隨著數(shù)據(jù)存儲技術的高速發(fā)展,越來越多的數(shù)據(jù)存儲裝置出現(xiàn)在人們使用的電子設備中,例如:SSD(Solid State Drives,固態(tài)硬盤)等。SSD因具有讀寫速度快、抗震動、低功耗、無噪音、低熱量、以及質(zhì)量輕等特點,已被廣泛應用于軍事、車載、工業(yè)、醫(yī)療、和航空等領域。
SSD分為多個區(qū)塊(Block),每個區(qū)塊分為多個頁面(pages)。SSD可以直接以頁面為單位進行數(shù)據(jù)寫入操作,且以塊為單位進行數(shù)據(jù)刪除操作。也就是說,SSD將待寫入數(shù)據(jù)寫入某一區(qū)塊的某一頁面,待該頁面被寫滿后,SSD再將待寫入數(shù)據(jù)寫入該區(qū)塊的另一頁面,且SSD只能刪除一整個區(qū)塊中存儲的全部數(shù)據(jù)。為了防止寫入SSD中的數(shù)據(jù)發(fā)生錯誤,在將數(shù)據(jù)寫入SSD之前,需要對其進行編碼,相應地,在讀取SSD中的數(shù)據(jù)之前,需要對其進行解碼。為了提高SSD的使用壽命,當SSD的某一頁面中的已存數(shù)據(jù)變?yōu)闊o用數(shù)據(jù)時,SSD將無用數(shù)據(jù)所占的存儲單元標記為無效,以提高SSD的使用壽命。
隨著SSD的使用時長的增加,SSD中被標記為無效的存儲單元越來越多,為了提高SSD的利用率,SSD中設置有緩存區(qū),以便于進行垃圾回收。相關技術中的垃圾回收方案如下:
首先,獲取用于讀取待回收數(shù)據(jù)的命令,從無用數(shù)據(jù)所占的區(qū)塊中讀取待回收數(shù)據(jù),并對其進行解碼,將解碼后的數(shù)據(jù)存儲到緩存區(qū);然后,對緩存區(qū)中存儲的數(shù)據(jù)進行編碼,將編碼后的數(shù)據(jù)存儲到該緩存區(qū),獲取用于寫入待回收數(shù)據(jù)的命令,并將編碼后的數(shù)據(jù)寫入空閑區(qū)塊中;最后,以區(qū)塊為單位,刪除無用數(shù)據(jù)所占的區(qū)塊中的全部數(shù)據(jù)。
然而,垃圾回收方案所包括的編解碼過程會導致SSD的功耗較大;此外,對用于寫入待回收數(shù)據(jù)的命令的獲取,會影響SSD與外部設備之間正在進行的數(shù)據(jù)傳輸。可見,相關技術中的垃圾回收方案有待改善。
技術實現(xiàn)要素:
本公開的目的是提供一種數(shù)據(jù)存儲方法、裝置及固態(tài)硬盤,以減小SSD進行垃圾回收的功耗。
本公開第一方面提供一種數(shù)據(jù)存儲的方法,應用于固態(tài)硬盤SSD,所述方法包括:
根據(jù)第一命令,讀取所述SSD的第一存儲單元中的數(shù)據(jù);
將所述數(shù)據(jù)發(fā)送給所述SSD的解碼器,并接收所述解碼器返回的與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;
將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,所述第二存儲單元不同于所述第一存儲單元。
可選地,所述第二數(shù)據(jù)信息包括校驗信息。
可選地,所述方法還包括:
從多個命令中分離出用于寫入待回收數(shù)據(jù)的寫命令;
將所述用于寫入待回收數(shù)據(jù)的寫命令添加到第一隊列中,并將所述多個命令中的其他命令添加到第二隊列中,所述多個命令中的其他命令不同于所述用于寫入待回收數(shù)據(jù)的寫命令;
從所述第二隊列中獲取所述第一命令。
可選地,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,包括:
在接收到所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息時,獲取與所述第一命令匹配的第二命令;
根據(jù)所述第二命令,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中。
可選地,所述方法還包括:
根據(jù)所述SSD的空閑存儲單元的存儲地址,建立空地址指針隊列;
將所述空地址指針隊列中的各個空地址指針分別指向的存儲單元分配給所述第一隊列。
可選地,獲取與所述第一命令匹配的第二命令,包括:
根據(jù)所述第一命令攜帶的第一標記信息,確定與所述第一標記信息匹配的第二標記信息;
獲取攜帶所述第二標記信息的命令;
其中,針對同一待回收數(shù)據(jù)的多個命令攜帶有相互匹配的標記信息。
本公開第二方面提供一種數(shù)據(jù)存儲的裝置,應用于固態(tài)硬盤SSD,所述裝置包括:
讀取模塊,用于根據(jù)第一命令,讀取所述SSD的第一存儲單元中的數(shù)據(jù);
收發(fā)模塊,用于將所述數(shù)據(jù)發(fā)送給所述SSD的解碼器,并接收所述解碼器返回的與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;
存儲模塊,用于將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,所述第二存儲單元不同于所述第一存儲單元。
可選地,所述第二數(shù)據(jù)信息包括校驗信息。
可選地,所述裝置還包括:
提取模塊,用于從多個命令中分離出用于寫入待回收數(shù)據(jù)的寫命令;
分類模塊,用于將所述用于寫入待回收數(shù)據(jù)的寫命令添加到第一隊列中,并將所述多個命令中的其他命令添加到第二隊列中,所述多個命令中的其他命令不同于所述用于寫入待回收數(shù)據(jù)的寫命令;
獲取模塊,用于從所述第二隊列中獲取所述第一命令。
可選地,所述存儲模塊包括:
第一獲取子模塊,用于在接收到所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息時,獲取與所述第一命令匹配的第二命令;
存儲子模塊,用于根據(jù)所述第二命令,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中。
可選地,所述裝置還包括:
建立模塊,用于根據(jù)所述SSD的空閑存儲單元的存儲地址,建立空地址指針隊列;
分配模塊,用于將所述空地址指針隊列中的各個空地址指針分別指向的存儲單元分配給所述第一隊列。
可選地,所述獲取模塊包括:
確定子模塊,用于根據(jù)所述第一命令攜帶的第一標記信息,確定與所述第一標記信息匹配的第二標記信息;
第二獲取子模塊,用于獲取攜帶所述第二標記信息的命令;
其中,針對同一待回收數(shù)據(jù)的多個命令攜帶有相互匹配的標記信息。
本公開第三方面提供一種固態(tài)硬盤,包括:控制器、解碼器以及多個存儲單元;
所述控制器用于:根據(jù)第一命令,讀取所述SSD的第一存儲單元中的數(shù)據(jù);以及將所述數(shù)據(jù)發(fā)送給所述SSD的解碼器;
所述解碼器用于對所述數(shù)據(jù)進行解碼,并向所述中央處理器返回與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;
所述控制器還用于:接收所述解碼器返回的與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;以及將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,所述第二存儲單元不同于所述第一存儲單元。
可選地,所述控制器還用于:
從多個命令中分離出用于寫入待回收數(shù)據(jù)的寫命令;
將所述用于寫入待回收數(shù)據(jù)的寫命令添加到第一隊列中,并將所述多個命令中的其他命令添加到第二隊列中,所述多個命令中的其他命令不同于所述用于寫入待回收數(shù)據(jù)的寫命令;
從所述第二隊列中獲取所述第一命令。
可選地,所述控制器還用于:
在接收到所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息時,獲取與所述第一命令匹配的第二命令;
根據(jù)所述第二命令,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中。
可選地,所述控制器還用于:
根據(jù)所述SSD的空閑存儲單元的存儲地址,建立空地址指針隊列;
將所述空地址指針隊列中的各個空地址指針分別指向的存儲單元分配給所述第一隊列。
可選地,所述控制器還用于:
根據(jù)所述第一命令攜帶的第一標記信息,確定與所述第一標記信息匹配的第二標記信息;
獲取攜帶所述第二標記信息的命令;
其中,針對同一待回收數(shù)據(jù)的多個命令攜帶有相互匹配的標記信息。
本公開中,SSD在從第一存儲單元中讀取數(shù)據(jù)后,將SSD所讀取的數(shù)據(jù)發(fā)送給SSD的解碼器,以使解碼器對SSD所讀取的數(shù)據(jù)進行解碼。在解碼器完成對SSD所讀取的數(shù)據(jù)的解碼后,將與SSD所讀取的數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息返回給SSD。
由于SSD接收到與SSD所讀取的數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息,而不是解碼器對SSD所讀取的數(shù)據(jù)進行解碼后的數(shù)據(jù)。所以對SSD的編碼器來說,在SSD采用本公開提供的數(shù)據(jù)存儲方法進行垃圾回收的過程中,沒有需要進行編碼的數(shù)據(jù),因而SSD無需執(zhí)行對待回收數(shù)據(jù)進行編碼的步驟,SSD可以直接將第一數(shù)據(jù)信息和第二數(shù)據(jù)信息寫入SSD的第二存儲單元,進而減小SSD進行垃圾回收的功耗。并且,由于SSD無需執(zhí)行對待回收數(shù)據(jù)進行編碼的步驟,所以在SSD中設置的緩存區(qū)的容量也可相應減小,因為無需存儲編碼后的數(shù)據(jù)。
本公開的其他特征和優(yōu)點將在隨后的具體實施方式部分予以詳細說明。
附圖說明
附圖是用來提供對本公開的進一步理解,并且構成說明書的一部分,與下面的具體實施方式一起用于解釋本公開,但并不構成對本公開的限制。在附圖中:
圖1是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的方法的流程圖。
圖2是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的方法的另一流程圖。
圖3是根據(jù)一示例性實施例示出的一種空地址指針隊列與第一隊列的示意圖。
圖4是根據(jù)一示例性實施例示出的適用于本公開的SSD的結(jié)構示意圖。
圖5是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的裝置的框圖。
具體實施方式
以下結(jié)合附圖對本公開的具體實施方式進行詳細說明。應當理解的是,此處所描述的具體實施方式僅用于說明和解釋本公開,并不用于限制本公開。
在對本公開提供的數(shù)據(jù)存儲的方法進行說明之前,首先對本公開涉及的相關技術進行說明。如在背景技術中所闡述的,相關技術適用于設置有緩存區(qū)的SSD,因而相關技術所適用的SSD包括:CPU(Central Process Unit,中央處理器)、讀寫控制器、編碼器、解碼器、多個區(qū)塊以及緩存區(qū)。其中,編碼器和解碼器可以集成為編解碼器。
其中,CPU用于接收外部設備發(fā)送的讀數(shù)據(jù)命令以及寫數(shù)據(jù)命令,以完成與外部設備之間的數(shù)據(jù)傳輸;CPU還用于生成垃圾回收命令:用于讀取待回收數(shù)據(jù)的命令,以及用于寫入待回收數(shù)據(jù)的命令;CPU還用于將所有命令添加到同一命令隊列中。讀寫控制器用于檢測上述命令隊列中是否有待執(zhí)行的命令,當檢測到該命令隊列中有待執(zhí)行命令時,從該命令隊列中依次逐一讀取待執(zhí)行命令,并執(zhí)行所讀取的待執(zhí)行命令。如在背景技術中所闡述的,緩存區(qū)用于存儲解碼后的數(shù)據(jù)。解碼器用于對待讀取數(shù)據(jù)進行解碼,編碼器用于對待寫入數(shù)據(jù)進行編碼。多個區(qū)塊用于存儲已編碼數(shù)據(jù)。
然而,相關技術所適用的SSD中的解碼器與編碼器分別進行相互獨立的解碼過程以及編碼過程,也就是說,解碼器對待回收數(shù)據(jù)的解碼過程,與編碼器對緩存區(qū)中存儲的數(shù)據(jù)的編碼過程,兩者是相對獨立的。由此導致SSD進行垃圾回收的功耗較大。
此外,相關技術所適用的SSD中的CPU將所有命令添加到同一命令隊列中,該命令隊列中的各個命令被讀寫控制器順序逐一讀取并執(zhí)行,如果CPU在編碼器對緩存區(qū)中存儲的數(shù)據(jù)編碼完成之前,將用于寫入待回收數(shù)據(jù)的命令添加到該命令隊列中,則該用于寫入待回收數(shù)據(jù)的命令會被讀寫控制器擱置,直至編碼完成為止,因而延遲該命令隊列中的其他命令執(zhí)行。在編碼完成之后,通過編碼器對CPU的中斷使其能夠?qū)⒂糜趯懭氪厥諗?shù)據(jù)的命令發(fā)送給讀寫控制器,進而完成對待回收數(shù)據(jù)的寫入。然而,該中斷會影響CPU與外部設備之間正在進行的數(shù)據(jù)傳輸。
為了減小SSD進行垃圾回收的功耗,本公開提供一種數(shù)據(jù)存儲的方法。請參考圖1,圖1是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的方法的流程圖。如圖1所示,該方法包括以下步驟:
步驟S11:根據(jù)第一命令,讀取所述SSD的第一存儲單元中的數(shù)據(jù);
步驟S12:將所述數(shù)據(jù)發(fā)送給所述SSD的解碼器,并接收所述解碼器返回的與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;
步驟S13:將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,所述第二存儲單元不同于所述第一存儲單元。
如前所述,SSD進行垃圾回收主要包括對待回收數(shù)據(jù)進行解碼的步驟,以及對待回收數(shù)據(jù)進行編碼的步驟。本公開提供的數(shù)據(jù)存儲方法供SSD進行垃圾回收,以跳過對待回收數(shù)據(jù)進行編碼的步驟,也就是說,SSD采用本公開提供的數(shù)據(jù)存儲方法進行垃圾回收,無需執(zhí)行對待回收數(shù)據(jù)進行編碼的步驟,進而減小SSD進行垃圾回收的功耗。并且,由于SSD無需執(zhí)行對待回收數(shù)據(jù)進行編碼的步驟,所以在SSD中設置的緩存區(qū)的容量也可相應減小,因為無需存儲編碼后的數(shù)據(jù)。
SSD采用本公開提供的數(shù)據(jù)存儲方法進行垃圾回收,是由第一命令觸發(fā)的。第一命令是用于讀取待回收數(shù)據(jù)的命令。SSD根據(jù)第一命令,讀取第一存儲單元中的數(shù)據(jù)。第一存儲單元是無用數(shù)據(jù)所占的存儲單元,屬于SSD的某一個區(qū)塊。由于SSD是進行垃圾回收,所以SSD所讀取的數(shù)據(jù)是待回收數(shù)據(jù),也即SSD所讀取的數(shù)據(jù)所占的存儲單元未被標記為無效。
SSD在從第一存儲單元中讀取數(shù)據(jù)后,將SSD所讀取的數(shù)據(jù)發(fā)送給SSD的解碼器,以使解碼器對SSD所讀取的數(shù)據(jù)進行解碼。在解碼器完成對SSD所讀取的數(shù)據(jù)的解碼后,將與SSD所讀取的數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息返回給SSD。由于SSD接收到與SSD所讀取的數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息,而不是解碼器對SSD所讀取的數(shù)據(jù)進行解碼后的數(shù)據(jù)。所以對SSD的編碼器來說,在SSD采用本公開提供的數(shù)據(jù)存儲方法進行垃圾回收的過程中,沒有需要進行編碼的數(shù)據(jù),因而SSD無需執(zhí)行對待回收數(shù)據(jù)進行編碼的步驟,SSD可以直接將第一數(shù)據(jù)信息和第二數(shù)據(jù)信息寫入SSD的第二存儲單元,進而減小SSD進行垃圾回收的功耗。
可選地,所述第二數(shù)據(jù)信息包括校驗信息。
本公開對SSD的解碼器進行改進,使其具備兩種工作模式:通用工作模式以及垃圾回收工作模式。在通用工作模式下,SSD的解碼器對待讀取數(shù)據(jù)進行解碼,以輸出解碼后的數(shù)據(jù)。也就是說,SSD的解碼器所輸出的僅僅是數(shù)據(jù)信息,而不輸出用于糾錯校驗的校驗信息。在垃圾回收工作模式下,SSD的解碼器對待回收數(shù)據(jù)進行解碼,以輸出第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息,且第二數(shù)據(jù)信息包括校驗信息。也就是說,SSD的解碼器不僅輸出數(shù)據(jù)信息,還輸出用于糾錯校驗的校驗信息,因而無需利用SSD的編碼器生成校驗信息。SSD可以直接將第一數(shù)據(jù)信息和第二數(shù)據(jù)信息寫入SSD的第二存儲單元。
可選地,請參考圖2,圖2是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的方法的另一流程圖。如圖2所示,該方法除包括步驟S11、步驟S12以及步驟S13外,還包括以下步驟:
步驟S10a:從多個命令中分離出用于寫入待回收數(shù)據(jù)的寫命令;
步驟S10b:將所述用于寫入待回收數(shù)據(jù)的寫命令添加到第一隊列中,并將所述多個命令中的其他命令添加到第二隊列中,所述多個命令中的其他命令不同于所述用于寫入待回收數(shù)據(jù)的寫命令;
步驟S10c:從所述第二隊列中獲取所述第一命令。
如前所述,對用于寫入待回收數(shù)據(jù)的命令的獲取,會影響SSD的CPU與外部設備之間正在進行的數(shù)據(jù)傳輸。為避免該問題,本公開提出對不同命令進行分類,將用于寫入待回收數(shù)據(jù)的命令添加到專用隊列中,將其他命令添加到通用隊列中。其中,專用隊列中的各個命令可以被亂序執(zhí)行,通用隊列中的各個命令仍然被順序執(zhí)行。
步驟S10a中的多個命令包括:外部設備向SSD的CPU發(fā)送的讀數(shù)據(jù)命令以及寫數(shù)據(jù)命令,用于讀取待回收數(shù)據(jù)的命令,以及用于寫入待回收數(shù)據(jù)的命令。因此,SSD的CPU將用于寫入待回收數(shù)據(jù)的命令從多個命令中分離出來,然后將用于寫入待回收數(shù)據(jù)的命令添加到第一隊列中,第一隊列即為上述專用隊列;并將其他命令添加到第二隊列中,第二隊列即為上述通用隊列。
SSD的讀寫控制器檢測第二隊列中是否有待執(zhí)行命令,如果SSD的讀寫控制器檢測到第二隊列中有待執(zhí)行命令,則從中獲取并執(zhí)行。一種可能的情況是:SSD的控制從第二隊列中檢測到第一命令,則從第二隊列中獲取第一命令,接著,SSD根據(jù)第一命令,執(zhí)行步驟S11至步驟S13。
可選地,步驟S13包括:
在接收到所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息時,獲取與所述第一命令匹配的第二命令;
根據(jù)所述第二命令,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中。
在SSD執(zhí)行步驟S12的過程中,SSD接收到SSD的編碼器返回的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息。SSD在接收到SSD的編碼器返回的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息時,獲取與第一命令匹配的第二命令。一種可能的實施方式是:SSD在接收到SSD的編碼器返回的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息時,SSD的讀寫控制器從第一隊列中獲取第二命令,也即從上述專用隊列中獲取第二命令。因而,無需通過對SSD的CPU的中斷,即可獲取用于寫入待回收數(shù)據(jù)的命令,SSD進行垃圾回收,不會影響SSD的CPU與外部設備之間正在進行的數(shù)據(jù)傳輸,垃圾回收以及與外部設備之間的數(shù)據(jù)傳輸,兩者可以并行,互不影響。
可選地,獲取與所述第一命令匹配的第二命令,包括:
根據(jù)所述第一命令攜帶的第一標記信息,確定與所述第一標記信息匹配的第二標記信息;
獲取攜帶所述第二標記信息的命令;
其中,針對同一待回收數(shù)據(jù)的多個命令攜帶有相互匹配的標記信息。
第一命令與第二命令匹配,是指第一命令與第二命令分別是針對同一待回收數(shù)據(jù)的讀命令以及寫命令,因而第一命令與第二命令是成對的。為了便于SSD的讀寫控制器從第一隊列中獲取第二命令,SSD的CPU可以在生成第一命令和第二命令后,對第一命令和第二命令分別標記相互匹配的標記信息。示例地,對第一命令和第二命令均標記同一tag值。
由于SSD的CPU對第一命令和第二命令進行了標記,所以SSD的讀寫控制器在讀取第一命令后,可以獲得第一命令攜帶的標記信息。SSD在接收到SSD的編碼器返回的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息時,SSD的讀寫控制器可以根據(jù)第一命令攜帶的標記信息,從第一隊列中獲取攜帶有與第一命令攜帶的標記信息匹配的命令。示例地,SSD的讀寫控制器從第一隊列中獲取與第一命令攜帶的tag值相同的命令。
可選地,所述方法還包括:
根據(jù)所述SSD的空閑存儲單元的存儲地址,建立空地址指針隊列;
將所述空地址指針隊列中的各個空地址指針分別指向的存儲單元分配給所述第一隊列。
由于第一隊列中的各個命令可以被亂序執(zhí)行,第一隊列中的第二命令何時被執(zhí)行,取決于SSD何時接收到解碼器返回的與該第二命令對應的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息。為了提高SSD的利用率,在第一隊列中的某一命令被SSD的讀寫控制器讀取并執(zhí)行后,該命令所占的存儲單元可以被釋放,以使得該命令所占的存儲單元變?yōu)榭臻e存儲單元。
為了充分利用多個空閑存儲單元,本公開提出利用空地址指針隊列管理各個空閑存儲單元的存儲地址,也就是說,空地址指針隊列中存儲有多個空地址指針,一個空地址指針指向一個空閑存儲單元的存儲地址。當?shù)谝魂犃兄械囊粋€命令被SSD的讀寫控制器讀取并執(zhí)行,該命令所占的存儲單元變?yōu)榭臻e存儲單元,被標記為空;當SSD的CPU生成一個用于寫入待回收數(shù)據(jù)的命令時,可以從空地址指針隊列中讀取一個空地址指針,然后將所生成的命令存儲到該空地址指針所指向的存儲單元,接著將該空地址指針所指向的存儲單元標記為非空,并且將該空地址指針從空地址指針隊列中移除。
示例地,請參考圖3,圖3是根據(jù)一示例性實施例示出的一種空地址指針隊列與第一隊列的示意圖。如圖3所示,1代表第一隊列,第一隊列中有4個命令:分別被標記為tag0、tag1、tag2、tag3。2代表空地址指針隊列,空地址指針隊列中有兩個空地址指針:tag1_ptr和tag2_ptr。
當標記為tag1和標記為tag2的命令被SSD的讀寫控制器讀取并執(zhí)行時,標記為tag1和標記為tag2的命令各自所占的存儲單元被標記為空,且標記為tag1和標記為tag2的命令各自所占的存儲單元的存儲地址對應的空地址指針被添加到空地址指針隊列。當SSD的CPU生成一個用于寫入待回收數(shù)據(jù)的命令時,可以從空地址指針隊列中讀取一個空地址指針,假設為tag1_ptr,則SSD的CPU將該命令寫入tag1_ptr指向的存儲單元(如圖3中的4所示),將tag1_ptr從空地址指針隊列中移除(如圖3中的3所示)。圖3中,以有填充示意空,以無填充示意非空。
下面以一個實施例說明本公開提供的數(shù)據(jù)存儲的方法。本公開所適用的SSD除包括CPU、讀寫控制器、編碼器、解碼器、多個區(qū)塊以及緩存區(qū)外,還包括垃圾回收加速器。其中,編碼器和解碼器可以集成為編解碼器。垃圾回收加速器可以獨立于本公開所適用的SSD中的其他組件,也可以集成于本公開所適用的SSD中的某一組件,例如:垃圾回收加速器可以集成在SSD的CPU上,或者垃圾回收加速器可以集成在SSD的讀寫控制器上,或者垃圾回收加速器可以集成在SSD的解碼器上。請參考圖4,圖4是根據(jù)一示例性實施例示出的適用于本公開的SSD的結(jié)構示意圖。圖4以垃圾回收加速器獨立于本公開所適用的SSD中的其他組件,且緩存區(qū)設置在垃圾回收加速器內(nèi)為例。
下面對本公開提供的數(shù)據(jù)存儲的方法由圖4所示的SSD執(zhí)行的過程進行說明。
步驟1:SSD的CPU將用于寫入待回收數(shù)據(jù)的命令添加到第一隊列中,并將多個命令中的其他命令添加到第二隊列中;并且將每一對針對同一待回收數(shù)據(jù)的讀命令和寫命令分別標記相同的tag值,以便SSD的讀寫控制器根據(jù)tag值,從第一隊列中獲取用于寫入待回收數(shù)據(jù)的命令。
步驟2:SSD的讀寫控制器檢測到第二隊列中有第一命令之后,讀取并執(zhí)行第一命令。
步驟3:SSD的讀寫控制器把所讀取的數(shù)據(jù)存放到垃圾回收加速器的緩存中。
步驟4:垃圾回收加速器把緩存中的數(shù)據(jù)發(fā)送給解碼器,以便于解碼器對其進行解碼,并通知解碼器切換到垃圾回收工作模式。
步驟5:解碼器將解碼后所得的第一數(shù)據(jù)信息和第二數(shù)據(jù)信息存放到垃圾回收加速器的緩存。
步驟6:垃圾回收加速器在接收到第一數(shù)據(jù)信息和第二數(shù)據(jù)信息后,通知SSD的讀寫控制器可以對第一數(shù)據(jù)信息和第二數(shù)據(jù)信息進行寫入操作。
步驟7:SSD的讀寫控制器根據(jù)tag值,從第一隊列中獲取用于寫入待回收數(shù)據(jù)的命令并執(zhí)行。
以上為本公開提供的數(shù)據(jù)存儲的方法?;谕话l(fā)明構思,本公開還提供了一種數(shù)據(jù)存儲的裝置,應用于SSD。請參考圖5,圖5是根據(jù)一示例性實施例示出的一種數(shù)據(jù)存儲的裝置的框圖。如圖5所示,該裝置500包括:
讀取模塊501,用于根據(jù)第一命令,讀取所述SSD的第一存儲單元中的數(shù)據(jù);
收發(fā)模塊502,用于將所述數(shù)據(jù)發(fā)送給所述SSD的解碼器,并接收所述解碼器返回的與所述數(shù)據(jù)對應的第一數(shù)據(jù)信息以及第二數(shù)據(jù)信息;
存儲模塊503,用于將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中,所述第二存儲單元不同于所述第一存儲單元。
可選地,所述第二數(shù)據(jù)信息包括校驗信息。
可選地,所述裝置還包括:
提取模塊,用于從多個命令中分離出用于寫入待回收數(shù)據(jù)的寫命令;
分類模塊,用于將所述用于寫入待回收數(shù)據(jù)的寫命令添加到第一隊列中,并將所述多個命令中的其他命令添加到第二隊列中,所述多個命令中的其他命令不同于所述用于寫入待回收數(shù)據(jù)的寫命令;
獲取模塊,用于從所述第二隊列中獲取所述第一命令。
可選地,所述存儲模塊包括:
第一獲取子模塊,用于在接收到所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息時,獲取與所述第一命令匹配的第二命令;
存儲子模塊,用于根據(jù)所述第二命令,將所述第一數(shù)據(jù)信息以及所述第二數(shù)據(jù)信息寫入所述SSD的第二存儲單元中。
可選地,所述裝置還包括:
建立模塊,用于根據(jù)所述SSD的空閑存儲單元的存儲地址,建立空地址指針隊列;
分配模塊,用于將所述空地址指針隊列中的各個空地址指針分別指向的存儲單元分配給所述第一隊列。
可選地,所述獲取模塊包括:
確定子模塊,用于根據(jù)所述第一命令攜帶的第一標記信息,確定與所述第一標記信息匹配的第二標記信息;
第二獲取子模塊,用于獲取攜帶所述第二標記信息的命令;
其中,針對同一待回收數(shù)據(jù)的多個命令攜帶有相互匹配的標記信息。
關于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經(jīng)在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
基于同一發(fā)明構思,本公開還提供一種固態(tài)硬盤,包括:控制器、解碼器以及多個存儲單元;所述控制器用于執(zhí)行本公開提供的數(shù)據(jù)存儲的方法。請參考圖4,圖4是該固態(tài)硬盤的一種可能的示意圖。圖4中的CPU、讀寫控制器、以及垃圾回收加速器共同組成固態(tài)硬盤中的控制器,以完成本公開提供的數(shù)據(jù)存儲的方法。
以上結(jié)合附圖詳細描述了本公開的優(yōu)選實施方式,但是,本公開并不限于上述實施方式中的具體細節(jié),在本公開的技術構思范圍內(nèi),可以對本公開的技術方案進行多種簡單變型,這些簡單變型均屬于本公開的保護范圍。
另外需要說明的是,在上述具體實施方式中所描述的各個具體技術特征,在不矛盾的情況下,可以通過任何合適的方式進行組合。為了避免不必要的重復,本公開對各種可能的組合方式不再另行說明。