文件的组织形式是文件的结构,从不同的角度分析文件有不同的结构形式:逻辑结构和物理结构。从用户角度出发,研究文件的抽象组织方式而定义的文件组织形式为文件的逻辑结构;从系统的角度出发,研究文件的物理组织方式而定义的文件组织形式为文件的物理结构。文件的逻辑结构独立于辅存,帮助用户分析信息之间的关系及含义;而物理结构主要关注文件信息的存储形式,帮助用户了解与存储设备相关知识。
1、文件的逻辑结构
文件的逻辑结构可以分为无结构的字符流式文件和有结构的记录式文件。
1)无结构的字符流式文件
无结构的字符流式文件是相关的有序字符的集合。文件长度即为所含字符数。流式文件不分成记录,而是直接由一连串信息组成。对于流式文件而言,它是按信息的个数或以特殊字符为界进行存取的。常见的采用这种结构的有源程序文件和可执行文件。
无结构的字符流式文件的优点主要是空间利用上比较节省,因为没有额外的说明(如记录长度)和控制信息等;但应当注意的是文件信息的检索问题,即采用的逻辑结构应方便系统查找所需信息,减少信息存储的变动。
2)有结构的记录式文件
文件的信息划分为多个记录,用户以记录为单位组织信息。记录是具有特定意义的信息单位,它包含记录在文件中的相对位置、记录名、记录的属性等信息组成。记录式文件中,每一个记录都有一项信息,用来唯一标识相应的记录,将各个记录区分开来,我们称这个信息为主键。一个记录中的任一数据项或若干数据项的组合均可作为记录键,除主键外的其他键成为次键。
有结构的记录式文件就是按照一定的结构来组织记录信息,按照记录的不同组织形式,常见的记录式文件可以分为连续结构和顺序结构。
1)连续结构:按照记录生成的先后顺序连续排列。
2)顺序结构:设定一种顺序规则,以记录的键为索引对象,按照设定的顺序规则将记录顺序排列起来。
逻辑上的文件信息最终都要按照一定存取方法存储到物理设备中,文件系统按照什么方式将文件信息存储到存储设备中,这要与文件的逻辑结构和存取内容及目的相关。
1)顺序存取:按照文件的逻辑地址依次顺序存取。
2)随机存取:用户按照记录的编号进行存取,也称为直接存取或立即存取。这种方式下,根据存取命令把读、写指令直接移动到读/写处进行操作。
3)按键存取:根据给定记录的键进行存取。给定键后,首先搜索该键在记录中的位置,然后进一步搜索包含该键的记录,在含有该键的所有记录中查找所需记录,当搜索到所需记录的逻辑位置后,再将其转换到相应的物理地址进行存取。
2、文件的物理结构
文件的物理结构是指文件在辅助存储器上存储的结构形式,其和文件的存取方法有密切关系。文件物理结构的优劣,直接影响到文件系统系统的性能。
为了有效地分配存储器的空间,通常把它们分成若干块,并以块为单位进行分配和传递,每一个块称为物理块,而块中的信息称为物理记录。物理块长通常是固定的,在磁盘上经常以512B至8KB为一块。文件在逻辑上可以看成是连续的,但在物理介质上存放时可以有多种形式。目前常用的文件物理结构有顺序结构文件、链接结构文件、索引文件、Hash文件。
1)顺序结构文件
把逻辑文件的信息顺序地存储到连续的物理盘块中,这样形成的文件称为顺序文件。这种文件保证了逻辑文件中的记录顺序与存储器中文件占用盘块的顺序地一致性。
优点:
<1>管理简单:一旦知道文件存储的起始块号和文件块数,就可以立即找到所需的文件信息。
<2>顺序存取速度快:要获得一批相邻的记录时,其存取速度在所有文件物理结构中是最快的。
缺点:
<1>要求连续存储空间:如同内存的连续分配一样,可能形成许多存储空间的碎片。
<2>必须事先知道文件的长度,才能为该文件分配合适的连续存储空间。
2)链接结构文件
链接结构的特点是使用指针(也称为链接字)来表示文件中各个记录之间的关联。在链接结构文件中,一个逻辑上连续的文件,可以存放在不连续的存储块中,每个块之间用单向链表链接起来。为了使系统能方便地找到逻辑上连续的下一块的物理位置,在每个物理块中设置一个指针,指向该文件的下一个物理块号,使得存放同一个文件的物理块链接成一个队列,该结构为链接文件。
优点: <1>不要求为文件分配连续的存储空间,一定程度上解决了空间碎片问题,提高了存储空间利用率因为采用链表的思想,文件中记录的增删工作比较容易实现
<2>因为采用链表的思想,文件中记录的增删工作比较容易实现
缺点:
<1>只适合于顺序存取,不便于直接存取,为了找到某个物理块的信息,必须从头开始,逐一查找每个物理块,直到找到为止,因此降低了查找速度。
<2>在每个物理块中都要设置一个指针,占去一定的存储空间
3)
链接结构文件
索引文件是实现非连续存储的另一种办法,适用于数据记录保存在随机存取存储设备上的文件。这种结构的组织方式要求为每一个文件建立一张索引表,其中每个表目指出文件逻辑记录所在的物理块号,索引表指针由FCB给出。
当文件很大时,索引表也将很大,需要占用多个盘块。管理多个盘块的索引表有两种方法:一是将存放索引表的盘块用指针链接起来,称为链接索引。链接索引需要顺序地读取索引表各索引表项。因此,与链接文件相似,读取后面的索引表项需进行多次磁盘I/O操作;另一种是采用多级索引,即为多个索引表再建立一个索引表(称为主索引表),形成二级索引。如果二级索引的主索引表仍然不能存放在一个盘块中,就需要三级索引。
优点:
是链接结构的一种扩展,具有链接结构的优点,还克服了只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件的增加和删除,可以方便地进行随机存取。
缺点:
<1>增加了索引表的空间开销和查找时间,索引表的信息量甚至可能远远超过文件记录本身的信息量。
<2>
在存取文件时首先查找索引表,增加了一次读盘操作,从而降低了文件访问的速度。都但是可以采取补救措施,例如在文件读取前,事先把索引表放在内存中,这样以后的文件访问可以直接在内存中查询索引表,以加快访问速度。
4)
Hash文件
在直接存取设备上,文件的物理结构还有一种组织方式,即采用寻址结构。在这种方式中,把记录中的关键码通过某种计算,转换为记录的相应地址。这种存储结构是通过指定记录在存储介质上的位置进行直接存取的,记录无所谓次序。一般来说,用于地址的总数比可能的关键码总数要少得多,所以不会出现一一对应关系。那么就有可能存在着不同的关键码计算后,得到了相同的地址,这种现象称为“地址冲突”。而这种通过对记录的关键码施加变换而获得相应地址的变换方法,通常称为Hash方法,或称为散列法、杂凑法。利用Hash方法建立的文件结构称为。Hash文件。这种物理结构适用于不宜采用连续结构,记录次序比较混乱,又需要快速存取的情况。例如,一个存取学生信息的文件,将班级信息作为索引,凡班级相同的同学作为一个数据,这样建立的Hash表可以用来快速查找同一班级学生的信息,加快了查询速度。
优点:
查找不需要做索引,可以快速地直接存取。
缺点:
当地址冲突发生时,需要有解决冲突的方法,这称为溢出处理技术,也是设计Hash文件需要考虑的主要内容。常用的溢出处理技术有线性探测法、二次探测法、拉链法、独立溢出区法等。
存取方法
1)顺序存取
数据以块的形式存放,只有前面的物理块被访问后,后续的物理块才能被访问,块与块之间用间隔分开。
2)直接存取