【发布时间】:2011-02-14 16:50:45
【问题描述】:
我不清楚文件系统的实现。具体而言(操作系统 - Tannenbaum(第 3 版),第 275 页)指出“每个块的第一个字用作指向下一个字的指针。块的其余部分是数据”。
谁能在这里向我解释一下部门的层次结构?就像,每个磁盘分区都包含块,块包含单词?等等……
【问题讨论】:
标签: file operating-system filesystems
我不清楚文件系统的实现。具体而言(操作系统 - Tannenbaum(第 3 版),第 275 页)指出“每个块的第一个字用作指向下一个字的指针。块的其余部分是数据”。
谁能在这里向我解释一下部门的层次结构?就像,每个磁盘分区都包含块,块包含单词?等等……
【问题讨论】:
标签: file operating-system filesystems
我面前没有这本书,但我怀疑引用的句子并不是真正在谈论文件、目录或其他文件系统结构。 (请注意,分区通常不是文件系统概念)。我认为您引用的句子实际上只是指出了有关存储在磁盘块中的数据结构如何链接在一起的内容。它的意思就是它所说的。每个块(通常为 4k,但可能只有 512B)看起来非常粗略如下:
+------------------+------------- . . . . --------------+
| next blk pointer | another 4k - 4 or 8 bytes of stuff |
+------------------+------------- . . . . --------------+
下一个块指针之后的内容取决于该特定块中存储的内容。仅从给出的句子中,我无法判断代码是如何计算出来的。
关于文件系统结构:
到目前为止,文件系统还没有真正出现。大多数文件系统都构建在一个分区内。文件系统通常有以下几个概念。 (我使用的名称是来自 unix 传统的名称,但其他操作系统也会有类似的想法。)
在分区的某个固定位置是超级块。超级块是所有文件系统数据结构的根,包含足够的信息来指向所有其他实体。 (事实上,作为一种简单的容错形式,通常有多个超级块分散在分区中。)
文件系统的基本概念是inode,即“eye-node”。索引节点代表构成文件系统的各种类型的对象,最重要的是普通文件和目录。一个 inode 可能是它自己的块,但某些文件系统将多个 inode 打包到一个块中。索引节点可以指向一组构成文件或目录实际内容的数据块。如何在磁盘上组织和索引文件的数据块是文件系统的关键任务之一。对于目录,数据块保存目录中包含的文件和子目录的信息,而对于普通文件,数据块保存文件的内容。
数据块是分区上的大部分块。一些被分配给各种inode(即,目录和文件),而另一些则是免费的。另一个关键的文件系统任务是在数据写入文件时分配空闲数据块,并在文件被截断或删除时从文件中释放数据块。
所有这些概念都有很多变体,而且我确信在某些文件系统中我上面所说的内容与现实不太相符。但是,通过以上内容,您应该能够推理文件系统如何完成其工作,并至少了解您在任何特定文件系统中遇到的差异。
【讨论】:
Tracks >> Blocks >> Sectors >> Words >> Bytes >> Nibbles >> Bits
磁道是从磁盘盘片内部到外部的同心环。
每条轨道都分为称为扇区的切片。
块是一组扇区(1、2、4、8、16 等)。驱动器越大,一个块将容纳的扇区越多。
word 是 CPU 一次可以处理的位数(16 位、32 位、64 位等),在您的示例中,存储地址(或者可能下一个块的偏移量)。
字节包含半字节和位。 1 个字节 = 2 个半字节; 1 个半字节 = 4 个位。
【讨论】:
我不知道这句话的上下文,但它似乎在描述一个块的链接列表。一般来说,“块”是少量字节(通常是 2 的幂)。它可能是 4096 字节,也可能是 512 字节,这取决于。硬盘驱动器旨在一次检索一个块的数据;如果要获取第 1234567 个字节,则必须获取它所在的整个块。“单词”要小得多,并且指的是单个数字。它可能低至 2 字节(16 位)或高达 8 字节(64 位);同样,这取决于文件系统。
当然,块和单词并不是文件系统的全部。文件系统通常会实现某种B-tree 来快速查找(它不必搜索整个文件系统来查找文件,只需沿着树向下走)。在文件系统 B 树中,每个节点都存储在一个块中。许多文件系统使用 B-tree 的一种变体,称为 B+-tree,它通过链接将叶子连接在一起以加快遍历速度。这里描述的结构可能是描述 B+-tree 的叶子,也可能是描述用于存储单个大文件的块链。
总而言之,磁盘就像一个巨大的字节数组,可以分解为通常为 2-8 字节的字和通常为 512-4096 字节的块。还有其他方法可以将其分解,例如磁头、柱面、扇区等。在这些原语之上,实现了更高级别的索引结构。通过了解文件系统开发人员需要满足的约束(通过一次存储/检索块来有效地模拟文件树),文件系统设计应该非常直观。
【讨论】: