5.1 文件与文件系统
文件是操作系统中"最大众脸"的抽象:一段有名字的数据。
- 文件——具有符号名(文件名)的、存放在外存上的相关信息的集合。操作系统的角度看,设备也是文件(Unix"一切皆文件"的思想)。
- 文件系统——负责文件的按名存取、目录组织、存储分配与保护的一整套软件机制。
- 文件的逻辑结构(用户看到的):
- 流式文件——一段字节流,没有内部结构(文本、可执行文件)。
- 记录式文件——由一条条记录组成,按记录读写(数据库文件的底层形态)。
5.2 物理结构:文件在磁盘上怎么存放
三种方式一张表,考试就问优缺点。
| 方式 | 怎么存 | 优点 | 缺点 |
|---|---|---|---|
| 顺序(连续) | 文件占用连续的磁盘块 | 读写最快(一次寻道就能顺序读) | 难扩展(后面没空位就得挪窝)、易产生外部碎片 |
| 链接 | 每块存一个指针,指向下一块(离散分布) | 易扩展、无外部碎片 | 只能顺藤摸瓜顺序访问,指针占空间;断链即丢数据 |
| 索引 | 为文件建一张索引表,记每块在哪 | 支持直接(随机)访问,易扩展 | 索引表本身占额外空间 |
记忆抓手
- 顺序 = 连排座;链接 = 每人手里攥着下个人的纸条;索引 = 一张"座位表"。
- 要随机访问(直接跳到第 n 块),顺序和索引都行,链接不行。
课堂练习(2 题)
- 哪种物理结构最适合"经常随机读写、大小会变化"的文件? 答:索引结构(支持直接访问又便于扩展)。
- 链接结构的最大缺点是什么? 答:只能顺序访问(必须从第一块顺着指针找下去),且指针本身占用空间。
5.3 目录结构:从按名存取到树形目录
"绝对路径/相对路径"、树形目录是送分题。
- 树形目录——目录像一棵倒过来的树:根目录 → 各级子目录 → 文件。解决了"重名"问题(不同目录可以同名文件)。
- 绝对路径——从根目录写起:
D:\study\os\notes.txt、/home/user/a.txt。 - 相对路径——从当前目录写起:
./notes.txt、../images/pic.png(..表示上一级)。 - 文件控制块(FCB)——目录项的本质:文件名 + 存放位置 + 大小 + 权限等属性。 Linux 类系统中演变出 inode(索引节点):把属性单独存,目录项里只留"文件名 + inode 号",检索更快。
课堂练习(2 题)
- 树形目录结构解决了什么问题? 答:不同用户/目录下文件重名的问题(同名文件可以共存于不同目录),并便于分类管理。
- 路径 "..\docs\a.txt" 里的 ".." 表示什么? 答:当前目录的上一级目录(相对路径的写法)。
5.4 存储空间管理:位示图计算 ★
给位示图算块号(或反过来),是文件管理里唯一的计算题。
位示图:用若干字节的存储区,每一位对应磁盘上的一个块——0 表示空闲,1 表示已占用。 好比一张巨大的"座位表",一个格子对应一个座位。
位示图的组织:按"字"(如一个字 32 位)排列,每个字覆盖 32 个块
换算公式(最常用的两个):
已知块号 i(从 0 开始编号):
字号 N = i ÷ 字长 (第几个字)
位号 b = i % 字长 (字内第几位,从 0 开始)
已知字号 N、位号 b:
块号 i = N × 字长 + b
例题:手把手算
位示图字长 32 位。求:① 磁盘共 16384 个块,位示图需要多少个字?② 块号 100 对应第几个字的第几位?
① 16384 ÷ 32 = 512 个字 ② 字号 = 100 ÷ 32 = 3(整除商 3,即第 4 个字) 位号 = 100 − 3×32 = 4(第 5 位) 答:第 3 号字的第 4 位(都从 0 开始数) 反向验证:3×32 + 4 = 100 ✓
易错
- 题目若规定"从 1 开始编号",所有结果 +1——做题前先看清题目约定,这是本考点唯一陷阱。
- 位示图一位只表示一个块的忙闲,不要和"块大小"混淆。
其他空闲空间管理方法(知道名字即可):空闲区表、空闲块链(成组链接法)。
课堂练习(2 题)
- 字长 16 位,位示图共 64 个字,磁盘共有多少块? 答:64 × 16 = 1024 块。
- 字长 32 位、从 0 编号:块号 70 在第几个字的第几位? 答:字号 70÷32=2;位号 70−64=6。第 2 号字第 6 位。