文件系统:平铺磁盘上的树形幻象
上一讲里,驱动让我们连磁盘这样的设备也能对话了。可是打开磁盘内部一看,里面既没有文件也没有文件夹,只有一格格编了号的方块无尽地排着。在这片平铺的格子海洋里,怎么才能找到我们的一张照片呢?
磁盘的本来面目:只是编号的格子
在屏幕上,我们把文件看成图标,打开一个文件夹,里面又是文件夹。但磁盘本身没有这些东西。磁盘其实只是一个巨大的储物柜,里面是一格格长得一样的方块,按0号、1号、2号的顺序平铺排开。每一格叫作一个块。块里装着一小段数据,可是哪一格属于哪个文件、它叫什么名字,磁盘自己一概不知。只有编号和数据,仅此而已。
点一格把数据放进去。格子只有编号,没有名字也没有文件夹。这就是磁盘的本来面目。
点过之后就有感觉了吧?格子只能靠编号区分,里面的内容彼此毫无关联。大文件装不进一格,空格也四处散着。于是一个文件只能拆开放进好几格,那么以后怎么把散落的碎片重新拼回来呢?这就是操作系统要解决的第一道作业。
文件:把散落的块捆起来的名字与地图
办法出乎意料地简单。操作系统留一张小纸条:"名叫photo.jpg的文件,按这个顺序放在3号、7号、12号格里。"这张纸条就是地图。给它一个名字,操作系统就摊开地图,按顺序走到散落的格子,把碎片收回来。所以文件其实是两样东西之和。一样是散在格子里的数据碎片,另一样是用名字把它们捆起来的地图。我们双击的正是这张地图,磁盘只不过去读地图指向的格子罢了。
点名字,地图就把散落的格子(3、7、12)按顺序聚成一个文件。看散落的块如何变成一个完整的文件。
一张地图,就把散落的格子捆成了一个文件。多亏它,我们不用知道格子编号,只凭名字就能叫出文件。可要是文件不止一两个,而是成千上万呢?几千张名字纸条堆起来,又让人发懵了。我们需要一个整理这些名字的办法。下一步的主角,文件夹,该登场了。
文件夹:装着文件的,另一个文件
一说文件夹,好像是和文件完全不同的东西,可秘密是:文件夹也只是另一个文件而已。特别的只是它的内容。普通文件装的是照片或文字,而文件夹这种文件装的是"它里面那些文件的名字清单"。所以打开一个文件夹,就是去读这份清单,看看里面有哪些名字。文件夹里还能再放文件夹。于是就长出一棵枝杈分叉的树,也就是树形。从最上面的根出发,顺着枝条往下走,就能走到你要的那个文件。
点开文件夹,就能看到里面的文件和子文件夹。从根顺着枝条,走到你要的那个文件吧。
你看,在原本平铺的格子海洋之上,如今立起了一棵上下分叉、整整齐齐的树。正因为文件夹只是另一个文件,操作系统不必造出新装置,只用同一个文件的想法,就搭起了这套整理结构。不过还剩一个让人好奇的问题。我们把这样做出来的文件删除时,它的数据真的会立刻从磁盘上消失吗?下一步,我们就稍微掀开这个秘密。
删除是什么?地图被抹掉,数据还留着
凭直觉,删掉文件就像数据从磁盘上被擦得干干净净。可操作系统通常并不这么干。把装着数据的格子一格格清空很费时间。所以为了快点完事,它只抹掉名字和地图,格子里的数据照旧留着。它只是给那些格子做个记号:"现在空了,可以再用。"地图一没,通往那段数据的路就断了,在我们眼里文件就像没了。可格子里的内容,其实还稳稳地待在原处。
点一个文件再删除。名字和地图会变淡(路断了),但格子里的数据还在原处。直到新文件覆盖那些格子,它才真正消失。
所以恢复工具有时能把删掉的文件救回来。只要它能再找到地图,就能把仍留在原处的格子重新缝合起来。反过来,一旦新文件覆盖了那些格子,原来的数据就永远没了。说到底,删除的核心不是抹掉数据,而是抹掉通往数据的地图。看到这里你会发现,文件、文件夹、删除,全都立在地图与名字这同一个想法之上。
铺在平铺磁盘之上的树形幻象
退一步看看整体。磁盘真正的样子,是编了号的平铺格子。在它之上,操作系统施了三道魔法。第一,用名字和地图,把散落的格子捆成一个文件。第二,用一个装着文件的文件做出文件夹,立起一棵树。第三,删除时抹掉的是地图,而不是数据。靠这三样,我们一辈子不知道任何一个格子编号,也能只凭名字和文件夹,轻松地摆弄文件。
依次点这三张。从平铺的块,到被名字捆起的文件,再到文件夹的树。幻象是怎么一层层搭起来的,一眼就清楚了。
正如虚拟内存让我们看到比实际更大的记忆,文件系统也是一个幻象,把平铺的格子显示成一棵井然有序的树。真相很简单,便利是操作系统加上去的。可要是这棵整齐的树,在一台电脑上由许多人一起用,谁都能打开并删除别人的文件吗?下一讲,我们就开始讲权限:谁可以读、写、运行什么,以及这套秩序是怎么守住的。