前言
本章核心分为两大模块:
1.文件逻辑结构 :站用户视角,描述文件数据、记录的组织形式;
2.文件物理结构 :站操作系统视角,描述文件数据在磁盘上的存储分配方式;
3.磁盘空闲存储空间管理 :操作系统对磁盘空闲盘块的四种管理方案(考试高频考点)。
重点区分易混淆概念:逻辑层的链式/索引结构、物理层的链接/索引分配;所有存储管理方法均围绕数据结构、盘块分配、盘块回收三个维度学习。
第一部分 文件逻辑结构 与 物理结构 辨析
一、基础认知
1.文件逻辑结构
面向用户/应用程序,是用户感知到的文件组织形式。用户只需操作逻辑地址,无需关心数据在磁盘的真实位置。
分类:无结构文件(流式文件)、有结构文件(记录式文件)。
2.文件物理结构(文件分配方式)
面向操作系统,操作系统将文件拆分为等大逻辑块,再映射到磁盘物理块,负责逻辑块 → 物理块的地址转换。
三大分配方式:连续分配、链接分配、索引分配(此前已学)。
3.核心关系
用户只操作逻辑地址;操作系统自动完成「逻辑地址 → 逻辑块号+块内偏移 → 物理块号」转换,两层结构相互独立。
二、无结构文件(流式文件)
1.定义
文件由一串连续字符/二进制流组成,无独立"记录"概念,是最通用的文件类型(如 .txt 文本文件)。
2. C 语言实操示例(理解逻辑地址)
(1)写入文件
使用 fopen / fputs / fclose 向 test.txt 循环写入 10000 个 Hello World。
•文件在用户视角:字符连续排列,占用连续逻辑地址空间;
•每个字符占 1 字节,可通过字节偏移定位任意字符。
(2)随机读取
使用 fseek(移动文件读写指针)+ fgetc(读取单个字符):
•fseek 依据逻辑字节偏移定位,无需关心磁盘物理位置;
•底层由操作系统将逻辑偏移转为逻辑块、再转为物理块,完成读写。
3. 底层存储
操作系统会把整个文件按磁盘块大小(如1KB) 切分为多个逻辑块,再使用连续/链接/索引任意一种物理方式存到磁盘,用户完全感知不到。
三、有结构文件(记录式文件)
1.定义
文件由多条固定/变长记录组成,一条记录对应一组关联数据(如学生信息、员工信息),常见分类:顺序文件、索引文件、索引顺序文件。
2. 顺序文件
逻辑上记录按顺序排列,分为顺序存储和链式存储两种实现,属于用户层面的逻辑组织。
(1)顺序存储(逻辑层)
•特点:所有记录在逻辑空间连续存放,每条记录大小固定;
•访问:通过「记录序号 × 记录大小」计算逻辑地址,支持随机访问;
•示例:定义学生结构体(学号、姓名、专业),批量写入文件,读取第 N 条记录可直接计算偏移。
(2)链式存储(逻辑层,高频易混点)
•实现:在每条记录中增加 next 指针字段,指向下一条记录的逻辑位置;
•特点:记录逻辑顺序由指针串联,物理逻辑空间可以不连续;
•访问:仅支持顺序访问,查找目标记录必须从头逐个遍历。
🔔 重点区分:逻辑层链式存储 VS 物理层链接分配
1.逻辑层链式:用户/程序维护指针,串联文件内部的记录,属于文件内容组织;
2.物理层链接分配:操作系统维护指针,串联磁盘上的逻辑块/物理块,属于磁盘存储组织;
3.二者层级不同,互不干扰。
4.例:一个逻辑链式的顺序文件,操作系统依然可以用连续、链接、索引任意物理方式存储。
3. 索引文件(逻辑层,高频易混点)
1.实现方式
- 文件分为两部分:索引区 + 数据区;
- 索引区:存放索引项,每条索引记录「关键字(如学号)→ 记录逻辑地址」;
- 数据区:存放所有业务记录。
2. 访问流程
先读取索引区,通过关键字查找对应索引项,得到记录逻辑地址,再读取数据区记录。
🔔 重点区分:逻辑索引文件 VS 物理索引分配
1.逻辑索引文件:用户/程序自建索引,映射「记录关键字 → 记录逻辑地址」;
2.物理索引分配:操作系统自建索引,映射「逻辑块号 → 物理块号」;
3.两个索引分属不同层级,功能、维护主体完全不同。
- 索引顺序文件
结合顺序文件与索引文件的优点,先对记录分组,为每组建立索引,兼顾查找效率与存储效率(了解即可)。
四、逻辑结构 & 物理结构 核心总结
1.视角不同
○逻辑结构:用户视角,组织文件/记录,操作逻辑地址;
○物理结构:操作系统视角,管理磁盘块,负责逻辑块到物理块的映射。
2.独立性
用户选择的逻辑组织形式,不会限制操作系统的物理分配方式,组合灵活。
3.易混概念对照表

第二部分 磁盘空闲存储空间管理
一、前置概念:磁盘存储空间划分
1.文件卷(逻辑卷/逻辑盘)
•日常所说 C 盘、D 盘、E 盘,就是文件卷;
•两种组合形式:
a.一个物理磁盘 → 多个文件(Windows 常规分区);
b.多个物理磁盘 → 一个文件卷(大型服务器/存储系统)。
2. 文件卷分区
每个文件卷会被划分为 目录区 和 文件区:
1.目录区
存放:文件目录项(FC)、索引节点、磁盘空闲管理的数据结构(空闲表、位示图、超级块等);
作用:系统管理核心区域,用户无权限修改。
2.文件区
专门存放用户的普通文件数据(磁盘物理块主体)。
3. 学习通用思路
以下四种空闲盘块管理方法,统一从 ①数据结构 ②盘块分配 ③盘块回收 三个维度掌握。
二、方法一:空闲表法
1.数据结构
借鉴内存动态分区空闲表,用一张表格记录所有连续空闲盘区。
•表项字段:起始盘块号、空闲盘块数量;
•每一行代表一段连续的空闲磁盘块。
2. 盘块分配
- 适用场景:优先配合连续分配的文件物理结构(要求连续空间);
- 分配算法(同内存分区):
○首次适应:从表头开始,找到第一个满足大小的空闲区;
○最佳适应:选择大小最匹配的空闲区;
○最坏适应:选择最大的空闲区。 - 分配流程:从选中空闲区中截取所需盘块,修改表项的起始块和剩余数量。
3. 盘块回收
删除文件、释放盘块时,需要判断回收区与原有空闲区的相邻关系,共 4 种情况:
- 回收区上下均无空闲区:新增一条空闲表项;
- 回收区上下都是空闲区:合并三个区域,表项总数 -1;
- 回收区上方相邻空闲区:合并,表项数量不变;
- 回收区下方相邻空闲区:合并,表项数量不变。
4. 优缺点
•优点:结构简单,连续分配场景效率高;
•缺点:大量碎片化空闲块会导致空闲表庞大,大型系统不适用。
三、方法二:空闲链表法
以链表形式串联所有空闲盘块,分为两类:空闲盘块链、空闲盘区链。
(一)空闲盘块链
1.数据结构
以单个磁盘块为链表节点,每个空闲块内存储「下一个空闲块指针」,系统维护链头、链尾指针。
2. 盘块分配
从链头依次摘下所需数量的盘块,更新链头指针。
3. 盘块回收
将回收盘块挂载到链尾,更新链尾指针。
4. 适用场景
适配离散分配的文件物理结构;缺点:分配多块时需要多次操作,效率低。
(二)空闲盘区链
1.数据结构
以连续空闲盘区为链表节点(一个节点 = 多个连续空闲块);
每个节点记录:盘区总长度、下一个盘区指针。
2. 盘块分配
1.可使用首次/最佳/最坏适应算法查找合适盘区;
2.支持分配连续块、也可拆分多个盘区组合分配。
3. 盘块回收
和空闲表逻辑一致,优先判断相邻空闲区,合并相邻盘区后再挂载到链表尾部。
4. 优缺点
•优点:分配连续空间效率远高于空闲盘块链,连续/离散分配都支持;
•缺点:链表过长时检索效率下降。
四、方法三:位示图法(考试最高频考点)
1.数据结构
用二进制位表示单个磁盘块状态:
•0:磁盘块空闲;
•1:磁盘块已分配;
所有二进制位按字分组(如一个字占 16/32 位),形成二维位示图。
2. 核心换算公式(必考)
设定:N = 单个字的位数;
区分前提:盘块号、字号、位号 从 0 开始 / 从 1 开始(做题优先看题干)。
(1)字号(i) + 位号(j) → 盘块号(b)
•从 0 开始:b = i × N + j
•从 1 开始:b = (i-1) × N + (j-1) + 1
(2)盘块号(b) → 字号(i) + 位号(j)
•从 0 开始:
i = b / N(整除),j = b % N(取余)
•从 1 开始:
i = (b-1) / N + 1,j = (b-1) % N + 1
3. 盘块分配
- 顺序扫描位示图,找到值为 0 的二进制位;
- 根据字号、位号计算对应盘块号;
- 将该位改为 1(标记为已分配)。
4. 盘块回收
- 根据回收盘块号,反推对应的字号、位号;
- 将该二进制位改为 0(标记为空闲)。
5. 特点
- 占用空间极小,查询速度快;
- 连续、离散分配均适用;
- 是各类考试选择题、计算题重点。
五、方法四:成组链接法(Unix 系统专用)
1.适用场景
专为大型文件系统设计,解决空闲表、空闲链表过长的问题,Unix/Linux 主流方案。
2. 数据结构
- 超级块:存放在文件卷目录区,系统启动后常驻内存;
作用:记录当前组空闲块总数 + 本组所有盘块号,作为分组链表的头部。 - 分组规则:
○将所有空闲盘块分组管理,每组有最大块数上限(例:每组最多 100 块);
○每组的第一个盘块,记录下一组的块数 + 下一组所有盘块号,组与组之间链式衔接;
○最后一组标记特殊值(如 -1),表示链表结束。 - 补充:各组盘块不要求连续。
3. 盘块分配流程
- 优先读取内存中的超级块,判断当前组空闲块是否满足需求;
- 普通分配(组内块充足):取出组内末尾盘块,组计数减 1;
- 整组分配(当前组全部分配):
先将下一组的信息复制到超级块(保留链表头部),再分配当前整组盘块。
4. 盘块回收流程
- 若当前分组未满:直接将回收盘块加入本组,组计数 +1;
- 若当前分组已满:
将当前超级块内容写入新回收盘(作为新分组的链接信息),更新超级指向该新分组。
5. 优缺点
•优点:分组管理,内存开销小、读写磁盘次数少,大型系统性能优异;
•缺点:逻辑复杂,计算题考察较少,以概念理解为主。
第三部分 全章节总复习&考点梳理
一、逻辑结构 考点总结
1.两大视角区分:用户(逻辑)、操作系统(物理);
2.无结构文件:流式字符,fseek 按字节偏移访问;
3.有结构文件:顺序文件、索引文件;
4.重中之重:逻辑链式/索引 ≠ 物理链接/索引,层级不同,不可混淆。
二、空闲盘块四大管理方法对比

三、高频考试题型
1.概念辨析:逻辑/物理层的链式、索引区别;
2.计算题:位示图「盘块号、字号、位号」相互转换(重中之重);
3.分析题:空闲表、空闲链表的分配/回收规则;
4.简答题:四种空闲管理方法的特点、适用场景。