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