Linux文件系统相关数据结构与相互间的关系案例分析.doc

Linux文件系统相关数据结构与相互间的关系案例分析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件系统相关数据结构及相互间的关系 详细关系: 进程要访问文件,就要首先与文件系统中要访问的文件建立连接,在进程数据结构task_struct中,有两个指针fs和files,一个指向fs_struct数据结构,是关于文件系统的信息;另一个指向files_struct数据结构,是关于已打开文件的信息。 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结构中的 struct inode_operations *iop为我们提供了一个inode操作列表,通过这个 列表提供的函数我们可以对VFS inode结点进行各种操作。每个inode结构都 有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。 3.在打开文件时,要执行路径名查找。对于不在目录项高速缓存内的路径名元素,会创建一个新的目录项对象和索引节点对象。当VFS访问一个Ext2磁盘索引节点时,它会创建一个ext2_inode_info类型的索引节点描述符 数据结构分析: struct fs_struct { atomic_t count;/* 计数器 */ rwlock_t lock;/* 读写锁 */ int umask; struct dentry * root, * pwd, * altroot;/* 本进程根目录、进程当前所在目录、替换根目录 */ struct vfsmount * rootmnt, * pwdmnt, * altrootmnt;/* 本进程根目录的安装点、进程当前所在目录的安装点、替换根目录的安装点 */ }; struct dentry {   atomic_t d_count; /* 目录项对象使用计数器,可以有未使用态,使用态和负状态 */   unsigned int d_flags; /* 目录项标志 */   struct inode * d_inode; /* 与文件名关联的索引节点 */   struct dentry * d_parent; /* 父目录的目录项对象 */   struct list_head d_hash; /* 散列表表项的指针 */   struct list_head d_lru; /* 未使用链表的指针 */   struct list_head d_child; /* 父目录中目录项对象的链表的指针 */   struct list_head d_subdirs; /* 对目录而言,表示子目录目录项对象的链表 */   struct list_head d_alias; /* 相关索引节点(别名)的链表 */  

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档