前言:

很多人在学文件管理的时候都会有一种感觉:
知识点好像都见过,但一做题就开始乱。

我自己当时也是这样,后来发现问题不在不会,而在于没有形成整体结构,全是零碎记忆。

这篇就当作一个从理解到能用的整理,尽量讲清楚重点,同时也会夹一点比较好记的理解方式。

计算机操作系统之文件管理

一、先把整体思路理顺

文件管理其实不用想得太复杂,本质就三个问题:

  • 文件本身是怎么组织的(逻辑结构)
  • 文件在磁盘上是怎么放的(物理结构)
  • 系统是怎么找到文件的(目录)

除此之外,还有几个配套内容,比如文件共享、权限控制、磁盘调度这些。

如果一开始没有这个框架,后面很容易学着学着就乱掉。

二、文件到底“长什么样”

操作系统其实并不关心你在文件里写了什么,它更关心的是:这些数据是怎么组织的

流式文件

最简单的一种:把所有内容当成一串字节。

比如常见的 .txt 文件就是这种。

优点就是很直接、实现也简单。

但问题也明显:
如果要找某个内容,只能从头往后扫,没有结构。

记录式文件

系统开始把文件当成“记录”的集合来看。

(1)顺序文件

可以理解成排好队的数据。

  • 定长记录:比较规整,好查
  • 变长记录:更灵活,但处理起来麻烦一点

如果数据是有序的,可以用折半查找;否则就只能老老实实一个个找。

(2)索引文件

这里开始有点数据库的味道了。
做法其实很简单:
先建一张索引表,再通过索引去找数据。
优点就是查找效率高很多,但代价就是要额外占空间。

(3)索引顺序文件

这个结构可以看成是折中方案。
它不是给每一条记录建索引,而是:

  • 把文件分成若干块
  • 每一块建一个索引
    查找的时候:

先找到块 → 再在块里找

这个过程其实很好理解,记一句就行:
先大致定位,再局部查找。

三、文件是怎么存到磁盘上的

这一块基本是考试核心,尤其是计算题。

连续分配

就是把文件放在一段连续的磁盘空间里。

优点

  • 顺序读写很快
  • 想随机访问也方便(可以直接算位置)

缺点

  • 会产生外部碎片
  • 文件一旦需要扩展,很麻烦

所以它属于“性能好,但不灵活”的那种。

链式分配

这个就很好理解了,跟链表一样。

每一块都指向下一块。

优点

  • 不会有外部碎片
  • 扩展很方便

缺点

  • 想随机访问基本不现实(必须顺着走)
  • 还要额外存指针

补充:FAT(文件分配表)

FAT其实就是把这些“指针”单独拿出来,放到一张表里统一管理。

这样访问的时候效率会好一些。

索引分配(重点)

这个是最常考的。

核心思想就是:

每个文件有一个索引表,里面记录所有数据块的位置

优点

  • 可以随机访问
  • 不会有外部碎片

缺点

  • 索引本身要占空间

多级索引(计算题关键)

问:当文件很大的时候,一个索引块放不下怎么办?

答:那就再套一层。

于是就有:

  • 一级索引
  • 二级索引
  • 三级索引

这里有个一定要会的套路

设:

  • 块大小是 B
  • 一个指针占 P

那么一个索引块可以存:

B / P 个指针

接下来就是套:

  • 一级: (B/P) × B
  • 二级: (B/P)² × B
  • 三级: (B/P)³ × B

本质就是一层一层往上乘

i-node(索引节点)

这个其实是“混合用法”。

它不会只用一种方式,而是分情况:

  • 小文件 → 直接存地址
  • 稍大一点 → 用一级索引
  • 很大 → 再用多级

可以这么理解:

小文件走直路,大文件绕一点也没关系

四、文件是怎么被找到的

这一块很多人觉得简单,但其实挺关键。

核心关系

文件名 → i-node(索引节点) → 数据块

这个流程一定要能在脑子里过一遍。

目录结构的演变,一开始很简单:

  • 单级目录:所有文件在一起(很快就容易乱)

后来改成:

  • 两级目录:按用户分开

再后来就是现在用的:

  • 树形目录

比如:

/home/user/file.txt

也就是我们熟悉的路径。

一个很容易错的点

文件名不在 i-node 里

i-node 只管:

  • 属性
  • 数据位置

文件名是在目录里的。

五、文件共享

这个一般是简答题。

硬链接

多个文件名指向同一个 i-node。

所以删掉一个名字,其实没啥影响。

软链接

本质就是存一个路径。

可以理解成快捷方式。

简单区分一下:

硬链接更“实在”,软链接更“像引用”

六、文件保护

就是权限控制。最常见的就是:r / w / x

然后再分三类用户:

  • 所有者
  • 其他人

实现上可以用 ACL(访问控制列表) 或分组机制。

七、文件操作流程

这一部分不难,但容易被忽略。

基本流程就是:

open → read/write → close

记住两个点:

  • open 会返回一个标识(文件描述符)
  • 系统内部会维护一个“读写位置”(文件指针)

八、磁盘调度

这一块建议多做题。

几个算法要记住:

  • FCFS(先来先服务):按顺序来
  • SSTF(最短寻道时间优先):找最近的
  • SCAN(电梯算法):来回扫(像电梯)
  • LOOK(SCAN优化版):只扫到有请求的地方

不用死记,多做几题自然就顺了。

九、空闲空间管理

一般是选择题。

常见三种:

  • 位示图(0和1表示)
  • 空闲链表
  • 成组链接

结尾

注意

  • i-node 不存文件名
  • 链式分配不能随机访问
  • 连续分配会有外部碎片
  • 索引分配是最常考的

小结

文件先看结构,再看怎么存

连续很快但不灵活,链式灵活但访问慢

索引最常考,多级要会算

目录负责找,i-node负责定位

权限就是rwx,调度就是那几个算法

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐