使用非易失隨機(jī)讀寫存儲(chǔ)芯片動(dòng)態(tài)管理文件存儲(chǔ)區(qū)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)領(lǐng)域,尤其涉及一種使用非易失隨機(jī)讀寫存儲(chǔ)芯片動(dòng)態(tài)管理存儲(chǔ)區(qū)的方法及利用MRAM存儲(chǔ)小文件的存儲(chǔ)結(jié)構(gòu)。
【背景技術(shù)】
[0002]現(xiàn)在計(jì)算機(jī)、智能手機(jī)、平板電腦中,用戶數(shù)據(jù)、文件被存在硬盤,或者NAND閃存芯片中以及由NAND閃存組成的固態(tài)硬盤里。NAND和固態(tài)硬盤取代傳統(tǒng)的機(jī)械硬盤又是一個(gè)產(chǎn)業(yè)發(fā)展的大趨勢(shì)。
[0003]硬盤和固態(tài)硬盤內(nèi)的NAND閃存都是整塊讀寫的塊設(shè)備(block device),最小可讀取的單元叫頁(page),最小可擦除的單元叫塊(block),一個(gè)塊往往由很多頁組成,塊擦除后里面的頁可以進(jìn)行單獨(dú)的寫入操作。
[0004]NAND閃存的一個(gè)問題是NAND具有有限的壽命。里面的每一個(gè)頁經(jīng)過一定次數(shù)的擦寫以后,就會(huì)永久失效不能繼續(xù)使用。目前的產(chǎn)業(yè)發(fā)展趨勢(shì)是NAND的容量和數(shù)據(jù)密度增長(zhǎng)非??欤珔s是以降低壽命為代價(jià)??刹翆懘螖?shù)從最初的10萬次降低到目前的3000次左右。
[0005]如圖1所示,手機(jī)與計(jì)算機(jī)的文件操作方式如下:
[0006](I)應(yīng)用軟件向操作系統(tǒng)發(fā)出打開、關(guān)閉、讀、寫文件指令;
[0007](2)操作系統(tǒng)中的文件系統(tǒng)部分把讀、寫文件的指令轉(zhuǎn)化為讀、寫存儲(chǔ)塊的指令;
[0008](3)NAND驅(qū)動(dòng)與管理軟件接受讀寫存儲(chǔ)塊區(qū)的指令,進(jìn)行緩存、寫均衡等優(yōu)化,向芯片發(fā)出讀page,寫block等指令。
[0009]在手機(jī)中,NAND驅(qū)動(dòng)與管理軟件通常作為與操作系統(tǒng)緊密相關(guān)的軟件模塊,在主機(jī)芯片上運(yùn)行;在計(jì)算機(jī)中,NAND驅(qū)動(dòng)與管理軟件通常在固態(tài)硬盤的主控芯片上運(yùn)行。
[0010]文件系統(tǒng)是操作系統(tǒng)軟件中的一個(gè)重要部分,負(fù)責(zé)解決文件的存儲(chǔ)問題。它會(huì)把文件劃分成一個(gè)個(gè)的塊,一般每一個(gè)塊和NAND閃存中的一個(gè)頁對(duì)應(yīng)。每當(dāng)一個(gè)新文件創(chuàng)建,文件系統(tǒng)會(huì)分配給它一個(gè)塊,當(dāng)一個(gè)塊寫滿后,再分配一個(gè)新的塊。由于系統(tǒng)中很多文件都在增長(zhǎng),一個(gè)文件中的不同的塊常常地址不連續(xù),這就是文件的碎片化。并且,一個(gè)文件刪除后,釋放出的空閑塊會(huì)被新的文件占用。所以,隨著產(chǎn)品的使用,文件的碎片化會(huì)越來越嚴(yán)重。
[0011 ]隨著當(dāng)代技術(shù)的發(fā)展,NAND閃存的密度越來越大。于此同時(shí),頁和塊的尺寸也變得越來越大。頁從幾年前的512字節(jié)(byte)變成了今天的16Kbyte;塊從幾年前的16Kbyte變成了今天的8192Kbyte。
[0012]而一個(gè)計(jì)算機(jī)系統(tǒng)中相當(dāng)數(shù)量的文件是小文件,從10-20字節(jié),到幾百個(gè)字節(jié)。小文件中最典型的例子就是文件夾目錄。在大部分文件系統(tǒng)中,目錄也是作為一個(gè)單獨(dú)的文件存儲(chǔ)的。大部分目錄文件都很小,而且被修改的幾率非常高。不適合存儲(chǔ)在block device里。
[0013]計(jì)算機(jī)文件系統(tǒng)中文件的最小存儲(chǔ)單元,一般和NAND的頁一樣大。因此NAND越來越不適于存儲(chǔ)這樣的小文件。為存儲(chǔ)一個(gè)20字節(jié)的文件,要占用16Kbyte的空間,存儲(chǔ)空間的利用率非常低。為修改這樣一個(gè)20字節(jié)的小文件,甚至可能要對(duì)8192Kbyte的數(shù)據(jù)進(jìn)行擦除重寫,極大地加重了系統(tǒng)的負(fù)擔(dān)。
[0014]—種方法是利用MRAM保存小文件,MRAM是一種新的內(nèi)存和存儲(chǔ)技術(shù),可以像RAM—樣快速隨機(jī)讀寫,還可以像NAND閃存一樣在斷電后永久保留數(shù)據(jù)。不像NAND,MRAM可以無限多次地擦寫。但預(yù)計(jì)未來相當(dāng)長(zhǎng)一段時(shí)間內(nèi),MRAM的容量比NAND低,成本比NAND高。
[0015]MRAM中設(shè)置小文件存儲(chǔ)區(qū),用于保存小文件,把小文件存儲(chǔ)區(qū)分成多個(gè)存儲(chǔ)區(qū),每個(gè)存儲(chǔ)區(qū)由同樣大小的塊組成,多個(gè)存儲(chǔ)區(qū)的塊的容量依次增大。
[0016]這種方法存儲(chǔ)小文件采用的塊的容量,小于塊存儲(chǔ)設(shè)備的塊的容量,因而能夠提高存儲(chǔ)空間的利用率。在修改文件時(shí),首先需要擦除的塊較小,能夠降低系統(tǒng)的負(fù)擔(dān);其次修改操作是在MRAM中完成,而不是在硬盤或NAND中完成,在MRAM中操作要比在硬盤或NAND中快得多,整個(gè)系統(tǒng)的性能會(huì)因此提升。另外減少了對(duì)NAND的寫入,延長(zhǎng)了系統(tǒng)壽命。
[0017]但這種方法也存在不足之處,每個(gè)存儲(chǔ)區(qū)的總塊數(shù)是固定的,缺乏靈活性。
【發(fā)明內(nèi)容】
[0018]有鑒于現(xiàn)有技術(shù)的上述缺陷,本發(fā)明所要解決的技術(shù)問題是提供一種使用非易失隨機(jī)讀寫存儲(chǔ)芯片動(dòng)態(tài)管理文件存儲(chǔ)區(qū)的方法,當(dāng)一個(gè)子存儲(chǔ)區(qū)的存儲(chǔ)塊用完或空閑存儲(chǔ)塊的數(shù)量少于設(shè)定值時(shí),征用相鄰的子存儲(chǔ)區(qū)的存儲(chǔ)空間,根據(jù)應(yīng)用環(huán)境能夠動(dòng)態(tài)調(diào)整子存儲(chǔ)區(qū)中存儲(chǔ)塊的數(shù)量,從而能夠提高存儲(chǔ)空間的利用率。
[0019]本發(fā)明提供一種使用非易失隨機(jī)讀寫存儲(chǔ)芯片動(dòng)態(tài)管理文件存儲(chǔ)區(qū)的方法,非易失隨機(jī)讀寫存儲(chǔ)芯片包括文件存儲(chǔ)區(qū)、文件目錄區(qū)以及管理區(qū),文件存儲(chǔ)區(qū)由N個(gè)地址連續(xù)并且相連接的子存儲(chǔ)區(qū)組成,每個(gè)子存儲(chǔ)區(qū)由相同大小的存儲(chǔ)塊組成,文件目錄區(qū)記錄每個(gè)文件對(duì)應(yīng)的子存儲(chǔ)區(qū)以及子存儲(chǔ)區(qū)中的存儲(chǔ)塊信息,管理區(qū)存儲(chǔ)子存儲(chǔ)區(qū)的信息;第i+1個(gè)子存儲(chǔ)區(qū)與第i個(gè)子存儲(chǔ)區(qū)的存儲(chǔ)塊的容量的比為不等于I的整數(shù)比,其中i為子存儲(chǔ)區(qū)序號(hào),I < i SN,動(dòng)態(tài)管理文件存儲(chǔ)區(qū)的方法包括以下步驟:
[0020](I)第i個(gè)子存儲(chǔ)區(qū)需要?jiǎng)討B(tài)調(diào)整時(shí),征用第i+Ι個(gè)子存儲(chǔ)區(qū)中與第i個(gè)子存儲(chǔ)區(qū)相鄰的連續(xù)多個(gè)存儲(chǔ)塊,條件是第i+Ι個(gè)子存儲(chǔ)區(qū)存在,或者征用第1-Ι個(gè)子存儲(chǔ)區(qū)中與第i個(gè)子存儲(chǔ)區(qū)相鄰的連續(xù)多個(gè)存儲(chǔ)塊,條件是第1-Ι個(gè)子存儲(chǔ)區(qū)存在;
[0021](2)當(dāng)征用第i+Ι個(gè)子存儲(chǔ)區(qū)中的存儲(chǔ)塊時(shí),如果第i+Ι個(gè)子存儲(chǔ)區(qū)與第i個(gè)子存儲(chǔ)區(qū)的存儲(chǔ)塊的容量的比為m: η,其中m、n為整數(shù),m在η,檢查m*k個(gè)存儲(chǔ)塊中的每一個(gè)存儲(chǔ)塊,其中k為整數(shù),如果存儲(chǔ)塊中已存儲(chǔ)數(shù)據(jù),將數(shù)據(jù)移至第i+Ι個(gè)子存儲(chǔ)區(qū)中m*k個(gè)存儲(chǔ)塊之外的空閑存儲(chǔ)塊中;同時(shí)更新文件目錄區(qū)中的相應(yīng)文件對(duì)應(yīng)的子存儲(chǔ)區(qū)以及子存儲(chǔ)區(qū)中的存儲(chǔ)塊信息;更新管理區(qū)中相應(yīng)的子存儲(chǔ)區(qū)的信息,第i+Ι個(gè)子存儲(chǔ)區(qū)的m*k個(gè)存儲(chǔ)塊,作為第i個(gè)子存儲(chǔ)區(qū)中的n*k個(gè)存儲(chǔ)塊使用;
[0022](3)當(dāng)征用第1-Ι個(gè)子存儲(chǔ)區(qū)中的存儲(chǔ)塊時(shí),如果第1-Ι個(gè)子存儲(chǔ)區(qū)與第i個(gè)子存儲(chǔ)區(qū)的存儲(chǔ)塊的容量的比為g: h,其中g(shù)、h為整數(shù),g在h,檢查所述g* I個(gè)存儲(chǔ)塊中的每一個(gè)存儲(chǔ)塊,其中I為整數(shù),如果存儲(chǔ)塊中已存儲(chǔ)數(shù)據(jù),將數(shù)據(jù)移至所述第1-Ι個(gè)子存儲(chǔ)區(qū)中所述g*I個(gè)存儲(chǔ)塊之外的空閑存儲(chǔ)塊中;同時(shí)更新所述文件目錄區(qū)中的相應(yīng)文件對(duì)應(yīng)的子存儲(chǔ)區(qū)以及子存儲(chǔ)區(qū)中的存儲(chǔ)塊信息;更新所述管理區(qū)中相應(yīng)的子存儲(chǔ)區(qū)的信息,所述第1-Ι個(gè)子存儲(chǔ)區(qū)的所述g* I個(gè)存儲(chǔ)塊,作為所述第i個(gè)子存儲(chǔ)區(qū)中的h* I個(gè)存儲(chǔ)塊使用。
[0023]動(dòng)態(tài)調(diào)整子存儲(chǔ)區(qū)的存儲(chǔ)塊的數(shù)量,可以靈活地調(diào)整各個(gè)子存儲(chǔ)區(qū)的空間,使得在任何應(yīng)用環(huán)境下,都可以得到最優(yōu)的配置,提高存儲(chǔ)效率。
[0024]進(jìn)一步地,步驟(2)檢查m*k個(gè)存儲(chǔ)塊中的每一個(gè)存儲(chǔ)塊,如果存儲(chǔ)塊中已存儲(chǔ)數(shù)據(jù),將數(shù)據(jù)移至第i + Ι個(gè)子存儲(chǔ)區(qū)中m*k個(gè)存儲(chǔ)塊之外的空閑存儲(chǔ)塊中的方法包括以下步驟:
[0025](21)等待存儲(chǔ)塊中的數(shù)據(jù)對(duì)應(yīng)的文件讀寫操作完成后,鎖定文件;
[0026](22)將存儲(chǔ)塊中的數(shù)據(jù)拷貝到第i +1個(gè)子存儲(chǔ)區(qū)中m*k存儲(chǔ)塊之外的一個(gè)空閑存儲(chǔ)塊中;
[0027](23)更新文件目錄區(qū)中文件對(duì)應(yīng)的子存儲(chǔ)區(qū)以