4.1 文件系统基础
在学习本节时,请读者思考以下问题:
- 什么是文件?
- 文件系统在操作系统中的地位如何?
本节聚焦文件系统的理论基础,涵盖文件的定义与基本属性、文件系统的层次结构以及文件 的逻辑结构等基本概念。内容偏理论且较为基础,有助于读者构建对文件的整体认知。
4.1.1 文件的基本概念
文件(File)是存储在计算机持久性存储设备(如硬盘、固态盘等)上的信息集合,其内容 可以是文本文档、图像、程序代码或其他形式的数据。在操作系统中,系统运行时以进程为基本单位进行资源的调度与分配;而用户在进行输入/输出操作时,则通常将文件作为逻辑操作的基本对象。绝大多数应用程序从文件中读取输入数据,并将处理结果写回文件,从而实现信息的长期保存与后续访问。为了支持用户对文件的创建、读取、修改、删除及安全保护等需求,操作系统提供了专门的文件系统(File System), 用以统一管理文件资源。
要清晰地理解文件的概念,就需要了解文件究竟由哪些要素构成。
1. 文件的定义
首先,文件必然包含实际的数据,即存储空间中所保存的信息;其次,由于操作系统需要管理大量数据,必须对这些数据进行分类和组织,因此每个文件都关联有用于分类和索引的信息;最后,不同用户对数据的访问权限存在差异,系统还需为文件设置相应的访问控制信息。
再举一个直观的例子——“图书馆管理图书”来类比文件。可以认为,计算机中的一个文件相当于图书馆中的一本书,而操作系统管理文件,则相当于图书管理员管理图书馆中的书。
具体而言,书的内容对应于文件的数据;不同类别的书籍被分置于不同书库,赋予编号并录入图书管理系统以供查阅,类似于文件的分类与查找机制;某些绝版或高价值的外文书籍仅限高权限读者借阅,而普通书籍则向所有读者开放,体现了文件的访问权限控制。尽管这一类比并不完全等同于操作系统的实际机制,但在内容、组织方式和权限控制等关键属性上,二者体现了相似的管理思想,因而有助于初学者快速把握这一抽象概念。
从用户的角度看,文件系统是操作系统的重要组成部分之一。用户关心的是如何命名、分类和查找文件,如何保障文件数据的安全性,以及可以对文件执行哪些操作等;而对于底层细节,例如文件如何存储在外存上、如何管理文件的外存区域等,则通常较少关注。
文件系统通过对二级存储相关资源的抽象,屏蔽了文件的内部属性、存储介质的物理特性及其在设备上的具体位置等底层细节,使用户无须关心这些细节,便能方便、高效地使用文件。用户借助文件系统创建文件,并将其用于应用程序的输入与输出,从而有效管理数据资源。
为了解文件的内部结构,我们采用自底向上的方式加以定义。
数据项。是文件系统中最低级的数据组织形式,可分为以下两种类型:基本数据项。用于描述一个对象某一方面属性的一个值,是数据中的最小逻辑单位。组合数据项。由多个基本数据项组成。
记录。 是一组相关数据项的集合,用于描述一个对象在某一方面的完整属性。文件。是指由创建者所定义的、具有文件名的一组相关元素的集合,可分为有结构文件和无结构文件两类。有结构文件由若干格式相似的记录组成,如一个班级的学生记录;而无结构文件则被视为一个连续的字节流,如二进制文件或普通文本文件。
虽然上面给出了结构化的表述,但操作系统对文件并无严格统一的定义。通常,程序和数据 均以文件的形式组织。文件的内容可以是数字、字符或二进制代码,基本访问单元可以是字节或 记录。文件可长期存储在外存中,支持受控的进程间共享,并能被组织成复杂的逻辑结构。
2. 文件的属性
除了文件所包含的数据内容,操作系统还会维护一系列与文件相关的信息,例如所有者、创建时间等。这些附加信息统称为文件属性(或文件元数据),用于支持文件的管理、保护与检索。尽管不同操作系统在具体实现上有所差异,但通常都包含以下基本属性。
名称。文件的标识符,为避免命名冲突,在同一目录中必须唯一。类型。用于标识文件的种类,供系统决定如何处理或打开该文件。创建者。创建该文件的用户标识 (ID)。所有者。当前拥有该文件的用户标识(ID), 通常有权修改文件属性或访问权限。位置。 指向文件在外存设备上物理存储位置的指针。大小。文件当前所占存储空间的大小(通常以字节、字或块为单位)。保护。 定义对文件的访问控制策略,包括读/写、执行等权限,用于保障文件安全。创建时间、最后一次修改时间及最后一次访问时间,常用于审计、备份或缓存管理。
3. 文件的分类
为便于对文件进行有效管理,操作系统通常将文件划分为若干类型。由于不同系统在设计理念和管理机制上存在差异,其文件分类方法也各不相同。以下是几种常见的分类方式:
按性质和用途分类,可分为系统文件、用户文件和库文件。按数据的形式分类,可分为源文件、目标文件(编译过程的中间文件)和可执行文件。按存取控制属性分类,可分为只读文件、读/写文件和可执行文件。按组织形式与处理方式分类,可分为普通文件、目录文件和特殊文件(如设备文件)。
4.1.2 文件系统结构
文件系统(File System)为用户提供高效、便捷的磁盘访问机制,支持数据的存储、定位与提取。其设计涉及两个核心问题:一是定义用户接口,包括文件及其属性、允许的操作类型以及目录结构的组织方式;二是设计相应的算法与 数据结构,将逻辑上的文件系统映射到物理外存设备上。由于现代操作系统支持多种文件系统类型,其内部层次结构也各不相同。
(1)I/O 控制
包含设备驱动程序和中断处理程序,负责在内存与磁盘之间传输数据。设备驱动程序将高层命令转换为底层硬件可识别的特定指令,由硬件控制器执行,实现I/O设备与系统的交互,并向I/O 控制器指明对设备的具体位置执行何种操作。
(2)基本文件系统
负责向设备驱动程序发送通用命令,以读取或写入磁盘的物理块;每个物理块由唯一的磁盘地址标识。该层还管理内存缓冲区,缓存文件系统元数据、目录项及数据块;在执行磁盘传输前,需要分配并维护合适的缓冲区——有效的缓冲区管理对系统性能至关重要。
(3)文件组织模块
负责建立文件逻辑块与物理块之间的映射关系,将逻辑块地址转换为物理块地址。文件的逻辑块按顺序编号(从0到N), 通常与物理块布局不一致,因此需通过地址转换机制进行定位。该模块还包含空闲空间管理器,用于跟踪未分配的磁盘块,并按需分配给文件使用。
(4)逻辑文件系统
负责管理文件系统的元数据(描述文件系统结构的信息,如文件名、目录项、权限和时间戳等),不含实际数据内容。它维护目录结构,并根据给定文件名,向文件组织模块提供所需的元 数据;同时通过文件控制块记录各文件的属性与状态,并负责实现文件保护机制。
4.1.3 文件的逻辑结构
文件的逻辑结构是指从用户视角所看到的文件组织形式;而文件的物理结构(也称存储结构) 则是指文件在外存上的实际存储方式,对用户透明。逻辑结构与底层存储介质无关,其核心在于 描述文件内部数据在逻辑上是如何组织的。
根据逻辑结构的不同,文件可分为两大类:无结构文件和有结构文件。
1.无结构文件
无结构文件是最简单的组织形式,由连续的字符流构成,因此也称流式文件,其长度以字节为单位。对这类文件的访问通过读/写指针来定位下一个要操作的字节。系统中大量的源程序、可 执行文件和库函数均采用这种形式。由于缺乏显式的记录边界,若需检索特定内容,只能进行顺序查找,效率较低,因而不适用于需要频繁随机访问或按记录检索的应用场景。
2.有结构文件
有结构文件由一个或多个记录组成,故也称记录式文件。每条记录由若干数据项组成,其数 量和长度可能固定,也可能可变。根据记录长度是否一致,有结构文件进一步分为两类。
定长记录。所有记录的长度相同,且各数据项在记录中的位置固定。系统可通过偏移量 直接定位任意记录,从而支持高效的随机访问。变长记录。各记录的长度不一,或因所含数据项数量不同,或因某些数据项长度可变。 由于无法直接计算记录位置,检索时通常只能顺序查找,速度较慢。
有结构文件按记录的组织形式可分为顺序文件、索引文件、索引顺序文件。
(1)顺序文件
顺序文件中的记录按线性顺序依次排列,可采用定长或变长记录。根据记录是否按键字排序,可分为两种结构:
串结构,记录按存入时间先后排列,不按键字排序。检索时必须从头开始 顺序扫描,效率较低。顺序结构,所有记录按键字有序排列。对于定长且按键字有序的顺序文件,可通过偏移量直接定位记录,并支持折半查找等高效算法,检索效率高。
正因记录连续存储、访问局部性强,顺序文件在批量处理场景下表现最优——当需要连续读取或写入大量记录时,其I/O效率在所有逻辑文件类型中最高。此外,对于顺序存储设备(如磁带),顺序文件是唯一能够有效工作的组织形式。然而,在频繁进行单条记录的查找、修改、插入或删除操作时,由于缺乏直接定位能力且需移动大量数据,顺序文件的性能明显不足。
(2)索引文件
对于定长记录的顺序文件,可直接通过公式计算第 条记录的物理地址: (L为记录长度)。对于变长记录的顺序文件,由于各记录长度不一,无法直接定位目标记录,必须从头开始 依次读取前 条记录,累加其长度以确定第 条记录的起始位置,即
该过程需顺序扫描,效率较低。为提高检索效率,可建立一张索引表,为每个记录设置一个索引项 ,包含指向该记录的指针及其长度,并按关键字排序。由于索引表由定长记录构成,支持高效 的随机访问。系统可通过索引表直接定位任意记录,从而将对变长记录顺序文件的顺序查找,转变为对定长索引文件的随机查找,显著提升检索速度。
索引文件需额外维护一张索引表,且每个记录对应一个索引项,因此增加了存储开销。
(3)索引顺序文件
索引顺序文件是顺序文件与索引文件的结合。其最简单的形式采用一级索引:先将变长记录的顺序文件划分为若干组,再为每组的首条记录建立一个索引项,包含该记录的关键字及其指针,所有索引项共同构成一张按关键字有序排列的索引表。
主文件包含姓名(作为关键字)及其他数据项,记录按姓名首字母分组——组内可无序,但组间必须按键字有序。每组首条记录的姓名及其逻辑地址被存入索引表,该表按姓名递增排序。检索时,首先在索引表中定位目标记录所属的组,继而在该组内进行顺序查找,从而快速找到目标记录。
对于含 条记录的普通顺序文件,平均需查找 次。而在索引顺序文件中,若将记录均分 组,则每组约含 条记录。查找过程分为两步:
- 在索引表中顺序查找,平均需 次;
- 在对应组内顺序查找,平均需 次。
因此,总平均查找次数为
当 时,该值最小,查找效率达到最优。
显然,索引顺序文件显著提升检索效率;当记录数量极大时,还可引入两级或多级索引,进一步降低查找开销——这正是分块查找(也称索引顺序查找)的基本思想。然而,索引文件与索引顺序文件在大幅提升查找速度的同时,也因维护索引表而带来额外存储开销。
(4)直接文件(散列文件)
在直接文件(也称散列文件)中,记录的物理地址由其关键字经散列函数计算直接确定。这种方式支持极快的随机存取,但不同关键字可能映射到同一地址,从而引发冲突。
熟悉数据结构的读者不难发现:有结构文件的各类逻辑组织方式(包括顺序、索引、索引顺 序和散列),本质上都是围绕“如何高效查找数据”这一核心目标而设计的。
4.1.4 本节小结
本节开头提出的问题的参考答案如下。
-
什么是文件?
文件是操作系统中用于存储和组织数据的基本单位,是一组逻辑上相关的信息(如程序、文本、 图像等)的有序集合,通常以一个名字标识,并保存在持久性存储设备(如硬盘)上。
-
文件系统在操作系统中的地位如何?
文件系统是操作系统的核心子系统之一,负责对存储设备上的文件和目录进行统一管理,提 供创建、读取、写入、删除、组织及保护等基本操作。它向上为应用程序和用户提供简洁、一致的抽象接口,屏蔽底层存储细节;向下则与设备驱动协同,高效调度物理存储资源。作为连接用 户逻辑视图与物理存储之间的关键桥梁,文件系统在操作系统中扮演着承上启下的核心角色。
