购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.7 文件管理

信息是计算机系统中的重要资源。文件系统是负责对信息的组织、存储和访问。从资源观点来看,文件系统是操作系统对软件资源的管理,也称信息管理。

1.文件概念

文件系统的管理功能是通过把它的管理信息(程序和数据)组织成一个个文件的方式来实现的。

文件是具有符号名的一组相关联字符的有序序列,即数据项的集合。从内容来看,有些文件组成的基本单位是一些有序的逻辑记录,如一个班级的学生档案数据;也有些文件是无记录无结构的相关联元素的集合,如C语言的源程序;另外,一些慢速字符设备也可以被看做文件,因为这些设备传输的信息也是一组按顺序出现的字符序列。文件包括两部分:文件体和文件说明。所谓文件体是文件本身的信息;文件说明是指文件存储和管理信息(如:文件名、文件内部标识、文件存储地址、访问权限、访问时间等)。

文件名是文件的标识符号,所以也称做文件标识符,是区别不同文件的标识符号。文件名是便于信息保存和读取的重要机制。为了便于管理,必须有文件的命名规则。不同系统中,文件命名规则略有不同。

大多数文件系统中的文件名由两部分构成,它们之间用“。”隔开。前面的部分称为主文件名,后面的部分称为扩展名。扩展名提示文件的某些特征或文件内容的类别。UNIX中,甚至支持多个扩展名,例如student.c.Z表示经过压缩了的C源程序。通常扩展名只是约定俗成的惯例,并不强迫用户使用。

除了文件名外,系统还给文件赋予其他特征信息以便于管理和控制存取,这些信息称为文件属性。文件属性通常包括文件当前的状态和使用标志,有些系统将它们和文件名一起放在特殊的数据结构中以便查询。

2.文件的类型

为了便于文件的控制和管理,通常文件分成若干类型。可以从不同的角度对文件进行不同的分类。

从系统角度来看,主要类型有正规文件、目录文件和设备文件。正规文件指包含用户信息或系统数据的文件;目录文件是管理文件的特殊系统文件;设备文件分为以字符为处理单位的字符设备文件和以块为处理单位的块设备文件。

一般来说,正规文件从内容来看有ASCII码文件和二进制文件两种形式。前者由多行正文组成,可能用到回车符和换行符,后者是简单的二进制字节序列。ASCII码文件的优点是可以直接原样打印。对二进制文件的打印只能得到一堆乱码,但它们往往有一定的内部结构。比如每个系统中的可执行的二进制文件,可能就包括文件头、正文、数据、重定位标识和符号表等部分。

正规文件还可以进行如下分类:

(1)按用途,可以分为系统文件、库文件与用户文件。系统文件是支持操作系统实现基本功能的文件,用户不能直接使用,只能通过系统调用为用户服务。库文件由标准子程序及常用的应用程序组成,允许用户调用,但不允许修改。用户文件是用户委托系统保存的文件,如源程序、目标程序、原始数据、计算结果等。

(2)按系统保护角度,分为只读文件、读写文件、不保护文件。不同类型表明用户对不同文件的读写权限和系统对文件赋予的保护级别。

(3)按文件物理结构,分为连续文件、串联文件、索引文件。连续文件的文件信息存放在外存中连续的存储块中。串联文件则放在外存中以链接方式连接的存储块中,存储块在物理位置上并不一定连续。索引文件的文件位置由索引表指出。

(4)按存放时间,分为临时文件、永久文件、档案文件。临时文件是解题过程中的“中间文件”,暂存在磁盘上,随用户撤离而撤销。永久文件一般在磁盘和作为档案的磁带上都有副本,以便于用户经常使用。档案文件只保留在磁带上,以备查证和恢复文件时使用。

(5)按文件内部信息的结构,分为流式文件、记录文件。流式文件内部信息没有结构,它是一个字符流,有结束符。记录文件的内部可以划分为多个记录,用户以记录为单位组织和使用信息。

3.文件的逻辑结构

逻辑结构是从用户的角度观察到的文件结构。文件内的信息是由创建者定义的,有很多不同的类型。例如文本、数据、目标程序、图像等。操作系统内部一般将文件视为无结构或简单结构的信息流,不对文件的信息项做任何解释。具体的信息处理由相应的应用程序提供。

(1)流式结构:这是无结构的字符序列,它的信息单位是字节或字。操作系统不知道也不关心文件中的具体内容,它所见到的都是字节或字。这种结构的特点是使用灵活、方便。用户程序可以在文件内加入任何内容,并且以方便的形式命名。这时,处理文件结构的任务由用户完成。

(2)记录式结构:在记录式结构中文件由固定长度或可变长度的记录组成,即文件具有自身的记录结构,每条记录也有内部结构,这时文件读写的逻辑单位是一条记录。系统采用固定长记录方式组织文件或采用可变长的记录组织文件。

(3)记录树结构:在记录树结构中,文件由一棵记录树构成,记录的长度通常是不定的。在记录的固定位置包含一个关键字域。记录树按关键字域进行排序,以便于对特定关键字进行快速查找。在记录树结构中由操作系统而不是由用户来决定记录放置的位置,这种结构广泛用于一些进行商业处理的大型计算机系统中。

4.文件的物理结构

物理结构是从系统角度设计的文件结构,它是逻辑文件在外存的组织结构形式。这种结构的组织依赖于文件存储器(磁带、磁盘、磁鼓等)的物理特性及用户对文件实施的具体操作。为了有效地管理文件的存储空间,文件系统中引入了“物理块”的概念。我们把文件存储空间划分成大小相等的块,文件的存储以块为单位进行。一个“块”一般可以存放一个或几个逻辑记录,块的长度通常等于磁盘扇区的长度。“块”是内存和外存之间进行信息传输的基本物理单位。下面介绍几种常用的物理结构。

1)连续结构

连续结构是指把逻辑文件中的连续信息存放到连续的物理块中,是连续区分配的一种方法。连续结构文件称为连续文件,又称顺序文件。连续文件的优点是物理结构简单,访问文件时通过简单的计算就可得到文件的物理地址,有利于记录定位,存取速度快。连续文件的缺点是建立文件时必须指定文件长度,以后不能增加长度,这是因为与文件尾部相邻的物理块可能已经分配给别的文件了。如果文件长度变化较大,会造成存储空间的浪费或产生碎片,降低存储空间的利用率。与主存的分区式分配类似,采用连续结构分配时,文件存储空间也存在着“碎片”问题,可以采用“紧凑”技术解决。但是这种方法浪费时间,较少采用。连续文件适合的物理设备是顺序存取的磁带。而磁盘则可以是连续结构的,也可以是非连续结构的。

2)链接结构

为了克服连续结构的缺点,可以采用链接结构来形成串联文件,把逻辑文件中的连续信息存放到不连续的物理块中,这是非连续区分配的一种方法。实现时,系统需建立一个文件说明表,在文件说明表中指明文件名及存放文件的第一个物理块的首地址和所需块数,利用每个物理块的最后一个单元存放一个指针,指向下一个存放文件的物理块的首地址,指针为空时,表示文件结束。文件的信息内容一般分散在不连续的物理块中,但指针链接的前后两个物理块中的信息在逻辑上是连续的。例如,假设物理块与记录等长,某文件有3个记录,存放在3个物理块中。在文件说明表中指出第一条记录所在的物理块的位置,以后便可以按链找到所有记录,直到物理块中出现文件结束标识为止。

链接结构的主要缺点是文件的各个记录在磁盘上分布范围较广,即使顺序访问各个记录,花费的时间也比采用连续文件方式的查找时间长得多。如果用于非连续的随机访问记录,为查找某个记录的物理地址,需要从第一个物理块开始,沿整个链依次进行,查找时间在访问中所占的比例较高,影响访问速度。另外,由于每个物理块都要有链接指针,使磁盘空间的利用率有所降低。

对于上述链接结构的缺点,有些系统把链接字和文件信息分开存放,单独组成一张表并存放在外存。这样直接从表中读出物理块的地址,可以提高存取效率,于是就形成了下面介绍的索引文件。

3)索引结构(索引文件)

索引结构是另一种文件存储空间非连续区分配的方法。整个系统建立一文件说明表,其中的每一个表目指出文件名及存放文件索引表的物理块的首地址。系统将文件的全部记录散存于外存的物理块中,并为每一个文件建立一张索引表,每个表目指出文件的记录号与存放的物理块号之间的对应关系。

有时一个物理块存放不下一个文件的索引表,这时系统会再申请一个物理块继续存放,它的地址由前一个存放索引表的物理块的末地址指出,从而形成链接式索引结构。这样,可以将一个文件的索引表存放在多个物理索引块中。

文件索引表是在建立文件时系统自动建立的,索引表往往按关键字的递增序列排序。这样,对文件的访问既可以按索引顺序进行,也可以按关键字进行。在增加或删除某个记录时,索引表必须进行修改。

索引结构除具有串联结构的所有优点外,还克服了串联结构中必须按链接字顺序存取存储块信息的缺点,可以较为方便地进行随机存取,效率较高。它的缺点是增加了索引表的空间开销,同时在存取文件时首先要取得索引表,增加了一次访盘操作,从而降低了文件访问速度。也有些系统在文件存取前将索引表放在内存中以节约访问时间。

4)散列结构(Hash文件)

还有一种物理组织形式是采用计算的方法进行寻址,通常称为Hash方法,也称为散列法或杂凑法。它利用Hash函数对记录中的键值进行计算处理,然后转换为相应的物理地址。一般说来,由于地址的总数比可能的键值总数要少,不同的键值在Hash函数计算后,可能得到相同的地址,这种现象称为“地址冲突”。通常,为了实现文件存储空间的动态分配,由Hash函数计算出的地址不是直接指示相应记录的存储位置,而是指向某个索引表的相应表目,由这个表目的指针指向那个记录所在的物理块。

具有相同Hash函数值的记录存放在同一个物理块中(假设一个物理块可以容纳多个记录),如某个物理块装满,进行溢出处理时,需要再分配一个物理块,以存储具有相同Hash函数值的记录,并用指针把这些物理块链接起来。Hash函数构造不同,散列效果也不同,好的Hash函数可以减少地址冲突,提高存取效率。在查找时,先计算某记录的Hash函数值,根据值的匹配找到索引表的相应表目,然后得到记录的物理地址。如果在第一个物理块中没有找到记录,还需按照溢出链进行查找,当冲突发生较多时,存取的深度增加。 Z46yWmaRxohu3cv999jMlNAXNgrY07GXuoZ864M08Mq5OzIizar380aaCoP9gW/n

点击中间区域
呼出菜单
上一章
目录
下一章
×