第章Unix文件管理.ppt
文本预览下载声明
操作系统教程 西安电子科技大学计算机学院 UNIX的文件系统 5.9.3 UNIX的文件系统 改进的多级文件目录,可以建立文件别名(索引结点方式和符号链接方式),有用户访问权限控制(文件的读R、写W和执行X,相应于目录的检索文件、增删文件和进入目录) 注意:如果对文件具有写权限,而对文件所在目录没有写权限,仍然可以改变该文件的长度(如添加数据),因为除文件名外的其他文件目录内容都存放在索引结点而不是在目录文件。 文件类型:常规文件(ordinary file)、目录文件(directory)、特殊文件(special file)如外设、先进先出文件(FIFO)如命名管道; 2. 磁盘文件卷结构 超级块:描述文件系统的状态,包括磁盘空闲块栈,空闲i结点栈 i节点(inode list):存放文件说明信息,每项64字节 目录文件:每个目录项16字节。文件名区分大小写。 文件分配:直接索引,一级、二级、三级间接索引 3. 空闲i结点的分配和释放 每次从磁盘上寻找一批空闲i结点,把它们的编号记录在内存的空闲i结点栈中。其中“铭记”i结点(remembered inode)是栈中编号最大的i结点。 i结点分配时,移出栈顶的i结点。若到达铭记i结点则表示栈已空,需要从磁盘上重新寻找。(铭记i结点在栈底) struct inode{ struct inode *i_forw; /*内存I节点的散列队列双向循环勾连指针*/ struct inode *i_back; char i_flag; /*状态标志*/ cnt_t i_count; /*引用计数,表示该文件打开了几次*/ dev_t i_dev; /*文件所在设备号*/ int i_number; /*对应外存i节点号*/ struct{ union{ daddr_t i_a[13]; /*文件索引表,存放文件的物理盘块号*/ short i_f[26]; /*管道文件的地址索引表*/ }i_p; daddr_t i_l; /*最近一次读入的文件逻辑块,用于预读*/ }i_blk; … }inode[NINODE]; 内存I节点数NINODE一般为100。 外索引节点 每个文件有一个存放在磁盘索引节点区的索引节点,称为磁盘索引节点,它包括以下内容: struct inode{ ushort di_mode; /*文件控制模式*/ short di_nlink; /*文件的链接数*/ ushort di_uid; /*文件主用户标识*/ ushort di_gid; /*文件主用户标识*/ off_t di_size; /*文件长度,以字节为单位*/ char di_addr[40]; /*地址索引表,存放文件的盘块号*/ time_t di_atime; /*文件最近一次访问时间*/ time_t di_mtime; /*文件最近一次修改时间*/ time_t di_ctime; /*文件最近一次创建时间*/ }; 2.系统打开文件表 一个文件可以被同一进程或不同进程,用同一或不同路径名,相同或不同的打开方式(读、写)同时打开。 系统打开文件表 struct file { unsigned short f_flags; /* 文件操作标志 */ unsigned short f_count; /* 共享该结构体的计数值 */ struct inode * f_inode; /* 指向文件对应的内存inode */ loff_t f_pos; /* 文件的当前读写位置 */ }; 4. 磁盘空闲块的分配和释放 采用成组链接法,把链表和索引相结合。每一组50块,用索引表表示;各组间通过链表指针串在一起,构成链表。链表的开头是超级块中的磁盘空闲块栈,在运行时被读入到内存中。栈计数count是栈中的空闲块数目,栈中的元素是空闲块编
显示全部