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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

文件系统相关数据结构及相互间的关系一.详细关系: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构造缓存和hashtable,以提高系统性能。inode结构中的structinode_operations*iop为我们提供了一个inode操作列表,通过这个列表提供的函数我们可以对VFSinode结点进行各种操作。每个inode结构都有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。3.在打开文件时,要执行路径名查找。对于不在目录项高速缓存内的路径名元素,会创建一个新的目录项对象和索引节点对象。当VFS访问一个Ext2磁盘索引节点时,它会创建一个ext2_inode_info类型的索引节点描述符二.数据结构分析:structfs_struct{atomic_tcount;/*计数器*/rwlock_tlock;/*读写锁*/intumask;structdentry*root,*pwd,*altroot;/*本进程根目录、进程当前所在目录、替换根目录*/structvfsmount*rootmnt,*pwdmnt,*altrootmnt;/*本进程根目录的安装点、进程当前所在目录的安装点、替换根目录的安装点*/};structdentry{atomic_td_count;/*目录项对象使用计数器,可以有未使用态,使用态和负状态*/unsignedintd_flags;/*目录项标志*/structinode*d_inode;/*与文件名关联的索引节点*/structdentry*d_parent;/*父目录的目录项对象*/structlist_headd_hash;/*散列表表项的指针*/structlist_headd_lru;/*未使用链表的指针*/structlist_headd_child;/*父目录中目录项对象的链表的指针*/structlist_headd_subdirs;/*对目录而言,表示子目录目录项对象的链表*/structlist_headd_alias;/*相关索引节点(别名)的链表*/intd_mounted;/*对于安装点而言,表示被安装文件系统根项*/structqstrd_name;/*文件名*/unsignedlongd_time;/*被d_revalidate使用*/structdentry_operations*d_op;/*目录项方法*/structsuper_block*d_sb;/*文件的超级块对象*/vunsignedlongd_vfs_flags;/*标志位*/void*d_fsdata;/*与文件系统相关的数据*/unsignedchard_iname[DNAME_INLINE_LEN];/*存放短文件名*/};structinode{structhlist_nodei_hash;/*哈希表*/structlist_headi_list;/*索引节点链表*/structlist_headi_dentry;/*目录项链表*/unsignedlongi_ino;/*节点号*/atomic_ti_count;/*引用记数*/umode_ti_mode;/*访问权限控制*/unsignedinti_nlink;/*硬链接数*/uid_ti_uid;/*使用者id*/gid_ti_gid;/*使用者id组*/kdev_ti_rdev;/*实设备标识符*/loff_ti_size;/*以字节为单位的文件大小*/structtimespeci_atime;/*最后访问时间*/structtimespeci_mtime;/*最后修改(modify)时间*/structtimespeci_ctime;/*最后改变(change)时间*/unsignedinti_blkbits;/*以位为单位的块大小*/unsignedlongi_blksize;/*以字节为单位的块大小*/unsignedlongi_version;/*版本号*/unsignedlongi_blocks;/*文件的块数*/unsignedshorti_bytes;/*使用的字节数*/spinlock_ti_lock;/*自旋锁*/structrw_semaphorei_alloc_sem;/*索引节点信号量*/structinode_operations*i_op;/*索引节点操作表*/structfile_operations*i_fop;/*默认的索引节点操作*/structsuper_block*i_sb;/*相关的超级块*/structfile_lock*i_flock;/*文件锁链表*/structaddress_space*i_mapping;/*相关的地址映射*/structaddress_spacei_data;/*设备地址映射*/structdquot*i_dquot[MAXQUOTAS];/*节点的磁盘限额*/structlist_headi_devices;/*块设备链表*/structpipe_inode_info*i_pipe;/*管道信息*/structblock_device*i_bdev;/*块设备驱动*/unsignedlongi_dnotify_mask;/*目录通知掩码*/structdnotify_struct*i_dnotify;/*目录通知*/unsignedlongi_state;/*状态标志*/unsignedlongdirtied_when;/*首次修改时间*/unsignedinti_flags;/*文件系统标志*/unsignedchari_sock;/*套接字*/atomic_ti_writecount;/*写者记数*/void*i_security;/*安全模块*/__u32i_generation;/*索引节点版本号*/union{structminix_inode_infominix_i;/*minix:迷你版本的类Unix操作系统*/structext2_inode_infoext2_i;/*ext2:GNU/Linux系统中标准的文件系统*/structhpfs_inode_infohpfs_i;/*hpfs:IBM为PC开发的os/2操作系统所采用的文件系统。这种格式只用于硬盘,而OS/2所用的软盘则与msdos相同*/structntfs_inode_infontfs_i;/*ntfs:windowsNT的文件系统*/structmsdos_inode_infomsdos_i;/*msdos:微软非NT内核的操作系统,具有只读、系统、隐藏三个属性*/structumsdos_inode_infoumsdos_i;/*umsdos:一种特殊的“文件系统”,用msdos文件系统来模拟Ext2文件系统。其好处是可以再磁盘上的DOS分区中直接运行linux,而不需要先重新划分区并格式化,坏处首先是降低了运行的速度,而且这样一来就对DOS文件系统的病毒失去了免疫力*/structiso_inode_infoisofs_i;/*isofs:用于CDROM(光盘)*/structnfs_inode_infonfs_i;/*nfs:“网络文件系统”NFS*/structsysv_inode_infosysv_i;/*sysv:unix系统V的文件系统S5FS*/structaffs_inode_infoaffs_i;/*affs:BSD对S5FS作了很大的改进,改进后的文件系统为“快速文件系统”FFS。由于当时Amiga公司在其操作系统AmigaOS中采用了这种文件系统,所以称为affs*/structufs_inode_infoufs_i;/*ufs:这是FFS的另一种实现,广泛适用于BSD的各种版本以及各种Unix变种版本,因而实际上成为了“unixfilesystem”*/structefs_inode_infoefs_i;/*efs:SiliconGraphics的IRIX文件系统*/structromfs_inode_inforomfs_i;/*romfs:“只读”文件系统。这种文件系统可以建立在只读介质上。在内核中占的地盘小。比较适合一些嵌入式系统*/structshmem_inode_infoshmem_i;/*shmem:可以帮助Java和COM(比如VB和ASP)的程序员使用共享内存*/structcoda_inode_infocoda_i;/*coda:也是一种网络文件系统,是对nfs的一种改进*/structsmb_inode_infosmbfs_i;/*smbfs:即samba,使win95,winNT等系统可以通过网络访问linux文件系统*/structhfs_inode_infohfs_i;/*hfs:AppleMacintosh的文件系统*/structadfs_inode_infoadfs_i;/*adfs:Acom公司开发了一种基于ARM处理器的RISCPC,其操作系统称为RISCOS,而文件系统即为“AcornDiskFilingSystem”*/structqnx4_inode_infoqnx4_i;/*qnx4:QNX是一种操作系统,常用于嵌入式系统,其文件系统为QNXFS*/structbfs_inode_infobfs_i;/*bfs:用于SCOUnixWare的一种文件系统*/structudf_inode_infoudf_i;/*udf:最新的“通用文件系统”,即用于DVD和可写光盘,也可用于硬盘*/structncp_inode_infoncpfs_i;/*ncpfs:Nove

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功