计算机操作系统 之 文件管理
前言:
很多人在学文件管理的时候都会有一种感觉:
知识点好像都见过,但一做题就开始乱。我自己当时也是这样,后来发现问题不在不会,而在于没有形成整体结构,全是零碎记忆。
这篇就当作一个从理解到能用的整理,尽量讲清楚重点,同时也会夹一点比较好记的理解方式。
计算机操作系统之文件管理
一、先把整体思路理顺
文件管理其实不用想得太复杂,本质就三个问题:
- 文件本身是怎么组织的(逻辑结构)
- 文件在磁盘上是怎么放的(物理结构)
- 系统是怎么找到文件的(目录)
除此之外,还有几个配套内容,比如文件共享、权限控制、磁盘调度这些。
如果一开始没有这个框架,后面很容易学着学着就乱掉。
二、文件到底“长什么样”
操作系统其实并不关心你在文件里写了什么,它更关心的是:这些数据是怎么组织的。
流式文件
最简单的一种:把所有内容当成一串字节。
比如常见的 .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,调度就是那几个算法
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)