專利名稱:一種非易失性內存的磨損錯誤恢復方法和裝置的制作方法
技術領域:
本發(fā)明涉及數據存儲技術領域,特別涉及一種非易失性內存的磨損錯誤恢復方法和裝置。
背景技術:
在非易失存儲介質發(fā)展的過程中,新興的非易失性內存NVRAM (Non-VolatileRandom Access Memory,非易失性隨機訪問存儲器)正在逐步成為易失性內存的可替代產品。與DRAM (Dynamic Random Access Memory,動態(tài)隨機存取存儲器)相比,非易失性內存例如PCRAM(Phase-Change Memory,相變存儲內存),兩者的訪問速度相近,但在相同芯片面積上PCRAM可以提供更大的容量,擴展性更好,能耗低,且有數據非易失等特點。然而,大部分非易失性內存技術包括PCRAM技術在內,都存在磨損問題,非易失性內存的存儲單元在寫操作超過一定次數后,都會出現磨損錯誤,例如對于PCRAM的存儲單元,其寫次數上限為IO8 —101°次。當PCRAM的寫次數超過該閾值時,PCRAM的存儲單元的值將固化在某一狀態(tài)上,例如為O或I,造成該bit (binary digit,位)存儲單元的數據不能寫入,從而引起PCRAM存儲單元的磨損錯誤,造成該單元數據不能繼續(xù)寫入。如此便降低了非易失內存的可靠性,縮短了其使用壽命。
發(fā)明內容
本發(fā)明的目的旨在至少解決上述的技術缺陷之一。為此,本發(fā)明的第一個目的在于提出一種非易失性內存的磨損錯誤恢復方法,采用該方法能夠提高非易失性內存的可靠性,延長其使用壽命。本發(fā)明的第二個目的在于提出一種非易失性內存的磨損錯誤恢復裝置。為達到上述目的,本發(fā)明第一方面實施例提出一種非易失性內存的磨損錯誤恢復方法,包括以下步驟:S1,將非易失性內存行劃分為多個內存塊;S2,檢測所述多個內存塊中發(fā)生磨損錯誤的內存塊;S3,將所述發(fā)生磨損錯誤的內存塊重映射到備份內存塊中;以及,S4,將所述發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到所述備份內存塊中的備份內存地址。根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復方法,通過將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中,并在進行讀寫請求時,將發(fā)生磨損錯誤的內存塊的讀寫請求重定向到其映射地址,提高了非易失性內存的可靠性,延長了使用壽命。較優(yōu)地,所述步驟S2具體包括:在所述多個內存塊中的一個內存塊寫入數據后,讀取所述一個內存塊中的數據,并將所述一個內存塊中的數據與寫入的數據進行比對;若所述一個內存塊中的數據與所述寫入的數據不相符,則判斷所述一個內存塊發(fā)生磨損錯誤。進一步地,所述步驟S3具體包括:判斷所述發(fā)生磨損錯誤的內存塊所處的內存行是否為首次發(fā)生磨損錯誤;如果是,觸發(fā)操作系統(tǒng)中斷,所述操作系統(tǒng)重新分配備份非易失性內存行,并將所述備份內存行的地址指針寫入到所述內存行的元數據位置;如果否,從所述發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的所述備份內存行的映射地址指針。另外,在所述步驟S3中,還包括:將所述備份內存塊所處的備份內存行的地址指針以N重冗余形式寫入所述發(fā)生磨損錯誤的內存塊中,其中,N為正整數。將地址指針以N重冗余形式寫入內存塊中,能夠保證寫入的地址指針被正確讀取。其中,所述備份內存地址為所述備份內存行的映射地址指針指向的映射地址。為實現上述目的,本發(fā)明的第二方面實施例提出一種非易失性內存的磨損錯誤恢復裝置,包括:劃分模塊,用于將非易失性內存行劃分為多個內存塊;檢測模塊,用于檢測所述多個內存塊中發(fā)生磨損錯誤的內存塊;重映射模塊,用于將所述發(fā)生磨損錯誤的內存塊重映射到備份內存塊中;以及,重定向模塊,用于將所述發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到所述備份內存塊中的備份內存地址。根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復裝置,通過重映射模塊將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中,并在進行讀寫請求時,由重定向模塊將發(fā)生磨損錯誤的內存塊的讀寫請求重定向到其映射地址,提高了非易失性內存的可靠性,延長了使用壽命。進一步地,所述檢測模塊還用于在所述多個內存塊中的一個內存塊寫入數據后,讀取所述一個內存塊中的數據,并將所述一個內存塊中的數據與寫入的數據進行比對,以及在所述一個內存塊中的數據與所述寫入的數據不相符時判斷所述一個內存塊發(fā)生磨損錯誤。進一步地,所述重映射模塊還用于判斷所述發(fā)生磨損錯誤的內存塊所處的內存行是首次發(fā)生磨損錯誤時,觸發(fā)操作系統(tǒng)中斷,所述操作系統(tǒng)重新分配備份內存行,并將所述備份內存行的地址指針寫入到所述內存行的元數據位置。另外,所述重映射模塊還用于判斷所述發(fā)生磨損錯誤的內存塊所處的內存行不是首次發(fā)生磨損錯誤時,從所述發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的所述備份內存行的映射地址指針。較優(yōu)地,所述重映射模塊還用于將所述備份內存塊所處的備份內存行的地址指針以N重冗余形式寫入所述發(fā)生磨損錯誤的內存塊中,其中,N為正整數。重映射模塊將地址指針以N重冗余形式寫入內存塊中,能夠保證寫入的地址指針被正確讀取。本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結合附圖對實施例的描述中將變得明顯和容易理解,其中:圖1為根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復方法的流程圖;圖2為根據本發(fā)明的一個實施例的內存塊重映射和讀寫請求重定向的示意圖;以及
圖3為根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復裝置的結構示意圖。
具體實施例方式下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。下文的公開提供了許多不同的實施例或例子用來實現本發(fā)明的不同結構。為了簡化本發(fā)明的公開,下文中對特定例子的部件和設置進行描述。當然,它們僅僅為示例,并且目的不在于限制本發(fā)明。此外,本發(fā)明可以在不同例子中重復參考數字和/或字母。這種重復是為了簡化和清楚的目的,其本身不指示所討論各種實施例和/或設置之間的關系。此夕卜,本發(fā)明提供了的各種特定的工藝和材料的例子,但是本領域普通技術人員可以意識到其他工藝的可應用于性和/或其他材料的使用。另外,以下描述的第一特征在第二特征之“上”的結構可以包括第一和第二特征形成為直接接觸的實施例,也可以包括另外的特征形成在第一和第二特征之間的實施例,這樣第一和第二特征可能不是直接接觸。在本發(fā)明的描述中,需要說明的是,除非另有規(guī)定和限定,術語“安裝”、“相連”、“連接”應做廣義理解,例如,可以是機械連接或電連接,也可以是兩個元件內部的連通,可以是直接相連,也可以通過中間媒介間接相連,對于本領域的普通技術人員而言,可以根據具體情況理解上述術語的具體含義。參照下面的描述和附圖,將清楚本發(fā)明的實施例的這些和其他方面。在這些描述和附圖中,具體公開了本發(fā)明的實施例中的一些特定實施方式,來表示實施本發(fā)明的實施例的原理的一些方式,但是應當理解,本發(fā)明的實施例的范圍不受此限制。相反,本發(fā)明的實施例包括落入所附加權利要求書的精神和內涵范圍內的所有變化、修改和等同物。下面參照附圖1至2描述根據本發(fā)明第一方面實施例提出的一種非易失性內存的磨損錯誤恢復方法。如圖1所示,本發(fā)明實施例的非易失性內存的磨損錯誤恢復方法,包括以下步驟:SI,將非易失性內存行劃分為多個內存塊。非易失性內存例如PCRAM存儲陣列由內存行和內存列構成,在本發(fā)明的一個實施例中,以緩存行(Cache Line)大小為單位將PCRAM劃分為多個內存塊,并且內存讀寫的最小單元為緩存行,即以內存塊為最小單元進行內存讀寫。如圖2所示,將PCRAM存儲陣列中每一個內存行均劃分為4個內存塊。S2,檢測多個內存塊中發(fā)生磨損錯誤的內存塊。在本發(fā)明的一個實施例中,步驟S2具體包括:在多個內存塊中的一個內存塊寫入數據后,立即讀取此內存塊中的數據,并將此內存塊中的數據與寫入的數據進行比對。如果此內存塊中的數據與寫入的數據相符,則判斷該內存行中的此內存塊沒有發(fā)生磨損錯誤,若此內存塊中的數據與寫入的數據不相符,則判斷此內存塊發(fā)生磨損錯誤。如圖2中所示,例如內存行O中的偏移4的內存塊發(fā)生內存磨損錯誤。S3,將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中。由步驟S2獲得發(fā)生磨損錯誤的內存塊及其所在的內存行,例如內存行O偏移4的內存塊發(fā)生磨損錯誤。在本發(fā)明的一個實施例中,步驟S3具體包括:當檢測到內存塊發(fā)生磨損錯誤時,判斷發(fā)生磨損錯誤的內存塊所處的內存行是否為首次發(fā)生磨損錯誤。如果是,則觸發(fā)操作系統(tǒng)中斷,操作系統(tǒng)重新分配備份內存行,并將備份內存行的地址指針寫入到發(fā)生磨損錯誤的內存塊所處的內存行的元數據位置,如果否,從發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的備份內存行的映射地址指針。其中,備份內存行為非易失內存中的空閑內存行,即沒有存儲數據的內存行。需要說明的是,將發(fā)生磨損錯誤的內存塊所處的內存行整體映射到操作系統(tǒng)重新分配的備份內存行,并且每一內存塊都一一對應,發(fā)生磨損錯誤的內存塊將被映射到重新分配的備份內存行的同一偏移位置對應的內存塊,并將備份內存行中對應的備份內存塊地址指針寫入原發(fā)生磨損錯誤的內存塊中,即發(fā)生磨損錯誤內存塊中寫入的是重映射的地址指針,發(fā)生磨損錯誤的內存塊不再作為數據存儲使用。其中,發(fā)生磨損錯誤的內存塊所處的內存行中的其他內存塊可以繼續(xù)使用,備份內存行中除了與發(fā)生磨損錯誤的內存塊對應位置的備份內存塊之外的其他內存塊位置,作為發(fā)生磨損錯誤的內存塊所處內存行中的其他內存塊的備份內存塊使用。將重新分配的備份內存行的行地址指針寫入發(fā)生磨損錯誤的內存塊所處的內存行的元數據單元中,并將發(fā)生磨損錯誤的內存塊及其所處的內存行的D/P標志位標為P表示該內存塊已被重映射,其存儲的為地址指針,初始情況下內存塊D/P標志位為D表示內存塊還未被重映射,其存儲的為數據。例如如圖2所示,當內存行O偏移4的內存塊發(fā)生磨損錯誤時,如果內存行O是首次發(fā)生磨損錯誤,操作系統(tǒng)重新分配備份內存行5,備份內存行5為空閑行,將內存行O映射到備份內存行5,并將內存行O的標志位D/P置為P表明該內存行已被映射,內存行元數據例如圖2中Rptr位置寫入備份內存行地址5。同時將內存行O偏移4的內存塊標志位D/P置為P,內存塊例如Ptr位置寫入備份內存行5偏移4的備份內存塊的地址指針。如果發(fā)生磨損錯誤的內存塊所處的內存行不是首次發(fā)生磨損錯誤,即檢測到內存行O中其他內存塊發(fā)生磨損錯誤時,則不必觸發(fā)中斷,從發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的備份內存行的映射地址指針,并且內存控制器將該位置映射到備份內存行的對應備份內存塊。在本發(fā)明的一個實施例中,將備份內存塊的地址指針以N重冗余(N-modularredundancy)形式寫入發(fā)生磨損錯誤的內存塊中,其中,N為正整數。由于發(fā)生磨損錯誤的內存塊中只有部分比特(bit)數據發(fā)生磨損錯誤,其他比特數據依然可以寫入,采用N重冗余寫入可以保證寫入的映射地址指針被正確讀取。S4,將發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到備份內存塊中的備份內存地址。在本發(fā)明的一個實施例中,在內存控制器的讀寫請求隊列之后,為磨損錯誤地址重定向處理,即將發(fā)生磨損錯誤的內存塊讀寫請求的地址重定向到映射地址。首先需要檢測內存塊的緩存信息,找到對應內存塊請求的D/P標志位和地址映射信息。如果內存行的D/P標志位為P,則表示該內存行被映射,從該內存行的元數據位置讀取映射的備份內存行地址指針,確定發(fā)生磨損錯誤內存模塊所在內存行映射到的備份內存行地址,備份內存行地址為備份內存行的映射地址指針指向的映射地址。并根據發(fā)生磨損錯誤的內存塊的地址映射信息,將此內存塊請求地址重定向到映射地址的內存請求。例如如圖2所示,內存行O偏移4的內存塊為磨損錯誤內存塊,根據發(fā)生磨損錯誤內存塊所處內存行O的元數據位置例如Rptr中的備份內存行映射地址指針,確定內存行O所映射到的備份內存行為備份內存行5。根據發(fā)生磨損錯誤的內存塊中例如Ptr位置的映射地址指針,確定此內存塊映射地址為備份內存行5偏移4的位置,如此便將發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到備份內存塊中的備份內存地址。綜上所述,根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復方法,通過將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中,并在進行讀寫請求時,將發(fā)生磨損錯誤的內存塊的讀寫請求重定向到其映射地址,提高了非易失性內存的可靠性,延長了使用壽命。下面參照附圖3描述根據本發(fā)明第二方面實施例提出的一種非易失性內存的磨損錯誤恢復裝置。如圖3所示,本發(fā)明實施例的非易失性內存的磨損錯誤恢復裝置包括:劃分模塊301(未在圖中標示)、檢測模塊302、重映射模塊303和重定向模塊304。其中,劃分模塊301用于將非易失性內存行劃分為多個內存塊。檢測模塊302用于檢測多個內存塊中發(fā)生磨損錯誤的內存塊。重映射模塊303用于將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中。重定向模塊304用于將發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到備份內存塊中的備份內存地址。在本發(fā)明的一個實施例中,劃分模塊301以緩存行為單位將非易失性內存的內存行劃分為多個內存塊,內存讀寫的最小單元為緩存行大小,即以內存塊為單位進行內存讀寫。如果非易失性內存例如PCRAM中劃分的內存塊發(fā)生磨損錯誤,則此內存塊的部分位置將不能再寫入數據,通過檢測模塊302檢測PCRAM中的多個內存塊中的發(fā)生磨損錯誤的內存塊。具體地,檢測模塊302在PCRAM中的多個內存塊中的一個內存塊寫入數據后,讀取此內存塊中的數據,并將此內存塊中的數據與寫入的數據進行比對,在此內存塊中的數據與寫入的數據不相符時,判斷此內存塊發(fā)生磨損錯誤。在本發(fā)明的一個實施例中,由檢測模塊301檢測到PCRAM中的多個內存塊中的一個內存塊發(fā)生磨損錯誤,例如圖2所示的內存行O偏移4的內存塊發(fā)生磨損錯誤,則由重映射模塊303判斷發(fā)生磨損錯誤的內存塊所處的內存行是首次發(fā)生磨損錯誤時,觸發(fā)操作系統(tǒng)中斷,操作系統(tǒng)重新分配備份內存行,并將備份內存行的地址指針寫入到發(fā)生磨損錯誤的內存塊所處的內存行的元數據位置。其中,備份內存行為非易失內存中的空閑內存行,即沒有存儲數據的內存行。需要說明的是,重映射模塊303將發(fā)生磨損錯誤的內存塊所處的內存行整體映射到操作系統(tǒng)重新分配的備份內存行,并且每一內存塊都一一對應,重映射模塊303將發(fā)生磨損錯誤的內存塊映射到重新分配的備份內存行的同一偏移位置對應的內存塊,并將備份內存行中對應的備份內存塊地址指針寫入發(fā)生磨損錯誤的內存塊中,即發(fā)生磨損錯誤內存塊中寫入的是重映射的地址指針,原發(fā)生磨損錯誤的內存塊不再作為數據存儲使用,在本實施例中,重映射模塊303將備份內存塊所處的備份內存行的地址指針以N重冗余形式寫入發(fā)生磨損錯誤的內存塊中,其中,N為正整數。由于發(fā)生磨損錯誤的內存塊中只有部分比特(bit)數據發(fā)生磨損錯誤,其他比特數據依然可以寫入,采用N充冗余寫入可以保證寫入的映射地址指針被正確讀取。其中,發(fā)生磨損錯誤的內存塊所處的內存行中的其他內存塊可以繼續(xù)使用,備份內存行中除了與發(fā)生磨損錯誤的內存塊對應位置的備份內存塊之外的其他內存塊位置,作為發(fā)生磨損錯誤的內存塊所處內存行中的其他內存塊的備份內存塊使用。重映射模塊303將重新分配的備份內存行的行地址指針寫入發(fā)生磨損錯誤的內存塊所處的內存行的元數據單元中,并將發(fā)生磨損錯誤的內存塊及其所處的內存行的D/P標志位標為P表示該內存塊已被重映射,其內存儲的為地址指針,初始情況下內存塊D/P標志位為D表示內存塊還未被重映射,其內存儲的為數據。例如圖2所示,當內存行O中偏移4的內存塊發(fā)生磨損錯誤時,如果重映射模塊303判斷內存行O是首次發(fā)生磨損錯誤,則觸發(fā)操作系統(tǒng)中斷,操作系統(tǒng)分配備份內存行5,備份內存行5為空閑行,將內存行O映射到備份內存行5,并將內存行O的標志位D/P置為P表明該內存行已被映射,內存行元數據例如圖2中Rptr位置寫入備份內存行地址5。同時將內存行O偏移4的內存塊標志位D/P置為P,內存塊中的例如ptr位置被寫入備份內存行5偏移4的備份內存塊的地址指針。在本發(fā)明的另一個實施例中,重映射模塊303還用于判斷發(fā)生磨損錯誤的內存塊所處的內存行不是首次發(fā)生磨損錯誤時,從發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的備份內存行的映射地址指針。如果重映射模塊303判斷發(fā)生磨損錯誤的內存塊所處的內存行不是首次發(fā)生磨損錯誤,即檢測到內存行O中其他內存塊發(fā)生磨損錯誤時,則不觸發(fā)中斷,從發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的備份內存行的映射地址指針,并且內存控制器將該位置映射到備份內存行的對應備份內存塊。在重映射模塊303將發(fā)生磨損錯誤的內存塊重映射到備份內存塊后,由重定向模塊304建立發(fā)生磨損錯誤的內存塊與備份內存塊間的重定向。內存控制器接收來自一個或多個微處理器以及I/O設備的內存請求,并將其緩存在內存控制器的讀寫請求隊列中,然后通過內存控制器調度到各個PCRAM內存芯片。在本發(fā)明的一個實施例中,如圖3所示,重定向模塊304位于內存控制器的讀寫請求隊列之后,重定向模塊304中緩存了磨損錯誤內存塊地址的映射信息,其作用是將發(fā)生磨損錯誤的內存塊讀寫請求的地址重定向到映射地址,然后再由內存控制器進行調度。首先重定向模塊304檢測內存塊的緩存信息,找到對應內存塊請求的D/P標志位和地址映射信息。如果內存行的D/P標志位為P,則表示該內存行被映射,從該內存行的元數據位置讀取映射的備份內存行地址指針,確定發(fā)生磨損錯誤內存模塊所在內存行映射到的備份內存行地址,備份內存行地址為備份內存行的映射地址指針指向的映射地址。并根據發(fā)生磨損錯誤的內存塊的地址映射信息,將此內存塊請求地址重定向到映射地址的內存請求,如此便可以進行正確的讀寫操作。綜上所述,根據本發(fā)明實施例的非易失性內存的磨損錯誤恢復裝置,通過重映射模塊將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中,并在進行讀寫請求時,由重定向模塊將發(fā)生磨損錯誤的內存塊的讀寫請求重定向到其映射地址,提高了非易失性內存的可靠性,延長了使用壽命。流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實施方式的范圍包括另外的實現,其中可以不按所示出或討論的順序,包括根據所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應被本發(fā)明的實施例所屬技術領域的技術人員所理解。在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認為是用于實現邏輯功能的可執(zhí)行指令的定序列表,可以具體實現在任何計算機可讀介質中,以供指令執(zhí)行系統(tǒng)、裝置或設備(如基于計算機的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設備取指令并執(zhí)行指令的系統(tǒng))使用,或結合這些指令執(zhí)行系統(tǒng)、裝置或設備而使用。就本說明書而言,"計算機可讀介質"可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設備或結合這些指令執(zhí)行系統(tǒng)、裝置或設備而使用的裝置。計算機可讀介質的更具體的示例(非窮盡性列表)包括以下:具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPROM或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(⑶ROM)。另外,計算機可讀介質甚至可以是可在其上打印所述程序的紙或其他合適的介質,因為可以例如通過對紙或其他介質進行光學掃描,接著進行編輯、解譯或必要時以其他合適方式進行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。應當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現。例如,如果用硬件來實現,和在另一實施方式中一樣,可用本領域公知的下列技術中的任一項或他們的組合來實現:具有用于對數據信號實現邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現場可編程門陣列(FPGA)等。本技術領域的普通技術人員可以理解實現上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。此外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理模塊中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。所述集成的模塊如果以軟件功能模塊的形式實現并作為獨立的產品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質中。上述提到的存儲介質可以是只讀存儲器,磁盤或光盤等。在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。盡管已經示出和描述了本發(fā)明的實施例,對于本領域的普通技術人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權利要求及其等同限定。
權利要求
1.一種非易失性內存的磨損錯誤恢復方法,其特征在于,包括以下步驟: Si,將非易失性內存行劃分為多個內存塊; S2,檢測所述多個內存塊中發(fā)生磨損錯誤的內存塊; S3,將所述發(fā)生磨損錯誤的內存塊重映射到備份內存塊中;以及S4,將所述發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到所述備份內存塊中的備份內存地址。
2.按權利要求1所述的非易失性內存的磨損錯誤恢復方法,其特征在于,所述步驟S2具體包括: 在所述多個內存塊中的一個內存塊寫入數據后,讀取所述一個內存塊中的數據,并將所述一個內存塊中的數據與寫入的數據進行比對; 若所述一個內存塊中的數據與所述寫入的數據不相符,則判斷所述一個內存塊發(fā)生磨損錯誤。
3.按權利要求1所述的非易失性內存的磨損錯誤恢復方法,其特征在于,所述步驟S3具體包括: 判斷所述發(fā)生磨損錯誤的內存塊所處的內存行是否為首次發(fā)生磨損錯誤; 如果是,觸發(fā)操作系統(tǒng)中斷,所述操作系統(tǒng)重新分配備份內存行,并將所述備份內存行的地址指針寫入到所述內存行的元數據位置; 如果否,從所述發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的所述備份內存行的映射地址指針。
4.按權利要求3所述的非易失性內存的磨損錯誤恢復方法,其特征在于,在所述步驟S3中,還包括: 將所述備份內存塊的地址指針以N重冗余形式寫入所述發(fā)生磨損錯誤的內存塊中,其中,N為正整數。
5.按權利要求3所述的非易失性內存的磨損錯誤恢復方法,其特征在于,所述備份內存行地址為所述備份內存行的映射地址指針指向的映射地址。
6.一種非易失性內存的磨損錯誤恢復裝置,其特征在于,包括: 劃分模塊,用于將非易失性內存行劃分為多個內存塊; 檢測模塊,用于檢測所述多個內存塊中發(fā)生磨損錯誤的內存塊; 重映射模塊,用于將所述發(fā)生磨損錯誤的內存塊重映射到備份內存塊中;以及重定向模塊,用于將所述發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到所述備份內存塊中的備份內存地址。
7.按權利要求6所述的非易失性內存的磨損錯誤恢復裝置,其特征在于,所述檢測模塊還用于在所述多個內存塊中的一個內存塊寫入數據后,讀取所述一個內存塊中的數據,并將所述一個內存塊中的數據與寫入的數據進行比對,以及在所述一個內存塊中的數據與所述寫入的數據不相符時判斷所述一個內存塊發(fā)生磨損錯誤。
8.按權利要求6所述的非易失性內存的磨損錯誤恢復裝置,其特征在于,所述重映射模塊還用于判斷所述發(fā)生磨損錯誤的內存塊所處的內存行是首次發(fā)生磨損錯誤時,觸發(fā)操作系統(tǒng)中斷,所述操作系統(tǒng)重新分配備份內存行,并將所述備份內存行的地址指針寫入到所述內存行的元數據位置。
9.按權利要求8所述的非易失性內存的磨損錯誤恢復裝置,其特征在于,所述重映射模塊還用于判斷所述發(fā)生磨損錯誤的內存塊所處的內存行不是首次發(fā)生磨損錯誤時,從所述發(fā)生磨損錯誤的內存塊所處的內存行的元數據中讀取已分配的所述備份內存行的映射地址指針。
10.按權利要求9所述的非易失性內存的磨損錯誤恢復裝置,其特征在于,所述重映射模塊還用于將所述備份內存塊所處的備份內存行的地址指針以N重冗余形式寫入所述發(fā)生磨損錯誤的內存塊中 ,其中,N為正整數。
全文摘要
本發(fā)明提出一種非易失性內存的磨損錯誤恢復方法,包括以下步驟S1,將非易失性內存行劃分為多個內存塊;S2,檢測多個內存塊中發(fā)生磨損錯誤的內存塊;S3,將發(fā)生磨損錯誤的內存塊重映射到備份內存塊中;以及S4,將發(fā)生磨損錯誤的內存塊中的內存地址讀寫請求重定向到備份內存塊中的備份內存地址。采用該方法能夠提高非易失性內存的可靠性,延長其使用壽命。本發(fā)明同時還提出一種非易失性內存的磨損錯誤恢復裝置。
文檔編號G06F11/14GK103092728SQ201310024118
公開日2013年5月8日 申請日期2013年1月22日 優(yōu)先權日2013年1月22日
發(fā)明者胡事民, 朱龍云, 趙鵬, 廖學良 申請人:清華大學