文件系统相关数据结构及相互间的关系 一.详细关系: 1
进程要访问文件,就要首先与文件系统中要访问的文件建立连接,在进程数据结构 task_struct 中,有两个指针 fs 和 files,一个指向 fs_struct 数据结构,是关于文件系统的信息;另一个指向 files_struct 数据结构,是关于已打开文件的信息
fs_struct 数据结构中有 dentry 结构指针,dentry 结构中有 inode 结构指针
Dentry 结构所代表的是逻辑意义上的文件,记录的是其逻辑上的属性,而 inode结构所代表的是物理意义上的文件,记录的是物理上的属性
它们之间的关系是多对一的关系
Inode 结构中定义 union 数据结构用于大致反应 Linux 内核目前所支持的各种文件系统
dentry 结构中有一个 d_inode 指针指向相应的 inode 结构,dentry 结构代表的是逻辑意义上的文件,描述文件的逻辑属性,因此目录项在磁盘上并没有对应的映像;而 inode 结构代表的是物理意义上的文件,记录其物理属性,对与一个具体的文件系统,inode 结构在磁盘上有对应的映像
由此可见,一个索引节点对象可能对应多个目录项对象
一个有效的 dentry 结构必定对应一个 inode结构,这是因为一个目录项要么代表一个文件,要么代表一个目录,而目录实际上也是文件
所以只要 dentry 结构是有效的,则其指针 d_inode 必定指向一个inode 结构
反之则不成立,因为一个 inode 可以对应多个 dentry 结构,即一个文件可以有不止一个文件名或路径名
因为一个已经建立的文件可以被链接到其他文件名
所以 inode 结构中有一个 i_dentry,凡是代表着同一个文件的所有目录项都通过其 dentry 结构体中的 d_alias 域挂入相应的