linux文件系統

爲了管理外存設備,計算機系統將外設抽象爲可隨機訪問的塊,塊設備驅動程序負責由抽象到具體的轉換。用戶可直接在設備驅動程序這一層次使用塊設備,不過這種使用方式很不方便,需要用戶自己去負責外設的分配、回收、查找、定位等操作。因此,人們又把塊設備抽象爲文件系統,通過文件系統管理塊設備中的數據。

隨着操作系統的發展,人們創造出了許多種文件系統FATEXT2/PROCNTFSUFS等,不同文件系統中的文件無法共享,會導致系統的不兼容性。爲了解決這一問題,又對真實的文件系統進行了抽象,提出VFS的概念,它把所有的I/O操作統一到了一個框架之下。因此,文件系統是現代操作系統的核心之一。

爲了能夠讀取不同文件系統的文件、添加新的文件系統和網絡上的計算機共享文件,人們提出了多種解決方案AT&T的文件系統開關、DECgnode體系結構、SUNvnode/vfs體系結構等。後來vnode/vfs成爲事實上的標準。vnode/vfs的設計目標是:

同時支持多種文件系統類型,包括Unix系統和非Unix系統。

同一塊磁盤包含多種文件系統,並提供統一接口。

爲在網絡上共享文件提供支持(訪問遠程節點上的文件系統和訪問本地文件系統完全一樣)。

允許用戶開發自己的文件系統,並允許用戶以模塊的方式加載自己的文件系統。

真實的文件系統存在於設備中,而VFS只存在於內存中,系統啓動時產生,系統關閉時註銷。實現的主要思路是在內核中提供一個文件系統框架,包括接口函數集、管理用的數據結構和各種緩存機制。VFS在計算機系統中提供向上和向下兩個方面的接口,向上由需要進行I/O操作的用戶(包括應用程序和系統的其它模塊)使用。如:對文件、設備、網絡的打開、關閉、讀、寫等操作。向下爲實現真實的文件系統提供依據,只要實現了VFS向下提供的這組接口,VFS就會認爲它是一個真實的文件系統。爲了實現上下層接口之間的轉換,VFS必須維護許多數據結構。比如:描述文件系統信息的super_block結構、記錄文件和目錄信息的VFS inode結構、描述每個打開文件和和設備信息的file結構、描述文件組織關係的dentry結構、描述文件系統類型的file_system_type結構、記錄已安裝文件系統信息的vfsmount結構、記錄設備驅動程序的chrdevsblkdevs數組等。這些結構的信息來源於真實的文件系統或設備驅動程序。

系統初始化時,VFS支持的每種文件系統和外部設備都需要向VFS註冊,真實的文件系統在使用之前還需要安裝。在使用文件、設備、目錄之前需要獲得它的VFS inode,然後再將其打開。在註冊、安裝、獲得和打開的過程中,VFS建立起了上下層接口的映射關係,從而實現準確的操作轉換。

由於緩存機制是全系統共享的,所以不適宜在真實的文件系統中實現,合理的設計應是讓VFS統一管理所有的緩存。VFS管理的緩存包括目錄項緩存、iNode緩存和buffer cache

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章