第二版linux操作系统原理与应用chp8

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

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

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

资源描述

第八章文件系统Linux文件系统虚拟文件系统文件系统的注册、安装与卸载文件的打开与读写文件系统的编写Linux的文件结构简单介绍Linux下文件存放在存储设备上的组织方法Linux的文件类型文件所在的物理空间存取权限和文件模式Linux文件系统Linux文件系统基础文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。Linux使用标准的目录结构-树型结构,无论操作系统管理几个磁盘分区,这样的目录树只有一个制定这样一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理Linux的文件结构/(根目录)bindevetchomelibsbintmprootmntprocusrvar图8.1Linux目录树结构Linux下的主要文件类型:常规文件:文本文件和二进制文件目录文件:将文件的名称和它的索引节点号结合在一起的一张表设备文件:每种I/O设备对应一个设备文件管道文件:主要用于在进程间传递数据,又称先进先出(FIFO)文件链接文件:又称符号链接文件,它提供了共享文件的一种方法文件类型Linux给文件设定了一定的访问权限Linux对文件的访问设定了三级权限:文件所有者,与文件所有者同组的用户,其他用户。对文件的访问主要是三种处理操作:读取、写入和执行访问权限和文件模式图8.3文件访问权和访问模式所有者同组用户其他用户读写执行读写执行读写执行RWXRWXRWX文件系统:文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构Linux文件系统使用索引节点来记录文件信息,系统给每个索引节点分配了一个号码,称为索引节点号。文件系统正是靠这个索引节点号来识别一个文件Linux文件系统可以用链接命令ln(Link)对一个已存在的文件再建立一个新的链接,而不复制文件的内容硬链接(hardlink):让一个文件对应一个或多个文件名,或者说把我们使用的文件名和文件系统使用的节点号链接起来,这些文件名可以在同一目录或不同目录软链接(也叫符号链接):是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件软链接和硬链接安装文件系统将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为“安装(mount)”。把该子目录称为“安装点(mountpoint)”EXT2是Linux的标准文件系统,系统把它的磁盘分区做为系统的根文件系统,EXT2以外的文件系统则安装在根文件系统下的某个目录下,成为系统树型结构中的一个分枝安装一个文件系统用mount命令虚拟文件系统的引入VFS中对象的演绎VFS的超级块VFS的索引节点目录项对象与进程相关的文件结构虚拟文件系统Linux最初采用Minix的文件系统,其大小限于64MB,文件名长度也限于14个字节Linux经过一段时间的改进和发展,特别是吸取了Unix文件系统的经验,最后形成了Ext2文件系统为了支持其他各种不同的文件系统,Linux提供了一种统一的框架,就是所谓的虚拟文件系统转换(VirtualFilesystemSwitch),简称虚拟文件系统(VFS)。虚拟文件系统的引入虚拟文件系统的引入用户程序虚拟文件系统VFSMinixExt2……FAT设备文件文件系统的系统调用接口,包括read()、write()、open()、close()等系统调用对应的内核函数sys_read()sys_write()、sys_open()等支撑VFS的具体文件系统用户空间内核空间图8.4VFS与具体文件系统之间的关系超级块(superblock)对象:存放系统中已安装文件系统的有关信息索引节点(inode)对象:存放关于具体文件的一般信息目录项(dentry)对象:存放目录项与对应文件进行链接的信息文件(file)对象:存放打开文件与进程之间进行交互的有关信息VFS中对象的演绎超级块用来描述整个文件系统的信息。每个具体的文件系统都有各自的超级块VFS超级块是各种具体文件系统在安装时建立的,并在卸载时被自动删除,其数据结构是super_block所有超级块对象以双向环形链表的形式链接在一起与超级块关联的方法就是超级块操作表。这些操作是由数据结构super_operations来描述VFS超级块数据结构structsuper_block{dev_ts_dev;/*具体文件系统的块设备标识符*/unsignedlongs_blocksize;/*以字节为单位数据块的大小*/unsignedchars_blocksize_bits;/*块大小的值占用的位数*/…structlist_heads_list;/*指向超级块链表的指针*/structfile_system_type*s_type;/*指向文件系统的file_system_type数据结构的指针*/structsuper_operations*s_op;/*指向具体文件系统的用于超级块操作的函数集合*/structmutexs_lock;structlist_heads_dirty;/*dirtyinodes*/…void*;s_fs_info/*指向具体文件系统的超级块*/};VFS超级块数据结构文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构inode中。在同一个文件系统中,每个索引节点号都是唯一的inode中有两个设备号,i_dev(常规文件的设备号)和i_rdev(某一设备的设备号)VFS的索引节点structinode{structlist_headi_hash;/*指向哈希链表的指针*/structlist_headi_list;/*指向索引节点链表的指针*/structlist_headi_dentry;/*指向目录项链表的指针*/…unsignedlongi_ino;/*索引节点号*/umode_ti_mode;/*文件的类型与访问权限*/kdev_ti_rdev;/*实际设备标识号*/uid_ti_uid;/*文件拥有者标识号*/gid_ti_gid/*文件拥有者所在组的标识号*/…structinode_operations*i_op;/*指向对该节点进行操作的一组函数*/structsuper_block*i_sb;/*指向该文件系统超级块的指针*/atomic_ti_count;/*当前使用该节点的进程数。计数为0,表明该节点可丢弃或被重新使用*/structfile_operations*i_fop;/*指向文件操作的指针*/…structvm_area_struct*i_op/*指向对文件进行映射所使用的虚存区指针*/unsignedlongi_state;/*索引节点的状态标志*/unsignedinti_flags;/*文件系统的安装标志*/union{/*联合体结构,其成员指向具体文件系统的inode结构*/structminix_inode_infominix_i;structExt2_inode_infoExt2_i;…}每个文件除了有一个索引节点inode数据结构外,还有一个目录项dentry数据结构。dentry结构代表的是逻辑意义上的文件,描述的是文件逻辑上的属性,目录项对象在磁盘上并没有对应的映像inode结构代表的是物理意义上的文件,记录的是物理上的属性,对于一个具体的文件系统,其inode结构在磁盘上就有对应的映像一个索引节点对象可能对应多个目录项对象目录项对象structdentry{atomic_td_count;/*目录项引用计数器*/unsignedintd_flags;/*目录项标志*/structinode*d_inode;/*与文件名关联的索引节点*/structdentry*d_parent;/*父目录的目录项*/structlist_headd_hash;/*目录项形成的哈希表*/structlist_headd_lru;/*未使用的LRU链表*/structlist_headd_child;/*父目录的子目录项所形成的链表*/structlist_headd_subdirs;/*该目录项的子目录所形成的链表*/structlist_headd_alias;/*索引节点别名的链表*/intd_mounted;/*目录项的安装点*/structqstrd_name;/*目录项名(可快速查找)*/structdentry_operations*d_op;/*操作目录项的函数*/structsuper_block*d_sb;/*目录项树的根(即文件的超级块)*/unsignedlongd_vfs_flags;void*d_fsdata;/*具体文件系统的数据*/unsignedchard_iname[DNAME_INLINE_LEN];/*短文件名*/……};目录项对象的数据结构进程是通过文件描述符来访问文件的Linux中专门用了一个file文件对象来保存打开文件的文件位置,这个对象称为打开的文件描述(openfiledescription)file结构中主要保存了文件位置,此外,还把指向该文件索引节点的指针也放在其中。file结构形成一个双链表,称为系统打开文件表。与进程相关的文件结构-文件对象文件对象数据结构的主要域structfile{structlist_headf_list;/*所有打开的文件形成一个链表*/structdentry*f_dentry;/*与文件相关的目录项对象*/structvfsmount*f_vfsmnt;/*该文件所在的已安装文件系统*/structfile_operations*f_op;/*指向文件操作表的指针*/mode_tf_mode;/*文件的打开模式*/loff_tf_pos;/*文件的当前位置*/unsignedshortf_flags;/*打开文件时所指定的标志*/unsignedshortf_count;/*使用该结构的进程数*/…};文件描述符是用来描述打开的文件的。每个进程用一个files_struct结构来记录文件描述符的使用情况,这个files_struct结构称为用户打开文件表,它是进程的私有数据与进程相关的文件结构-用户打开文件表文件文件文件stdin0stdin1stdin2stdin3图8.5文件描述符数组fd用户打开文件表数据结构structfiles_struct{atomic_tcount;/*共享该表的进程数*/rwlock_tfile_lock;/*保护以下的所有域*/intmax_fds;/*当前文件对象的最大数*/intmax_fdset;/*当前文件描述符的最大数*/intnext_fd;/*已分配的文件描述符加1*/structfile**fd;/*指向文件对象指针数组的指针*/fd_set*close_on_exec;/*指向执行exec()时需要关闭的文件描述符*/fd_set*open_fds;/*指向打开文件描述符的指针*/fd_setclose_on_exec_init;/*执行exec()时需要关闭的文件描述符的初值集合*/fd_setopen_fds_init;/*文件描述符的初值集合*/structfile*fd_array[32];/*文件对象指针的初始化数组*/};fs_struct结构描述进程与文件系统的关系与进程相关的文件结构-fs_struct结构structfs_struct{atomic_tcount;rwlock_tlock;intumask;structdentry*root,*pwd,*altroot;structvfsmount*rootmnt,*pwdmnt,*altrootmnt;};count域表示共享同一

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

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

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

×
保存成功