在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 對ROMFS文件系統(tǒng)的分析和改進

            對ROMFS文件系統(tǒng)的分析和改進

            作者: 時間:2012-03-26 來源:網(wǎng)絡 收藏

            romfs_read_super()用來讀取的首部,并利用該首部初始化一個超級塊對象作為相應的超級塊,具體流程如下

            1 初始化超級塊。

            A 設置一次讀取的塊大小并初始化超級塊對象某些域。

            B 從指定中讀取第0塊到一個緩沖區(qū)。bh=sb_bread(s, 0),其中s是的超級塊對象。ROMFS的結構被保存到緩沖區(qū)bh中。

            C 取出ROMFS的文件系統(tǒng)結構,rsb = (struct romfs_super_block *)bh->b_data,rsb是一個romfs_super_block結構,用以保存該ROMFS的文件系統(tǒng)結構的數(shù)據(jù)。然后對該數(shù)據(jù)進行檢驗,確定其文件系統(tǒng)類型,檢驗和,文件系統(tǒng)大小。

            D 繼續(xù)初始化超級塊對象某些域,比較重要的是s_magic = ROMFS_MAGIC和s_flags |= MS_RDONLY,分別表明了該超級塊的magic簽名和s_flags參數(shù),此處它們分別表示該文件系統(tǒng)類型為romfs,并且是只讀文件系統(tǒng)。

            2 給超級塊對象的操作表賦值(s->s_op = romfs_ops)

            3 為根目錄分配目錄項 s->s_root = d_alloc_root(iget(s,sz), sz為文件系統(tǒng)開始偏移。

            超級塊操作表中romfs文件系統(tǒng)實現(xiàn)了兩個函數(shù)

            static struct super_operations romfs_ops = {

            read_inode: romfs_read_inode,

            statfs: romfs_statfs,};

            函數(shù)romfs_read_inode是從ROMFS中讀取一個inode索引節(jié)點對象并進行一些初始化工作,具體流程如下:

            1 根據(jù)inode參數(shù)尋找對應的索引節(jié)點。

            2 初始化索引節(jié)點某些域

            3 根據(jù)該inode對應的文件的訪問權限和類別來設置索引節(jié)點的相應操作表

            A 如果是目錄文件則將索引節(jié)點操作表設為i_>i_op=romfs_dir_inode_operations;文件操作表設置為i->i_fop=romfs_dir_operations。

            B 如果是常規(guī)文件,則將文件操作表設置為i->i_fop=generic_ro_fops;將頁高訴緩存表設置為i-> i_data.a_ops=romfs_aops;由于romfs是只讀文件系統(tǒng),它在對常規(guī)文件操作時不需要索引節(jié)點操作,如 mknod,link等,因此不用設置索引節(jié)點操作表。

            對常規(guī)文件的操作也只需要使用內(nèi)核提供的通用函數(shù)表generic_ro_fops ,它包含基本的三種常規(guī)文件操作:

            llseek: generic_file_llseek,

            read: generic_file_read,

            mmap: generic_file_mmap,

            這幾種函數(shù)是塊設備讀取的通用函數(shù),它們可以實現(xiàn)對ROMFS中常規(guī)文件的讀取,尋址等操作。

            C 如果是符號鏈接文件,則將索引節(jié)點操作表設置為
             i->i_op = page_symlink_inode_operation;
            page_symlink_inode_operations是通用的符號鏈接操作表。同時還需要實現(xiàn)頁高速緩
            存操作,因此將頁高訴緩存表設置為i->i_data.a_ops=romfs_aops。

            D 如果是套接字或管道則進行特殊文件初始化操作init_special_inode(I,ino,nextfh);

            函數(shù)romfs_statfs用于提取一些ROMFS的基本信息,包括文件系統(tǒng)大小,卷名等。相對而言非常簡單。

            5.對ROMFS的改進

            5.1 改進思路

            ROMFS有緊湊,小巧等優(yōu)點,但是也存在一些明顯的不足。作為一個只讀的文件系統(tǒng),ROMFS的中文件最大只能達到256M。因此難以在 ROMFS中保存較大的文件。在實際工作中我們常常會碰到超過256M的大文件,因此本人對ROMFS做了一些改進,使它能夠容納超過256M的文件。

            ROMFS中限制文件大小的原因在于ROMFS的文件結構。ROMFS采用連續(xù)存放數(shù)據(jù)的策略,每個文件都必須放在連續(xù)空間內(nèi),故文件尋址只能是一級尋址,不能通過增減數(shù)據(jù)塊來改變文件大小。雖然ROMFS使用32位地址進行文件的尋址操作,但該32位地址的后4位留做它用,因此ROMFS實際用于文件尋址的地址只有28位,這就造成ROMFS的任意兩個文件頭之間地址相差不能超過256M,這就是ROMFS中文件大小不能超過256M的原因。



            評論


            相關推薦

            技術專區(qū)

            關閉