Linux檔案系統其實可以分為三個部分
第一部分叫Virtual File System Switch
簡稱VFS
這是Linux檔案系統對外的接口
任何要使用檔案系統的程序都必須經由這層接口來使用它
另外二部分是屬於檔案系統的內部
其中一個是cache
另一個就是真正最底層的檔案系統
像Ext
VFAT之類的東西
整個Linux檔案系統可以用圖
來表示
為了避免困擾
底下我們所講的檔案系統都是指Ext
FAT等底層的檔案系統
至於包含VFS
Ext
Buffer Cache等等我們總稱為VFS
在圖
裡
我們可以清楚的看到當Kernel要使用檔案系統時
都是經由VFS這層接口來使用
剛才我們有提到一個問題
就是當使用者或程序設計師去讀取一個檔案的內容時
它不會因為這個檔案位於不同的檔案系統就需要使用不同的方式來讀取
因為這件事VFS已經幫我們做了
當我們要讀取的檔案位於CDROM時
VFS就自動幫我們把這個讀取的要求交由iso
檔案系統來做
當我們要讀取的檔案在FAT裡時
VFS則自動呼叫FAT的函式來幫我們做到
當然
有需要時
VFS也會直接透過Disk driver去讀取資料
但是當我們要求讀寫檔案時
難道iso
或FAT檔案系統會直接透過driver去讀寫嗎? 不是的
就像PC上除了內存之外
還有一層的cache來加快速度
在Linux檔案系統其實也是有一個Cache的機制以加快速度
叫做Buffer Cache
底層的檔案系統要讀寫磁盤上的資料時都要經過Buffer Cache
如果資料在Buffer Cache裡有的話
就直接讀取
如果沒有的話
才透過Buffer Cache要求driver去讀寫
除了Buffer Cache之外
其實
Linux檔案系統裡還有一個Cache
叫Directory Cache
你知道嗎? 如果我們去統計使用者的行為的話
ls這種命令其實占的比重是蠻大的
每次的ls或讀寫檔案其實都要對目錄的內容做search
因此
如果在目錄這方面能做個Cache的話
那系統整統的速度就會再往上提升
Directory Cache的功能就在此
其實
Linux檔案系統裡還有一個Cache
叫Inode Cache
故名思義
它是針對Inode做的Cache
Directory Cache跟Inode Cache其實關系是很密切的
From:http://tw.wingwit.com/Article/program/Oracle/201311/17160.html