国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法

      文檔序號:6575744閱讀:214來源:國知局
      專利名稱:嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及嵌入式文件系統(tǒng)領(lǐng)域,特別是涉及一種嵌入式Linux下大容量閃 存文件系統(tǒng)的實現(xiàn)方法。
      背景技術(shù)
      嵌入式Linux是按照嵌入式操作系統(tǒng)要求設(shè)計的一種小型操作系統(tǒng)。由一 個Kernel (內(nèi)核)和一些根據(jù)需求進行定制的系統(tǒng)模塊組成[6]。其Kernel很小, 一般只有幾百KB左右的大小。即使加上其它必要的模塊和應用程序,所占的存 儲空間也很小。
      嵌入式Linux操作系統(tǒng)的主要特點有精簡標準的Linux內(nèi)核,適應于多種 CPU和硬件平臺,性能穩(wěn)定,裁減性很好,開發(fā)使用容易,還可以使用Unix或 Linux上的應用程序?,F(xiàn)在,嵌入式Linux也可以Windows下的多媒體應用。嵌 入式Linux操作系統(tǒng)具有高度的靈活性,開發(fā)者可以很容易地對它進行定制或 作適當開發(fā),來滿足實際應用需要。
      在嵌入式Linux下, 一個管理操作系統(tǒng)和用戶數(shù)據(jù)的有效方法就是使用文件 系統(tǒng)。嵌入式Linux支持的文件系統(tǒng)類型多樣,可以根據(jù)系統(tǒng)存儲器介質(zhì)類型和 系統(tǒng)應用目的進行選擇。
      為了提供對各種類型文件系統(tǒng)的有效支持,嵌入式Linux提供了一個虛擬文 件系統(tǒng)層,抽象了用戶的文件讀寫操作,對于用戶來說,所有的文件系統(tǒng)系統(tǒng) 調(diào)用都有統(tǒng)一的接口,具體實現(xiàn)細節(jié)都被隱藏到虛擬文件系統(tǒng)對具體文件系統(tǒng) 的調(diào)用中。該虛擬文件系統(tǒng)層方便了嵌入式Linux的移植。
      隨著Nand閃存制造工藝的不斷改進以及制造成本的不斷下降,Nand閃存 已取代其他非易失存儲器成為移動存儲市場的主流存儲介質(zhì),前景無限。這幾 年,國內(nèi)外計算機科學界不少科研機構(gòu)開始或強加對Nand閃存管理技術(shù)的研究。 研究方向大致可分為以下幾個
      1、 Nand閃存塊映射技術(shù)使用一個中間層驅(qū)動,將Nand閃存模擬成一個 傳統(tǒng)可隨意讀寫的塊設(shè)備,并使用傳統(tǒng)的磁盤文件系統(tǒng)進行管理。美國人Ban 于1995年和1997年分別提出的FTL技術(shù)以及NFTL技術(shù)是這種技術(shù)的前驅(qū)。 當前的研究熱點包括Nand閃存中大量數(shù)據(jù)存忙的熱點發(fā)現(xiàn)和處理、可伸縮塊 映射技術(shù)等;2、 Nand閃存上的應用相關(guān)復雜數(shù)據(jù)的實現(xiàn)研究。如在Nand閃存上實現(xiàn)B-樹或者R-樹、移動通信以及傳感網(wǎng)絡(luò)上的Nand閃存應用等等。
      其他方面的研究還包括Nand閃存啟動XIP技術(shù)以及閃存實時性研究。
      3、 Nand閃存專用文件系統(tǒng)研究。 一個Nand閃存文件系統(tǒng)必須充分考慮 Nand閃存的物理特性,在有效存儲的基礎(chǔ)上,管理好Nand閃存的使用壽命。 關(guān)于Nand閃存文件系統(tǒng)研究的領(lǐng)域較多包括文件系統(tǒng)快速初始化、文件系統(tǒng) 日志化管理、系統(tǒng)崩潰恢復、垃圾收集與頁面分配技術(shù)等等。
      目前的Nand閃存文件系統(tǒng)的研究把重點放在如果充分挖掘Nand閃存的存 儲特性,通過合理設(shè)計文件系統(tǒng)支持擦寫平衡、保證Nand閃存的使用壽命、提 升訪問性能,但對于大容量Nand閃存以及文件系統(tǒng)缺乏充分考量,特別是對大 文件的隨機訪問缺乏有效的支持。
      大容量閃存存儲器的典型特點就是存儲器內(nèi)的頁面數(shù)較普通閃存相比有大 幅提高。因此,設(shè)計大容量閃存文件系統(tǒng)除了考慮像設(shè)計普通閃存文件系統(tǒng)的 問題外,還需要考慮和解決由于閃存容量增大所帶來的新問題,如隨之而來 的文件系統(tǒng)初始化時間變長、大量頁面管理方法、頁分配算法、大尺寸文件的 存儲和訪問等。本發(fā)明中的閃存即是指大容量的Nand閃存。ssss

      發(fā)明內(nèi)容
      本發(fā)明的目的在于提供一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法。
      本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下
      一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法,該方法的步驟如下
      1) 區(qū)段化存儲
      存儲點都是以區(qū)段的方式組織的,文件數(shù)據(jù)存放在一段連續(xù)的頁中,數(shù)據(jù)
      的添加和刪除也以段為單位進行;區(qū)段是能伸縮的,并且具有添加、刪除、合 并、分割;所有的段存放在一個B-樹中;
      2) 數(shù)據(jù)頁分配
      在分配空白頁面時,將目錄的頁面和數(shù)據(jù)頁面分開放在不同的塊中,這樣
      避免了"全部拷貝",從而降低了頁面的拷貝次數(shù),提高了效率;
      每種類型的塊有且僅有一個塊處于"當前分配"狀態(tài)。新頁面從當前進行分配 的塊中順序進行分配,若當前塊已滿,則順序?qū)ふ蚁乱粋€空閑塊;
      3) 垃圾收集
      對于臟數(shù)據(jù),使用多種已有的回收方法混合的算法來進行垃圾回收,將貪
      6心方法和隨機選擇方法按比例混合使用當滿足特定的小概率條件時,該特定 的小概率條件在具體實現(xiàn)時根據(jù)不同的應用環(huán)境設(shè)定,垃圾回收器會試圖用隨 機選擇方法一個可回收的頁面;而在其他情況下,則使用貪心方法回收最"臟" 的塊;
      4) 分區(qū)邏輯結(jié)構(gòu)
      在分區(qū)的第一個區(qū)段表示閃存塊存放文件系統(tǒng)的索引節(jié)點段,塊中頁面存 放的數(shù)據(jù)表示的是分區(qū)中的一些塊的塊號;這些塊存放著存儲對象頭元素信息, 每個存儲對象頭元素分配一個頁面;這個段從分區(qū)開始處分配,并固定的長度。 具體長度看根據(jù)分區(qū)的大小設(shè)定;最后一部分是數(shù)據(jù)段,它包括有效的數(shù)據(jù)頁 面、臟數(shù)據(jù)頁面以及空白頁面;
      5) 文件系統(tǒng)初始化
      1、 首先要初始化文件系統(tǒng)相關(guān)變量;
      2、 初始化Nand閃存,并建立內(nèi)存設(shè)備對象進行管理。
      3、 掃描Nand閃存分區(qū),從分區(qū)開始的索引節(jié)點段中依次讀取每一個存有 文件和目錄索引節(jié)點的塊;
      4、 利用頭對象頁面建立對象的初始化信息;
      6) 目錄査找
      從根目錄或者當前目錄出發(fā)逐層分析文件名,直到最終找到該文件;
      7) 文件位移定位
      位移定位是一個從根節(jié)點出發(fā),最終找到一個葉子結(jié)點過程,首先獲得參 數(shù)并進行完整性檢查;如果合格,則從根節(jié)點出發(fā),根據(jù)給定的位移找到對應 的子節(jié)點,如果該子節(jié)點以及以前的子節(jié)點所有的字節(jié)數(shù)不足文件位移,則需 要尋找下一個子節(jié)點,直到找到對應子節(jié)點;在確定子節(jié)點后再從子節(jié)點的樹 葉節(jié)點中依次査找,直到找到對應的區(qū)段,并確定區(qū)段內(nèi)的本地位移,并返回; 若不存在下一個子節(jié)點或?qū)娜~子節(jié)點,并確定在該葉子節(jié)點所確定的區(qū)段 上的位移;
      8) 數(shù)據(jù)讀取
      從HNFS文件系統(tǒng)讀取數(shù)據(jù)的流程
      1、 首先獲得讀取的偏移量以及讀取的字節(jié)數(shù);
      2、 確定區(qū)段以及段內(nèi)位移;
      3、 開始讀取循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要讀取;
      4、 從本區(qū)段開始順序讀取每個頁將數(shù)據(jù)拷貝到buffer中,同時修改buffer指針偏移以及剩余數(shù)據(jù)量及讀取偏移;
      5、 讀取一個頁面,首先在系統(tǒng)頁緩存中査看是否有對應的緩存,如果沒有, 則從Nand閃存上讀入頁緩存;
      6、 如果某個區(qū)段數(shù)據(jù)讀完了,則選擇下一個緊鄰的區(qū)段讀取,直到讀取足 夠的字節(jié)數(shù),如果文件沒有足夠的字節(jié)數(shù);
      7、 完成后返回buffer以及共讀取的字節(jié)數(shù); 9)數(shù)據(jù)寫入
      向HNFS文件系統(tǒng)寫入數(shù)據(jù)的流程
      1、 首先獲得文件偏移量以及寫入的字節(jié)數(shù);
      2、 確定區(qū)段以及段內(nèi)位移;
      3、 開始寫入循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要寫入;
      4、 先讀取一個頁面,首先在系統(tǒng)頁緩存中查看是否有對應的緩存,如果沒 有,則從Nand閃存上讀入頁緩存;
      5、 從buffer中將數(shù)據(jù)順序拷貝到本區(qū)段內(nèi)部位移開始處,同時修改buffer 指針偏移以及剩余數(shù)據(jù)量及讀取偏移;
      6、 如果采取寫直達法,則直接選擇一個空閑頁面將緩存頁面寫入,寫入成 功后相應修改對象頭的對應存儲區(qū)段。如果在寫過程中出現(xiàn)錯誤,則報錯;
      7、 寫入的數(shù)據(jù)還沒有寫完,則順序確定下一個緊鄰的區(qū)段寫入,直至全部 寫完。系統(tǒng)空閑頁面不夠時調(diào)用垃圾收集器回收系統(tǒng)中的臟頁面;
      8、 完成后返回寫入的字節(jié)數(shù)。 本發(fā)明與背景技術(shù)相比,具有的有益的效果是-
      本發(fā)明是一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法,其主要功能 針對大容量Nand閃存的存儲特性,提出了數(shù)據(jù)區(qū)段化存貯的思想,和實現(xiàn)大容 量Nand閃存文件系統(tǒng)的方法,并詳細描述了大容量Nand閃存文件系統(tǒng)HNFS 的系統(tǒng)初始化、目錄査找、位移定位以及數(shù)據(jù)讀寫等的過程。本方法實現(xiàn)了在 嵌入式Linux下大容量Nand閃存文件系統(tǒng),有利于嵌入式Linux下大容量Nand 閃存的管理。
      (1) 高效性。本方法實現(xiàn)了在嵌入式Linux下大容量Nand閃存文件系統(tǒng), 能夠高效的對大容量Nand閃存進行管理。
      (2) 實用性。對大容量Nand閃存的文件系統(tǒng)的實現(xiàn),有利于對嵌入式存 儲的利用。


      圖1是本發(fā)明的實施過程示意圖; 圖2是本發(fā)明的文件系統(tǒng)初始化流程圖; 圖3是本發(fā)明的文件系統(tǒng)文件位移定位流程圖; 圖4是本發(fā)明的文件系統(tǒng)數(shù)據(jù)讀取流程圖; 圖5是本發(fā)明的文件系統(tǒng)數(shù)據(jù)寫入流程圖。
      具體實施例方式
      本發(fā)明是一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法,下面結(jié)合圖 1說明其具體實施過程。 l)區(qū)段化存儲
      大容量Nand閃存的最大特點就是數(shù)據(jù)頁多,存儲容量大。因此在進行存儲 設(shè)計時,需要設(shè)計支持大尺寸文件的存儲以及訪問,同時考慮文件系統(tǒng)中小文 件比較多的情況。而存儲空間節(jié)約和文件壓縮并不是主要的存儲目標。
      區(qū)段化存儲管理不同于經(jīng)常見之于磁盤文件系統(tǒng)的塊,區(qū)段化存儲管理所 有的存儲點都是以區(qū)段的方式組織的,文件數(shù)據(jù)盡可能的存放在一段連續(xù)的頁 中,數(shù)據(jù)的添加和刪除也以段為單位進行;區(qū)段是可伸縮的,并且具有添加、 刪除、合并、分割功能。所有的段存放在一個B-樹中。對于頻繁修改的小文件, 進行數(shù)據(jù)寫入時只需要相應更新對象頭元素和數(shù)據(jù)頁即可。對于高頻率隨機讀 取的大文件和超大文件,區(qū)段管理可以以相較YAFFS等文件系統(tǒng)更快的速度進 行位移計算。區(qū)段化管理可以有效滿足上文中提到的文件系統(tǒng)使用特性,減少 間接索引帶來的額外損耗、提高隨機訪問速度。
      在本發(fā)明中,文件、硬鏈接和目錄被抽象成儲存對象,每個對象有一個對 象頭,存放對象的控制、訪問等方面的信息,每個對象頭專門分配一個對象頭 頁面。按照本發(fā)明方法所實現(xiàn)的文件系統(tǒng)稱為大容量Nand閃存文件系統(tǒng)HNFS, 以下簡稱HNFS。
      目錄比文件有更高的訪問頻率。如果將對象頭放在單獨的一頁中,對象頭 的更新頻率較高,那么該頁面可以多次使用,存放存儲對象元素的多個版本, 既有利于降低Nand閃存的損耗,也便于從可能的系統(tǒng)崩潰中恢復。而如果將2 個或更多的對象頭元素共享一個頁面,那么任一個文件的修改必然導致頭元素 頁面的修改,這樣該頁面的更新頻率就太高了,違背了節(jié)省空間,降低Nand閃 存損耗的初衷;如果將數(shù)據(jù)和頭元素放在一個頁面中,由于通常目錄和普通文 件數(shù)據(jù)的訪問頻率差別較大,這也帶來數(shù)據(jù)經(jīng)常無故轉(zhuǎn)移,頁面更新較快的問 題。根據(jù)Nand閃存的存儲特性,同時提高文件系統(tǒng)的裝載速度。在閃存分區(qū)的開始出預先留出若干個塊,用作文件索引節(jié)點塊索引。裝載大容量閃存文件系統(tǒng)時,從這些頁面中讀出索引節(jié)點塊的位置,再從索引節(jié)點塊中讀取索引節(jié)點信息,從而在內(nèi)存中構(gòu)建整個文件系統(tǒng)。
      2) 數(shù)據(jù)頁分配
      和磁盤不同,Nand閃存不存在尋軌延遲,因此讀取數(shù)據(jù)時具有更高的訪問速度。但是由于Nand閃存只能向空白頁面寫入數(shù)據(jù),因此寫入速度和空白頁面分配方法、存儲空間狀況以及垃圾收集器性能與文件系統(tǒng)的整體性能密切相關(guān)。分配方法如下在某個塊內(nèi),空白頁是按照遞增的順序分配的, 一個塊內(nèi)的頁面分配完了之后,再另外選擇一個空白塊參與分配。另外,還要為垃圾收集保留2—3個塊,用于"全部拷貝"。當系統(tǒng)中沒有空白頁面時,選擇一個臟塊擦寫成為空白塊使用。
      從文件系統(tǒng)的角度來看,存儲系統(tǒng)元數(shù)據(jù)的頁面如目錄頁面就比普通數(shù)據(jù)面有更高的更新率。因此,在分配空白頁面時,將目錄的頁面和數(shù)據(jù)頁面分開放在不同的塊(Block)中,這樣避免了"全部拷貝"(Full copy),從而降低了頁面的拷貝次數(shù),提髙了效率。在本發(fā)明中,每種類型的塊有且僅有一個塊處于"當前分配"狀態(tài)。新頁面從當前進行分配的塊中順序進行分配,若當前塊已滿,則順序?qū)ふ蚁乱粋€空閑塊。
      3) 垃圾收集
      當存儲空間中空白頁面低于一預定值是時,需要使用垃圾收集器回收葬數(shù)據(jù)頁面,歸還給系統(tǒng)。
      對于臟數(shù)據(jù),使用多種已有的回收方法混合的算法來進行垃圾回收,將貪心方法和隨機選擇方法按一定比例混合使用當滿足特定的小概率條件時(該特定的小概率條件在具體實現(xiàn)時根據(jù)不同的應用環(huán)境設(shè)定),垃圾回收器會試圖用隨機選擇方法一個可回收的頁面;而在其他情況下,則使用貪心方法回收最"臟"的塊。
      在回收臟數(shù)據(jù)塊時,對待不同類型的臟數(shù)據(jù)塊也采用不同的方法。如果回收的臟塊用于存放目錄,那么就將塊中的有效頁面拷貝到其他存放目錄的塊中去,如果回收的臟塊存放的是普通文件數(shù)據(jù),那么就將塊中的有效頁面拷貝到其他存放普通文件數(shù)據(jù)的塊中去。
      4) 分區(qū)邏輯結(jié)構(gòu)
      在分區(qū)的第一個區(qū)段表示閃存塊存放文件系統(tǒng)的索引節(jié)點段(Inode-Stored
      10Block of Segment),塊中頁面存放的數(shù)據(jù)表示的是分區(qū)中的一些塊的塊號。這些塊存放著存儲對象頭元素信息,每個存儲對象頭元素分配一個頁面。這個段從分區(qū)開始處分配,并固定的長度。具體長度看根據(jù)分區(qū)的大小設(shè)定。最后一部分是數(shù)據(jù)段,它包括有效的數(shù)據(jù)頁面、臟數(shù)據(jù)頁面以及空白頁面。
      在系統(tǒng)初始化時,通過索引節(jié)點段中讀取頭頁面信息,完成文件系統(tǒng)加載。
      5) 文件系統(tǒng)初始化文件系統(tǒng)初始化過程,如圖2所示
      1、 首先要初始化文件系統(tǒng)相關(guān)變量,如superb、目錄樹、對象緩存等等。
      2、 初始化Nand閃存,并建立內(nèi)存設(shè)備對象進行管理。
      3、 掃描Nand閃存分區(qū),從分區(qū)開始的索引節(jié)點段中依次讀取每一個存有文件和目錄索引節(jié)點的塊,在塊的每個頁中再讀出存有頭頁面塊的塊號,每一個塊號指向分區(qū)中的一些塊,以兩個字節(jié)的無符號16位二進制數(shù)表示。這些數(shù)據(jù)塊中的每個頁面存放著目錄和文件對象的頭信息。
      4、 利用頭對象頁面建立對象的初始化信息,這包括訪問控制信息、狀態(tài)信息以及存儲信息。每個存儲對象通過一個類B-樹的結(jié)構(gòu)管理存儲。每個對象還會被加入目錄樹中。
      隨著索引節(jié)點的不斷讀入,文件系統(tǒng)逐漸的被初始化。在HNFS中,目錄下的所有子對象通過指針連接在一起,而文件數(shù)據(jù)通過B-樹進行管理。最后建立一個從根目錄為根節(jié)點到系統(tǒng)中到每個文件為葉子節(jié)點的搜索樹。
      6) 目錄查找
      一個Linux文件名的路徑,是一系列由"/"分開的目錄名組成,最后以文件的名字結(jié)束。例如一個文件名是/home/ruby/.cshrc,在這里/home及/ruby是目錄名字,文件的名字是.cshrc。象所有的其他的Unix系統(tǒng)一樣,Linux并不特別著重對文件名的格式本身。它支持的最大長度是1024個字符,由可打印的字符組成。為了找到某個文件對應的內(nèi)存對象,本發(fā)明方法所實現(xiàn)的文件系統(tǒng)必須從根目錄或者當前目錄出發(fā)逐層分析文件名,直到最終找到該文件。
      需要的第一個對象是文件系統(tǒng)根(root)的對象??梢栽谖募到y(tǒng)的超級塊中得到它的值。為了讀取一個HNFS對象,必須在它的父目錄的鏈表中找到它。例如對于ruby,必須先找到home,然后再從home的子對象鏈表中找到ruby 。
      home只是7"中子對象鏈表中的一個。從其在"/"中的入口項,可以獲得該對象的指針。必須通過這個目錄對象(首先獲取指向該對象的指針,然后從該對象的子對象鏈表中獲取指向的ruby的指針)來發(fā)現(xiàn)ruby。從得到的數(shù)據(jù)中,得至U/home/ruby目錄內(nèi)存對象的號碼的入口。最后讀入指向描述目錄/home/ruby的內(nèi)存對象數(shù)據(jù)。并從其指向的數(shù)據(jù)塊中發(fā)現(xiàn).csshrc的內(nèi)存對象數(shù)值。從該內(nèi)存對象中,可以定位包含該文件數(shù)據(jù)的數(shù)據(jù)塊。
      7) 文件位移定位
      在HNFS中,文件位移定位的目的就是根據(jù)用戶給定位移,確定數(shù)據(jù)的存儲數(shù)據(jù)段以及在數(shù)據(jù)段中的位移。
      如前所述,在HNFS中,內(nèi)存文件數(shù)據(jù)是以B-樹的結(jié)構(gòu)組織的。B-樹中的樹支節(jié)點存儲指向葉子節(jié)點的指針以及該節(jié)點存儲的字節(jié)數(shù)。而每個葉子節(jié)點存放一個指向存儲區(qū)段的指針,以及該區(qū)段中存放的字節(jié)數(shù)。B-樹在文件系統(tǒng)初始化時建立。
      如圖3所示,位移定位是一個從根節(jié)點出發(fā),最終找到一個葉子結(jié)點過程。首先獲得參數(shù)并進行完整性檢査。如果合格,則從根節(jié)點出發(fā),根據(jù)給定的位移找到對應的子節(jié)點,如果該子節(jié)點以及以前的子節(jié)點所有的字節(jié)數(shù)不足文件位移,則需要尋找下一個子節(jié)點,直到找到對應子節(jié)點。在確定子節(jié)點后再從子節(jié)點的樹葉節(jié)點中依次査找,直到找到對應的區(qū)段,并確定區(qū)段內(nèi)的本地位移,并返回。若不存在下一個子節(jié)點或?qū)娜~子節(jié)點,并確定在該葉子節(jié)點所確定的區(qū)段上的位移。
      8) 數(shù)據(jù)讀取
      從HNFS文件系統(tǒng)讀取數(shù)據(jù)的流程如圖4所示
      1、 首先獲得讀取的偏移量以及讀取的字節(jié)數(shù);
      2、 確定區(qū)段以及段內(nèi)位移;
      3、 開始讀取循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要讀??;
      4、 從本區(qū)段開始順序讀取每個頁將數(shù)據(jù)拷貝到buffer中,同時修改buffer指針偏移以及剩余數(shù)據(jù)量及讀取偏移;
      5、 讀取一個頁面,首先在系統(tǒng)頁緩存中查看是否有對應的緩存,如果沒有,則從Nand閃存上讀入頁緩存;
      6、 如果某個區(qū)段數(shù)據(jù)讀完了,則選擇下一個緊鄰的區(qū)段讀取,直到讀取足夠的字節(jié)數(shù),如果文件沒有足夠的字節(jié)數(shù);
      7、 完成后返回buffer以及共讀取的字節(jié)數(shù)。
      9) 數(shù)據(jù)寫入
      向HNFS文件系統(tǒng)寫入數(shù)據(jù)的流程如圖5所示1、首先獲得文件偏移量以及寫入的字節(jié)數(shù);2、 確定區(qū)段以及段內(nèi)位移;
      3、 開始寫入循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要寫入;
      4、 先讀取一個頁面,首先在系統(tǒng)頁緩存中查看是否有對應的緩存,如果沒有,則從Nand閃存上讀入頁緩存;
      5、 從buffer中將數(shù)據(jù)順序拷貝到本區(qū)段內(nèi)部位移開始處,同時修改buffer指針偏移以及剩余數(shù)據(jù)量及讀取偏移;
      6、 如果采取寫直達法,則直接選擇一個空閑頁面將緩存頁面寫入,寫入成功后相應修改對象頭的對應存儲區(qū)段。如果在寫過程中出現(xiàn)錯誤,則報錯。
      7、 寫入的數(shù)據(jù)還沒有寫完,則順序確定下一個緊鄰的區(qū)段寫入,直至全部寫完。系統(tǒng)空閑頁面不夠時調(diào)用垃圾收集器回收系統(tǒng)中的臟頁面;
      8、 完成后返回寫入的字節(jié)數(shù)。
      1權(quán)利要求
      1. 一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法,其特征在于該方法的步驟如下1)區(qū)段化存儲存儲點都是以區(qū)段的方式組織的,文件數(shù)據(jù)存放在一段連續(xù)的頁中,數(shù)據(jù)的添加和刪除也以段為單位進行;區(qū)段是能伸縮的,并且具有添加、刪除、合并、分割;所有的段存放在一個B-樹中;2)數(shù)據(jù)頁分配在分配空白頁面時,將目錄的頁面和數(shù)據(jù)頁面分開放在不同的塊中,這樣避免了“全部拷貝”,從而降低了頁面的拷貝次數(shù),提高了效率;每種類型的塊有且僅有一個塊處于“當前分配”狀態(tài)。新頁面從當前進行分配的塊中順序進行分配,若當前塊已滿,則順序?qū)ふ蚁乱粋€空閑塊;3)垃圾收集對于臟數(shù)據(jù),使用多種已有的回收方法混合的算法來進行垃圾回收,將貪心方法和隨機選擇方法按比例混合使用當滿足特定的小概率條件時,該特定的小概率條件在具體實現(xiàn)時根據(jù)不同的應用環(huán)境設(shè)定,垃圾回收器會試圖用隨機選擇方法一個可回收的頁面;而在其他情況下,則使用貪心方法回收最“臟”的塊;4)分區(qū)邏輯結(jié)構(gòu)在分區(qū)的第一個區(qū)段表示閃存塊存放文件系統(tǒng)的索引節(jié)點段,塊中頁面存放的數(shù)據(jù)表示的是分區(qū)中的一些塊的塊號;這些塊存放著存儲對象頭元素信息,每個存儲對象頭元素分配一個頁面;這個段從分區(qū)開始處分配,并固定的長度。具體長度看根據(jù)分區(qū)的大小設(shè)定;最后一部分是數(shù)據(jù)段,它包括有效的數(shù)據(jù)頁面、臟數(shù)據(jù)頁面以及空白頁面;5)文件系統(tǒng)初始化1、首先要初始化文件系統(tǒng)相關(guān)變量;2、初始化Nand閃存,并建立內(nèi)存設(shè)備對象進行管理。3、掃描Nand閃存分區(qū),從分區(qū)開始的索引節(jié)點段中依次讀取每一個存有文件和目錄索引節(jié)點的塊;4、利用頭對象頁面建立對象的初始化信息;6)目錄查找從根目錄或者當前目錄出發(fā)逐層分析文件名,直到最終找到該文件;7)文件位移定位位移定位是一個從根節(jié)點出發(fā),最終找到一個葉子結(jié)點過程,首先獲得參數(shù)并進行完整性檢查;如果合格,則從根節(jié)點出發(fā),根據(jù)給定的位移找到對應的子節(jié)點,如果該子節(jié)點以及以前的子節(jié)點所有的字節(jié)數(shù)不足文件位移,則需要尋找下一個子節(jié)點,直到找到對應子節(jié)點;在確定子節(jié)點后再從子節(jié)點的樹葉節(jié)點中依次查找,直到找到對應的區(qū)段,并確定區(qū)段內(nèi)的本地位移,并返回;若不存在下一個子節(jié)點或?qū)娜~子節(jié)點,并確定在該葉子節(jié)點所確定的區(qū)段上的位移;8)數(shù)據(jù)讀取從HNFS文件系統(tǒng)讀取數(shù)據(jù)的流程1、首先獲得讀取的偏移量以及讀取的字節(jié)數(shù);2、確定區(qū)段以及段內(nèi)位移;3、開始讀取循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要讀??;4、從本區(qū)段開始順序讀取每個頁將數(shù)據(jù)拷貝到buffer中,同時修改buffer指針偏移以及剩余數(shù)據(jù)量及讀取偏移;5、讀取一個頁面,首先在系統(tǒng)頁緩存中查看是否有對應的緩存,如果沒有,則從Nand閃存上讀入頁緩存;6、如果某個區(qū)段數(shù)據(jù)讀完了,則選擇下一個緊鄰的區(qū)段讀取,直到讀取足夠的字節(jié)數(shù),如果文件沒有足夠的字節(jié)數(shù);7、完成后返回buffer以及共讀取的字節(jié)數(shù);9)數(shù)據(jù)寫入向HNFS文件系統(tǒng)寫入數(shù)據(jù)的流程1、首先獲得文件偏移量以及寫入的字節(jié)數(shù);2、確定區(qū)段以及段內(nèi)位移;3、開始寫入循環(huán),設(shè)置循環(huán)條件為還有數(shù)據(jù)需要寫入;4、先讀取一個頁面,首先在系統(tǒng)頁緩存中查看是否有對應的緩存,如果沒有,則從Nand閃存上讀入頁緩存;5、從buffer中將數(shù)據(jù)順序拷貝到本區(qū)段內(nèi)部位移開始處,同時修改buffer指針偏移以及剩余數(shù)據(jù)量及讀取偏移;6、如果采取寫直達法,則直接選擇一個空閑頁面將緩存頁面寫入,寫入成功后相應修改對象頭的對應存儲區(qū)段。如果在寫過程中出現(xiàn)錯誤,則報錯;7、寫入的數(shù)據(jù)還沒有寫完,則順序確定下一個緊鄰的區(qū)段寫入,直至全部寫完。系統(tǒng)空閑頁面不夠時調(diào)用垃圾收集器回收系統(tǒng)中的臟頁面;8、完成后返回寫入的字節(jié)數(shù)。
      全文摘要
      本發(fā)明公開了一種嵌入式Linux下大容量閃存文件系統(tǒng)的實現(xiàn)方法。該方法的步驟是區(qū)段化存儲,數(shù)據(jù)頁分配,垃圾收集,分區(qū)邏輯結(jié)構(gòu),文件系統(tǒng)初始化,目錄查找,文件位移定位,數(shù)據(jù)讀取和數(shù)據(jù)寫入。本發(fā)明實現(xiàn)了在嵌入式Linux下大容量Nand閃存文件系統(tǒng),有利于嵌入式Linux下大容量Nand閃存的管理。本發(fā)明實現(xiàn)的大容量Nand閃存的文件系統(tǒng),能夠應用于大容量Nand閃存的管理,有利于對嵌入式存儲的利用。
      文檔編號G06F17/30GK101488153SQ20091009612
      公開日2009年7月22日 申請日期2009年2月12日 優(yōu)先權(quán)日2009年2月12日
      發(fā)明者嚴力科, 吳斌斌, 施青松, 滿 曹, 超 王, 章鐵飛, 威 胡, 斌 謝, 陳天洲, 馬健良 申請人:浙江大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1