文件系统相关数据结构及相互间的关系 一.详细关系: 1.进程要访问文件,就要首先与文件系统中要访问的文件建立连接,在进程数据结构 task_struct 中,有两个指针 fs 和 files,一个指向 fs_struct 数据结构,是关于文件系统的信息;另一个指向 files_struct 数据结构,是关于已打开文件的信息。 2.fs_struct 数据结构中有 dentry 结构指针,dentry 结构中有 inode 结构指针。Dentry 结构所代表的是逻辑意义上的文件,记录的是其逻辑上的属性,而 inode结构所代表的是物理意义上的文件,记录的是物理上的属性。它们之间的关系是多对一的关系。Inode 结构中定义 union 数据结构用于大致反应 Linux 内核目前所支持的各种文件系统。 2.1.dentry 结构中有一个 d_inode 指针指向相应的 inode 结构,dentry 结构代表的是逻辑意义上的文件,描述文件的逻辑属性,因此目录项在磁盘上并没有对应的映像;而 inode 结构代表的是物理意义上的文件,记录其物理属性,对与一个具体的文件系统,inode 结构在磁盘上有对应的映像。由此可见,一个索引节点对象可能对应多个目录项对象。一个有效的 dentry 结构必定对应一个 inode结构,这是因为一个目录项要么代表一个文件,要么代表一个目录,而目录实际上也是文件。所以只要 dentry 结构是有效的,则其指针 d_inode 必定指向一个inode 结构。反之则不成立,因为一个 inode 可以对应多个 dentry 结构,即一个文件可以有不止一个文件名或路径名。因为一个已经建立的文件可以被链接到其他文件名。所以 inode 结构中有一个 i_dentry,凡是代表着同一个文件的所有目录项都通过其 dentry 结构体中的 d_alias 域挂入相应的 inode 结构体中的i_dentry 队列中。 2.2.inode 包含文件访问权限、属主、组、大小、生成时间、访问时间、 最后修改时间等信息。它是 linux 管理文件系统的最基本单位,也是文件系 统连接任何子目录、文件的桥梁。inode 结构中的静态信息取自物理设备上 的文件系统,由文件系统指定的函数填写,它只存在于内存中,可以通过 inode 缓存访问。虽然每个文件都有相应的 inode 结点,但是只有在需要的时 候系统才会在内存中为其建立相应的 inode 数据结构,建立的 inode 结构将形 成一个链表,我们可以通过遍历这个链表去得到我们需要的文件结点,VFS 也 为已分配的 inode 构造缓存和 hash table,以提高系统性能。inode ...