linux實作了vfs,幾乎任何一個可以交換資料的存在(我這裡用一個很大的詞:存在)都可以有一個vfs的代理,記憶體中就是一個inode結構,如果 你要操作它,那麼需要一個file結構,而file結構擁有file_operations結構,該結構記憶體放有很多函數指針,指向一些具體的操作,這些操作将來都要和inode打交道,核心給使用者一個統一的系統調用接口,然後這個系統調用的實作用來在file_operations裡分發操作,這個系統 調用實際上就是一個多路複用的設施,這就是linux的vfs的全部了。
但是像沒想過擴充,比如一個分層的驅動,這在linux下是完全可以實作的,實際上沒有linux實作不了的,前面說過,linux都是小對象的組合,耦 合性低,擴充性炒好,很容易就可以組合成你需要的樣子,比如usb驅動,塊裝置驅動,包括網絡協定棧都是分層的驅動,但是這些東西給人的感覺很松散,(linux本身就是很松散,這才是linux,使他的殺手锏)我從來不敢奢望從網絡協定棧驅動來學習怎麼寫一個塊裝置過濾器驅動,網絡協定棧上可以用成熟的netfilter架構,這個架構是自成體系的,但是塊裝置呢?我無語...
還是不說的罷,windows的我就不說了,看看《天數夜讀》吧,很詳細。說說bsd吧(當然我可以說,看看源碼吧,都在眼前...想不開了,尋短見了,看看這個世界吧,多美好...真是那樣世界就完蛋了)
bsd提供了一個從使用者接口到最底層的通用直通式通道,和linux一樣,系統調用接口下面也是一個多路複用器,将請求分發到管道,套接字,檔案...不同的是,bsd将各個驅動之間的關系處理得相當好,它讓這些子產品間聯系更加緊密但是不增加耦合性,也就是說,這個通道我方那兒了,誰都可以用,隻要遵守約定,這個和windows有點像,應該說windows和unix有點像才對,linux則相反,一切自己動手豐衣足食,linux簡直就是高手們的玩 具,菜鳥的地獄!還是代碼裡見吧,搞程式隻會說文解字,沒用。
struct vop_vector {
本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1274165