逻辑结构
有结构文件(记录式文件)
文件由一组相似的记录组成。每个记录又由若干个数据项构成。
顺序文件
记录按照某种顺序排列而成的文件。
其中的记录分为定长记录和不定长记录:
- 定长记录:文件中所有记录的长度都相同。
- 变长记录:文件中各记录的长度不一定相同。
排列方式有: - 串结构:按照存入时间排序,进行检索时必须从头开始逐个记录查找。
- 顺序结构:根据关键字进行排序。
记录寻址的方法有: - 隐式寻址方式:主要用于顺序访问文件。系统维护读指针()和写指针(),读/写完一个记录后, 或 。
- 显示寻址方式:主要用于对记录进行随机访问。对于定长记录文件,通过可以直接算出第个记录的首地址。对于变长记录文件,利用关键字顺序地从第一个记录开始比较,直到匹配。
索引文件
为了解决变长记录无法随机存取,为变长记录文件建立一张索引表,这张表本身是一个定长记录的顺序文件。
每个定长记录包含对应变长记录的信息:索引号(关键字)、长度、指针。
索引文件也可以具有多个索引表,每个表根据不同的关键字建立索引。
索引顺序文件
索引顺序文件解决了索引文件“每条记录都要建一个索引项”导致索引表太大的问题。
一级索引文件
将变长记录顺序文件中的所有记录分组,然后建立一张索引表,索引表中只对每一组的第一条记录建立索引,寻址时先根据索引找到所在的组,再在组内进行顺序查找。
组内的记录可以是无序的,但是组与组之间按关键字排序。
多级索引文件
当顺序文件记录太多时,顺序文件中的每个分组可能很大,此时顺序查询效率不高,此时要增加分组的数量以减小分组的记录数,但索引文件的记录数也随之增大,此时可以为低级索引文件建立高级索引文件。
直接文件和哈希文件
其他文件结构都需要手动寻址,而直接文件可以直接通过记录的关键字进行转换得到记录的物理地址。
哈希文件是应用最为广泛的直接文件,利用哈希函数进行关键字到记录物理地址的转换。
无结构文件(流式文件)
文件的长度以字节为单位。读写通过逐字符或逐字节进行访问。
文件目录
文件控制块的有序集合就是文件目录,因为文件目录要以文件形式存在外存,所以也叫目录文件。
文件控制块 FCB
一个文件/目录对应一个文件控制块,文件控制块包含:
- 基本信息:文件名、物理地址、逻辑结构、物理结构
- 存取控制信息:读/写/执行权限
- 使用信息:创建时间、修改时间、使用信息等
查找文件时,只需要用到文件名,查找文件时需要先将文件控制块先调入内存再进行对比,除了文件名外的信息属于无效磁盘IO。
为了解决该问题,Unix引入了索引节点,文件控制块中只包含文件名和索引节点编号,文件的其他信息放在索引节点中,通过索引节点编号访问。