會向主機回復寫入完成的消息,主機就確定數(shù)據(jù)已寫入完畢。
[0080]處理器103具體可以是CPU (中央處理器)或ASIC (Applicat1n SpecificIntegrated Circuit,特定應用集成電路),可以是一個或多個用于控制程序執(zhí)行的集成電路,可以是使用FPGA(Field Programmable Gate Array,現(xiàn)場可編程門陣列)開發(fā)的硬件電路,可以是基帶芯片。處理器103可以用于通過回寫模式向存儲設(shè)備寫入數(shù)據(jù),及可以用于通過透寫模式向存儲設(shè)備寫入設(shè)備。另外,處理器103也可以完成從存儲設(shè)備中讀取數(shù)據(jù)等功能。
[0081]可選的,請參見圖2,在本發(fā)明另一實施例中,該存儲設(shè)備還可以包括第一緩存201,第一緩存201可以用于存儲寫數(shù)據(jù)模式對應的標識,寫數(shù)據(jù)模式對應的標識可以用于指示該存儲設(shè)備的寫數(shù)據(jù)模式,即,寫數(shù)據(jù)模式對應的標識可以用于指示該存儲設(shè)備的寫數(shù)據(jù)模式是透寫模式還是回寫模式。比如,寫數(shù)據(jù)模式對應的標識可以是一個標識位,例如該標識位可以有兩個取值,分別為“ 1 ”和“0”,那么這兩個取值可以分別指示回寫模式及透寫模式。當然,寫數(shù)據(jù)模式對應的標識也可以是其他形式,只要寫數(shù)據(jù)模式對應的標識可以用于指示該存儲設(shè)備的寫數(shù)據(jù)模式即可。
[0082]在該實施例中,第一緩存201可以是存儲設(shè)備中與寫緩存102不同的另外的緩存,例如,一般處理器103中都會包括緩存,則第一緩存201就可以是處理器103中的緩存,或者例如,第一緩存201在存儲設(shè)備中也可以是與處理器103相互獨立的兩個模塊。圖2中是以處理器103和第一緩存201相連接的方式示意,這種示意方式可以涵蓋以上列舉的第一緩存的兩種形式。
[0083]請參見圖3,基于同一發(fā)明構(gòu)思及上述各實施例,本發(fā)明實施例提供一種存儲系統(tǒng),該存儲系統(tǒng)可以包括如圖1或圖2所示的存儲設(shè)備,以及還可以包括與存儲設(shè)備相連的主機。主機用于向存儲設(shè)備中寫入數(shù)據(jù),以及,在存儲設(shè)備寫入數(shù)據(jù)成功時,主機可以接收存儲設(shè)備返回的寫入完成的消息,在存儲設(shè)備寫入數(shù)據(jù)失敗時,主機可以接收存儲設(shè)備返回的寫入失敗的消息。
[0084]請參見圖4,基于同一發(fā)明構(gòu)思及上述各實施例,本發(fā)明實施例提供一種將數(shù)據(jù)寫入存儲設(shè)備的方法,該方法可以應用于圖1、圖2或圖3中的存儲設(shè)備,例如,該方法可以由處理器103執(zhí)行。該方法的流程描述如下。
[0085]步驟401:確定第一存儲空間中可用的存儲容量,第一存儲空間用于存儲通過回寫模式寫入的數(shù)據(jù)及通過透寫模式寫入的數(shù)據(jù);
[0086]步驟402:若第一存儲空間中可用的存儲容量小于等于預設(shè)容量,則將寫緩存102中存儲的數(shù)據(jù)寫入第二存儲空間;第二存儲空間用于存儲從寫緩存102寫入的數(shù)據(jù)。
[0087]本發(fā)明實施例中,預設(shè)容量可根據(jù)需要設(shè)置,例如預設(shè)容量可以為0,或者也可以大于0但接近于0,或者也可以是其他數(shù)值,本發(fā)明不作限制。
[0088]可選的,在本發(fā)明另一實施例中,處理器103可以在接收到主機寫入的數(shù)據(jù)時再確定第一存儲空間可用的存儲容量,或者也可以周期性確定或定時確定第一存儲空間可用的存儲容量,等等,本發(fā)明對于何時確定第一存儲空間可用的存儲容量不作限制。
[0089]本發(fā)明實施例中,在SSD101里預先劃分第一存儲空間和第二存儲空間,第二存儲空間可以看作是預留空間,當?shù)谝淮鎯臻g耗盡時,如果寫緩存102中有未寫入SSD101中的數(shù)據(jù),可以將這些數(shù)據(jù)寫入第二存儲空間,避免這些數(shù)據(jù)滯留在寫緩存102中,減輕寫緩存102的負擔,而且也盡量避免了寫緩存102因為被數(shù)據(jù)占滿而導致緩存失效的情況出現(xiàn),盡量保證系統(tǒng)能夠正常運行。而且,減少了緩存中存儲的數(shù)據(jù)量,盡量避免數(shù)據(jù)丟失的情況出現(xiàn),增強系統(tǒng)可靠性。
[0090]在確定第一存儲空間可用的存儲容量小于等于預設(shè)容量后,除了可以將寫緩存102中滯留的數(shù)據(jù)寫入第二存儲空間外,為了盡量減少寫緩存102中滯留的數(shù)據(jù),以及盡量避免存儲設(shè)備過飽和,處理器103還可以有其他的一些處理措施,下面分別介紹。
[0091]第一種措施
[0092]可選的,在本發(fā)明另一實施例中,存儲設(shè)備還包括第一緩存201,第一緩存201用于存儲寫數(shù)據(jù)模式對應的標識,寫數(shù)據(jù)模式對應的標識用于指示存儲設(shè)備的寫數(shù)據(jù)模式;在確定第一存儲空間中可用的存儲容量之后,還包括:
[0093]若第一存儲空間中可用的存儲容量小于等于預設(shè)容量,將寫數(shù)據(jù)模式對應的標識設(shè)置為透寫模式對應的標識,以將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式。
[0094]S卩,在第一存儲空間可用的存儲容量小于預設(shè)容量時,也就是在第一存儲空間耗盡時,處理器103除了可以將寫緩存102中滯留的數(shù)據(jù)寫入第二存儲空間之外,還可以將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式。例如,在確定第一存儲空間可用的存儲容量之前,若寫數(shù)據(jù)模式是回寫模式,則存儲設(shè)備根據(jù)該實施例,可以將寫數(shù)據(jù)模式重新設(shè)置為透寫模式,即可以將寫數(shù)據(jù)模式對應的標識設(shè)置為透寫模式對應的標識。這樣,后面如果存儲設(shè)備再接收數(shù)據(jù),因為寫數(shù)據(jù)模式為透寫模式,則存儲設(shè)備只會直接將數(shù)據(jù)寫入SSD101,而不會寫入寫緩存102,進一步減少寫緩存102中存儲的數(shù)據(jù)量。
[0095]在該實施例中,如果SSD101中的第一存儲空間可用的存儲容量小于等于預設(shè)容量,可以將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式,這樣,之后存儲設(shè)備再接收的數(shù)據(jù)可以直接寫入SSD101,而不用再寫入寫緩存102,避免寫緩存102中存儲的數(shù)據(jù)過多,從而也盡量避免了寫緩存102因為被數(shù)據(jù)占滿而導致緩存失效的情況出現(xiàn),盡量保證系統(tǒng)能夠正常運行。而且,減少了緩存中存儲的數(shù)據(jù)量,盡量避免數(shù)據(jù)丟失的情況出現(xiàn),增強系統(tǒng)可靠性。
[0096]下面介紹在第一種措施下若處理器103再接收到主機寫入的數(shù)據(jù)時可能的處理方式。
[0097]可選的,在本發(fā)明另一實施例中,在將存儲設(shè)備的寫數(shù)據(jù)模式對應的標識設(shè)置為透寫模式對應的標識之后,還包括:
[0098]接收待寫入存儲設(shè)備的第一數(shù)據(jù);
[0099]根據(jù)寫數(shù)據(jù)模式對應的標識確定存儲設(shè)備的寫數(shù)據(jù)模式為透寫模式;
[0100]確定第一存儲空間中可用的存儲容量;
[0101]若第一存儲空間中可用的存儲容量小于等于預設(shè)容量,拒絕將第一數(shù)據(jù)寫入SSD101,并返回寫入失敗的消息;否則,將第一數(shù)據(jù)寫入第一存儲空間。
[0102]在該實施例中,將處理器103后續(xù)接收的數(shù)據(jù)稱為第一數(shù)據(jù)。若處理器103又接收到第一數(shù)據(jù),那么處理器103要根據(jù)寫數(shù)據(jù)模式對應的標識確定當前的寫數(shù)據(jù)模式,因為在第一種措施下已將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式,因此處理器103可以確定當前的寫數(shù)據(jù)模式為透寫模式。以及,處理器103還要確定第一存儲空間可用的存儲容量,
[0103]在該實施例中,在將寫數(shù)據(jù)模式設(shè)置為透寫模式之后,處理器103還可能會接收主機寫入的數(shù)據(jù),本發(fā)明實施例中將其稱為第一數(shù)據(jù)。處理器103在接收到主機寫入的第一數(shù)據(jù)時,可以分別確定當前的寫數(shù)據(jù)模式以及第一存儲空間可用的存儲容量,其中,處理器103根據(jù)寫數(shù)據(jù)模式對應的標識確定當前的寫數(shù)據(jù)模式,以及確定第一存儲空間中可用的存儲容量,這兩個步驟之間的順序可以任意。
[0104]因為在第一種措施下已將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式,因此處理器103根據(jù)寫數(shù)據(jù)模式對應的標識可以確定當前的寫數(shù)據(jù)模式為透寫模式,在透寫模式下,主機寫入的數(shù)據(jù)規(guī)定只能寫入第一存儲空間,第二存儲空間只留給寫緩存102中滯留的數(shù)據(jù)。則處理器103可以確定第一存儲空間可用的存儲容量,如果第一存儲空間可用的存儲容量大于預設(shè)容量,則處理器103可以將第一數(shù)據(jù)寫入第一存儲空間,而如果第一存儲空間可用的存儲容量小于等于預設(shè)容量,那么處理器103可以拒絕將第一數(shù)據(jù)寫入SSD101,并向主機返回寫入失敗的消息。
[0105]按照如前的介紹,是在第一存儲空間可用的存儲容量小于等于預設(shè)容量時才將存儲設(shè)備的寫數(shù)據(jù)模式設(shè)置為透寫模式,而在設(shè)置完之后,可能存儲設(shè)備清理了第一存儲空間,比如可能丟棄了第一存儲空間中的部分數(shù)據(jù),或者第一存儲空間中的部分數(shù)據(jù)也可能丟失,或者也可能用戶通過手動方式清理了第一存儲空間,比如刪除了第一存儲空間的部分數(shù)據(jù),等等,總之,第一存儲空間可能又釋放出了一些空間。因此,在后面再接到主機寫入的數(shù)據(jù)時,處理器103還是可以判斷第一存儲空間是否有剩余容量,以盡量將接收的數(shù)據(jù)寫入第一存儲空間。
[0106]第二種措施
[0107]可選的,在本發(fā)明另一實施例中,在確定所述第一存儲空間中可用的存儲容量之后,還包括:
[0108]若所述第一存儲空間中可用的存儲容量小于等于所述預設(shè)容量,設(shè)置所述第一存儲空間對應的標識,所述第一存儲空間對應