seegongsik
操作系统

文件系统 怎么工作

上一课里,多亏驱动程序,我们能和磁盘这样的设备说上话了。可打开磁盘一看,里面既没有文件,也没有文件夹,只有一排排编了号的格子,一眼望不到头。在这片平平的格子海洋里,怎么才能找到你的一张照片呢?

01

磁盘的真面目:编了号的格子

我们在屏幕上把文件看成图标,打开文件夹,又在里面看到别的文件夹。可磁盘本身并没有这些东西。
磁盘其实只是一个巨大的储物柜,一模一样的格子按 0 号、1 号、2 号的顺序平平地排开。每一个格子叫作一个块。
块里装着数据碎片,可哪个格子属于哪个文件、叫什么名字,磁盘自己全然不知。号码和数据,就是全部。

磁盘 · 原始块
只有编号和数据。没有名字也没有文件夹。

点一个格子,就往里放数据。格子只有号码,没有名字,也没有文件夹。这就是磁盘的真面目。

格子只靠号码区分,里面装的东西彼此毫无联系。大文件一个格子装不下,空格子也东一个西一个地散着。
那么一个文件就得拆开装进好几个格子里,可散落的碎片以后怎么再凑回来呢?
这是操作系统要解决的第一道题。

02

文件:把散落的块捆在一起的名牌和地图

办法出奇地简单。操作系统留一张小便条:“名叫 照片.jpg 的文件,按这个顺序放在 3 号、7 号、12 号格子里。”这张便条就是地图。
给出名字,操作系统就摊开地图,按顺序找到散落的格子,把碎片收回来。
所以文件其实是两样东西的组合:一样是散落在格子里的数据碎片,另一样是用名字把它们捆在一起的地图。我们双击的就是这张地图,磁盘只是读出地图指着的格子而已。

点名字,跟着地图走
0
1
2
3 ▬
4
5
6
7 ▬
8
9
10
11

点名牌,散落的格子(3,7,12)就顺着地图依次聚拢,变成一个文件。

一张地图把散落的格子捆成了一个文件。多亏它,我们不用知道格子号码,只凭名字就能叫出文件。
可文件要是不止一两个,而是成千上万个呢?名牌一摞摞堆起来,又让人头大了。
需要一个办法来整理这么多名牌。该轮到文件夹出场了。

03

文件夹:装文件的又一个文件

说起文件夹,好像和文件是完全不同的东西,其实文件夹也不过是又一个文件,只是装的内容特别。
普通文件装照片或文字,而文件夹这种文件装的是“里面那些文件的名牌清单”。所以打开文件夹,就是读这份清单,看看里面有哪些名牌。
文件夹里还能再放文件夹,于是就长出一棵分叉的树,也就是树形结构。从最上面的根出发,顺着树枝往下走,就能到达想要的文件。

▾ 根 /
▸ photos/
▸ docs/
点开文件夹

点文件夹,里面的文件和子文件夹就展开了。可以从根出发,顺着树枝一直走到想要的文件。

在原本平平的格子海洋上,如今立起了一棵上下分叉、整整齐齐的树。因为文件夹只不过是又一个文件,操作系统不必另造新机制,只用同一个文件的概念就搭起了整理的结构。
可还剩一个疑问:这样做出来的文件一删除,磁盘上的数据真的马上就消失吗?
下一步就来稍微揭开这个秘密。

04

删除,就是只擦掉地图

凭直觉,删掉文件,数据就该从磁盘上一干二净地消失。可操作系统通常不这么做,因为把装着数据的格子一个个清空,要花很长时间。
所以为了快点完事,它只擦掉名牌和地图,格子里的数据原封不动,只在那些格子上标一句“已空,可以再用”。
地图没了,通往那些数据的路就断了,在我们眼里文件就像消失了一样。可格子里的内容其实还留在原处。

draft.txt ▸ 4,8
4 ▬
8 ▬

删掉文件后,名牌和地图变淡了(路断了),格子里的数据却还留在原处。直到新文件覆盖那些格子,它才真正消失。

所以恢复工具有时能把删掉的文件救回来:只要重新找到地图,就能把还留在原处的格子重新接起来。反过来,一旦新文件覆盖了那些格子,原来的数据就永远没了。如今常用的固态硬盘,往往很快就会把腾出的格子清掉,所以更难恢复。
说到底,删除的关键不是擦掉数据,而是擦掉通往数据的地图。文件、文件夹、删除,全都建立在“地图和名牌”这一个想法之上。

05

罩在平平磁盘上的树形幻象

退一步看看全局。磁盘的真面目是编了号的平平的格子。操作系统在它上面施了三道魔法。
第一,用名牌和地图把散落的格子捆成一个文件。第二,用装文件的又一个文件做成文件夹,搭起了树。第三,删除时擦掉的不是数据,而是地图。
多亏这三样,我们一辈子不知道格子号码也没关系,只凭名字和文件夹就能轻松地处理文件。

点 1 开始

依次点这三张卡片,就能一眼看清幻象是怎么一层层搭起来的:从平平的块,到用名牌捆起来的文件,再到文件夹树。

就像虚拟内存呈现出比真实更大的记忆一样,文件系统是一种把平平的格子呈现成整齐的树的幻象。真相很简单,方便是操作系统加上去的。
可要是好几个人在一台电脑上共用这棵整齐的树,谁都能打开、删除别人的文件,这样行吗?下一课,我们来讲权限:谁能读、写、运行什么,靠它来守住秩序。

一句话总结磁盘的真面目是编了号的平平的格子(块)。操作系统在上面加上名牌和地图,把散落的块捆成一个文件,再用装文件的又一个文件做成文件夹(树)。删除文件时,通常也只擦掉地图,数据留在原处。我们看到的整齐的文件和文件夹,是操作系统罩在平平磁盘上的一个精心编织的幻象。
← 操作系统
如果有帮助,请支持我们