專利名稱:一種提高固態硬盤數據傳輸效率的方法
技術領域:
本發明涉及一種提高固態硬盤數據傳輸效率的方法,用于解決固態硬盤地址不對齊的問題,屬于計算機數據存儲技術領域。
背景技術:
固態硬盤(Solid State Disk,SSD),是一種采用固態電子存儲芯片陣列制成的硬盤,由控制單元和存儲單元組成。與傳統機械硬盤(Hard Disk Drive,HDD)相比,固態硬盤在讀取速度、功耗、噪音、抗震性、體積、工作溫度范圍、容價比等方面均具有明顯優勢,被廣泛應用于軍事、車載、工控、視頻監控、網絡監控、網絡終端、電力、醫療、航空等、導航設備等領域。根據存儲介質的不同,固態硬盤分為兩種,一種采用閃存(FLASH芯片)作為存儲介質,另外一種采用動態隨機存取存儲器(Dynamic Random Access Memory, DRAM)作為存儲介質。其中,基于閃存的固態硬盤最大的優點是可移動,且數據保護不受電源控制,能夠適應于各種環境。基于閃存的固態硬盤其內部構造簡單,固態硬盤內主體是一塊印制電路板(Printed Circuit Board,PCB),而這塊PCB板上最基本的配件是控制芯片、內存芯片和用于存儲數據的閃存芯片。其中,控制芯片是固態硬盤的大腦,其作用一是合理調配數據在各個閃存芯片上的負荷,二則是承擔整個數據的中轉,連接閃存芯片和外部SATA (SerialAdvanced Technology Attachment)接口 ;內存芯片用于輔助主控芯片進行數據處理。與傳統的機械硬盤相比,固態硬盤的缺點是:①由于受到閃存擦寫次數的限制,其使用壽命相對較短。傳統的機械硬盤以扇區為單位,而固態硬盤通常以頁為單位存儲數據。為了延長固態硬盤使用壽命,絕大多數的固態硬盤都有磨損平衡的處理,即連續兩次對同一邏輯地址的寫入操作,在閃存進行寫入操作的實際物理位置不同。②在對固態硬盤進行寫操作時,若寫操作的邏輯地址沒有與固態硬盤的基本單位(頁)對齊,可能出現數據從一個閃存頁到另一個閃存頁的搬移現象,即:在對固態硬盤進行寫操作時,如果寫操作的邏輯地址與固態硬盤的基本單位(頁)不對齊時,首先需要將閃存中的寫操作頁讀取到固態硬盤的內存中,然后在固態硬盤的內存中對該寫操作頁進行部分替換,再將內存中的該寫操作頁寫回到固態硬盤中。如此操作,大量的時間被浪費在了簡單而耗時的閃存數據搬移操作上,影響固態硬盤的傳輸效率和使用壽命。③主機的數據在寫入閃存之前都要經過SDRAM(Synchronous Dynamic Random Access Memory,同步動態隨機存儲器)層,但目前的固態硬盤沒有考慮這些數據的二次利用問題,導致有用數據白白浪費。
發明內容
本發明的目的是為了解決目前已有固態硬盤在寫操作的邏輯地址與固態硬盤的基本單位(頁)不對齊時,造成傳輸效率不高的問題,提出一種提高固態硬盤數據傳輸效率的方法。本發明方法通過采用一種基于雙向循環鏈表實現的數據緩沖機制和一種仿堆棧型LRU (Least Recently Used,最近最少使用算法)缺頁調度算法,有效解決了固態硬盤地址不對齊的問題,從而提高數據傳輸效率。本發明的目的是通過以下技術方案實現的。一種提高固態硬盤數據傳輸效率的方法,用于主機與固態硬盤之間的數據傳輸,所述固態硬盤包括控制芯片、內存芯片和閃存芯片;其具體實施步驟為:步驟1:在固態硬盤的內存中創建I個空閑頁雙向循環鏈表、I個整頁雙向循環鏈表、I個零碎頁雙向循環鏈表和I個緩沖區。所述空閑頁雙向循環鏈表有N個節點,N為正整數。所述空閑頁雙向循環鏈表中的每個節點包含I個指針。所述整頁雙向循環鏈表和零碎頁雙向循環鏈表均為空。所述整頁雙向循環鏈表和零碎頁雙向循環鏈表中的每個節點都有一個標志量(用符號Flag表示),用于表示該節點指向的緩存區中的頁面是否修改過,設置Flag=0。所述整頁雙向循環鏈表中的每個節點包含I個指針。所述零碎頁雙向循環鏈表中的每個節點包含2個指針,分別稱為頭指針和尾指針。所述緩沖區的大小為所述固態硬盤的頁面大小的N倍。步驟2:將步驟I中創建的緩沖區分為N個頁面,每個緩沖區頁面的大小與所述固態硬盤的頁面大小相同;然后依次使所述空閑頁雙向循環鏈表第I個節點的指針指向緩沖區第I個頁面的起始地址,使所述空閑頁雙向循環鏈表第2個節點中的指針指向緩沖區第2個頁面的起始地址,以此類推,使所述空閑頁雙向循環鏈表第N個節點中的指針指向緩沖區第N個頁面的起始地址。步驟3:當主機請求對所述固態硬盤進行讀/寫操作時,根據請求的讀/寫地址查找讀/寫操作頁是否緩存在固態硬盤的緩存區中。若固態硬盤的緩沖區中有該讀/寫操作頁的緩存,則直接在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I。若固態硬盤的緩沖區中沒有該讀/寫操作頁的緩存,則判斷空閑頁雙向循環鏈表是否為空,如空閑頁雙向循環鏈表為空,則采用缺頁調度算法進行缺頁調度操作,然后執行步驟4的操作。如空閑頁雙向循環鏈表不為空,則執行步驟4的操作。所述缺頁調度算法具體為:第a步:判斷整頁雙向循環鏈表是否為空,如不為空,則從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回整頁節點;將該待寫回整頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回整頁節點中指針指向的地址;再從整頁雙向循環鏈表中刪除該待寫回整頁節點。如果整頁雙向循環鏈表為空,則執行第b步的操作。第b步:從零碎頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回零碎頁節點;將該待寫回零碎頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回零碎頁節點中指針指向的地址;再從零碎頁雙向循環鏈表中刪除該待寫回零碎頁節點。所述缺頁調度算法在進行缺頁調度時,遵循堆棧型LRU替換原則,即從整頁雙向循環鏈表和零碎頁雙向循環鏈表的尾部開始向前選擇一個節點進行缺頁替換操作。步驟4:判斷步驟3中所述對讀/寫操作頁的操作是對該頁的整頁操作還是部分操作,如果是對整頁操作,則從空閑頁雙向循環鏈表中摘出一個節點插入到整頁雙向循環鏈表,將該節點稱為新增整頁節點;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增整頁節點中的指針指向的內存緩沖區頁面;在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=10如果進行的是部分操作,則從空閑頁雙向循環鏈表中摘出一個節點,并為零碎頁雙向循環鏈表增加一個節點,將該節點稱為新增零碎頁節點,使新增零碎頁節點的頭指針指向從空閑頁雙向循環鏈表中摘出的節點中指針指向的頁面的起始地址;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增零碎頁節點中頭指針指向的內存緩沖區頁面;在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I ;最后,使新增零碎頁節點的頭指針指向緩沖區中該讀/寫操作頁的非空第一個字節的地址,使新增零碎頁節點的尾指針指向該讀/寫操作頁的非空最后一個字節的地址。所述一種提高固態硬盤數據傳輸效率的方法,還包括:在固態硬盤的處于空閑狀態時,將緩存區中的數據寫入閃存的操作,其具體步驟為:步驟a:檢查零碎頁雙向循環鏈表,判斷其中是否存在待轉移整頁節點,若存在待轉移整頁節點,則在整頁雙向循環鏈表的頭部增加一個新節點,并使該新節點的指針指向待轉移整頁節點頭指針指向的地址,再從零碎頁雙向循環鏈表中刪除待轉移整頁節點。所述待轉移整頁節點是零碎頁雙向循環鏈表中頭指針指向對應緩存區頁面的起始地址,尾指針指向對應緩存區頁面的結束地址的節點。步驟b:從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并設置標志量Flag=0。當整頁雙向循環鏈表沒有標志量Flag=I的節點時,在零碎頁雙向循環鏈表的尾部選取一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并置標志量Flag=0。這樣,當固態硬盤突然斷電時,整頁雙向循環鏈表和零碎頁雙向循環鏈表中僅有少量Flag=I的節點指向的頁面數據沒有存儲到固態硬盤的閃存中,可以在短時間內將緩存的數據寫入固態硬盤,避免數據丟失。有益效果本發明提出的一種提高固態硬盤數據傳輸效率的方法通過采用基于雙向循環鏈表實現的數據緩沖機制和一種仿堆棧型LRU缺頁調度算法,有效解決了固態硬盤地址不對齊的問題,從而提高數據傳輸效率。
具體實施例方式為了更好的說明本發明的技術方案,下面通過I個實施例,對本發明做進一步說明。在主機和固態硬盤之間進行數據傳輸,固態硬盤包括控制芯片、內存芯片和閃存芯片。其中,閃存芯片采用三星K9LCG08U1M型芯片;固態硬盤的頁大小為32KB。其具體實施步驟為:
步驟1:在固態硬盤的內存中創建I個空閑頁雙向循環鏈表、I個整頁雙向循環鏈表、I個零碎頁雙向循環鏈表和I個緩沖區。所述空閑頁雙向循環鏈表有128個節點。所述空閑頁雙向循環鏈表中的每個節點包含I個指針。所述整頁雙向循環鏈表和零碎頁雙向循環鏈表均為空。所述整頁雙向循環鏈表和零碎頁雙向循環鏈表中的每個節點都有一個標志量Flag,用于表示該節點指向的緩存區中的頁面是否修改過,設置Flag=0。所述整頁雙向循環鏈表中的每個節點包含I個指針。所述零碎頁雙向循環鏈表中的每個節點包含2個指針,分別稱為頭指針和尾指針。所述緩沖區的大小為所述固態硬盤的頁面大小的128倍,即4M。步驟2:將步驟I中創建的緩沖區分為128個頁面,每個緩沖區頁面的大小與所述固態硬盤的頁面大小相同;然后依次使所述空閑頁雙向循環鏈表第I個節點的指針指向緩沖區第I個頁面的起始地址,使所述空閑頁雙向循環鏈表第2個節點中的指針指向緩沖區第2個頁面的起始地址,以此類推,使所述空閑頁雙向循環鏈表第128個節點中的指針指向緩沖區第128個頁面的起始地址。步驟3:當主機請求對所述固態硬盤進行讀/寫操作時,根據請求的讀/寫地址查找讀/寫操作頁是否緩存在固態硬盤的緩存區中。若固態硬盤的緩沖區中有該讀/寫操作頁的緩存,則直接在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I。若固態硬盤的緩沖區中沒有該讀/寫操作頁的緩存,則判斷空閑頁雙向循環鏈表是否為空,如空閑頁雙向循環鏈表為空,則采用缺頁調度算法進行缺頁調度操作,然后執行步驟4的操作。如空閑頁雙向循環鏈表不為空,則執行步驟4的操作。所述缺頁調度算法具體為:第a步:判斷整頁雙向循環鏈表是否為空,如不為空,則從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回整頁節點;將該待寫回整頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回整頁節點中指針指向的地址;再從整頁雙向循環鏈表中刪除該待寫回整頁節點。如果整頁雙向循環鏈表為空,則執行第b步的操作。第b步:從零碎頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回零碎頁節點;將該待寫回零碎頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回零碎頁節點中指針指向的地址;再從零碎頁雙向循環鏈表中刪除該待寫回零碎頁節點。所述缺頁調度算法在進行缺頁調度時,遵循堆棧型LRU替換原則,即從整頁雙向循環鏈表和零碎頁雙向循環鏈表的尾部開始向前選擇一個節點進行缺頁替換操作。步驟4:判斷步驟3中所述對讀/寫操作頁的操作是對該頁的整頁操作還是部分操作,如果是對整頁操作,則從空閑頁雙向循環鏈表中摘出一個節點插入到整頁雙向循環鏈表,將該節點稱為新增整頁節點;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增整頁節點中的指針指向的內存緩沖區頁面;在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=10如果進行的是部分操作,則從空閑頁雙向循環鏈表中摘出一個節點,并為零碎頁雙向循環鏈表增加一個節點,將該節點稱為新增零碎頁節點,使新增零碎頁節點的頭指針指向從空閑頁雙向循環鏈表中摘出的節點中指針指向的頁面的起始地址;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增零碎頁節點中頭指針指向的內存緩沖區頁面;在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I ;最后,使新增零碎頁節點的頭指針指向緩沖區中該讀/寫操作頁的非空第一個字節的地址,使新增零碎頁節點的尾指針指向該讀/寫操作頁的非空最后一個字節的地址。當固態硬盤的處于空閑狀態時,將緩存區中的數據寫入閃存的操作,其具體步驟為:步驟a:檢查零碎頁雙向循環鏈表,判斷其中是否存在待轉移整頁節點,若存在待轉移整頁節點,則在整頁雙向循環鏈表的頭部增加一個新節點,并使該新節點的指針指向待轉移整頁節點頭指針指向的地址,再從零碎頁雙向循環鏈表中刪除待轉移整頁節點。所述待轉移整頁節點是零碎頁雙向循環鏈表中頭指針指向對應緩存區頁面的起始地址,尾指針指向對應緩存區頁面的結束地址的節點。步驟b:從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并設置標志量Flag=0。當整頁雙向循環鏈表沒有標志量Flag=I的節點時,在零碎頁雙向循環鏈表的尾部選取一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并置標志量Flag=0。這樣,當固態硬盤突然斷電時,整頁雙向循環鏈表和零碎頁雙向循環鏈表中僅有少量Flag=I的節點指向的頁面數據沒有存儲到固態硬盤的閃存中,可以在短時間內將緩存的數據寫入固態硬盤,避免數據丟失。
權利要求
1.一種提高固態硬盤數據傳輸效率的方法,用于主機與固態硬盤之間的數據傳輸,所述固態硬盤包括控制芯片、內存芯片和閃存芯片;其特征在于:其具體實施步驟為: 步驟1:在固態硬盤的內存中創建I個空閑頁雙向循環鏈表、I個整頁雙向循環鏈表、I個零碎頁雙向循環鏈表和I個緩沖區; 所述空閑頁雙向循環鏈表有N個節點,N為正整數;所述空閑頁雙向循環鏈表中的每個節點包含I個指針; 所述整頁雙向循環鏈表和零碎頁雙向循環鏈表均為空; 所述整頁雙向循環鏈表和零碎頁雙向循環鏈表中的每個節點都有一個標志量,用符號Flag表示,Flag用于表示該節點指向的緩存區中的頁面是否修改過,設置Flag=O ; 所述整頁雙向循環鏈表中的每個節點包含I個指針; 所述零碎頁雙向循環鏈表中的每個節點包含2個指針,分別稱為頭指針和尾指針; 所述緩沖區的大小為所述固態硬盤的頁面大小的N倍; 步驟2:將步驟I中創建的緩沖區分為N個頁面,每個緩沖區頁面的大小與所述固態硬盤的頁面大小相同;然后依次使所述空閑頁雙向循環鏈表第I個節點的指針指向緩沖區第I個頁面的起始地址,使所述空閑頁雙向循環鏈表第2個節點中的指針指向緩沖區第2個頁面的起始地址,以此類推,使所述空閑頁雙向循環鏈表第N個節點中的指針指向緩沖區第N個頁面的起始地址; 步驟3:當主機請求對所述固態硬盤進行讀/寫操作時,根據請求的讀/寫地址查找讀/寫操作頁是否緩存在固態硬盤的緩存區中; 若固態硬盤的緩沖區中有該讀/寫操作頁的緩存,則直接在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I ; 若固態硬盤的緩沖區中沒有該讀/寫操作頁的緩存,則判斷空閑頁雙向循環鏈表是否為空,如空閑頁雙向循環鏈表為空,則采用缺頁調度算法進行缺頁調度操作,然后執行步驟4的操作;如空閑頁雙向循環鏈表不為空,則執行步驟4的操作; 所述缺頁調度算法具體為: 第a步:判斷整頁雙向循環鏈表是否為空,如不為空,則從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回整頁節點;將該待寫回整頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回整頁節點中指針指向的地址;再從整頁雙向循環鏈表中刪除該待寫回整頁節點;如果整頁雙向循環鏈表為空,則執行第b步的操作; 第b步:從零碎頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點稱為待寫回零碎頁節點;將該待寫回零碎頁節點中指針指向的緩沖區中的頁內容寫入固態硬盤的閃存中;然后為空閑頁雙向循環鏈表增加一個新節點,并使該新節點的指針指向待寫回零碎頁節點中指針指向的地址;再從零碎頁雙向循環鏈表中刪除該待寫回零碎頁節點;步驟4:判斷步驟3中所述對讀/寫操作頁的操作是對該頁的整頁操作還是部分操作,如果是對整頁操作,則從空閑頁雙向循環鏈表中摘出一個節點插入到整頁雙向循環鏈表,將該節點稱為新增整頁節點;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增整頁節點中的指針指向的內存緩沖區頁面; 在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I ;如果進行的是部分操作,則從空閑頁雙向循環鏈表中摘出一個節點,并為零碎頁雙向循環鏈表增加一個節點,將該節點稱為新增零碎頁節點,使新增零碎頁節點的頭指針指向從空閑頁雙向循環鏈表中摘出的節點中指針指向的頁面的起始地址;然后根據步驟3中所述主機對固態硬盤進行讀/寫操作的地址,將該讀/寫操作頁的內容從閃存中讀入到新增零碎頁節點中頭指針指向的內存緩沖區頁面;在該讀/寫操作頁的緩存上進行讀/寫操作,并在寫操作后,設置該節點的標志量Flag=I ;最后,使新增零碎頁節點的頭指針指向緩沖區中該讀/寫操作頁的非空第一個字節的地址,使新增零碎頁節點的尾指針指向該讀/寫操作頁的非空最后一個字節的地址。
2.如權利要求1所述的一種提高固態硬盤數據傳輸效率的方法,其特征在于:還包括:在固態硬盤的處于空閑狀態時,將緩存區中的數據寫入閃存的操作,其具體步驟為: 步驟a:檢查零碎頁雙向循環鏈表,判斷其中是否存在待轉移整頁節點,若存在待轉移整頁節點,則在整頁雙向循環鏈表的頭部增加一個新節點,并使該新節點的指針指向待轉移整頁節點頭指針指向的地址,再從零碎頁雙向循環鏈表中刪除待轉移整頁節點; 所述待轉移整頁節點是零碎頁雙向循環鏈表中頭指針指向對應緩存區頁面的起始地址,尾指針指向對應緩存區頁面的結束地址的節點; 步驟b:從整頁雙向循環鏈表的尾部選擇一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并設置標志量Flag=O ;當整頁雙向循環鏈表沒有標志量Flag=I的節點時,在零碎頁雙向循環鏈表的尾部選取一個標志量Flag=I的節點,將該節點指向的頁面數據寫入固態硬盤的閃存中,并置標志量Flag=O;這樣,當固態硬盤突然斷電時,整頁雙向循環鏈表和零碎頁雙向循環鏈表中僅有少量Flag=I的節點指向的頁面數據沒有存儲到固態 硬盤的閃存中,可以在短時間內將緩存的數據寫入固態硬盤,避免數據丟失。
全文摘要
本發明涉及一種提高固態硬盤數據傳輸效率的方法,屬于計算機數據存儲技術領域。本發明方法通過采用一種基于雙向循環鏈表實現的數據緩沖機制和一種仿堆棧型LRU(Least Recently Used,最近最少使用算法)缺頁調度算法,有效解決了固態硬盤地址不對齊的問題,從而提高數據傳輸效率。
文檔編號G06F12/02GK103198021SQ201310135328
公開日2013年7月10日 申請日期2013年4月18日 優先權日2013年4月18日
發明者張全新, 朱瑞瑾, 李元章, 王文明, 馬忠梅, 張雪蘭, 譚毓安 申請人:北京理工大學