Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : 什么是文件的逻辑结构和物理结构?
【简要回答】
文件的逻辑结构
- 概念:
- 定义:是指用户视角下文件的组织形式,决定用户如何访问和操作文件内容,与物理存储无关。
- 分类:无结构文件(流式文件)、有结构文件(记录式文件)。
- 无结构文件(流式文件):
- 文件内容是无序的字符流/字节流,没有固定结构(如文本文件、二进制文件),适用于文本、图像、可执行文件等,需要用户程序自行解析。
- 有结构文件(记录式文件):
- 介绍:由若干条记录组成,每条记录包含若干字段(如数据库表);按照文件的组织方式,可把有结构文件分为四类:顺序文件、索引文件、索引顺序文件 和 直接文件。
- 顺序文件:记录按顺序存储,定长记录的文件可以经过简单计算进行随机查找,但变长记录的文件则必须从头遍历顺序查找。
- 索引文件:通过索引表直接定位记录,支持快速查找。
- 索引顺序文件:结合顺序和索引结构,按组/块建立索引,组间关键字必须有序,组内关键字可以是无序的。
- 直接文件:通过散列函数等手段直接计算记录的存储位置。
文件的物理结构
- 概念:
- 定义:文件在存储设备(如磁盘)上的实际存储方式。
- 分类:连续分配、链接分配、索引分配。
- 连续分配:
- 文件占据连续的物理块,支持顺序访问和随机访问,可能产生外部碎片。
- 链接分配:
- 文件块在物理上不连续,盘块之间通过指针链接,无外部碎片,但随机访问效率极低(尤其指隐式链接)。
- 索引分配:
- 为每个文件分配一个索引块,使用索引块记录所有盘块号位置,支持快速随机访问,但索引块占用额外空间。
【详细回答】
文件的逻辑结构
- 概念:
- 定义:文件的逻辑结构是指从用户的角度出发所观察到的文件的组织形式,它独立于文件的物理特性,在用户看来,文件的逻辑记录是进行存取操作的基本单位。
- 分类:流式文件(无结构)、记录式文件(有结构)。
- 无结构文件(流式文件):
- 文件内容为连续的字符/字节序列,其长度以字节为单位,无固定结构,需要通过读写指针来指出下一个要访问的字符。
- 大多数现代操作系统如Linux系统只提供流式文件,即使是有结构文件,也被视为流式文件,系统不会对文件进行格式处理和解释,对文件内容的具体解释方式由具体的应用程序来决定。
- 有结构文件(记录式文件):
- 介绍:由若干条记录组成,支持按记录访问和操作。记录是文件内独立的最小信息单位。
- 分类:
- 按记录长度:定长记录(“以空间换时间”)、变长记录(“以时间换空间”)。
- 按组织方式:顺序文件、索引文件、索引顺序文件、直接文件。
- 顺序文件:
- 定义:是指记录在逻辑上按某种顺序排列所形成的文件,具体存储方式可以选择顺序存储 或者 链式存储。顺序文件中的记录通常是定长的。
- 分类:串结构(记录顺序与存入时间有关,与关键字无关)、顺序结构(记录按用户指定的关键字排序,检索时可采用折半查找)。
- 适用场景:适合批量顺序访问(例如磁带)。
- 查找方式:顺序查找(不定长记录)或 折半查找(定长记录)。
- 平均查找次数:(N+1)/2 或 logN(N 为记录总数)。
- 索引文件:
- 定义:是指除了文件本身外,另建立一张 索引表,由索引表和主文件一起构成的文件。其中索引表记录了每条记录的指针和记录的长度。由于索引表按关键字排序,所以索引表本身其实是一个定长记录的顺序文件。
- 优点:把对变长记录顺序文件的顺序查找 转变为 对定长记录索引文件的随机查找。
- 缺点:每个记录都要有一个索引项,使得索引表增加了存储开销。
- 查找方式:直接查找。
- 平均查找次数:1(理想情况下)。
- 索引顺序文件:
- 定义:对文件记录先进行分组,然后为每组的第一条记录在索引表中建立一个索引项。分组的组间关键字必须有序,组内关键字可以无序。
- 提升点:减少索引表大小且减少了访问单条记录的时间,同时保留了文件的顺序特性。
- 查找方式:组间采用折半 or 顺序查找;组内采用顺序查找(类似于数据结构中的分块查找)。
- 平均查找次数:√N(假设记录均匀分布 — 最好情况下)。
- 直接文件:
- 定义:根据给定的关键字直接获得指定记录的物理地址,即关键字本身就决定了记录的物理地址。例如,通过散列函数直接计算记录的物理地址,散列文件属于直接文件中的一种。直接文件常在要求快速访问时使用,且记录的长度是固定的。
- 优点:访问速度快(时间复杂度 O(1))。
- 缺点:散列冲突需处理,不适合范围查询。
- 平均查找次数:1(无冲突时)。
文件的物理结构
- 概念:
- 定义:文件的物理结构是指文件在外存上的存储布局,是用户不可见的,决定如何分配和访问物理块。
- 分类:连续分配、链接分配、索引分配。
- 连续分配:
- 定义:文件占据磁盘上连续的物理块。
- 优点:顺序访问速度快(磁头移动少);支持顺序访问 和 随机访问,对于顺序文件,还可以根据文件的逻辑地址直接找到物理地址。
- 缺点:外部碎片比较严重;无法灵活地删除和插入记录,文件扩展困难;对于动态增长的文件,很难为其分配空间。
- 链接分配:
- 定义:磁盘块之间通过指针链接,根据指针位置的不同,又可细分为 隐式链接 和 显式链接。
- 分类:
- 隐式链接:
- 定义:文件的目录项记录“指向文件第一个盘块和最后一个盘块”的指针,除最后一个盘块外,每个块末尾存储下一块的指针。每次访问文件的其中一个盘块时,都需要从第一个盘块开始逐个读出下一个盘块的指针,直到找到目标盘块。
- 优点:无外部碎片,支持动态扩展。
- 缺点:只支持顺序访问,对于随机访问极其低效;可靠性低(指针损坏直接导致数据丢失);指针需要占用一定的磁盘空间。
- 显式链接(FAT):
- 定义:显式链接相当于把隐式链接中每个盘块末尾的指针提取出来,存放在一张表中,该表称为文件分配表(File Allocation Table,FAT)。FAT一个磁盘中仅设置一张,存放在磁盘的固定位置。FAT所有文件共用,开机时操作系统会将其从磁盘读入内存并常驻内存,因此查找FAT的过程是在内存中进行的。
- 优点:支持快速随机访问(通过 FAT 表);减少了访盘次数,提高了访问速度。
- 缺点:FAT 表占用内存空间(如 FAT32 需常驻内存),对于大容量磁盘,其FAT的表项很多,因而内存开销非常大。
- 隐式链接:
- 索引分配:
- 定义:为每个文件分配一个存放索引表的磁盘块,称作索引块,把分配给该文件的所有盘块号都记录在该索引块中,索引块的第i个条目指向文件的第i个块。文件目录项中记录指向索引块的指针,当查找和读取第i个块时,采用索引块中的第i个条目的指针来查找。
- 优点:支持高效随机访问;扩展性好;而且不会产生外部碎片。
- 缺点:索引块占用额外存储空间,而且大文件需多级索引(如 Unix inode 的直接/间接块);存取文件需要两次/多次访盘,降低了文件的存取速度。
【知识拓展】
文件的物理结构示意图
- 连续分配示意图如下:
- 链接分配(隐式链接 和 显式链接)示意图如下:
- 索引分配示意图如下: