《第6章Unix管理.ppt》由会员分享,可在线阅读,更多相关《第6章Unix管理.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、操作系统教程西安电子科技大学计算机学院UNIX的文件系统的文件系统5.9.3 UNIX的文件系统改进的多级文件目录改进的多级文件目录,可以建立,可以建立文件别名文件别名(索引结(索引结点方式和符号链接方式),有点方式和符号链接方式),有用户访问权限控制用户访问权限控制(文件的读(文件的读R R、写、写W W和执行和执行X X,相应于目录的检索文件、相应于目录的检索文件、增删文件和进入目录)增删文件和进入目录)注意:如果对文件具有写权限,而对文件所在目录没有写注意:如果对文件具有写权限,而对文件所在目录没有写权限,仍然可以改变该文件的长度(如添加数据),因为权限,仍然可以改变该文件的长度(如添加
2、数据),因为除文件名外的其他文件目录内容都存放在索引结点而不是除文件名外的其他文件目录内容都存放在索引结点而不是在目录文件。在目录文件。文件类型文件类型:常规文件:常规文件(ordinary file)(ordinary file)、目录文件目录文件(directory)(directory)、特殊文件特殊文件(special file)(special file)如外设、先如外设、先进先出文件进先出文件(FIFO)(FIFO)如命名管道;如命名管道;返回1.概述2.2.磁盘文件卷结构磁盘文件卷结构超级块超级块:描述文件系统的状态,包括磁盘空闲块栈,:描述文件系统的状态,包括磁盘空闲块栈,空闲
3、空闲i i结点栈结点栈i i节点节点(inodeinode list list):):存放文件说明信息,每项存放文件说明信息,每项6464字节字节目录文件目录文件:每个目录项:每个目录项1616字节。文件名区分大小写。字节。文件名区分大小写。文件分配文件分配:直接索引,一级、二级、三级间接索引:直接索引,一级、二级、三级间接索引3.3.空闲空闲i i结点的分配和释放结点的分配和释放每次从磁盘上寻找一批空闲每次从磁盘上寻找一批空闲i i结点,把它们的编号结点,把它们的编号记录在记录在内存的空闲内存的空闲i i结点栈结点栈中。其中中。其中“铭记铭记”i i结结点点(remembered(remem
4、bered inodeinode)是栈中编号最大的是栈中编号最大的i i结点。结点。i i结点分配结点分配时,移出栈顶的时,移出栈顶的i i结点。若到达结点。若到达 铭记铭记ii结点则表示栈已空,需要从磁盘上重新寻找。结点则表示栈已空,需要从磁盘上重新寻找。(铭铭记记i i结点在栈底结点在栈底)struct inode struct inode *i_forw;/*内存内存I节点的散列队列双向循环勾连指针节点的散列队列双向循环勾连指针*/struct inode *i_back;char i_flag;/*状态标志状态标志*/cnt_t i_count;/*引用计数,表示该文件打开了几次引用计
5、数,表示该文件打开了几次*/dev_t i_dev;/*文件所在设备号文件所在设备号*/int i_number;/*对应外存对应外存i节点号节点号*/structuniondaddr_t i_a13;/*文件索引表,存放文件的物理盘块号文件索引表,存放文件的物理盘块号*/short i_f26;/*管道文件的地址索引表管道文件的地址索引表*/i_p;daddr_t i_l;/*最近一次读入的文件逻辑块,用于预读最近一次读入的文件逻辑块,用于预读*/i_blk;inodeNINODE;内存内存I节点数节点数NINODE一般为一般为100。3.3.内存文件控制块内存文件控制块外索引节点每个文件有
6、一个存放在磁盘索引节点区的索引节点,称为每个文件有一个存放在磁盘索引节点区的索引节点,称为磁盘索引节点磁盘索引节点,它包括以下内容:它包括以下内容:struct inode ushort di_mode;/*文件控制模式文件控制模式*/short di_nlink;/*文件的链接数文件的链接数*/ushort di_uid;/*文件主用户标识文件主用户标识*/ushort di_gid;/*文件主用户标识文件主用户标识*/off_t di_size;/*文件长度,以字节为单位文件长度,以字节为单位*/char di_addr40;/*地址索引表,存放文件的盘块地址索引表,存放文件的盘块号号*/
7、time_t di_atime;/*文件最近一次访问时间文件最近一次访问时间*/time_t di_mtime;/*文件最近一次修改时间文件最近一次修改时间*/time_t di_ctime;/*文件最近一次创建时间文件最近一次创建时间*/;2 2系统打开文件表系统打开文件表一个文件可以被同一进程或不同进程,用同一或不同路径名,一个文件可以被同一进程或不同进程,用同一或不同路径名,相同或不同的打开方式(读、写)同时打开。相同或不同的打开方式(读、写)同时打开。系统打开文件表系统打开文件表 structstruct file file unsigned short unsigned short
8、f_flagsf_flags;/*;/*文件操作标志文件操作标志*/unsigned short unsigned short f_countf_count;/*;/*共享该结构体的计数值共享该结构体的计数值*/structstruct inodeinode*f_inodef_inode;/*;/*指向文件对应的内存指向文件对应的内存inodeinode*/*/loff_tloff_t f_posf_pos;/*;/*文件的当前读写位置文件的当前读写位置*/;3.3.空闲空闲i i结点的分配和释放结点的分配和释放4.磁盘空闲块的分配和释放采用成组链接法采用成组链接法,把链表和索引相结合。每一组
9、,把链表和索引相结合。每一组5050块,用块,用索引表索引表表示;各组间通过链表指针串在一起,表示;各组间通过链表指针串在一起,构成构成链表链表。链表的开头是超级块中的磁盘空闲块栈,。链表的开头是超级块中的磁盘空闲块栈,在运行时被读入到内存中。在运行时被读入到内存中。栈计数栈计数countcount是栈中的空是栈中的空闲块数目,栈中的元素是空闲块编号。链表中的每闲块数目,栈中的元素是空闲块编号。链表中的每一块都存放一个类似的空闲块栈一块都存放一个类似的空闲块栈分配过程分配过程:查看超级块中是否:查看超级块中是否count=1count=1;若不是,若不是,则弹出栈顶元素则弹出栈顶元素N N,-
10、count-count;若是,则弹出栈顶元若是,则弹出栈顶元素素N N,把空闲块把空闲块N N中的栈(包括栈计数)读入到超级中的栈(包括栈计数)读入到超级块中;返回空闲块编号块中;返回空闲块编号N N释放过程释放过程:被释放空闲块为编号:被释放空闲块为编号N。查看超。查看超级块中是否栈已满(如级块中是否栈已满(如count=50);若);若不是,则不是,则N入栈,入栈,+count;若是,则将超;若是,则将超级块中的栈(包括栈计数)写入到空闲块级块中的栈(包括栈计数)写入到空闲块N,然后把,然后把N放入超级块中的栈顶并置放入超级块中的栈顶并置count为为1。4.磁盘空闲块的分配和释放成组链接
11、4.磁盘空闲块的分配和释放成组链接法 UnixUnix对空闲块的管理借助卷资源表,在卷资对空闲块的管理借助卷资源表,在卷资源表中用于空闲块管理的项目是:源表中用于空闲块管理的项目是:s_nfrees_nfree(相当于前面的相当于前面的count):count):登记空闲盘登记空闲盘块的数目,最多块的数目,最多100100个。个。s_free100s_free100:登记空闲盘块的物理块号登记空闲盘块的物理块号 假定某个磁盘开始使用时假定某个磁盘开始使用时,盘块共有,盘块共有449449块块(不包括不包括0 0块块),索引结点表,索引结点表inode_listinode_list区区占用占用1
12、010块,专用块占用块,专用块占用1 1块,实际上文件所块,实际上文件所占用的空间是占用的空间是449-10-1449-10-1438438块,这块,这438438块块是可以这样分组的:是可以这样分组的:第一组第一组3 513 51449 449 共共9999块块第二组第二组251251350 350 共共100100块块第三组第三组151151250 250 共共100100块块苇四组苇四组 5151150 150 共共l00l00块块第五组第五组 121250 50 共共3939块块 即从后面块向前分组,每组即从后面块向前分组,每组100100块,但第一组为块,但第一组为9 9 9 9块,
13、最后的第五组不足块,最后的第五组不足100100块,也成一组。第一块,也成一组。第一组的空闲盘块的物理块号及块数登记在第二组的组的空闲盘块的物理块号及块数登记在第二组的第一块中,第二组的空闲盘块物号及块数登记在第一块中,第二组的空闲盘块物号及块数登记在第三组的第一块第三组的第一块成组链接法成组链接法 中;中;第四组的物理块号及块数登记在;第四组的物理块号及块数登记在第五组的第一块中。最后一组,即第五组的第五组的第一块中。最后一组,即第五组的空闲盘块物理块号及块数登记在卷资源表中,空闲盘块物理块号及块数登记在卷资源表中,如下图如下图1 1所示。要特别注意的是第二组的第所示。要特别注意的是第二组的
14、第一块一块(350(350)中的中的s_frees_free=100=100,而,而s_free0=0s_free0=0,它作为一个标志,标识整个,它作为一个标志,标识整个存储空间再也没有空闲块了,即存储空间再也没有空闲块了,即449 449 作为作为最后一个空闲块。最后一个空闲块。成组链接法成组链接法(2)(2)空闲盘块的分配。空闲盘块的分配。开始的卷资源表如下图开始的卷资源表如下图(a)(a)所示。所示。如果某一个文件要求申请一个空闲块,如果某一个文件要求申请一个空闲块,将将s_nfree-1=38s_nfree-1=38 s_free38 s_free38即即1212号块分配给申请者。号
15、块分配给申请者。如果还要申请,则继续。如果还要申请,则继续。经过若干次申请后经过若干次申请后s_nfrees_nfree=2=2,如图,如图(b)(b)所示。所示。如果此时一个文件要申请如果此时一个文件要申请4 4块,则首先可以得到块,则首先可以得到s_free0(s_free0(即即5050)分配给申请者,而是先将分配给申请者,而是先将5050块中的内容读出,把块中的内容读出,把5050#块中的总块数块中的总块数成组链接法 100100赋给卷资源表的赋给卷资源表的s_nfrees_nfree,而把对应的,而把对应的100100个物理块号复制到数组个物理块号复制到数组s_frees_free中
16、,如中,如图图(c)(c)所示,然后再把所示,然后再把5050块分配给申请者,块分配给申请者,最后再将最后再将5151、5252块分配给申请者。如下块分配给申请者。如下图图(d)(d)所示。所示。成组链接法成组链接法(3)(3)空闲盘块的释放。空闲盘块的释放。假定有一个文件占用了三个物理块,块号吻假定有一个文件占用了三个物理块,块号吻别是别是180180,181181,182182。如果当时的卷。如果当时的卷资源表的状态如下图资源表的状态如下图(a)(a)所示。所示。首先填写首先填写182182到到s_nfree65s_nfree65中,然后中,然后s_nfree+1=66s_nfree+1=
17、66,同理释放,同理释放181181,180180块,块,最后卷资源表的状况如图最后卷资源表的状况如图(b)(b)所示。所示。成组链接法成组链接法卷资源表的状况如下图卷资源表的状况如下图(a)(a)所示。所示。如果有一个文件释放所要占用的如果有一个文件释放所要占用的4 4块,块号分块,块号分别为别为190190,185185,184184,170170,则首先,则首先有有2 2块的块号块的块号170170,184184登记在卷资源表登记在卷资源表中,其状态如下图中,其状态如下图(b)(b)所示。此时所示。此时s_frees_free=100,=100,表示内存中登记的空闲块已经表示内存中登记的
18、空闲块已经满。下面还要释放满。下面还要释放185185、190190,则系统把,则系统把当前卷资源表中的空闲块数当前卷资源表中的空闲块数100100连同连同100100个登个登记项,写到记项,写到18531853块中,然后将块中,然后将s_nfrees_nfree清清0 0,再将再将185185、190#190#填入到卷资源表中,如图填入到卷资源表中,如图(c)(c)所示。所示。成组链接法6.打开文件管理打开文件管理内存内存i i结点表结点表:空闲的内存:空闲的内存i i结点结点 组织成链表;占组织成链表;占用的内存用的内存i i结点结点 哈希表(对冲突采用链表方式解决)哈希表(对冲突采用链表
19、方式解决)进程所进入的目录进程所进入的目录:包括各个打开文件的目录路径,:包括各个打开文件的目录路径,以及进程的当前目录以及进程的当前目录进入一个目录,如果该目录文件的内存进入一个目录,如果该目录文件的内存i i结点已经存在,则结点已经存在,则只需把内存只需把内存i i结点的引用计数加结点的引用计数加1 1,否则读入该目录文件的,否则读入该目录文件的磁盘磁盘i i结点并建立内存结点并建立内存i i结点。结点。系统起动之后,进入根目录并建立相应内存系统起动之后,进入根目录并建立相应内存i i结点,直到系结点,直到系统关闭统关闭退出目录:如关闭文件或修改当前目录退出目录:如关闭文件或修改当前目录6
20、.打开文件管理打开文件管理7.文件共享 多用户基于索引节点的共享,或利用符号链接共享多用户基于索引节点的共享,或利用符号链接共享同一个文件。同一个文件。1 1基于索引节点的共享方式基于索引节点的共享方式(1 1)静态共享)静态共享 通过索引节点(通过索引节点(inodeinode)来实现文件共享链接)来实现文件共享链接的,并且只允许链接到文件,不允许链接到目录。的,并且只允许链接到文件,不允许链接到目录。文件链接的系统调用形式如下:文件链接的系统调用形式如下:link(oldnamep,newnameplink(oldnamep,newnamep););例例6-96-9:若系统中进程:若系统中
21、进程A A、进程、进程B B打开同一个文件,其打开同一个文件,其中,进程中,进程A A以以“读读”的方式打开文件的描述符为的方式打开文件的描述符为fp1fp1,进程进程B B以以“写写”的方式打开文件的描述符为的方式打开文件的描述符为fp3fp3。7.文件共享7.文件共享例例6-106-10:若系统中进程:若系统中进程A A以以“读读”的方式打开了一的方式打开了一个文件,文件的描述符为个文件,文件的描述符为fp1fp1;然后进程;然后进程A A创建了子创建了子进程进程B B,子进程,子进程B B继承了进程继承了进程A A有关属性。有关属性。link(/usr/wangyp/myfile1.c,
22、/usr/quanyinin/myfile1.c);link(/usr/wangyp/myfile1.c,/usr/quanyinin/myfile1.c);link(/usr/wangyp/myfile1.c,/usr/fangmin/testfile.c);link(/usr/wangyp/myfile1.c,/usr/fangmin/testfile.c);link(/usr/wangyp/myfile1.c,/usr/wangchs/yourfile.c);link(/usr/wangyp/myfile1.c,/usr/wangchs/yourfile.c);执行上述命令后路径名执行上
23、述命令后路径名/usr/wangyp/myfile1.c/usr/wangyp/myfile1.c、/usr/quanyinin/myfile1.c/usr/quanyinin/myfile1.c、/usr/fangmin/testfile.cusr/fangmin/testfile.c 和和/usr/wangchs/yourfile.cusr/wangchs/yourfile.c 指向的是同一个文件指向的是同一个文件 7.文件共享7.文件共享例例6-116-11:P1P1进程执行如下代码:进程执行如下代码:fd1=open(/etc/fd1=open(/etc/test,o_RDONLYte
24、st,o_RDONLY);/*);/*以只读方式打开以只读方式打开*/*/fd2=fd2=open(pocal,o_WRONLYopen(pocal,o_WRONLY);/*);/*以写方式打开以写方式打开*/*/P1P1进程创建的子进程进程创建的子进程P2P2执行如下代码:执行如下代码:fd3=open(/etc/fd3=open(/etc/testexa,o_RDONLYtestexa,o_RDONLY);/*);/*只读方式打开只读方式打开*/*/P3P3进程执行如下代码:进程执行如下代码:fd1=open(/etc/fd1=open(/etc/test,o_RDWRtest,o_RDWR);/*);/*以读写方式打开以读写方式打开*/*/7.文件共享