虛擬文件系統(tǒng)_第1頁(yè)
虛擬文件系統(tǒng)_第2頁(yè)
虛擬文件系統(tǒng)_第3頁(yè)
虛擬文件系統(tǒng)_第4頁(yè)
虛擬文件系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

虛擬文件系統(tǒng)計(jì)算機(jī)操作系統(tǒng)01簡(jiǎn)介功能其它相關(guān)Linux簡(jiǎn)介超級(jí)塊目錄03050204基本信息虛擬文件系統(tǒng)(VFS)是由Sunmicrosystems公司在定義絡(luò)文件系統(tǒng)(NFS)時(shí)創(chuàng)造的。它是一種用于絡(luò)環(huán)境的分布式文件系統(tǒng),是允許和操作系統(tǒng)使用不同的文件系統(tǒng)實(shí)現(xiàn)的接口。虛擬文件系統(tǒng)(VFS)是物理文件系統(tǒng)與服務(wù)之間的一個(gè)接口層,它對(duì)Linux的每個(gè)文件系統(tǒng)的所有細(xì)節(jié)進(jìn)行抽象,使得不同的文件系統(tǒng)在Linux核心以及系統(tǒng)中運(yùn)行的其他進(jìn)程看來(lái),都是相同的。嚴(yán)格說(shuō)來(lái),VFS并不是一種實(shí)際的文件系統(tǒng)。它只存在于內(nèi)存中,不存在于任何外存空間。VFS在系統(tǒng)啟動(dòng)時(shí)建立,在系統(tǒng)關(guān)閉時(shí)消亡。簡(jiǎn)介簡(jiǎn)介虛擬文件系統(tǒng)VirtualFileSystems(VFS)Linux是近年來(lái)發(fā)展起來(lái)的一種新型的操作系統(tǒng),其最重要的特征之一就是支持多種文件系統(tǒng),使其更加靈活,從而與許多其它的操作系統(tǒng)共存。Linux支持ext,ext2,xia,minix,umsdos,msdes,fat32,ntfs,proc,stub,ncp,hpfs,affs以及ufs等多種文件系統(tǒng)。為了實(shí)現(xiàn)這一目的,Linux對(duì)所有的文件系統(tǒng)采用統(tǒng)一的文件界面,用戶通過文件的操作界面來(lái)實(shí)現(xiàn)對(duì)不同文件系統(tǒng)的操作。對(duì)于用戶來(lái)說(shuō),我們不要去關(guān)心不同文件系統(tǒng)的具體操作過程,而只是對(duì)一個(gè)虛擬的文件操作界面來(lái)進(jìn)行操作,這個(gè)操作界面就是Linux的虛擬文件系統(tǒng)(VFS)。形象地說(shuō),Linux的內(nèi)核好象一個(gè)PC機(jī)的母板,VFS就是上面的一個(gè)插槽,具體的文件系統(tǒng)就是一塊塊的接121卡。因此,每一個(gè)文件系統(tǒng)之間互不干擾,而只是調(diào)用相應(yīng)的程序來(lái)實(shí)現(xiàn)其功能。在Linux的內(nèi)核文件中,VFS和具體的文件系統(tǒng)程序都放在Linux\FS中,其中每一種文件系統(tǒng)對(duì)應(yīng)一個(gè)子目錄,另外還有一些共用的VFS程序。在具體的實(shí)現(xiàn)上,每個(gè)文件系統(tǒng)都有自己的文件操作數(shù)據(jù)結(jié)構(gòu)file—operations。所以,VFS作為ILinux內(nèi)核中的一個(gè)軟件層,用于給用戶空間的程序提供文件系統(tǒng)接口,同時(shí)也提供了內(nèi)核中的一個(gè)抽象功能,允許不同的文件系統(tǒng)很好地共存。VFS使Linux同時(shí)安裝、支持許多不同類型的文件系統(tǒng)成為可能。VFS擁有關(guān)于各種特殊文件系統(tǒng)的公共界面,如超級(jí)塊、inode、文件操作函數(shù)入口等。實(shí)際文件系統(tǒng)的細(xì)節(jié),統(tǒng)一由VFS的公共界面來(lái)索引,它們對(duì)系統(tǒng)核心和用戶進(jìn)程來(lái)說(shuō)是透明的。Linux簡(jiǎn)介虛擬操作已打開的文件InodeLinux簡(jiǎn)介虛擬"虛擬"二字主要有兩層含義:

1,在同一個(gè)目錄結(jié)構(gòu)中,可以掛載著若干種不同的文件系統(tǒng).VFS隱藏了它們的實(shí)現(xiàn)細(xì)節(jié),為使用者提供統(tǒng)一的接口;

2,目錄結(jié)構(gòu)本身并不是絕對(duì)的,每個(gè)進(jìn)程可能會(huì)看到不一樣的目錄結(jié)構(gòu).目錄結(jié)構(gòu)是由"空間(namespace)"來(lái)描述的,不同的進(jìn)程可能擁有不同的namespace,不同的namespace可能有著不同的目錄結(jié)構(gòu)(因?yàn)樗鼈兛赡軖燧d了不同的文件系統(tǒng))。

Inode含義:索引節(jié)點(diǎn),對(duì)應(yīng)設(shè)備上存放的一個(gè)文件。

創(chuàng)建:1)在超級(jí)塊被載入時(shí),作為根的inode一并被載入;2)通過mknod調(diào)用創(chuàng)新新的索引節(jié)點(diǎn);3)在尋找文件路徑的過程中,從設(shè)備中讀取,并初始化(跟super_block一樣,inode結(jié)構(gòu)中一部分信息是保存在設(shè)備中的,一部分則是在內(nèi)在中初始化的)。

函數(shù):i_op,索引節(jié)點(diǎn)函數(shù)集,主要包含對(duì)子inode的創(chuàng)建,刪除等操作.f_op,文件函數(shù)集,主要包含對(duì)本inode的讀寫等操作.在inode被創(chuàng)建后,1)如果是特殊文件,則根據(jù)對(duì)應(yīng)文件的類型(包括塊設(shè)備,字符設(shè)備,fifo,等等)賦予特定的函數(shù)集(并不直接與設(shè)備和文件系統(tǒng)類型相關(guān));2)否則,對(duì)應(yīng)的文件系統(tǒng)類型會(huì)提供相應(yīng)的函數(shù)集,并且目錄和文件函數(shù)集很可能不同。

操作已打開的文件VFS的使用者是進(jìn)程(用戶訪問文件系統(tǒng)總是需要啟動(dòng)進(jìn)程).描述進(jìn)程的task_struct結(jié)構(gòu)中files指針指向了一個(gè)files_struct結(jié)構(gòu),后者描述了進(jìn)程已打開的文件集合。

files_struct結(jié)構(gòu)維護(hù)了一個(gè)已打開文件所對(duì)應(yīng)的file結(jié)構(gòu)的指針數(shù)組,數(shù)組下標(biāo)被用作用戶程序操作已打開文件的句柄(通常稱作fd).files_struct還維護(hù)著已使用的fd位圖,以便在需要打開文件時(shí),為其分配一個(gè)未使用的fd。

詳細(xì)見參考文獻(xiàn)。功能功能VFS的功能包括:紀(jì)錄可用的文件系統(tǒng)的類型;將設(shè)備同對(duì)應(yīng)的文件系統(tǒng)起來(lái);處理一些面向文件的通用操作;涉及到針對(duì)文件系統(tǒng)的操作時(shí),VFS把它們影射到與控制文件、目錄以及inode相關(guān)的物理文件系統(tǒng)。當(dāng)某個(gè)進(jìn)程發(fā)布了一個(gè)面向文件的系統(tǒng)調(diào)用時(shí),核心將調(diào)用VFS中相應(yīng)的函數(shù),這個(gè)函數(shù)處理一些與物理結(jié)構(gòu)無(wú)關(guān)的操作,并且把它重定向?yàn)檎鎸?shí)文件系統(tǒng)中相應(yīng)的函數(shù)調(diào)用,后者則用來(lái)處理那些與物理結(jié)構(gòu)相關(guān)的操作。VFS與實(shí)際文件系統(tǒng)的封裝關(guān)系如下圖所示:VFSMINIXFSVFSinode緩存VFS目錄緩存EXTFSEXT2FSMSDSFS超級(jí)塊超級(jí)塊VFS使用了與EXT2文件系統(tǒng)類似的方式:超級(jí)塊和索引節(jié)點(diǎn)inode描述文件系統(tǒng)。VFS超級(jí)塊是各種邏輯文件系統(tǒng)在安裝時(shí)建立的,并在這些文件系統(tǒng)卸載時(shí)自動(dòng)刪除,它只存在于內(nèi)存中。VFS中保存了系統(tǒng)中掛接的文件系統(tǒng)的鏈表以及這些文件系統(tǒng)對(duì)應(yīng)的VFS超級(jí)塊。系統(tǒng)啟動(dòng)后所有被初始化的文件系統(tǒng)都要向VFS登記。每個(gè)已安裝的文件系統(tǒng)由一個(gè)VFS超塊表示,它包含如下信息:⑴Device:表示文件系統(tǒng)所在塊設(shè)備的設(shè)備標(biāo)志符。例如系統(tǒng)中第一個(gè)IDE硬盤的設(shè)備標(biāo)志符為0x301。⑵Inodepointers:這個(gè)mountedinode指針指向文件系統(tǒng)中第一個(gè)inode。而coveredinode指針指向此文件系統(tǒng)安裝目錄的inode。根文件系統(tǒng)的VFS超塊不包含covered指針。⑶Blocksize:以字節(jié)記數(shù)的文件系統(tǒng)塊大小,如1024字節(jié)。⑷Superblockoperations:指向此文件系統(tǒng)一組超塊操縱例程的指針。這些例程被VFS用來(lái)讀寫inode和超塊。⑸FileSystemtype:這是一個(gè)指向已安裝文件系統(tǒng)的file_system_type結(jié)構(gòu)的指針。⑹FileSystemspecific:指向文件系統(tǒng)所需信息的指針。其它相關(guān)TheVFSInode注冊(cè)文件系統(tǒng)安裝文件系統(tǒng)卸載文件系統(tǒng)其它相關(guān)TheVFSInode和EXT2文件系統(tǒng)相同,VFS中的每個(gè)文件、目錄等都用且只用一個(gè)VFSinode表示。每個(gè)VFSinode中的信息通過文件系統(tǒng)相關(guān)例程從底層文件系統(tǒng)中得到。VFSinode僅存在于核心內(nèi)存并且保存只要對(duì)系統(tǒng)有用,它們就會(huì)被保存在在VFSinodecache中。每個(gè)VFSinode包含下列域:⑴device:包含此文件或此VFSinode代表的任何東西的設(shè)備的設(shè)備標(biāo)志符。⑵inodenumber:文件系統(tǒng)中唯一的inode號(hào)。在虛擬文件系統(tǒng)中device和inode號(hào)的組合是唯一的。⑶mode:和EXT2中的相同,表示此VFSinode的存取權(quán)限。⑷userids:所有者的標(biāo)志符。⑸times:VFSinode創(chuàng)建、修改和寫入時(shí)間。⑹blocksize:以字節(jié)計(jì)算的文件塊大小,如1024字節(jié)。⑺inodeoperations:指向一組例程的指針。這些例程和文件系統(tǒng)相關(guān)且對(duì)此inode執(zhí)行操作,如截?cái)啻薸node表示的文件。⑻count:使用此VFSinode的系統(tǒng)部件數(shù)。一個(gè)count為0的inode可以被自由的丟棄或重新使用。注冊(cè)文件系統(tǒng)用戶可以通過兩種途徑向內(nèi)核注冊(cè)文件系統(tǒng):一是在編譯內(nèi)核時(shí)確定可支持的文件系統(tǒng)類型,并在系統(tǒng)初始化時(shí)通過內(nèi)嵌的函數(shù)調(diào)用在VFS中進(jìn)行注冊(cè);二是把某個(gè)文件系統(tǒng)當(dāng)作一個(gè)模塊,利用模塊的加載和卸載特征向注冊(cè)表登記類型或從注冊(cè)表注銷。文件系統(tǒng)類型的注冊(cè)函數(shù)為:intregisterfilesystem(structfile_system_typefs)每個(gè)文件系統(tǒng)都有一個(gè)初始化例程,文件系統(tǒng)通過它在VFS中進(jìn)行注冊(cè),即填寫file_system_type數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)包含了文件系統(tǒng)的名稱及一個(gè)指向?qū)?yīng)VFS超級(jí)塊讀取例程的。所有已注冊(cè)文件系統(tǒng)的file_system_type結(jié)構(gòu)形成了一個(gè)注冊(cè)鏈表,如下圖所示:file_system_typefile_system_typefile_system_typeread_super()nameownerkem_mnt安裝文件系統(tǒng)文件系統(tǒng)注冊(cè)后便在設(shè)備上按一定格式建立文件系統(tǒng),但是此時(shí)設(shè)備上的文件和節(jié)點(diǎn)都還不是可訪問的,還不能按照一定的路徑名訪問其中特定的節(jié)點(diǎn)或文件。只有把它安裝到文件系統(tǒng)中某個(gè)節(jié)點(diǎn)上,才能使設(shè)備上的文件和節(jié)點(diǎn)可被訪問。因此注冊(cè)了wej系統(tǒng)只代表Linux系統(tǒng)支持這種文件系統(tǒng)的應(yīng)用,要真正使用該文件系統(tǒng)還必須安裝它。文件系統(tǒng)的安裝必須調(diào)用mount命令,把其他子系統(tǒng)安裝到已經(jīng)存在于文件系統(tǒng)的空閑節(jié)點(diǎn)上。該命令使用系統(tǒng)的mount()調(diào)用:asmlinkagelingsys_mount(chardev_name,chardir_name,chartype,unsignedlongflags,voiddata)其中dev_name是要安裝的文件系統(tǒng)的磁盤分區(qū)的路徑名,如/dev/hda5。參數(shù)dir_name是要安裝的文件系統(tǒng)的目錄名;type指定磁盤分區(qū)上的文件系統(tǒng)類型;flags指定該文件系統(tǒng)如何被安裝;data是指向任意的信息結(jié)構(gòu)的指針,其內(nèi)容依賴于被安裝的特定文件系統(tǒng)類型。使用mount命令后,VFS通過file_systems在file_system_type鏈表中根據(jù)指定的文件系統(tǒng)名稱搜索文件系統(tǒng)類型信息。卸載文件系統(tǒng)超級(jí)用戶卸載文件系統(tǒng)使用umount命令。卸載過程必須檢查文件系統(tǒng)及其超級(jí)塊的狀態(tài)。如果文件系統(tǒng)正被其他進(jìn)程使用該文件系

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論