文件系统实现

17. 文件系统实现——设计师的文件视角

文件系统的实现细节。

对于操作系统设计人员来说,他们关心的问题是:
●文件系统如何分布的。
●文件是怎么实现的。
●文件夹是怎么实现的。
●共享文件是怎么实现的。
●磁盘空间是如何管理的。

前面讲过,文件主要在磁盘上实现。当然你也可以将文件系统放到其他介质上。但不管是什么介质,其原理大同小异。这里以磁盘为介质进行说明。

买过磁盘的人都知道,磁盘买来后要做的第一件事情是对磁盘进行分区和格式化。那么磁盘为什么要进行分区呢?或者说我们必须分区吗?

分区的理由多种多样:

  • 分区可以方便我们使用磁盘,因为不同的分区可以建
    立不同的文件系统。
  • 其次,分区有安全性上的优势,因为一个分区毁坏了,另一个分区仍然可以使用。

独立性

  • 最后,分区还有可靠性上的优势,因为一个分区的故障不影响另一个分区的运行。

这些分区理由虽然是好的理由,但都不是必须分区的理由。

必须分区的理由是对磁盘空间的使用。

因为计算机的内存字长度通常有限,而磁盘地址需要存放在内存字里面。这样,操作系统能够访问的磁盘地址数量就是一个有限数。

这个有限数将限制操作系统能够访问的磁盘空间大小。如果一个磁盘容量超过这个上限,则多余的空间将无法访问。假如内存字的长度为16位,这样操作系统能够表示的磁盘地址数为216,也就是65 536个磁盘地址。假定磁盘的数据块(每个地址)的大小为512B,则操作系统能够访问的最大磁盘空间为33 554 432B,即大约32MB的空间。

当然,我们可以加大磁盘数据块的尺寸使得能够访问的磁盘空间增大。但这样带来的坏处是磁盘空间的浪费,因为很多文件占不到一个磁盘块。再说,即使这样,也只不过增大能访问的磁盘空间,并不能从根本上解决问题。但如果使用分区,则可以将磁盘分解为大小为32MB的多个分区,这样整个磁盘就都可以被访问到。

那么为什么一个分区只能建立一个文件系统呢?

17.1 文件系统的布局

一个磁盘包括一个个扇面,编号从0递增,整数计数。

第0个扇面在整个文件系统中占有重要意义。该扇面存放的是主引导记录(Master Boot Record, MBR)。

该记录的内容是一个小小的程序,用来启动计算机。如果该扇面损坏,则整个磁盘就无法使用。这时唯一的办法就是将磁盘拿到硬件制造商那里对磁盘扇面重新编号。

在MBR后面紧接着的是磁盘分区表。磁盘分区表里给出的是磁盘的所有分区及其开始和终结地址,其中一个分区为主分区。操作系统就装载在这个分区中。主分区里面最前面的是引导记录(Boot Record)。

主导引记录 -> 磁盘分区表(给出磁盘的所有分区的开始和终结地址)

主分区(内含操作系统),主分区里面最前面的是引导记录。

开机操作——极其重要

  • 在计算机启动时,处于主板ROM里面的BIOS程序首先运行。
  • BIOS在进行一些基本的系统配置扫描后对磁盘的扇面0进行读操作,将MBR里面的程序读到内存并运行。
  • MBR程序接下来找到系统主分区,并将主分区里面的Boot Record加载并运行。
  • Boot Record里面的内容是一个小程序,该程序将负责找到操作系统映像,并加载到内存,从而启动操作系统。
  • 所有的文件系统都必须按照这种格式存放,操作系统才能正常启动

在Boot Record记录块后面的内容就因情况而异了。


一般来说,在该记录块后面的磁盘内容布局因文件系统的不同可以不同。

但在通常情况下,紧接着引导记录后面的是一个超级数据块(Super Block),该块里面存放的是关于该文件系统的各种参数,如文件系统类型、文件系统数据块尺寸等。

在Super Block后面则是磁盘的自由空间,其后面是I-NODE区,再后面是文件系统根目录区。分区的最后存放的是用户文件和文件夹区。在这里插入图片描述

图 17-2 文件系统布局

不同的文件系统布局是不一样的。

17.2 文件的实现

我们说过,对于操作系统设计人员来说,我们关心的是文件是如何实现的。那么文件的实现意味着什么呢?或者文件的实现究竟是什么意思呢?

如何实现我们现在看到的文件结构?

文件的实现,归根结底,就是要能够把文件的内容存放在合适的地方,并能够在需要时很容易地读出这些数据。这样,文件的实现要解决的就是如下几个问题:

(1) 给文件分配磁盘空间。
(2) 记住这些磁盘空间的位置。
(3)将文件内容存放在这些空间。

  • 给文件分配磁盘空间就是要按照用户要求或文件大小分配恰当容量的磁盘空间,
  • 记录这些空间的位置对将来的文件访问至关重要;
  • 将文件内容存放到这些空间中则可以通过磁盘本身的驱动器实现。

上述3点均需要了解数据在磁盘上的存放方式。

数据在磁盘上的存放方式

数据在磁盘上的存放方式,就像程序在内存中存放的方式那样,有下面两种:

● 连续空间存放方式
● 非连续空间存放方式

  • 链表方式
  • 索引方式

17.2.1 连续空间存放方式

在一个文件需要磁盘空间时,为其分配一片连续的磁盘空间,这样一个文件的数据紧密相连,读写起来非常方便。

在这种模式下,一个文件占住一片连续的数据块,这种连续的块通常叫做盘区(extent)。

连续存放方式的读写效率很高,因为一次磁盘寻道就可以读出整个文件。数据库文件就要求连续存放。所以装数据库的话最好在一个空的磁盘上装,如果你装在个放了很多东西的磁盘上你就会发现系统运行很慢。

使用连续存放的方式必须知道一个文件所需要的空间大小。

所以使用这种方式必须事先声明所需的最大空间是多少。文件系统则按照这个声明在磁盘上寻找一片足够大的自由空间并把它分配给该程序。而这种寻找自由空间的任务通常由一个适配算法来负责。图17-3描述的就是连续存放方式下文件A、B、C、D、E的一种可能分配方式。
在这里插入图片描述
图 17-3 连续存放的文件实现

由于文件的连续存放方式与程序在内存中的连续存放方式非常相似,因此其优缺点也非常相似。

首先, 文件的连续存放的优点就是简单:从文件名到文件地址的
映射变为从文件名到文件第一个数据块的地址映射。

即只要给出I-NODE地址和文件大小,就可以寻找到所有的文件数据块。这个和内存管理中的基址和极限很相似。另外一个优点是读写效率高

缺点空间浪费(磁盘碎片)和不易扩展

磁盘碎片很好理解,不易扩展:如果某个文件想扩大一下,需要更多的磁盘空间,没有什么好办法,唯一的可能是将文件D放到磁盘上另一片空间更大的连续空间里;或者将与D相邻的文件挪开为D让出空间。不管哪种办法,效率都非常低。

17.3 目录实现:地址独立的实现

前面讲过,文件夹的任务是提供从文件名到文件地址的映射。那么对于不同的文件组织形式,文件的地址表示也不一样。

如果文件是连续存放的,我们只需要文件的第一个数据块的磁盘地址即可,后面的数据块紧接在该数据块后面。这种情况下文件夹里面存放的映射是到I-NODE数据块地址。

虽然一个连续的文件有多个数据块地址,但连续的存放可以保证只需要文件第一个数据块地址和文件的大小就好。

如果是链表组织形式,我们只需要文件的第一个数据块磁盘地址即可,后面的数据块可以通过前面数据块里面的指针获得。这种情况下文件夹里面存放的映射也是到I-NODE数据块地址。如果是FAT组织形式,映射仍然保持不变。我们可以从FAT里面找到后继数据块所在的物理磁盘地址。

FAT 和 i-Node 知识链接:http://xingyaohuang.com/2017/11/16/fat/

17.3.1 文件属性的存放

文件属性应该保持在什么地方呢?

这也是根据文件组织方式的不同而异。如果是连续或链表组织形式,只有文件夹里面可以存放文件属性。但如果是I-NODE组织形式,则属性既可以存放在文件夹里,也可以存放在I-NODE里,如图17-10和图17-11所示。在这里插入图片描述
图 17-10 将属性存放在文件夹里在这里插入图片描述
图 17-11 将属性存放在I-NODE里

17.4 闲置空间管理

为了能够让用户程序进行磁盘空间分配,文件系统必须保持磁盘空间使用情况的记录,即哪些空间被占用,哪些空间为闲置。而对闲置空间进行管理的机制与内存空间管理一样,也是位图和链表

17.4.1 磁盘分配块

文件系统分配空间时是按照块来分配的,Windows操作系统里面将这种分配块称为簇。块或者簇的尺寸记录在超级数据块中。有了这个参数,我们就可以把字节数转换成块或簇数。

随之而来的一个问题:分配块应该多大?

如果分配块尺寸太大了,浪费的空间多;如果太小了,数据传输速度慢。

显然,一个恰当的尺寸是某种折中的产物。而折中的参数就是一个系统里面文件的平均大小

这个分配块大小应当与文件的平均尺寸存在某种联系。图17-16给出的是在文件平均大小为2KB的情况下,磁盘分配块大小与磁盘利用率和有效磁盘数据传输之间的关系。在这里插入图片描述

图 17-16 磁盘分配块与磁盘利用率和有效数据传输之间的关系

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值