Linux文件系统相关数据结构及相互间的关系案例分析.doc_第1页
Linux文件系统相关数据结构及相互间的关系案例分析.doc_第2页
Linux文件系统相关数据结构及相互间的关系案例分析.doc_第3页
Linux文件系统相关数据结构及相互间的关系案例分析.doc_第4页
Linux文件系统相关数据结构及相互间的关系案例分析.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文件系统相关数据结构及相互间的关系1 详细关系: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结构中的struct inode_operations *iop为我们提供了一个inode操作列表,通过这个列表提供的函数我们可以对VFS inode结点进行各种操作。每个inode结构都有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。3.在打开文件时,要执行路径名查找。对于不在目录项高速缓存内的路径名元素,会创建一个新的目录项对象和索引节点对象。当VFS访问一个Ext2磁盘索引节点时,它会创建一个ext2_inode_info类型的索引节点描述符 2 数据结构分析: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; /* 相关索引节点(别名)的链表 */int d_mounted; /* 对于安装点而言,表示被安装文件系统根项 */struct qstr d_name; /* 文件名 */unsigned long d_time; /* 被d_revalidate使用 */struct dentry_operations *d_op; /* 目录项方法 */struct super_block * d_sb; /* 文件的超级块对象 */vunsigned long d_vfs_flags; /* 标志位 */void * d_fsdata; /* 与文件系统相关的数据 */unsigned char d_iname DNAME_INLINE_LEN; /* 存放短文件名 */; struct inode struct hlist_node i_hash; /* 哈希表 */struct list_head i_list; /* 索引节点链表 */struct list_head i_dentry; /* 目录项链表 */unsigned long i_ino; /* 节点号 */atomic_t i_count; /* 引用记数 */umode_t i_mode; /* 访问权限控制 */unsigned int i_nlink; /* 硬链接数 */uid_t i_uid; /* 使用者id */gid_t i_gid; /* 使用者id组 */kdev_t i_rdev; /* 实设备标识符 */loff_t i_size; /* 以字节为单位的文件大小 */struct timespec i_atime; /* 最后访问时间 */struct timespec i_mtime; /* 最后修改(modify)时间 */struct timespec i_ctime; /* 最后改变(change)时间 */unsigned int i_blkbits; /* 以位为单位的块大小 */unsigned long i_blksize; /* 以字节为单位的块大小 */unsigned long i_version; /* 版本号 */unsigned long i_blocks; /* 文件的块数 */unsigned short i_bytes; /* 使用的字节数 */spinlock_t i_lock; /* 自旋锁 */struct rw_semaphore i_alloc_sem; /* 索引节点信号量 */struct inode_operations *i_op; /* 索引节点操作表 */struct file_operations *i_fop; /* 默认的索引节点操作 */struct super_block *i_sb; /* 相关的超级块 */struct file_lock *i_flock; /* 文件锁链表 */struct address_space *i_mapping; /* 相关的地址映射 */struct address_space i_data; /* 设备地址映射 */struct dquot *i_dquotMAXQUOTAS;/* 节点的磁盘限额 */struct list_head i_devices; /* 块设备链表 */struct pipe_inode_info *i_pipe; /* 管道信息 */struct block_device *i_bdev; /* 块设备驱动 */unsigned long i_dnotify_mask;/* 目录通知掩码 */struct dnotify_struct *i_dnotify; /* 目录通知 */unsigned long i_state; /* 状态标志 */unsigned long dirtied_when;/* 首次修改时间 */unsigned int i_flags; /* 文件系统标志 */unsigned char i_sock; /* 套接字 */atomic_t i_writecount; /* 写者记数 */void *i_security; /* 安全模块 */_u32 i_generation; /* 索引节点版本号 */union struct minix_inode_infominix_i;/* minix:迷你版本的类Unix操作系统 */struct ext2_inode_infoext2_i; /* ext2:GNU/Linux 系统中标准的文件系统 */struct hpfs_inode_infohpfs_i;/* hpfs:IBM为PC开发的os/2操作系统所采用的文件系统。这种格式只用于硬盘,而OS/2所用的软盘则与msdos相同 */struct ntfs_inode_infontfs_i;/* ntfs:windows NT 的文件系统 */struct msdos_inode_infomsdos_i;/* msdos: 微软非NT内核的操作系统 ,具有只读、系统、隐藏三个属性 */struct umsdos_inode_infoumsdos_i;/* umsdos:一种特殊的“文件系统”,用msdos文件系统来模拟Ext2文件系统。其好处是可以再磁盘上的DOS分区中直接运行linux,而不需要先重新划分区并格式化,坏处首先是降低了运行的速度,而且这样一来就对DOS文件系统的病毒失去了免疫力 */struct iso_inode_infoisofs_i;/* isofs:用于CDROM(光盘) */struct nfs_inode_infonfs_i;/* nfs:“网络文件系统”NFS */struct sysv_inode_infosysv_i;/* sysv:unix系统V的文件系统S5FS */struct affs_inode_infoaffs_i;/* affs:BSD对S5FS作了很大的改进,改进后的文件系统为“快速文件系统”FFS。由于当时Amiga公司在其操作系统AmigaOS中采用了这种文件系统,所以称为affs */struct ufs_inode_infoufs_i;/* ufs:这是FFS的另一种实现,广泛适用于BSD的各种版本以及各种Unix变种版本,因而实际上成为了“unix file system” */struct efs_inode_infoefs_i;/* efs:Silicon Graphics的IRIX文件系统 */struct romfs_inode_inforomfs_i;/* romfs:“只读”文件系统。这种文件系统可以建立在只读介质上。在内核中占的地盘小。比较适合一些嵌入式系统 */struct shmem_inode_infoshmem_i;/* shmem:可以帮助Java和COM(比如VB和ASP)的程序员使用共享内存 */struct coda_inode_infocoda_i;/* coda:也是一种网络文件系统,是对nfs的一种改进 */struct smb_inode_infosmbfs_i;/* smbfs:即samba,使win95,win NT等系统可以通过网络访问linux文件系统 */struct hfs_inode_infohfs_i;/* hfs:Apple Macintosh的文件系统 */struct adfs_inode_infoadfs_i;/* adfs:Acom公司开发了一种基于ARM处理器的RISC PC,其操作系统称为RISCOS,而文件系统即为“Acorn Disk Filing System” */struct qnx4_inode_infoqnx4_i;/* qnx4:QNX是一种操作系统,常用于嵌入式系统,其文件系统为QNXFS */struct bfs_inode_infobfs_i;/* bfs:用于SCO Unix Ware的一种文件系统 */struct udf_inode_infoudf_i;/* udf:最新的“通用文件系统”,即用于DVD和可写光盘,也可用于硬盘 */struct ncp_inode_infoncpfs_i;/* ncpfs:Novell NetWare文件系统 */struct proc_inode_infoproc_i;/* proc:目录/pro下的特殊文件,这些文件对系统管理和程序调试都很有用处 */struct socketsocket_i;/* socket:也是一种特殊文件 */struct usbdev_inode_info usbdev_i;/* usbev:“通行串行总线”USB的驱动程序 */void *gener

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论