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