亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Linux下Ext2文件系統(tǒng)的精剪與優(yōu)化設計*

        2018-01-04 02:55:13,
        關鍵詞:空閑硬盤節(jié)點

        ,

        (1.文華學院,武漢 430086;2.湖北工業(yè)大學)

        Linux下Ext2文件系統(tǒng)的精剪與優(yōu)化設計*

        周俊杰1,柯躍2

        (1.文華學院,武漢 430086;2.湖北工業(yè)大學)

        基于Linux系統(tǒng)通過精細剪裁和優(yōu)化設計,構建開發(fā)了一個Linux多級用戶的Ext2二級文件系統(tǒng),以作GPS等專業(yè)嵌入式的文件系統(tǒng)。其系統(tǒng)包括各基本實體(索引節(jié)點、目錄節(jié)點、文件節(jié)點等)的定義和各功能模塊的定義及實現(xiàn),最后展示了系統(tǒng)部分功能模塊的測試數(shù)據(jù)。本文所構造的Linux文件系統(tǒng)已經(jīng)過測試并取得了良好效果。

        Linux;Ext2;文件系統(tǒng);優(yōu)化設計

        引 言

        Linux系統(tǒng)幾乎支持現(xiàn)在所有的主流文件系統(tǒng),這些文件系統(tǒng)都能掛載到Linux系統(tǒng)上,并對其進行操作。在此基礎上,Linux將對應的文件系統(tǒng)和其相應的一些操作封裝到一起,繼而進一步抽象產(chǎn)生了Linux中重要的文件系統(tǒng)機制,即VFS(虛擬文件系統(tǒng))[1]。而在所有的文件系統(tǒng)具體操作下一層又加入了一個緩沖區(qū),以提高不同文件系統(tǒng)間的讀寫操作速度。對于Linux系統(tǒng)來說,所有的設備都是文件,包括目錄。正是這種抽象,使得Linux的操作變得簡單、高效,系統(tǒng)整體穩(wěn)定安全。

        本文首先介紹了自主實現(xiàn)的文件系統(tǒng)——Ext2文件系統(tǒng),分析了它的結構、實現(xiàn)原理,以及底層分配設計和層次結構關系。然后詳細敘述自主開發(fā)的文件系統(tǒng)的底層架構設計,以及重要模塊的具體實現(xiàn)流程。最后對主要模塊的功能進行了測試,以驗證本文件系統(tǒng)的可行性。

        1 Ext2文件系統(tǒng)的層次結構分析

        Ext2是GNU/Linux 系統(tǒng)中標準的文件系統(tǒng),由于其采用簇塊取層的優(yōu)良設計,因此存取文件的性能好[2]。一個磁盤分區(qū)一般分為1 024、2 048和4 096字節(jié)大小的塊,根據(jù)不同的使用,可分為不同的塊,主要包括超級塊(Super Block)、inode塊和數(shù)據(jù)塊。超級塊描述了文件系統(tǒng)的基本信息,inode塊記錄了文件的屬性,是文件系統(tǒng)中的基本單元,是文件系統(tǒng)中的索引。Ext2文件系統(tǒng)的具體結構如圖1所示。

        圖1 Ext2文件系統(tǒng)結構示意圖

        Linux的文件系統(tǒng)將硬盤分區(qū)時會劃分出超級塊、inode Table區(qū)塊和Data Block數(shù)據(jù)區(qū)域。一個文件由一個超級塊、inode和數(shù)據(jù)區(qū)域塊組成。當查看某個文件時,先從inode Table中查出文件屬性及數(shù)據(jù)存放點,再從數(shù)據(jù)塊中讀取數(shù)據(jù)。

        2 Ext2文件系統(tǒng)的精剪結構與優(yōu)化管理

        2.1 物理硬盤設計

        本文件系統(tǒng)其硬盤是模擬硬盤,即以一個二進制文件(.iso文件)來模擬真正的硬盤。本系統(tǒng)中所有的操作都是對此二進制文件進行,所以本文件系統(tǒng)并沒有真正的硬件設施,也就沒有硬件驅動層。模擬硬盤的分區(qū)如圖2所示。

        圖2 模擬硬盤分區(qū)圖

        在磁盤初始化的過程中會將數(shù)據(jù)區(qū)(0x0 4400~0x3 9c00)分為若干塊,每塊512字節(jié),將其中的第0塊作為主目錄區(qū),即存儲目錄區(qū)。第1塊用作etc配置信息區(qū),存儲與本文件系統(tǒng)具體配置有關的信息。第2塊當成pwd信息區(qū),即存儲已注冊用戶的id、name和對應的密碼信息。從第3塊到結尾分為若干組,每組共50個數(shù)據(jù)塊。每組的第一個塊用來保存本組數(shù)據(jù)塊的物理偏移信息。如圖3所示。

        圖3 數(shù)據(jù)區(qū)詳細劃分圖

        2.2 物理塊分配尋址方式設計

        由于在Linux中所有的設備和信息集合都可以被看成文件,所以本系統(tǒng)中為每個具體文件和目錄文件都創(chuàng)建了一個對應的inode(索引節(jié)點)。根據(jù)目錄或文件中的inode就可以找到對應的inode。而此inode中已經(jīng)記錄了對應文件的大小以及對應的物理塊號。通過這種方式就可以很容易對具體文件進行尋址定位。其具體尋址方式如圖4所示。

        圖4 文件尋址示意圖

        2.3 塊管理功能設計

        塊管理主要有inode塊和空閑物理塊兩種。由于Linux系統(tǒng)中inode節(jié)點信息是線性的,而本系統(tǒng)也繼承了這個特性。從理論上來說,inode節(jié)點中沒有必要保存本身的inode號(在線性序列中的序列號)信息。雖然這種實現(xiàn)方式很簡單,但這給inode節(jié)點的管理帶來了很大的麻煩。當需要新建inode時,可直接插在序列后面。但當刪除某個節(jié)點時就很麻煩,因為此節(jié)點之后的每個節(jié)點的inode號都會相應地減小1。除此之外,對應文件中的inode號也必須要同步更新,否則在文件尋址時就會出現(xiàn)混亂,甚至會覆蓋重要的信息。所以本系統(tǒng)中inode節(jié)點也保存有自身的inode號,與文件或目錄中的inode號相同。

        但此時會產(chǎn)生另一個問題,即如何對刪除的inode物理空間進行回收。本系統(tǒng)給出的方法是:刪除時不回收具體物理空間,通過使用一個標識數(shù)組來標識對應的inode塊是否可以使用,從而重復管理利用inode空間。此標識數(shù)組初始化時全為0。當創(chuàng)建一個inode時,首先會在標識數(shù)組中找到第一個為0的塊,將此塊分配給新建的inode節(jié)點。inode號對應的標識數(shù)組位置會被置1,表示不可使用。當刪除inode時,直接將邏輯節(jié)點刪除,將物理節(jié)點對應的標識數(shù)組對應位置0即可。在退出本系統(tǒng)時,再將inode標識數(shù)組中的對應數(shù)據(jù)寫入到指定的磁盤區(qū)。而當再次登錄本系統(tǒng)時,動態(tài)地從指定的數(shù)據(jù)區(qū)讀入標識數(shù)組。這樣,就很好地完成了inode節(jié)點的重復回收利用。

        空閑塊即在刪除文件時產(chǎn)生的回收數(shù)據(jù)塊,空閑塊的管理即為數(shù)據(jù)塊的回收利用管理。本系統(tǒng)中使用了一個空閑數(shù)據(jù)塊鏈,來專門管理和回收系統(tǒng)運行時所產(chǎn)生的空閑數(shù)據(jù)塊。在每次分配數(shù)據(jù)塊時,若此空閑塊數(shù)據(jù)鏈不為空,則優(yōu)先在此空閑數(shù)據(jù)鏈上分配數(shù)據(jù)塊;若為空,則直接從當前超級塊上分配數(shù)據(jù)塊。每次由于刪除文件所產(chǎn)生的空閑數(shù)據(jù)塊,直接加到空閑數(shù)據(jù)鏈中即可。在系統(tǒng)退出時,則直接將空閑鏈中的數(shù)據(jù)寫到指定的磁盤區(qū),在使用本系統(tǒng)時再動態(tài)讀取。

        3 多級用戶的二級Ext2文件系統(tǒng)實現(xiàn)

        3.1 系統(tǒng)主要的實體結構

        系統(tǒng)中的主要實體采用面向對象的思想來看待,作為系統(tǒng)中的功能模塊對象。分析系統(tǒng)中的基本實體結構,可以從微觀來了解系統(tǒng)的大致構架層次及其邏輯關系[3],這對于理解一個系統(tǒng)來說是很重要的。本系統(tǒng)中的重要實體主要有以下幾個:錯誤實體、用戶及用戶組實體、超級塊實體、inode實體、目錄實體、文件實體及頁面緩存實體。

        Ext2文件實體定義如下:

        typedef struct fileNode{ //同層無同名文件

        char fileName[MAXFILENAME]; //文件名

        int fileSize; //文件大小

        long fileTrueSize;

        short fileINode; //對應的inode號

        short fileMode; //文件權限:0-root;1-管理員;

        //2-一般用戶;3-保留

        short fileUserId; //用戶號

        short fileGroupId; //組號

        struct Dir* fileDir; //文件所屬目錄

        struct fileNode* fileNext; //下一個

        }FileNode;

        由其定義可以很容易看出,文件與目錄關系是通過文件所述目錄信息來描述的。通過這個信息,可以知道此文件屬于哪個目錄。同時,若指定目錄,也可通過此屬性獲得此目錄中所有的文件。通過用戶號、組號和文件權限就可以確定用戶對此文件的訪問允許及操作權限,也就實現(xiàn)了多級用戶能力。

        在本系統(tǒng)中硬件層只是一個模擬硬盤,也就沒有硬件驅動層。因此對模擬硬盤的所有基本操作均使用系統(tǒng)自帶的API。在本系統(tǒng)中主要使用5個API,分別為open()、close、read()、write()和lseek()[4]。其中open()為打開或創(chuàng)建文件,close()是關閉文件,read()和write()分別是讀、寫文件,lseek()則是改變當前打開文件的文件指針。

        3.2 程序主體的設計

        源代碼的主體函數(shù)是在進行系統(tǒng)概要設計時通過流程圖編寫的,基本邏輯遵循下述的流程圖。只是在登錄模塊中也加入了退出系統(tǒng)命令,在登錄系統(tǒng)時也可以通過退出系統(tǒng)命令退出,而不必等到登錄成功后才能退出。

        Ext2系統(tǒng)程序的主體流程設計如圖5所示。

        圖5 Ext2系統(tǒng)流程圖

        3.3 各功能模塊的設計

        3.3.1 錯誤處理模塊

        錯誤處理模塊是提高整個程序容錯性的核心,同時也提高了系統(tǒng)對錯誤的處理能力。本模塊通過一個全局錯誤變量來實現(xiàn),每當系統(tǒng)中有可能出現(xiàn)錯誤的地方就加上錯誤判斷,一旦出現(xiàn)錯誤則記錄錯誤所在文件、所在行、具體信息以及錯誤類型,再返回異常。如果存在函數(shù)功能模塊嵌套調用,也可以逐層拋出這個異常,以便能準確定位。根據(jù)錯誤的類型,可以判斷錯誤的嚴重性,以便能盡量減少損失、避免整個系統(tǒng)崩潰。

        3.3.2 模擬硬盤初始化模塊

        因為時間和硬件資源等的限制,本系統(tǒng)并沒有真正的硬件,而是使用一個(0x4 4400×2)字節(jié)的iso二進制鏡像文件來作為模擬硬盤。所以此模擬硬盤是所有操作的基礎,而模擬硬盤的初始化是為了能夠按文件系統(tǒng)的標準使用此硬盤。

        此模塊的實現(xiàn)方式為:將磁盤分為若干個數(shù)據(jù)塊,每個數(shù)據(jù)塊的大小為512字節(jié)[5]。所有的數(shù)據(jù)塊編號為0~(n-1),第0塊也就是整個數(shù)據(jù)區(qū)的開始,然后將每50個數(shù)據(jù)塊分為一組。每個組的第一個數(shù)據(jù)塊也就是本組的超級塊,記錄著本組所有數(shù)據(jù)塊的相對地址偏移,也就是上述所說的地址編號。將第0、1、2數(shù)據(jù)塊單獨空閑出來,第0塊用來存儲主目錄,第1塊用來存儲etc配置環(huán)境,第2塊用來存儲注冊用戶的相關信息。這樣從0x0 4400~0x3 9c00的數(shù)據(jù)區(qū)就被分為若干組,并通過超級塊管理本組所有的數(shù)據(jù)塊。

        剩余的從0x0 0000~0x0 0200用來當作系統(tǒng)引導區(qū),即標識此磁盤是否需要初始化。0x0 0200~0x0 0400用來存儲當前超級塊,即標識當前硬盤已經(jīng)使用的數(shù)據(jù)塊。0x0 0400~0x0 4400用來存儲系統(tǒng)產(chǎn)生的inode,這是文件索引的核心。0x3 9c00~0x4 4400用來保存當前空閑數(shù)據(jù)塊,即系統(tǒng)文件刪除導致的空閑數(shù)據(jù)塊。

        3.3.3 數(shù)據(jù)塊分配回收以及拷貝模塊

        當前的超級塊中保存的是當前某一組數(shù)據(jù)塊的分配情況,同時當前空閑塊中臨時存儲的是當前回收產(chǎn)生的空閑數(shù)據(jù)塊。當需要進行數(shù)據(jù)塊分配時,首先在當前空閑數(shù)據(jù)塊鏈上查找,若不為空則優(yōu)先從當前空閑數(shù)據(jù)塊鏈上分配;否則從當前超級塊上分配,即返回當前還是空閑未使用的數(shù)據(jù)塊的偏移。若當前超級塊中可分配量為0,則讀取下一個超級塊,再給予分配。如果超級塊中可分配塊為0,則返回錯誤。

        對于產(chǎn)生的空閑數(shù)據(jù)塊并沒有在物理上對其進行回收,而是將其加入到當前空閑塊鏈中。當有數(shù)據(jù)塊分配時,空閑數(shù)據(jù)鏈上的數(shù)據(jù)塊優(yōu)先分配。而數(shù)據(jù)塊的拷貝則是對于兩個已知編號的數(shù)據(jù)塊,將其中一個數(shù)據(jù)塊中的數(shù)據(jù)拷貝到另一個數(shù)據(jù)塊中。其實現(xiàn)即為直接從原數(shù)據(jù)塊中讀取512字節(jié)的數(shù)據(jù),然后寫入到指定的數(shù)據(jù)塊中。

        3.3.4 索引節(jié)點創(chuàng)建和刪除模塊

        本系統(tǒng)對于索引節(jié)點的管理是使用一個全局的標識數(shù)組,相當于將所有的保存索引節(jié)點的空間編號。此數(shù)組剛開始時被初始化為0,表示所有的inode節(jié)點都可以使用。每次分配索引節(jié)點時首先遍歷此數(shù)組,找到第一個為0的地方即停止,此順序遍歷的序列號就是新產(chǎn)生的inode的物理偏移號[6]。最后初始化新產(chǎn)生的節(jié)點并加入到當前inode鏈中,等待系統(tǒng)結束時寫入到硬盤指定位置。

        每次索引節(jié)點的回收必然伴隨著文件的刪除。刪除時直接將其物理偏移號對應的標識數(shù)組下標的數(shù)值變?yōu)?,表示可以繼續(xù)使用,再從索引鏈上刪除索引節(jié)點。這樣不用真正地從物理地址上刪除,只需標識為可用,當再次創(chuàng)建索引節(jié)點時就會覆蓋原數(shù)據(jù)。

        3.3.5 文件模塊

        文件模塊包括創(chuàng)建、讀寫、復制以及刪除功能。文件創(chuàng)建包含帶目錄的創(chuàng)建和直接在當前目錄中創(chuàng)建。當為帶路徑的文件創(chuàng)建時,首先解析出文件名,然后根據(jù)路徑逐個解析,當解析到所要創(chuàng)建文件的目錄時再調用在當前目錄中創(chuàng)建文件的模塊。

        文件讀寫模塊通過命令行無法實現(xiàn),因而本系統(tǒng)中只是為命令行寫了一個測試的版本,即將所讀的內容保存到指定的緩存中。通過文件id,首先查找到文件對應的inode,根據(jù)inode即可得知文件的具體物理地址,最后調用系統(tǒng)的讀文件函數(shù)。

        文件復制即將文件節(jié)點的文件信息復制到指定的目錄,同時還要把文件中的內容一并復制到新的數(shù)據(jù)塊中,再加入到指定目錄新建立的文件節(jié)點對應的inode中。

        文件刪除即將文件對應的文件信息節(jié)點從文件鏈中刪除,同時刪除文件所對應的inode塊。在刪除文件對應的inode塊時,首先必須刪除文件所對應數(shù)據(jù)塊,然后才能從inode鏈上刪除其所對應的inode節(jié)點[7]。

        3.3.6 頁面緩存模塊

        本系統(tǒng)中所有的文件都以邏輯鏈的形式存在,與其對應的inode也是以線性鏈的形式存在。當文件相對較多時,索引或查看文件信息必然會速度較慢。因此特地設計了一個頁面緩存區(qū),用來存放當前使用比較頻繁的數(shù)據(jù)塊索引和inode索引,以便在訪問數(shù)據(jù)時提高效率,并使用LRU(最近最久未使用)算法來調度置換緩存頁面[8]。

        4 系統(tǒng)功能結果測試

        本節(jié)主要展示Ext2系統(tǒng)各模塊的實現(xiàn)界面及實際功能測試效果。測試項有l(wèi)ogin用戶登錄和regesit用戶注冊、mkDir建立子目錄、mkFile新建文件、delFile刪除文件、copy文件復制、move文件移動、write寫文件命令和read讀文件、cat查看文件內容以及delDir目錄刪除等功能。其中本文僅展示出delDir目錄刪除功能測試結果,如圖6所示。

        圖6 delDir命令測試界面

        圖6中,在目錄King下?lián)碛心夸汼oft,而在

        FineCutandOptimumDesignofExt2FileSysteminLinux

        ZhouJunjie1,KeYue2

        (1.Wenhua College,Wuhan 430086,China;2.Hubei University of Technology)

        Based on Linux system,a Ext2 two level file system of Linux multi-level user is constructed and designed to be an embedded file system for GPS and other users through fine tailoring and optimized design.The system includes the definition of each basic entity (index node,directory node,file node etc.) and the definition and implementation of each function module.Finally,the test data of some functional modules of the system are displayed.The Linux file system has been tested and achieves good results.

        Linux;Ext2;file system;optimum design

        2016年度湖北省高校優(yōu)秀中青年科技創(chuàng)新團隊計劃項目(No.T201633);2016年啟林教育研究院教育教學研究項目(No.2016-3-20);2014年武漢市信息產(chǎn)業(yè)辦軟件產(chǎn)業(yè)發(fā)展專項(No.GCJH2014005)。

        TP368.1

        A

        猜你喜歡
        空閑硬盤節(jié)點
        恩賜
        詩選刊(2023年7期)2023-07-21 07:03:38
        CM節(jié)點控制在船舶上的應用
        Analysis of the characteristics of electronic equipment usage distance for common users
        基于AutoCAD的門窗節(jié)點圖快速構建
        HiFi級4K硬盤播放機 億格瑞A15
        Egreat(億格瑞)A10二代 4K硬盤播放機
        “鳥”字謎
        小讀者之友(2019年9期)2019-09-10 07:22:44
        彪悍的“寵”生,不需要解釋
        WLAN和LTE交通規(guī)則
        CHIP新電腦(2016年3期)2016-03-10 14:09:48
        我區(qū)電視臺對硬盤播出系統(tǒng)的應用
        av在线不卡免费中文网| 日本一二三区视频在线| 四虎影视免费观看高清视频| 日本欧美国产精品| 亚洲地区一区二区三区| 国产精品丝袜美腿诱惑| 嗯啊好爽高潮了在线观看| 韩国三级大全久久网站| 又粗又大又黄又爽的免费视频| 音影先锋色天堂av电影妓女久久 | 手机在线看片国产人妻| 国产香港明星裸体xxxx视频| 日本亚洲色大成网站www久久| 亚洲另类激情综合偷自拍图| 国产AV无码无遮挡毛片| 免费一区二区在线观看视频在线| 亚洲国产综合久久天堂| 亚洲成av人片天堂网| 亚洲 成人 无码 在线观看| 久久网站在线免费观看| 亚洲色图专区在线观看| 久久99精品久久水蜜桃| 大香伊蕉国产av| 亚州AV成人无码久久精品| 国产av无毛无遮挡网站| 精品视频无码一区二区三区| 美丽的熟妇中文字幕| 国产精品亚洲ΑV天堂无码| 亚洲中文字幕乱码在线视频| 免费a级毛片又大又粗又黑| 日韩a无v码在线播放| 亚洲色AV天天天天天天| 中文字幕文字幕一区二区 | 免费观看91色国产熟女| a人片在线观看苍苍影院| 国产丝袜免费精品一区二区| 精品人妻69一区二区三区蜜桃| 少妇人妻大乳在线视频不卡| 中文字幕无线码中文字幕| 亚洲一码二码在线观看| 水蜜桃在线观看一区二区 |