文件系统

1.基本概念

  数据 组成分为数据项、记录和文件

  在文件系统中,数据项是最低级的数据组织形式,可把它分成以下两种类型: (1) 基本数据项。这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名 的最小逻辑数据单位,即原子数据,又称为数据元素或字段。它的命名往往与其属性一致。 例如,用于描述一个学生的基本数据项有学号、姓名、年龄、所在班级等。 (2) 组合数据项。它是由若干个基本数据项组成的,简称组项。例如,经理便是个组项, 它由正经理和副经理两个基本项组成。又如,工资也是个组项,它可由基本工资、工龄工 资和奖励工资等基本项所组成。 

  记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。一个记录应包含 哪些数据项,取决于需要描述对象的哪个方面。

  

  文件是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件 和无结构文件两种。在有结构的文件中,文件由若干个相关记录组成;而无结构文件则被 看成是一个字符流。文件在文件系统中是一个最大的数据单位,它描述了一个对象集。

  此外,文件应具有自己的属性,属性可以包括: (1) 文件类型。可以从不同的角度来规定文件的类型,如源文件、目标文件及可执行文 件等。 (2) 文件长度。文件长度指文件的当前长度,长度的单位可以是字节、字或块,也可能 是最大允许的长度。 (3) 文件的物理位置。该项属性通常是用于指示文件在哪一个设备上及在该设备的哪个 位置的指针。 (4) 文件的建立时间。这是指文件最后一次的修改时间等。 

  关系图:

 

 

2.文件系统模型

 

3.文件逻辑结构

  文件的逻辑结构可分为两大类,一类是有结构文件,这是指由一个以上的记录构成的 文件,故又把它称为记录式文件;其二是无结构文件,这是指由字符流构成的文件,故又 称为流式文件。

  有结构文件 在记录式文件中,每个记录都用于描述实体集中的一个实体,各记录有着相同或不同 数目的数据项。记录的长度可分为定长和不定长两类。 

  根据用户和系统管理上的需要,可采用多种方式来组织这些记录,形成下述的几种 文件: 

(1) 顺序文件。这是由一系列记录按某种顺序排列所形成的文件。其中的记录通常是定 长记录,因而能用较快的速度查找文件中的记录。 (2) 索引文件。当记录为可变长度时,通常为之建立一张索引表,并为每个记录设置一 个表项,以加快对记录检索的速度。 (3) 索引顺序文件。这是上述两种文件构成方式的结合。它为文件建立一张索引表,为 每一组记录中的第一个记录设置一个表项。 

  无结构文件
如果说大量的数据结构和数据库是采用有结构的文件形式的话,则大量的源程序、可 执行文件、库函数等,所采用的就是无结构的文件形式,即流式文件。其长度以字节为单 位。对流式文件的访问,则是采用读/写指针来指出下一个要访问的字符。可以把流式文件 看做是记录式文件的一个特例。在 UNIX 系统中,所有的文件都被看做是流式文件,即使 是有结构文件,也被视为流式文件,系统不对文件进行格式处理。

  (1) 顺序文件:

  (2) 索引文件: 索引表:

提高了存储费用

  (3) 索引顺序文件

索引顺序文件(Index Sequential File)可能是最常见的一种逻辑文件形式。它有效地克服 了变长记录文件不便于直接存取的缺点,而且所付出的代价也不算太大。前已述及,它是 顺序文件和索引文件相结合的产物。它将顺序文件中的所有记录分为若干个组(例如,50 个 记录为一个组);为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个 索引项,其中含有该记录的键值和指向该记录的指针

 

  (4)直接文件 采用前述几种文件结构对记录进行存取时,都须利用给定的记录键值,先对线性表或 链表进行检索,以找到指定记录的物理地址。然而对于直接文件,则可根据给定的记录键 值,直接获得指定记录的物理地址。换言之,记录键值本身就决定了记录的物理地址。这 种由记录键值到记录物理地址的转换被称为键值转换(Key to address transformation)。组织直 接文件的关键,在于用什么方法进行从记录值到物理地址的转换。 

  (5)哈希(Hash)文件 这是目前应用最为广泛的一种直接文件。它利用 Hash 函数(或称散列函数),可将记录 键值转换为相应记录的地址。但为了能实现文件存储空间的动态分配,通常由 Hash 函数所 求得的并非是相应记录的地址,而是指向一目录表相应表目的指针,该表目的内容指向相 应记录所在的物理块,如图 6-6 所示。例如,若令 K 为记录键值,用 A 作为通过 Hash 函数 H 的转换所形成的该记录在目录表中对应表目的位置,则有关系 A=H(K)。通常,把 Hash 函数作为标准函数存于系统中,供存取文件时调用。 

 

外存分配方式

常用的外存分配方法有连续分配、链接分配和索引分配三种。