第六章 文件管理

基于文件系统的概念:可以把数据组成分为数据项,记录和文件三级。其中,数据项是最低级的数据组织形式,包括基本数据项和组合数据项。记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件(由若干记录组成)和无结构文件(字符流)两种。
 
   文件逻辑结构,首先是:能提高检索速度,其次是便于修改,第三是降低文件的存储费用。
    有结构文件中记录的长度可分为:定长和不定长两种,但是不论哪一种,在处理前,每个记录的长度是可知的。
 
 有结构文件中组织记录的方式有:顺序文件,索引文件和索引顺序文件,直接文件哈希文件。
 
 无结构文件即:流式文件的长度以字节为单位,也可看作是记录式文件的一个特例。
   外存的分配方式有:连续分配,链接分配和索引分配三种。
 
 连续分配要求:为每一个文件分配一组相邻接的盘块。
 
  链接分配可分为:隐式链接和显式链接两种形式。
    隐式链接要求:在文件目录的每个目录项中,都须含有指向链接文件第一个盘块和最后一个盘块的指针。
    显式链接是:把用于链接文件各物理块的指针,显式地放在内存的一张链接表中,该表在整个磁盘上仅设置一张。MS-DOS中,每个文件的第一个盘块号放在自己的FCB中,而其余链接的盘块号放在系统唯一的一张文件分配表FAT中。
    索引分配是:将分配给文件的所有盘块号记录在索引块中,有单级索引分配,多级索引分配和混合索引分配方式。
   
目录管理要求:1实现按名存取2提高对目录的检索速度;3文件共享;4允许文件重名。
   
为了能对一个文件正确的存取,必须为文件设置用于描述和控制文件的数据结构,称之为文件控制块(FCB。文件与文件控制块一一对应,而人们把文件控制块的有序集合称为文件目录,即一个文件控制块就是一个文件目录项。通常,一个文件目录也被看作一个文件,称为
目录文件。
   
文件控制块中通常含有三类信息:
基本信息,存取控制信息及使用信息。
  
 索引结点是文件描述信息单独形成的一个数据结构,简称为I结点。在文件目录中的每个目录项,仅有文件名和指向该文件所对应的I结点的指针所构成。
    常用的目录结构形式有:单级目录,两级目录和多级目录。
    单级目录中:文件名在目录中是唯一的,相应的也是一个文件名对应一个文件。
 
  两级目录中:每个用户有一个单独的用户文件目录UFD。不同用户目录中文件名可相同,不同用户还可以使用不同的文件名来访问系统中的同一个共享文件。
    多级目录中:主目录被称为根目录,数据文件称为树叶,其他的目录称为树的结点。
   
对目录的查询方式可分为:线性检索法和Hash法两种。
  
 文件存储空间的基本分配:单位都是磁盘块而非字节。
  
 文件存储空间的管理方式有:空闲表法,空闲链表法,位示图法,成组链接法几种。(P208
    文件的共享方式有:基于索引结点的共享和利用符号链实现文件共享等。
   
基于索引结点的共享中,目录结构不再是树型结构,而是有向非循环图(可以两个结点指向一个树叶);文件的属性存放在索引结点中而不是目录项中以便修改;索引结点中还有一个链接计数count表示链接到本索引结点(亦即文件)上的用户目录项的数目。
    
在利用符号链方式实现文件共享时,只是文件主才拥有指向其索引结点的指针;而共享该文件的其他用户,则只有该文件的路径名,并不拥有指向其索引结点的指针。
    利用符号链实现文件共享的一个缺点是:当程序员将一个目录上的所有文件都转储到磁带上去时,就可能对一个共享文件产生多个拷贝。
   
为了确保文件系统的安全性,可以采取以下措施:1存取控制机制防人为因素;2磁盘容错技术防磁盘故障;3“后备系统防自然因素。
  
 容错技术是通过在系统中设置冗余部件的方法,来提高系统可靠性的一项技术。磁盘容错技术则是通过增加冗余的磁盘驱动器、磁盘控制器来提高磁盘系统可靠性的一项技术。
 
  磁盘容错技术往往也被称为系统容错技术SFT,可分为三个级别:SFT-I,低级磁盘容错技术,防磁盘表面缺陷所引起的数据丢失;SFT-II,中级磁盘容错技术,防磁盘驱动器和磁盘控制器故障导致磁盘无法正常工作;SFT-III,高级磁盘容错技术。
  
 低级磁盘容错技术有:双份目录、双份文件分配表和写后读校验。
   
中级磁盘容错技术有:磁盘镜像和磁盘双工。
    事务是:用于访问和修改各种数据项的一个程序单位。事务操作具有原子性
    引入检查点后,只需对最后一个检查点之后的事务记录进行处理。
    互斥锁:仅允许一个事务对相应对象执行读或写操作,而共享锁则允许多个事务对相应对象执行读操作,而不允许其中任何一个事务对对象进行写操作。
  
 读只需共享锁,而写操作则需要互斥锁。
    空闲盘块号计数器组和数据盘块号计数器组对同一个盘块号应该一个为1,一个为0
    共享文件的索引结点中的链接计数应和实际的共享文件的用户(进程)数相同,否则可能导致无人访问但不删或有人访问但删除。