文件系统实现的基本概念

时间:2010-05-02 05:15:03

标签: file operating-system filesystems

我对文件系统实现不太清楚。具体而言(操作系统 - Tannenbaum(第3版),第275页)声明“每个块的第一个字用作指向下一个块的指针。块的其余部分是数据”。

有人可以向我解释这个部门的等级吗?比如,每个磁盘分区包含块,块包含单词?等等...

3 个答案:

答案 0 :(得分:4)

我没有把这本书摆在我面前,但我怀疑所引用的句子并不是真正谈论文件,目录或其他文件系统结构。 (注意,分区通常不是文件系统概念)。我认为你引用的句子实际上只是指出了存储在磁盘块中的数据结构是如何链接在一起的。它意味着它所说的。每个块(通常为4k,但可能只有512B)看起来非常像这样:

+------------------+------------- . . . . --------------+
| next blk pointer | another 4k - 4 or 8 bytes of stuff |
+------------------+------------- . . . . --------------+

下一个块指针之后的内容取决于此特定块中存储的内容。从给出的句子来看,我无法分辨出代码是如何形成的。

关于文件系统结构:

  • 磁盘扇区的数组,几乎总是512B。在内部,磁盘由盘片构成,它们是生锈的旋转磁盘形状的东西,每个盘片被分成许多同心的轨道。但是,这些细节完全是由ATA或SCSI磁盘接口硬件从操作系统隐藏的。
  • 操作系统将扇区的数组划分为分区。分区是连续的扇区范围,分区不重叠。 (实际上这在某些操作系统上是允许的,但考虑它只是让人困惑。)
  • 因此,分区也是扇区的数组。

到目前为止,文件系统尚未真正出现在图片中。大多数文件系统都是在分区内构建的。文件系统通常具有以下概念。 (我使用的名称来自unix传统,但其他操作系统也有类似的想法。)

  • 在分区的某个固定位置是超级块。超级块是所有文件系统数据结构的根,并包含指向所有其他实体的足够信息。 (实际上,通常在分区中分散多个超级块作为一种简单的容错形式。)

  • 文件系统的基本概念是 inode ,表示“眼睛节点”。 Inode表示构成文件系统的各种类型的对象,最重要的是普通文件和目录。 inode可能是它自己的块,但是一些文件系统将多个inode打包到一个块中。 Inode可以指向一组数据块,它们构成文件或目录的实际内容。如何在磁盘上组织和索引文件的数据块是文件系统的关键任务之一。对于目录,数据块保存有关目录中包含的文件和子目录的信息,对于普通文件,数据块保存文件的内容。

  • 数据块是分区上的大部分块。一些被分配给各种inode(即,目录和文件),而另一些则是免费的。另一个关键文件系统任务是在数据写入文件时分配空闲数据块,并在截断或删除文件时从文件中释放数据块。

所有这些概念有很多变化,我确信有些文件系统我上面说过的内容并不能很好地与现实排列。但是,通过上述内容,您应该能够了解文件系统如何完成其​​工作,并至少了解您在任何特定文件系统中遇到的差异。

答案 1 :(得分:3)

我不知道这句话的上下文,但似乎是在描述一个链接列表。一般来说,“块”是少量字节(通常是2的幂)。它可能是4096字节,它可能是512字节,它取决于。硬盘驱动器旨在一次检索一个块的数据;如果你想获得1234567字节,你必须得到它所在的整个块。一个“字”要小得多,指的是一个数字。它可能低至2个字节(16位)或高达8个字节(64位);再次,它取决于文件系统。

当然,文件系统并不是所有的块和单词。文件系统通常实现某种B-tree以快速查找(它不必搜索整个文件系统来查找文件,只需沿着树向下走)。在文件系统B树中,每个节点都存储在一个块中。许多文件系统使用B树的变体,称为B + -tree,它将叶子与链接连接在一起,以便更快地进行遍历。这里描述的结构可能描述了B +树的叶子,或者它可能描述了用于存储单个大文件的块链。

总之,磁盘就像一个巨大的字节数组,可以分解成通常为2-8个字节的字和块,通常为512-4096个字节。还有其他方法可以将其分解,例如磁头,柱面,扇区等。除了这些原语之外,还实现了更高级别的索引结构。通过了解文件系统开发人员需要满足的约束(通过一次存储/检索块来有效地模拟文件树),文件系统设计应该非常直观。

答案 2 :(得分:1)

曲目>> 阻止>> 部门>> >> 字节>> Nibbles >>的

曲目是从磁盘盘片内部到外部的同心环。

每个曲目分为称为扇区的片段。

是一组扇区(1,2,4,8,16等)。驱动器越大,块就越多。

是CPU可以同时处理的位数(16位,32位,64位等),在您的示例中,存储地址(或者可能)下一个区块的偏移量。

字节包含半字节。 1个字节= 2个半字节; 1个半字节= 4个位。