Linux虛擬文件系統(tǒng)–VFS簡(jiǎn)介
Linux中可以支持多種文件系統(tǒng),而且支持各種文件系統(tǒng)之間相互訪問,這是因?yàn)橛幸粋€(gè)虛擬文件系統(tǒng)。虛擬文件系統(tǒng)也叫虛擬文件系統(tǒng)轉(zhuǎn)換(Virtual Filesystem Switch,簡(jiǎn)稱VFS),之所以說它虛擬,是因?yàn)樵撐募到y(tǒng)的各種數(shù)據(jù)結(jié)構(gòu)都是隨時(shí)建立或刪除的,在盤上并不永久存在,只能存放在內(nèi)存中。也就是說,只有VFS是無法工作的,因?yàn)樗皇钦嬲奈募到y(tǒng)。
我們把各操作系統(tǒng)中的實(shí)際文件系統(tǒng)叫做邏輯文件系統(tǒng),VFS是Linux 內(nèi)核與這些邏輯文件系統(tǒng)的一個(gè)接口,它們之間的關(guān)系。
VFS是Linux 核心的一部分,其他內(nèi)核子系統(tǒng)與VFS打交道,VFS又管理其他邏輯文件系統(tǒng)。所以VFS是文件系統(tǒng)和Linux 內(nèi)核的接口,VFS以統(tǒng)一數(shù)據(jù)結(jié)構(gòu)管理各種邏輯文件系統(tǒng),接受用戶層對(duì)文件系統(tǒng)的各種操作。
VFS存在的意義
1. 向上,對(duì)應(yīng)用層提供一個(gè)標(biāo)準(zhǔn)的文件操作接口;
2. 對(duì)下,對(duì)文件系統(tǒng)提供一個(gè)標(biāo)準(zhǔn)的接口,以便其他操作系統(tǒng)的文件系統(tǒng)可以方便的移植到Linux上;
3. VFS內(nèi)部則通過一系列高效的管理機(jī)制,比如inode cache, dentry cache 以及文件系統(tǒng)的預(yù)讀等技術(shù),使得底層文件系統(tǒng)不需沉溺到復(fù)雜的內(nèi)核操作,即可獲得高性能;
4. 此外VFS把一些復(fù)雜的操作盡量抽象到VFS內(nèi)部,使得底層文件系統(tǒng)實(shí)現(xiàn)更簡(jiǎn)單。
通用文件模型
VFS為底層文件系統(tǒng)提供了抽象,有兩種策略提供這種抽象。
1. 提供一個(gè)最小的通用模型,使得這個(gè)模型支持的功能是所有文件系統(tǒng)的最小交集
2. 提供一個(gè)盡量大的通用模型,使得這個(gè)模型包含所有文件系統(tǒng)功能的合集。
Linux采用第二種策略來實(shí)現(xiàn)VFS,因此VFS封裝了底層文件系統(tǒng)的所有功能和抽象,VFS負(fù)責(zé)把應(yīng)用層的請(qǐng)求轉(zhuǎn)發(fā)給特定的文件系統(tǒng)。
在處理文件時(shí),應(yīng)用空間和內(nèi)核空間使用的對(duì)象是不同的。對(duì)應(yīng)用程序來說,文件描述符用來表示一個(gè)文件,這個(gè)文件描述符是打開文件時(shí)內(nèi)核分配給這個(gè)文件的一個(gè)整數(shù),注意,這個(gè)文件描述符只在本進(jìn)程內(nèi)有效;而對(duì)于內(nèi)核來說,則使用一個(gè)inode來表示一個(gè)文件,這個(gè)inode可能對(duì)應(yīng)著應(yīng)用層多個(gè)進(jìn)程內(nèi)的多個(gè)文件描述符。