欢迎来到天天文库
浏览记录
ID:18313610
大小:96.50 KB
页数:6页
时间:2018-09-16
《linux文件系统相关数据结构及相互间的关系案例分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、文件系统相关数据结构及相互间的关系一.详细关系:1.进程要访问文件,就要首先与文件系统中要访问的文件建立连接,在进程数据结构task_struct中,有两个指针fs和files,一个指向fs_struct数据结构,是关于文件系统的信息;另一个指向files_struct数据结构,是关于已打开文件的信息。2.fs_struct数据结构中有dentry结构指针,dentry结构中有inode结构指针。Dentry结构所代表的是逻辑意义上的文件,记录的是其逻辑上的属性,而inode结构所代表的是物理意义上的文件,记录的是物理上的属性。它们之间的关系是多对一的关系。Inod
2、e结构中定义union数据结构用于大致反应Linux内核目前所支持的各种文件系统。2.1.dentry结构中有一个d_inode指针指向相应的inode结构,dentry结构代表的是逻辑意义上的文件,描述文件的逻辑属性,因此目录项在磁盘上并没有对应的映像;而inode结构代表的是物理意义上的文件,记录其物理属性,对与一个具体的文件系统,inode结构在磁盘上有对应的映像。由此可见,一个索引节点对象可能对应多个目录项对象。一个有效的dentry结构必定对应一个inode结构,这是因为一个目录项要么代表一个文件,要么代表一个目录,而目录实际上也是文件。所以只要dentr
3、y结构是有效的,则其指针d_inode必定指向一个inode结构。反之则不成立,因为一个inode可以对应多个dentry结构,即一个文件可以有不止一个文件名或路径名。因为一个已经建立的文件可以被链接到其他文件名。所以inode结构中有一个i_dentry,凡是代表着同一个文件的所有目录项都通过其dentry结构体中的d_alias域挂入相应的inode结构体中的i_dentry队列中。2.2.inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode
4、结构中的静态信息取自物理设备上的文件系统,由文件系统指定的函数填写,它只存在于内存中,可以通过inode缓存访问。虽然每个文件都有相应的inode结点,但是只有在需要的时候系统才会在内存中为其建立相应的inode数据结构,建立的inode结构将形成一个链表,我们可以通过遍历这个链表去得到我们需要的文件结点,VFS也为已分配的inode构造缓存和hashtable,以提高系统性能。inode结构中的structinode_operations*iop为我们提供了一个inode操作列表,通过这个列表提供的函数我们可以对VFSinode结点进行各种操作。每个inode结构
5、都有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。3.在打开文件时,要执行路径名查找。对于不在目录项高速缓存内的路径名元素,会创建一个新的目录项对象和索引节点对象。当VFS访问一个Ext2磁盘索引节点时,它会创建一个ext2_inode_info类型的索引节点描述符二.数据结构分析:structfs_struct{atomic_tcount;/*计数器*/rwlock_tlock;/*读写锁*/intumask;structdentry*root,*pwd,*altroot;/*本进程根目录、进程当前所在目录、替换根目录*/structvfsmou
6、nt*rootmnt,*pwdmnt,*altrootmnt;/*本进程根目录的"安装点"、进程当前所在目录的"安装点"、替换根目录的"安装点"*/};structdentry{ atomic_td_count;/*目录项对象使用计数器,可以有未使用态,使用态和负状态*/ unsignedintd_flags;/*目录项标志*/ structinode*d_inode;/*与文件名关联的索引节点*/ structdentry*d_parent;/*父目录的目录项对象*/ structlist_headd_hash;/*散列表表项的指针*/ structl
7、ist_headd_lru;/*未使用链表的指针*/ structlist_headd_child;/*父目录中目录项对象的链表的指针*/ structlist_headd_subdirs;/*对目录而言,表示子目录目录项对象的链表*/ structlist_headd_alias;/*相关索引节点(别名)的链表*/ intd_mounted;/*对于安装点而言,表示被安装文件系统根项*/ structqstrd_name;/*文件名*/ unsignedlongd_time;/*被d_revalidate使用*/ structdentry_ope
此文档下载收益归作者所有