标签:vfs super block dentry inode file
一切皆为文件,在类 unix 系统中,这一思想影响了一代操作系统,作为著名的 Linux,如何实现这一思想,如何让市面上所有的文件系统能够完美兼容地运行在 Linux 系统中,这背后显然隐藏着一系统复杂的机制,本文将带你窥探其中的奥秘。下图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 会指向它所在的文件系统的超级块对象。
那么现在这几个结构体之间的关系就大致明白了。
标签:vfs super block dentry inode file
原文地址:http://blog.csdn.net/henzox/article/details/42777327