1. 程式人生 > >VFS對象總結

VFS對象總結

https 文件名 有一個 權限 使用 系統類型 clas 存儲 node

關鍵術語:

超級快(super block)對象:

一個超級塊對應一個具體的文件系統(已經安裝的文件系統類型如 ext2,此處是實際的文件系統,不是 VFS)。

iNode 對象:

inode是內核文件對象的元數據,inode 僅僅只是保存了文件對象的屬性信息,包括:權限、屬組、數據塊的位置、時間戳等信息。

file 對象:

註意 file 對象描述的是進程已經打開的文件。因為一個文件可以被多個進程打開,所以一個文件可以存在多個文件對象。但是由於文件是唯一的,那麽 inode 就是唯一的,目錄項也是定的!

dentry 對象:

dentry 是一個純粹的內存結構,由文件系統在提供文件訪問的過程中在內存中直接建立。dentry 中包含了文件名,文件的 inode 號等信息。

關系:

1. 超級塊對象和inode對象分別對應有物理數據,在磁盤上有靜態信息。

2. 目錄項對象和文件對象描述的是一種關系,前者描述的文件與文件名的關系;後者描述的是進程與文件的關系,所以沒有對應物理數據。例如有三個不同的進程打開同一個文件,其中有兩個進程使用了相同的硬鏈接。三個進程擁有各自的file object,而只有兩個dentry(同一個硬鏈接對應一個dentry,dentry不隨進程打開文件而增加或改變)。兩個dentry都指向同一個inode。

3. 進程每打開一個文件,就會有一個file結構與之對應。同一個進程可以多次打開同一個文件而得到多個不同的file結構,file結構描述被打開文件的屬性,如文件的當前偏移量等信息。

4. 兩個不同的file結構可以對應同一個dentry結構。進程多次打開同一個文件時,對應的只有一個dentry結構。

5. 在存儲介質中,每個文件對應唯一的inode結點,但是每個文件又可以有多個文件名。即可以通過不同的文件名訪問同一個文件。這裏多個文件名對應一個文件的關系在數據結構中表示就是dentry和inode的關系。

6. Inode中不存儲文件的名字,它只存儲節點號;而dentry則保存有名字和與其對應的節點號,所以就可以通過不同的dentry訪問同一個inode。

7. 不同的dentry則是同個文件鏈接(ln命令)來實現的

圖解:

技術分享圖片

https://www.cnblogs.com/licongyu/p/5031924.html

VFS對象總結