操作系统 · 第 5 章

第 5 章 文件管理

文件逻辑结构;物理结构对比(顺序/链接/索引);树形目录与绝对相对路径、inode;位示图换算例题。

5.1 文件与文件系统

文件是操作系统中"最大众脸"的抽象:一段有名字的数据。

  • 文件——具有符号名(文件名)的、存放在外存上的相关信息的集合。操作系统的角度看,设备也是文件(Unix"一切皆文件"的思想)。
  • 文件系统——负责文件的按名存取、目录组织、存储分配与保护的一整套软件机制。
  • 文件的逻辑结构(用户看到的):
    • 流式文件——一段字节流,没有内部结构(文本、可执行文件)。
    • 记录式文件——由一条条记录组成,按记录读写(数据库文件的底层形态)。

5.2 物理结构:文件在磁盘上怎么存放

三种方式一张表,考试就问优缺点。

方式怎么存优点缺点
顺序(连续)文件占用连续的磁盘块读写最快(一次寻道就能顺序读)难扩展(后面没空位就得挪窝)、易产生外部碎片
链接每块存一个指针,指向下一块(离散分布)易扩展、无外部碎片只能顺藤摸瓜顺序访问,指针占空间;断链即丢数据
索引为文件建一张索引表,记每块在哪支持直接(随机)访问,易扩展索引表本身占额外空间
记忆抓手
  • 顺序 = 连排座;链接 = 每人手里攥着下个人的纸条;索引 = 一张"座位表"。
  • 要随机访问(直接跳到第 n 块),顺序和索引都行,链接不行。
课堂练习(2 题)
  1. 哪种物理结构最适合"经常随机读写、大小会变化"的文件? 答:索引结构(支持直接访问又便于扩展)。
  2. 链接结构的最大缺点是什么? 答:只能顺序访问(必须从第一块顺着指针找下去),且指针本身占用空间。
索引节点与多级间接寻址
图 5-1 inode 的 10 个直接指针 + 三级间接:一个文件最大能到 4TB 的推算

5.3 目录结构:从按名存取到树形目录

"绝对路径/相对路径"、树形目录是送分题。

  • 树形目录——目录像一棵倒过来的树:根目录 → 各级子目录 → 文件。解决了"重名"问题(不同目录可以同名文件)。
  • 绝对路径——从根目录写起:D:\study\os\notes.txt、/home/user/a.txt。
  • 相对路径——从当前目录写起:./notes.txt、../images/pic.png(.. 表示上一级)。
  • 文件控制块(FCB)——目录项的本质:文件名 + 存放位置 + 大小 + 权限等属性。 Linux 类系统中演变出 inode(索引节点):把属性单独存,目录项里只留"文件名 + inode 号",检索更快。
课堂练习(2 题)
  1. 树形目录结构解决了什么问题? 答:不同用户/目录下文件重名的问题(同名文件可以共存于不同目录),并便于分类管理。
  2. 路径 "..\docs\a.txt" 里的 ".." 表示什么? 答:当前目录的上一级目录(相对路径的写法)。

5.4 存储空间管理:位示图计算 ★

位示法管理磁盘空闲块示意图
图 5-2 位示图:每位对应一个物理块,块号 = 字号 × 字长 + 位号

给位示图算块号(或反过来),是文件管理里唯一的计算题。

位示图:用若干字节的存储区,每一位对应磁盘上的一个块——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 题)
  1. 字长 16 位,位示图共 64 个字,磁盘共有多少块? 答:64 × 16 = 1024 块。
  2. 字长 32 位、从 0 编号:块号 70 在第几个字的第几位? 答:字号 70÷32=2;位号 70−64=6。第 2 号字第 6 位。