VFS (1)

        一切皆爲文件,在類 unix 系統中,這一思想影響了一代操作系統,作爲著名的 Linux,如何實現這一思想,如何讓市面上所有的文件系統能夠完美兼容地運行在 Linux 系統中,這背後顯然隱藏着一系統複雜的機制,本文將帶你窺探其中的奧祕。
        假設你是一個 Linux 使用者,你應該知道要想使用一個 U 盤裏面的文件,需要系統支持你 U 盤裏的操作系統,並且你還需要把 U 盤這個設備 mount 到現有的一個目錄下面,其實這裏面就牽涉到幾個概念,首先,要有文件系統,那麼就有一塊數據需要來表明這些信息,這就是 super block, 其實有目錄結構,在內核就它就是 dentry,還要有文件 inode,以及掛載到 dentry 上的一個掛載信息來表明,該目錄下被掛載了一個文件系統。這幾個重要的數據結構便是組成了 VFS 整體動作的基礎。

        下圖1,展示了 file, dentry, inode, super block 之間的關係。


        圖解:
        Process1 打開文件硬鏈接 /home/Henzox/file1, 該硬鏈接表示的文件爲 /home/Henzox/file;
        Process2 打開文件硬鏈接 /home/Henzox/file1,同上;
        Process3 打開文件 /home/Henzox/file。

        每次調用 open 打開文件,就會得到一個文件對象,它們記錄了本次打開各自的信息,最重要的信息莫過於文件指針位置,即使是相同的文件,每次打開操作,都會有自己的操作位置,所以會有三個 File object, 而由於 /home/Henzox/file1 是 /home/Henzox/file 的硬鏈接,所以它們在磁盤上相當於同一個文件,所以三個進程其實是在操作同一個文件,幫只有一個 inode object,而 Process1 和 Process2 是使用相同的路徑打開的,所以它們共享的是一個 dentry object,因爲 dentry 代表一個目錄項結構,目錄項,故名思義,即可以是目錄,也可以是文件,因爲目錄也被當作文件來處理。而一個文件系統就會有一個超級塊來表示該文件系統下各結構體的信息,所以 inode 會指向它所在的文件系統的超級塊對象。
        那麼現在這幾個結構體之間的關係就大致明白了。

發佈了67 篇原創文章 · 獲贊 813 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章