1、第 9 章文 件 管 理9.1 文件和文件系统9.2 文件结构9.3 文件存储空间的管理9.4 文件目录管理9.5 文件的共享和保护9.6 文件操作和使用9.7 文件管理实现举例习题第 9 章文 件 管 理9.1.1 文件文件文件是在逻辑上具有完整意义的信息的集合,它以文件名作为唯一标识。文件名以字符串的形式描述。不同的操作系统对文件名有不同的规定,有些系统采用扩展名表示文件的属性和类型,文件名与扩展名之间用“.”分隔,例如在DOS中使用扩展名.exe表示该文件为二进制可执行文件;有些系统通过修改文件属性描述文件的类型,而不支持扩展名,如Linux中“.”只是一个字符,该字符之后的所有字符也被
2、认为是文件名的一部分,不能以此识别文件类型,文件类型要通过文件属性来描述,在这点上DOS和Linux不同。9.1 文件和文件系统文件和文件系统第 9 章文 件 管 理文件属性通常包括:(1)文件名:文件的唯一标识,由用户按规定取名。(2)文件类型:标志该文件的类型,如可执行文件、源文件等。(3)文件长度:文件的大小。(4)文件的位置:文件在设备上存放的地址。(5)文件的存取控制:文件的存取权限,如可读、可写、可执行等。(6)日期和时间:文件的创建、修改和访问的时间和日期。第 9 章文 件 管 理9.1.2 文件类型文件类型文件分类主要是为了便于系统对不同的文件进行不同的管理,从而提高处理速度,
3、便于保护和共享。1按用途分类按用途分类(1)系统文件:支持操作系统实现其基本功能的文件。这类文件用户不能直接调用,只能由系统程序调用,以为用户服务。(2)库文件:由标准子程序及若干应用程序组成。这类文件允许用户直接调用,但不允许用户对其进行修改。(3)用户文件:在用户操作过程中建立、保存的各种文件。如源程序、编译连接后的目标程序、输入的数据文件、计算结果的输出文件等。对于这类文件,用户可以使用操作系统提供的命令对它进行修改、删除和编辑等。第 9 章文 件 管 理2.按文件的存取控制属性分类按文件的存取控制属性分类(1)只读文件:允许具有权限的用户读取该文件的内容,但不允许写。(2)读写文件:允
4、许具有权限的用户对该文件进行读和写操作,但禁止没有此权限的用户进行读写。(3)可执行文件:只允许文件主和具有权限的用户去调用执行文件而不允许读和写文件。(4)不保护文件:所有用户都可以使用的文件。第 9 章文 件 管 理3按信息流向分类按信息流向分类(1)输入文件:只能读入的文件,例如读卡机或纸带输入机上的文件,只能读入,所以它们是输入文件。(2)输出文件:只能写的文件,例如打印机、穿卡机等文件,只能写,所以它们是输出文件。(3)输入输出文件:既可以读又可以写的文件,如在磁盘、磁鼓、磁带上的文件。4按文件的逻辑结构分类按文件的逻辑结构分类(1)流式文件:文件内的信息不再划分结构,文件就是一串信
5、息,以结束符作为文件的结束标志。(2)记录文件:文件内的信息可再划分为多个记录,用户以记录为单位组织使用信息。第 9 章文 件 管 理9.1.3 文件系统文件系统文件系统是计算机组织、存取和保存文件信息的系统。它负责为用户创建文件,撤销、读写、修改和复制文件,还负责完成对文件的按名存取和进行存取控制。根据计算环境和所提供功能的不同,文件系统可划分为四个层次,从低到高依次是:单处理器单用户的本地文件系统,如DOS的文件系统;多处理器单用户的本地文件系统,如OS/2的文件系统;多处理器多用户的文件系统,如UNIX的本地文件系统;多处理器多用户的分布式文件系统。文件系统一般由文件目录、文件组织、文件
6、存储空间的管理、文件操作以及文件的共享和保护等部分组成。第 9 章文 件 管 理文件系统是操作系统的一个重要组成部分。文件系统统一管理着文件的存储空间,向用户提供一个方便的使用接口,如建立文件、打开文件、读写文件、复制文件。文件系统的模型如图9-1所示,它共有三个层次,最低层是对象和对象属性的说明,如文件对象;中间层是操作和管理对象的软件集合,此层次是文件系统的核心部分,文件系统的大部分功能都是在此层实现的;最高层是文件系统提供给用户的接口,主要包括两种类型的接口:命令接口和程序接口(详见第2章)。第 9 章文 件 管 理图9-1 文件系统模型第 9 章文 件 管 理9.2.1 文件的逻辑结构
7、文件的逻辑结构文件的逻辑结构指的是从用户的角度所看到的文件的组织形式,文件的逻辑结构通常分为两种:流式文件和记录式文件。流式文件是指组成文件的基本信息单位是字节或字,其长度是文件中所含字节的数目,如大量的源程序,库函数等采用的就是流式结构。在Linux系统中,文件的逻辑结构采用流式文件结构。9.2 文文 件件 结结 构构第 9 章文 件 管 理记录式文件是指文件由若干记录组成,每个记录可赋予一个标识,称为键,记录式文件又可分为可变长记录文件和定长记录文件。描述文件的逻辑结构时要包括对文件的存取方法的定义。用户对不同逻辑结构的文件采用不同的存取方法,以便对文件进行各种操作。常用的存取方法有顺序存
8、取、随机存取和按键存取三种方法。第 9 章文 件 管 理1.顺序存取顺序存取顺序存取方法严格按记录的逻辑顺序依次存取每个记录。若当前被访问的是记录Ri,则下次将被访问的记录自动被确定为Ri+1。由位移指针的当前位置及要读写的字符个数(或字节数)指定要读写的信息段(连续的若干字符)。读写完毕,指针自动指向与信息段尾端紧邻的下一个字符或字节。第 9 章文 件 管 理2.随机存取随机存取这种方法允许用户随意存取文件中的任意一个记录,而与上次存取了哪个记录无关。因此,当存取一个记录时,必须指明记录号。通常系统设置一个记录指针,用户可以通过系统调用指令改变指针中的值,使它指向某个记录。用系统调用指令把指
9、针直接移动到要读写的信息段起始处,然后按给出的信息段长度读写。再次读写时,仍需先定位指针。随机存取方式对于许多应用来说都是十分重要的,例如,在飞机订票管理系统中,如果一个乘客打电话需要在一个指定的航班上订一个位置,管理程序必须能够直接读取该航班的记录而不需要顺序查找所有航班的记录。第 9 章文 件 管 理3.按键存取按键存取 按键存取方式是用户对文件内容的访问不是根据记录的编号或是地址,而是根据记录的某项内容(关键字)来进行的。在采用按键存取方式进行检索时,首先是根据内容搜索到记录的逻辑位置,再将其转换到相应的物理地址后再进行存取。第 9 章文 件 管 理9.2.2 文件的物理结构文件的物理结
10、构用户的逻辑文件要存放到存储介质上时,文件系统要根据存储设备的类型、用户采用的存取方式决定文件在存储介质上的组织方式。组织在存储介质上的文件是依赖于物理的存储设备、物理的存储空间,可以看做是相关的物理块的集合。所以,把文件在存储介质上的组织方式称为文件的物理结构,或称为物理文件。文件在磁盘上可以有多种组织方式,常用的组织方式有顺序结构、链接结构和索引结构。第 9 章文 件 管 理1连续结构连续结构(顺序结构顺序结构)如果一个逻辑文件包含有若干个逻辑记录,每个逻辑记录要占用一个磁盘块,如果第一个记录占用了磁盘上的第b块,而后继的记录依次占用了第(b+1)块,(b+2)块,(b+n-1)块,那么就
11、说该文件在磁盘上是以顺序结构组织的。一个文件在逻辑上连续的信息被存放到磁盘上依次相邻的块上,显然,这是一种逻辑记录顺序与磁盘块的顺序相一致的文件结构,把这种顺序结构的文件称为“顺序文件”或“连续文件”。第 9 章文 件 管 理对顺序存取的文件采用顺序结构的最大优点是存取速度快,只要记住当前访问的逻辑记录所在的块号,则接下去一定是访问下一个块内的记录。因此,不必每次都去查找记录的存放位置,减少了检索时间。第 9 章文 件 管 理顺序结构也存在一些问题:(1)磁盘存储空间的利用率不高。磁盘上的每个顺序文件都占用连续的磁盘块,当某个文件被撤销后,则它所占的磁盘空间应归还成为空闲块,归还的空间可用来存
12、储其他文件。由于老文件不断地被撤销后,新文件不断地被存储进来,使得连续的磁盘空间被分散了。对一些连续块数较少的空闲块,可能满足不了文件的需要而无法利用。第 9 章文 件 管 理(2)对输出文件很难估计需要多少磁盘块。对一个已经存在的文件要存储到磁盘上时,很容易确定需要占用的磁盘块数。然而,在一般情况下,作业执行的结果不是一次形成的,而是边处理边产生结果。因此,对类似这样的输出(结果)文件很难预先估计长度,也就难以确定应分配多少个连续的磁盘块。(3)影响文件的扩展。如果一个顺序文件需要扩展,则一定要有与其相邻的空闲磁盘块,用以顺序存放被扩展的信息。但是,与其相邻的磁盘块很可能已被其他文件占用,使
13、文件的扩展受到影响。第 9 章文 件 管 理为了克服上述问题,有的系统对顺序结构的文件采用如下的附加措施:(1)要存储一个文件时,先分配若干连续的磁盘块,把文件信息顺序存放在这些块中,如果存储空间不够,则再分配一组连续的磁盘块,两个连续空间之间加一个链接指针。这种做法可提高磁盘空间的利用率和适应文件的扩展,但文件的物理结构已不是严格的顺序排列了。(2)把一个文件划分成几个能独立存取的顺序子文件,这样,各个顺序子文件只需占用相对较少的连续磁盘块,容易得到满足。由于各顺序子程序是可独立存取的,所以,经这样划分后的文件结构,本质上仍是顺序文件。第 9 章文 件 管 理2.链接结构链接结构把逻辑文件中
14、的各个逻辑记录任意存放到一些磁盘块中,这些磁盘块可以分散在磁盘的任意位置。例如,有5个逻辑记录的某文件,存放到磁盘上需占用5个磁盘块,这五个磁盘块的块号可以是9,16,1,10,25。于是,顺序的逻辑记录被存放在非顺序的磁盘块上。如果用指针把这些磁盘块按逻辑记录的顺序链接起来,则形成了文件的链接结构,把链接结构的文件称为“链接文件”或“串联文件”。第 9 章文 件 管 理链接结构解决了顺序结构中的所有问题,磁盘上的所有空闲块都可以被利用,建立文件时也不必事先考虑文件的长度,只要有空闲的磁盘块,文件可继续扩展即可。此外,还可以根据需要,在文件的任何位置插入一个记录或删除一个记录。对文件进行扩展、
15、插入记录时,先寻找磁盘上的空闲块用以存放文件信息,然后修改相应的链接指针,使新的信息链接到文件的适当位置。如果要删除一个记录,则也要修改链接指针,把该记录所占的磁盘块从链接文件中脱离出来,并把它占用的磁盘块作为空闲块。第 9 章文 件 管 理对于链接结构的文件还应该注意如下几个问题:(1)每一个磁盘块中既存放了文件信息,又存放了用于管理的指针,如果磁盘块长是 512个字节,假定指针需占用4个字节,则每块实际可用于存放文件信息的长度是508个字节。(2)读写磁盘上的信息以块为单位,当读出一块信息后应把其中的指针分离出来,仅把属于逻辑文件的信息传送给用户,以保证用户使用文件信息的正确性。(3)在存
16、取文件时,如果某个指针丢失或被破坏,则错误的指针可能指向其他文件而导致混乱。为了提高可靠性,有的系统采用双指针或在每个磁盘块中再加入文件名。这样在每一块中增加了用于管理的信息,使得用于存放文件信息的空间减少了。第 9 章文 件 管 理3.索引结构索引结构索引结构是实现非连续存储的另一种方法,索引结构为每个文件建立一张“索引表”,在索引表中记载每个逻辑记录的存放位置的指针。通常,把索引表保存在某个磁盘块中,文件目录中指出索引表的存放位置。采用索引结构的文件称为“索引文件”。索引表中的每个表项指出一个逻辑记录的存放位置,可以按逻辑记录的顺序登记在索引表中。这样,第i个表项就表示了第i个逻辑记录所在
17、的位置。当索引表中的表项数大于逻辑记录个数时,可用特殊字符(比如“-1”)表示无效登记项。第 9 章文 件 管 理存取文件时,先检查该文件的索引表是否已经读入主存储器,如果不在主存储器中,则根据文件目录的指示将索引表读入主存储器。对索引文件既可采用顺序存取方式,又可采用随机存取方式。当顺序存取时,只要顺序检索索引表中的表项,就可按照各个记录的存放位置依次读出逻辑记录。当随机存取时,对于给定的记录号,例如,请求读第i个记录,根据索引表在主存中的起始地址立即可找到第i个表项,按照表项中的地址可以读出第i个逻辑记录。第 9 章文 件 管 理由于索引结构既适合于顺序存取记录,又可方便地按任意次序随机存
18、取记录,并且容易实现记录的增加、删除和插入,所以索引结构被广泛应用。但是,采用索引结构必须增加索引表占用的空间和读写索引表的时间。当一个文件中记录很多时,索引表就很庞大,有时要用多个磁盘块存放一个文件的索引表,可把存放索引表的各磁盘块用指针链接起来。因此,当随机存取某个记录时,可能要依次检索链表才能找到该记录的存放地址,这是很费时间的。第 9 章文 件 管 理9.3.1 空白文件目录空白文件目录系统为每个磁盘建立一张空闲块表,表中的每个表项记录一组连续空闲块的起始块号和块数,空闲块数为“0”的登记项为“空”登记项,如图9-2所示。9.3 文件存储空间的管理文件存储空间的管理第 9 章文 件 管
19、 理图9-2 空白文件目录第 9 章文 件 管 理这种管理方式适合于采用顺序结构的文件,存储文件时从空闲块表中找到一组连续的空闲块,删除文件时把归还的一组连续块登记到空闲块表中。空闲块的分配和回收算法类似主存储器的可变分区管理方式中采用的最先适应、最佳适应和最坏适应算法。这种空闲块的管理方式当空闲块不多时具有较好的效果,但是,当空白块很多时,就需要很多表目,空白文件目录也就增大,这样管理效率将会降低。第 9 章文 件 管 理9.3.2 空闲块的管理空闲块的管理把所有的空闲块通过指针链接在一起构成空闲块链,分配空间时从链表的头部取出需要的空闲块数,归还空间时,把归还的块链接到空闲链中即可。可见,
20、这种管理方式不需要外加专门记录空闲块分配情况的表格,只需要在内存中保存链头指针,所以管理简单方便。空闲块的链接方式有两种:单块链接和成组链接。第 9 章文 件 管 理1单块链接单块链接 把所有空闲块用指针链接起来,每一个空闲块中都设置一个指向另一个空闲块的指针,这样所有的空闲块就构成了一个空闲块链。系统设置一个链首指针,指向链中的第一个空闲块,最后一个空闲块中的指针为“0”。第 9 章文 件 管 理分配一块时,根据链首指针把链头的一块分配给申请者,并修改链首指针。归还一块时,把归还块加入到链头,链首指针应指向归还块。这种方法效率较低,每分配一块时都要启动磁盘,读出空闲块后才能取得其中的指针,把
21、该指针作为链首指针。每归还一块时也要启动磁盘把原链首指针写到归还块中,新链首指针指向归还块。为了分配和回收一块,增加了启动磁盘进行读写的工作,这是非常麻烦和费时的。第 9 章文 件 管 理2成组链接成组链接把空闲块分成若干组,把指向一组中各空闲块的指针集中在一起,这样既可方便查找,又可减少为修改指针而启动磁盘的次数。采用成组链接后,分配和回收磁盘块时均在主存中查找和修改,只是在一组空闲块分配完或空闲的磁盘块构成一组时才启动磁盘读写。因此,成组链接的管理方式比单块链接方式效率高。第 9 章文 件 管 理9.3.3 位示图位示图由于磁盘被分块后,每一块的大小都是一样的,所以,对每个磁盘可以用一张位
22、示图指示磁盘空间的使用情况。此方法是用一个二进制位(bit)来表示外存中一块的状态,规定当某一位的值为“0”时,该位所对应的外存块为空闲,其值为“1”时,对应的外存块为已占用。每个字节可以描述8个物理块的状态,如果存储设备上有N个物理块,则位示图所占的空间需要(N/8)B,如表9-1所示。第 9 章文 件 管 理申请外存块时,在位示图中从头查找“0”的字位,将其改为“1”,根据其在位示图的位置可以计算出其对应的物理块号,并将物理块号返回。例如,假设找到值为“0”的空闲块位于位示图的第i行、第j列,则对应的物理块号b为n(i-1)+j,其中n为每行的位数;归还外存块时,可以根据归还块的块号推算出
23、在位示图中的位置,或由物理地址计算出对应的块号后再确定在位示图中的位置,把这一位的占用标志改为“0”,表示该块成为空闲块了。第 9 章文 件 管 理表表9-1 位位 示示 图图第 9 章文 件 管 理位示图永久地保存于外存空间,使用时读入内存,修改后再写回外存空间。如果想要提高对位示图的操作效率,可以将位示图放入内存中。第 9 章文 件 管 理建立文件系统的主要任务之一,就是让用户借助于文件系统可以很方便地访问外存。在文件系统支持下,用户只要给出文件名,就可以进行存取访问。文件空间的按名存取是通过文件目录来实现的,这也正是文件目录提供的最基本的功能。9.4 文件目录管理文件目录管理 第 9 章
24、文 件 管 理1文件的组成文件的组成为了能够对一个文件进行正确的存取,必须为文件设置文件控制块。文件与文件控制块一一对应,而把文件控制块的有序集合称为文件目录。换言之,一个文件控制块就是一个文件目录项。通常一个文件目录也被看做一个文件,称为目录文件。文件控制块(FCB)是操作系统为管理文件而设置的数据结构,存放了操作系统管理文件所需要的全部信息,是文件存在的标志。文件控制块通常包含以下三种信息:基本信息、存取控制信息和使用信息。第 9 章文 件 管 理1)基本信息基本信息主要包括:(1)文件名,用来标识一个文件的符号。在每个文件系统中,每一个文件都必须有一个唯一的名字,是文件的唯一标识,用户在
25、访问文件时就是通过文件名进行存取的。(2)文件物理位置,指的是文件在外存的物理位置,主要包括存放文件的设备名、文件在外存上的盘块号、指示文件所占用磁盘块数或字节数的文件长度。(3)文件的逻辑结构,指示文件是流式文件还是记录式文件。(4)文件的物理结构,指示文件是顺序文件、链接文件或索引文件。第 9 章文 件 管 理2)存取控制信息存取控制信息主要包括对文件进行存取操作时的权限说明,有文件主的存取权限、核准用户的存取权限和一般用户的存取权限。3)使用信息使用信息主要包括文件的建立日期和时间、文件上一次修改的日期和时间以及当前使用信息(当前打开文件的进程数、文件在内存中是否被修改)。对于不同操作系
26、统的文件系统,由于提供的功能不同,可能对于上述信息的描述不同。第 9 章文 件 管 理2.文件目录文件目录文件目录是用于检索文件的,它是文件系统实现按名存取的重要手段。文件目录由若干目录项组成,每一个目录项记录一个文件的有关信息。在目录项中除了指出文件名和文件在存储介质上的位置外,还应该包含如何控制和管理文件的信息。有了文件目录后,当用户要求使用某个文件时,文件系统可顺序查找目录项并比较文件名,就可以找到指定文件的目录项,根据该目录项中给出的有关信息,可以进行核对使用权限等工作,并读出文件供用户使用。因此,文件目录的组织和管理应便于检索和防止冲突。对文件目录的管理有以下要求:第 9 章文 件
27、管 理(1)实现“按名存取”。用户只需要向系统提供其需要访问的文件名,就可以快速、准确地找到指定文件在外存上的位置。实现“按名存取”是目录管理中要提供的最基本的功能,也是文件系统向用户提供的最基本的服务。(2)提高对目录的检索速度。通过合理地组织目录结构的方法,可以加快对目录的检索速度,从而能够提高对文件的存取速度。第 9 章文 件 管 理(3)文件共享。在多用户系统中,应该允许多个用户共享一个文件。这样就需要在外存上保留一份文件的副本,供不同用户使用,以节省大量的存储空间。(4)允许文件重名。系统应该允许不同的用户使用相同的名字来表示不同的文件,这样可以方便用户按照个人的习惯给文件命名和使用
28、文件。常用的目录结构有一级目录、二级目录和多级目录。第 9 章文 件 管 理9.4.1 一级目录结构一级目录结构为了便于管理,把所有文件的FCB都集中放在一起,就构成了一级目录结构。对所有的文件建立一个目录文件,目录文件中的每一项指向一个文件,其组织方式是一种线性组织方式。常见的一级目录结构如图9-3(a)所示,在每个目录项中包含了文件名,文件属性以及文件在磁盘上的物理地址;另一种较为常见的结构如图9-3(b)所示,每个目录项都包含文件名以及一个指针,该指针指向文件的FCB。第 9 章文 件 管 理图9-3 一级目录结构第 9 章文 件 管 理一级目录结构的优点是简单,方便实现目录管理的基本功
29、能按名存取,但却存在下述一些缺点。(1)查找速度慢。当系统需要打开一个文件时,文件系统就在目录文件中顺序查询该文件所对应的目录项,从中取出文件的属性和它的物理地址,并把这些信息存放于主存的一个表中,其后所有对该文件的操作会到主存中查找信息。因此,访问一个文件可能要扫描整个目录文件,平均查找时间较长。第 9 章文 件 管 理(2)不允许重名。限制了用户对文件的命名,但是命名冲突会为用户带来很大的麻烦,因为用户在为文件命名时很难考虑该文件名是否已经被其他用户文件使用了。这种命名冲突在多道环境下是很难避免的。(3)不便于实现文件共享。使用别名是多用户环境下操作系统实现文件共享的一个很有效的方法,但是
30、一级目录结构中不允许文件存在别名,所以不便于实现文件共享。第 9 章文 件 管 理9.4.2 二级目录结构二级目录结构采用一级目录结构的文件系统,文件名与文件信息是一一对应的关系,不允许两个不同文件具有相同的名字。但文件系统是为很多个用户服务的,在动态使用过程中,很容易发生文件重名。为了使每个用户都可以按照自己的习惯给文件取名,不必考虑用户间的重名问题,可以采用二级目录结构。第 9 章文 件 管 理二级目录由主目录和用户目录构成。系统允许每个用户拥有一个用户目录(UFD)。属于哪个用户的文件,其文件的FCB就登记在该用户的目录上。整个系统有一个主目录(MFB),用来登记所有用户的目录名称及其所
31、在的物理地址,以及用户目录的长度、物理结构等属性。二级目录结构如图9-4所示。第 9 章文 件 管 理图9-4 二级目录结构第 9 章文 件 管 理采用二级目录结构后,每个用户文件由系统的用户目录名和用户目录中的文件名这两部分进行标识,其中,用户目录名由操作系统统一控制,不会重名。即使不同的用户对文件使用了相同的文件名,由于用户名不同而避免了命名冲突。例如在图9-4中,用户Wang的Test文件与用户Zhang的Test文件,由于用户名不同而属于不同的文件,一个是Wang/Test,一个是Zhang/Test。因此,即使不同的用户在为各自的文件命名时,取了相同的文件名也不会引起混乱。但是,在同
32、一个用户文件目录中的各个文件的文件名应该是不相同的。第 9 章文 件 管 理在二级目录中,用户要求存取文件时,首先在主目录中根据用户名查找指定的用户目录,然后在用户目录中按照文件名查找指定文件的物理位置,因此各个用户被隔离开了。二级目录相对于一级目录结构提高了检索目录的速度,在不同的用户目录中,可以使用相同的文件名。此外,当各个用户是独立的,彼此互不往来时,这种将用户目录和其文件进行隔离的方法是优点,但是,当他们互相合作时,这种隔离将成为阻碍。因此,二级目录不便于实现共享。在二级目录的基础上,对文件目录结构进行优化,便产生了多级目录结构。第 9 章文 件 管 理9.4.3 多级目录结构多级目录
33、结构如果允许用户在自己的文件目录中根据不同类型的文件再建立子目录,则可把二级目录结构推广成多级目录结构。多级目录结构像一颗倒置的有根树,故把它称为树形目录结构。第 9 章文 件 管 理1树形目录结构树形目录结构多级目录结构采用树状数据结构组织文件目录和文件。多级目录结构中,除了最末一级(树叶)外,任何一级目录的目录项都对应着一个目录文件或普通文件,普通文件一定在树叶上。如图9-5所示指出了树形目录结构,用矩形框表示目录文件,圆形框表示普通文件。第 9 章文 件 管 理图9-5 多级文件目录第 9 章文 件 管 理在多级目录结构中有两种目录,即根目录和子目录。根目录:树根结点的目录称为根目录,是
34、唯一的,从根目录开始可以查找到所有其他目录文件和普通文件。子目录:包含普通文件或目录文件。2路径名路径名在树形目录结构中,从根目录到任何数据文件,都只有唯一的一条通路。在该路径上从树的根(即主目录)开始,把全部目录文件名与数据文件名,依次地用“/”连接起来,即构成该数据文件的路径名。系统中的每一个文件都有唯一的路径名。例如,在图9-5中用户B为访问文件J,应使用其路径名/B/F/J来访问。第 9 章文 件 管 理3当前目录当前目录当一个文件系统含有许多级时,每访问一个文件,都要使用从树根开始直到树叶(数据文件)为止的、包括各中间结点(目录)名的全路径名。这是相当麻烦的事,同时由于一个进程运行时
35、所访问的文件,大多仅局限于某个范围,因而非常不便。基于这一点,可为每个进程设置一个“当前目录”,又称为“工作目录”。进程对各个文件的访问都是相对于“当前目录”而进行的。第 9 章文 件 管 理此时各个文件所使用的路径名,只需从当前目录开始,逐级经过中间的目录文件,最后到达要访问的数据文件。把这一路径上的全部目录文件名与数据文件名用“/”连接形成路径名,如用户B的当前目录是F,则此时文件J的相对路径名仅是J本身。这样,把从当前目录开始直到数据文件为止所构成的路径名,称为相对路径名;而把从树根开始的路径名称为绝对路径名。第 9 章文 件 管 理在树形目录结构中,根目录或子目录中的目录项可能指向文件
36、,也可能指向下一级子目录。由于每个目录项都有相同的形式,怎样区分它指向的是文件,还是子目录呢?我们可以在目录项中用一个二进制位区分该目录项所指向的是文件(当二进制位取值为“0”时),还是子目录(当二进制位取值为“1”时)。用户可以请求系统为其建立一个文件、删除一个文件、建立一个子目录、删除一个子目录。通常,只允许用户删除“空”子目录,如果子目录非空(含有若干文件或下级子目录),则应先删除该子目录中的所有文件,然后再删除该子目录。采用多级目录时,文件的名字为路径名,路径名由从根结点开始到叶结点结束的结点名字序列构成。第 9 章文 件 管 理树形目录结构有如下优点:(1)解决了重名问题。允许在不同
37、的子目录中使用相同的名字命名文件或下级子目录,这样,系统在检索时使用的路径名是不同的,故对同名文件不会引起混淆。例如,如图9-5所示,用户B可以通过B/F/J来访问文件J,也可以通过B/E/J来访问文件J。文件名相同但是由于路径不同,所以树形目录解决了重名问题。第 9 章文 件 管 理(2)有利于文件的分类。系统或用户可以把不同类型的文件登录在不同的子目录下,并可按层次建立子树。例如在图9-5中,有三个用户A、B和C,在每个用户下可以登记上不同类型的文件,可以在用户B的子目录F中登记源文件,在子目录D中登记可执行文件。(3)提高检索文件的速度。利用当前目录和相对路径不仅方便用户,而且系统从当前
38、目录开始检索文件,缩短了检索路径,提高了检索速度。第 9 章文 件 管 理(4)能进行存取权限的控制。在子目录中可规定存取权限,在检索文件时核对存取权限,可避免一个用户未经授权就存取另一个用户的文件,保证了用户文件的私有性,可实现对文件的保护和保密。树形目录结构的缺点是当层次较多时查找一个文件需要按照路径名逐层进行检索,影响访问文件的速度。第 9 章文 件 管 理文件系统的一个重要的任务就是实现文件的共享。操作系统面临大量需要管理的文件,如果为每个用户保留文件的每一份副本,则对文件存储区的需求将大幅增加,存储设备的使用率也会相应地减少。为了减少用户的重复劳动,免除系统复制文件的时间开销,以及节
39、省文件占用的存储空间,操作系统提供文件共享的功能是十分必要的。此外,为了防止文件被破坏,操作系统还要提供保护机构,实现不同的用户对文件的存储权限进行控制并提供相应的保密机制。9.5 文件的共享和保护文件的共享和保护第 9 章文 件 管 理9.5.1 文件共享文件共享 文件共享是指一个文件可以让指定的某些用户共同使用。文件共享有许多好处,例如,免除系统复制文件的工作;节省文件占用的存储空间等。在允许文件共享的系统中,必须对共享文件进行管理,共享文件的使用有两种情况:(1)不允许同时使用。任何时刻只允许一个用户使用共享文件,即不允许两个或两个以上的用户同时打开一个文件。一个用户打开共享文件后,待使
40、用结束关闭文件后,才允许另一个用户打开该文件。第 9 章文 件 管 理(2)可以同时使用。允许多个用户同时使用同一个共享文件,但系统必须实现对共享文件的同步控制。一般来说,允许多个用户同时打开共享文件执行读操作,而不允许读者与写者同时使用共享文件,也不允许多个写者同时对共享文件执行写操作,以确保文件信息的完整性。第 9 章文 件 管 理 在现代计算机系统中,有些文件可供许多用户共享,或者,有若干人在共同的为一个项目而工作,有关该项目的所有文件能供这一组人员所共享。为此,现代计算机系统必须提供文件共享功能,即指系统应允许多个用户(进程)共享同一份文件。早期实现文件共享的方法有:绕道法、连访法和基
41、本文件目录表法。现代的文件共享方法也是在早期的文件共享方法上发展起来的,现代常用的文件共享方法有:基于索引结点的共享方式和基于符号链的共享方式。第 9 章文 件 管 理1绕道法绕道法绕道法是在早期的MULTICS等操作系统中所采用的一种共享文件方法。在该方法中,允许每个用户获得一个“当前目录”,用户所访问的所有文件都是相对于当前目录的;当所访问的文件不在其当前目录下时,可以通过“向上走”的方式去访问其上级目录。第 9 章文 件 管 理绕道法要求每个用户处在当前目录下工作,用户对所有文件的访问都是相对于当前目录进行的。用户文件的固有名(为了访问某个文件而必须访问的各个目录和文件的目录名与文件名的
42、顺序连接称为固有名)是由当前目录到信息文件通路上所有各级目录的目录名加上该信息文件的符号名组成。使用绕道法进行文件共享时,用户从当前目录出发向上返回到与所要共享文件所在路径的交叉点,再顺序下访到共享文件。绕道法需要用户指定所要共享文件的逻辑位置或到达被共享文件的路径。绕道法的原理如图9-6所示。第 9 章文 件 管 理图9-6 绕道法第 9 章文 件 管 理2.连访法连访法绕道法要通过当前目录逐层地向上访问多级目录,找到和共享文件交叉的目录,再依次向下访问直到共享文件,所以搜索效率不高。为了提高共享其他目录中文件的速度,另一种共享的办法是在相应目录表之间进行链接,即将一个目录中的链指针直接指向
43、被共享文件所在的目录。链接法仍然需要用户指定被共享的文件和被链接的目录。连访法的原理如图9-7所示。第 9 章文 件 管 理图9-7 连访法第 9 章文 件 管 理3.基本文件目录表法基本文件目录表法实现文件共享的一种有效方法是采用基本文件目录表(BFD)的方法,该方法是早期实现文件共享的一种方法。基本文件目录法把所有文件目录的内容分成两部分:一部分包括文件的结构信息、物理块号、存取控制和管理信息等,并由系统赋予唯一的内部标识符来标识,称为基本文件目录表(BFD);另一部分则由用户给出的符号名和系统赋给文件说明信息的内部标识符组成,称为符号文件目录表(SFD)。SFD中存放文件名和文件内部标识
44、符,BFD中存放除了文件名之外的文件说明信息和文件的内部标识符。这样组成的多级目录结构如图9-8所示。第 9 章文 件 管 理图9-8 基本文件目录法第 9 章文 件 管 理图中采用矩形框表示每个文件目录的SFD(其目录项中只有两项:文件名或目录名和内部标识号ID),每个文件的BFD用灰色实心圆表示,为了简单起见,图9-8中在BFD表项中没有列出结构信息、存取控制信息和管理控制信息等。第 9 章文 件 管 理在图9-8中,系统在内部标识号与对应的SFD或BFD的物理块号之间建立一个索引表,该索引表被赋予一个值为“0”的内部标识。所有的空白文件目录被组织成一个表,该表的内部标识为“1”、主目录M
45、FD的内部标识为“2”,其余所有目录或文件的SFD和BFD的内部标识号则从“3”开始分别分配。当用户使用某文件时,操作系统首先从主目录开始,按照给定的路径名依次在各级目录的SFD中查找,再根据找到的文件符号名得到信息文件的BFD,并由该文件的BFD获得信息文件的物理地址。第 9 章文 件 管 理【例例9-1】用户进程需要查询/Wang/sub1/n.c文件,操作系统响应后按下述步骤在图9-8中查询。(1)在ID号为2的主目录中找到Wang,得到其ID号为4;(2)在ID号为4的SFD中找到sub1,得到ID号为8;(3)在ID号为8的SFD中找n.c,得到ID号为9;(4)在ID号为9的BFD
46、中得到该信息文件的物理地址。第 9 章文 件 管 理当某用户需要以某文件符号名共享另一个用户的某个文件时,采用基本文件目录方式可较方便地实现文件共享。操作系统可以在该用户目录中开辟一个新的文件表项,将共享文件名和被共享文件的ID号填入即可。第 9 章文 件 管 理【例例9-2】用户Wang想以文件名y.c共享用户Zhang的x.c文件,操作系统响应后在图9-8中按下述步骤执行。(1)在图9-8中Wang的SFD中建立一个表项,填入共享文件名y.c;(2)按照例9-1的步骤在图9-8中查询被共享文件Zhang的x.c,得到其ID号为5;(3)将得到的ID号5填入y.c中,从而很方便地实现共享。第
47、 9 章文 件 管 理4基于索引结点的共享方式基于索引结点的共享方式在树形结构目录中,当有两个(或多个)用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两个(或多个)用户的目录中,以便能方便地找到该文件,此时该文件系统的目录结构已经是个有向非循环图DAG(Directed Acyclic Graph),如图9-9所示。第 9 章文 件 管 理图9-9 包含有共享文件的文件系统第 9 章文 件 管 理在图9-9中,为了建立B目录与共享文件之间的链接,如果在文件目录中包含文件的物理地址,即文件所在盘块的盘块号,那么在链接时必须将文件的物理地址拷贝到B目录中。但是通过这种方法实现文件共享时
48、,如果以后B或C还要继续向该文件中添加新内容,必然要再增加新的盘块,这需要由附加操作Append完成。而新增加的盘块,只能出现在执行了该操作的目录中。这样,这种变化对其他用户来说是不可见的,因此新增加的内容就不能被共享。第 9 章文 件 管 理为了解决上述问题,并顺利实现共享,可以引用索引结点,即将文件的物理地址及其他的文件属性等信息,不再放在目录项中,而是放在索引结点中,在文件目录中只设置文件名及指向相应索引结点的指针,如图9-10所示。此时,如果任何用户对文件执行Append操作或是修改,所引起的对索引结点内容的改变,对其他的用户来说都是可见的,从而也实现了新内容的共享。例如,增加了新的盘
49、块和文件长度,执行此操作改变了索引结点的信息,共享的用户均可以看见信息的修改。第 9 章文 件 管 理图9-10 基于索引结点的共享方式第 9 章文 件 管 理在索引结点中还包括一个链接计数count,表示链接到本索引结点(即文件)上的用户目录项的个数。当count=4时,表示有4个用户目录项连接到本文件上,或者可以说有4个用户共享此文件。第 9 章文 件 管 理当某用户A创建一个新文件时,他是该文件的拥有者,此时将count设置为1。当有用户B要共享此文件时,在用户B的目录中增加一个目录项,并设置一个指针指向该文件的索引结点,此时,文件主仍然是A,count=2。如果用户A不再需要此文件时,
50、能否将文件删除?答案是否定的。因为,删除了该文件,同时必须要删除该文件的索引结点,这样,用户B指向该文件索引结点的指针就悬空了,而此时用户B可能正在对文件执行写操作,也只好半途而废了。图9-11示出了B链接到文件上的前、后情况。第 9 章文 件 管 理图9-11 进程B链接前后的情况第 9 章文 件 管 理5利用符号链实现文件共享利用符号链实现文件共享B为了共享C的一个文件F,可以由系统创建一个LINK类型的新文件,将新文件F写入B的用户目录中,以实现B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名,称这样的链接方法为符号链接。建立符号链接文件,并不影响原文件,实际上它们各是一个文