摘要:Linux系統(tǒng)在信息化建設(shè)中的應(yīng)用范圍也越來越廣,linux文件系統(tǒng)在這些應(yīng)用中擔負著極其重要的任務(wù),數(shù)據(jù)的存儲處理與文件系統(tǒng)密不可分,如何真正理解linux文件系統(tǒng)的工作原理,尤其是linux文件系統(tǒng)的完整裝載過程,對提高linux系統(tǒng)的應(yīng)用水平、認識編程類課程及數(shù)據(jù)結(jié)構(gòu)課程的重要性等意義重大。
關(guān)鍵詞:Linux系統(tǒng);文件系統(tǒng);VFS
中圖分類號:TP316 文獻標識碼:A 文章編號:1007-9599 (2012) 15-0000-01
1 引言
Linux是一個免費的操作系統(tǒng),用戶免費獲得其源代碼,而且允許隨意修改。它是在共用許可證GPL保護下的自由軟件,也有幾種版本,如Red Hat Linux、Slackware,以及國內(nèi)的Xteam Linux等。Linux具有許多Unix系統(tǒng)的功能和特點,能夠兼容Unix,但無需支付Unix高額的費用。
目前,Linux技術(shù)已經(jīng)成為IT技術(shù)發(fā)展的熱點,從事Linux技術(shù)研究的社區(qū)、研究機構(gòu)和軟件企業(yè)逐年增多,支持Linux的軟件、硬件制造商和解決方案提供商也快速增加,Linux在信息化建設(shè)中的應(yīng)用范圍也越來越廣。隨著整個Linux產(chǎn)業(yè)的發(fā)展,Linux技術(shù)也處在快速的發(fā)展過程中,形成了若干技術(shù)熱點。由于任何一個操作系統(tǒng)都必須提價有效手段來管理外存及其上的數(shù)據(jù),而這些功能主要由操作系統(tǒng)的文件系統(tǒng)功能來完成的,因此深入理解linux的文件系統(tǒng)裝載過程對提高linux系統(tǒng)的應(yīng)用水平有重要的意義。
2 Linux系統(tǒng)的文件與虛擬文件系統(tǒng)VFS
“一切皆是文件”是Unix/Linux的基本哲學(xué)之一[1]。不僅普通的文件,目錄、字符設(shè)備、塊設(shè)備等在Unix/Linux中都是以文件被對待;即使類型不同,仍然可以在同一套操作界面運行。Linux中允許不同的文件系統(tǒng)共存。如圖1所示,我們可以使用cp命令從vfat文件系統(tǒng)格式的硬盤拷貝數(shù)據(jù)到ext3文件系統(tǒng)格式的硬盤;而這樣的操作涉及到兩個不同的文件系統(tǒng)。
而虛擬文件系統(tǒng)正是實現(xiàn)上述兩點Linux特性的關(guān)鍵所在。虛擬文件系統(tǒng)(Virtual File System,簡稱VFS),是Linux內(nèi)核中的一個軟件層,用于給用戶空間的程序提供文件系統(tǒng)接口;同時,它也提供了內(nèi)核中的一個抽象功能,允許不同的文件系統(tǒng)共存[2]。系統(tǒng)中所有的文件系統(tǒng)在VFS和VFS中工作。為了能夠支持各種實際文件系統(tǒng),VFS定義了所有文件系統(tǒng)都支持的基本的、概念上的接口和數(shù)據(jù)結(jié)構(gòu);同時也提供VFS所期望的抽象接口和數(shù)據(jù)結(jié)構(gòu),將自身的諸如文件、目錄等概念在形式上與VFS的定義保持一致。實際文件系統(tǒng)在統(tǒng)一的接口和數(shù)據(jù)結(jié)構(gòu)下隱藏了具體的實現(xiàn)細節(jié),所以在VFS層和內(nèi)核的其他部分看來,所有文件系統(tǒng)都是一樣的。圖2顯示了VFS在內(nèi)核中與實際的文件系統(tǒng)的協(xié)同關(guān)系。
這里要特別注意有關(guān)文件系統(tǒng)的三個重要概念:即(1)創(chuàng)建。以某種方式格式化磁盤的過程就是在其之上建立一個文件系統(tǒng)的過程。創(chuàng)建文現(xiàn)系統(tǒng)時,會在磁盤的特定位置寫入關(guān)于該文件系統(tǒng)的控制信息。(2)注冊。向內(nèi)核報到,聲明自己能被內(nèi)核支持。一般在編譯內(nèi)核的時候注冊;也可以加載模塊的方式手動注冊。注冊過程實際上是將表示各實際文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)struct file_system_type實例化。(3)安裝。也就是我們熟悉的mount操作,將文件系統(tǒng)加入到Linux的根文件系統(tǒng)的目錄樹結(jié)構(gòu)上;這樣文件系統(tǒng)才能被訪問。
3 Linux文件系統(tǒng)裝載過程
Linux以一組通用對象的角度看待所有文件系統(tǒng)。這些對象是超級塊、inode、dentry和文件。文件系統(tǒng)中管理的每個對象在Linux中表示為一個inode。inode包含管理文件系統(tǒng)中的對象所需的所有元數(shù)據(jù)。另一組結(jié)構(gòu)稱為dentry,它們用來實現(xiàn)名稱和inode之間的映射,有一個目錄緩存用來保存最近使用的dentry。dentry還維護目錄和文件之間的關(guān)系,從而支持在文件系統(tǒng)中移動。最后,VFS文件表示一個打開的文件。安裝linux文件系統(tǒng)的過程就是創(chuàng)建VFS超級塊的過程,也就是在VFS的目錄樹中向其中某個目錄上掛載一個文件系統(tǒng)的過程。
安裝初始過程由sys_mount()系統(tǒng)調(diào)用函數(shù)發(fā)起,該函數(shù)原型聲明如下:asmlinkage long sys_mount(char*dev_name,char*dir_name,char*type,unsigned long flags,void*data);例如:我們準備將來自主硬盤第2分區(qū)(hda2)上的ext2文件系統(tǒng)安裝到前面創(chuàng)建的\"/dev\"目錄中。那么對于sys_mount()函數(shù)的調(diào)用便具體為:sys_mount(\"hda2\",\"/dev\",\"ext2\",…);在新的文件系統(tǒng)加載之后,內(nèi)核鏈表file_systems及相關(guān)數(shù)據(jù)結(jié)構(gòu)會有相應(yīng)變化,有關(guān)內(nèi)容限于篇幅在此不一一詳述。讀者可參考文獻[3]。
4 結(jié)束語
本文針對Linux系統(tǒng)在應(yīng)用領(lǐng)域的擴張趨勢,分析了Linux文件系統(tǒng)的創(chuàng)建,注冊及安裝的全過程,從內(nèi)核上深入剖析Linux文件系統(tǒng)的含義,解釋了虛擬文件系統(tǒng)VFS在linux文件系統(tǒng)安裝及文件管理中的重要作用,它保證了linux系統(tǒng)中“一切皆是文件”的實現(xiàn),同時由于Linux系統(tǒng)文件安裝過程伴隨著內(nèi)存上各類數(shù)據(jù)結(jié)構(gòu)的及鏈表的相應(yīng)變化,因此,分析linux文件系統(tǒng)的安裝還有助于加深對編程類課程及數(shù)據(jù)結(jié)構(gòu)類課程重要性的認識。
參考文獻:
[1]周巍松.Linux系統(tǒng)分析與高級編程技術(shù)[M].北京:機械工業(yè)出版社,1999
[2]Warren W.Gay.Linux Programming in 24 Hours[M].北京:機械工業(yè)出版社,2000
[3]郭玉東,王非非.Linux操作系統(tǒng)結(jié)構(gòu)分析[M].西安:西安電子科技大學(xué)出版社會,2002
[作者簡介]吳偉美(1981-),女,廣東梅州人,廣東科學(xué)技術(shù)職業(yè)學(xué)院教師,網(wǎng)絡(luò)助理工程師,研究方向,網(wǎng)絡(luò)與計算機應(yīng)用。