999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux下Ext2文件系統的精剪與優化設計*

2018-01-04 02:55:13,
單片機與嵌入式系統應用 2017年12期
關鍵詞:系統

,

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

Linux下Ext2文件系統的精剪與優化設計*

周俊杰1,柯躍2

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

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

Linux;Ext2;文件系統;優化設計

引 言

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

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

1 Ext2文件系統的層次結構分析

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

圖1 Ext2文件系統結構示意圖

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

2 Ext2文件系統的精剪結構與優化管理

2.1 物理硬盤設計

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

圖2 模擬硬盤分區圖

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

圖3 數據區詳細劃分圖

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

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

圖4 文件尋址示意圖

2.3 塊管理功能設計

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

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

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

3 多級用戶的二級Ext2文件系統實現

3.1 系統主要的實體結構

系統中的主要實體采用面向對象的思想來看待,作為系統中的功能模塊對象。分析系統中的基本實體結構,可以從微觀來了解系統的大致構架層次及其邏輯關系[3],這對于理解一個系統來說是很重要的。本系統中的重要實體主要有以下幾個:錯誤實體、用戶及用戶組實體、超級塊實體、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;

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

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

3.2 程序主體的設計

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

Ext2系統程序的主體流程設計如圖5所示。

圖5 Ext2系統流程圖

3.3 各功能模塊的設計

3.3.1 錯誤處理模塊

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

3.3.2 模擬硬盤初始化模塊

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

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

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

3.3.3 數據塊分配回收以及拷貝模塊

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

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

3.3.4 索引節點創建和刪除模塊

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

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

3.3.5 文件模塊

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

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

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

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

3.3.6 頁面緩存模塊

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

4 系統功能結果測試

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

圖6 delDir命令測試界面

圖6中,在目錄King下擁有目錄Soft,而在

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年度湖北省高校優秀中青年科技創新團隊計劃項目(No.T201633);2016年啟林教育研究院教育教學研究項目(No.2016-3-20);2014年武漢市信息產業辦軟件產業發展專項(No.GCJH2014005)。

TP368.1

A

猜你喜歡
系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
基于UG的發射箱自動化虛擬裝配系統開發
半沸制皂系統(下)
FAO系統特有功能分析及互聯互通探討
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
一德系統 德行天下
PLC在多段調速系統中的應用
主站蜘蛛池模板: 国产美女自慰在线观看| 一区二区日韩国产精久久| 国产女人爽到高潮的免费视频| 亚洲中文无码av永久伊人| 久久青草精品一区二区三区| 国产真实自在自线免费精品| 女人18毛片久久| 啊嗯不日本网站| 永久天堂网Av| 成人免费午间影院在线观看| 亚洲人成网7777777国产| 青草免费在线观看| 国产高清免费午夜在线视频| 日本91在线| 国产激情第一页| 中文字幕免费在线视频| 国产后式a一视频| 欧美激情综合一区二区| 亚洲av片在线免费观看| 国产麻豆福利av在线播放| 88国产经典欧美一区二区三区| 又黄又爽视频好爽视频| 欧美日韩中文字幕二区三区| 国产精品hd在线播放| 22sihu国产精品视频影视资讯| 国产精品网址在线观看你懂的| 国产精品页| 免费观看三级毛片| 九九热精品在线视频| 久久精品66| 最新国产午夜精品视频成人| 小说区 亚洲 自拍 另类| 999国产精品永久免费视频精品久久| 97在线视频免费观看| 国产美女在线免费观看| 99尹人香蕉国产免费天天拍| 99视频有精品视频免费观看| AV不卡国产在线观看| 手机精品福利在线观看| 91免费国产高清观看| 国内精品九九久久久精品| 四虎影视库国产精品一区| 亚洲黄色网站视频| 亚洲三级影院| 色爽网免费视频| 一级不卡毛片| 免费在线播放毛片| 成年A级毛片| 国产精品区视频中文字幕| 国产成人夜色91| 99在线观看国产| 午夜啪啪网| 91欧美在线| 亚洲免费福利视频| 国产真实乱子伦精品视手机观看| 国产呦视频免费视频在线观看| 99热线精品大全在线观看| 久久夜色精品| 亚洲最大情网站在线观看 | 午夜精品福利影院| 国产麻豆91网在线看| 99久久精品免费看国产免费软件| 日韩欧美中文| 亚洲狼网站狼狼鲁亚洲下载| 國產尤物AV尤物在線觀看| 91区国产福利在线观看午夜 | 中文字幕亚洲电影| 免费人成视频在线观看网站| 伊人大杳蕉中文无码| 国产一区二区色淫影院| 国内精品久久久久久久久久影视| 免费看的一级毛片| 久久婷婷色综合老司机| 亚洲人成人伊人成综合网无码| 日韩小视频在线观看| 高清久久精品亚洲日韩Av| 日本黄色a视频| 国产成人无码综合亚洲日韩不卡| 亚洲欧美日本国产专区一区| 精品成人一区二区三区电影| 一级香蕉视频在线观看| 日本亚洲最大的色成网站www|