扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共23页)
这将持续直到填满 inode 的所有 8 个 xad 结构为止,这时,将再次拆分 B+ 树。这种拆分将创建 B+ 树的内部 inode ,它们是纯粹用来记录树的搜索路径。JFS 将为 B+ 树的内部 inode 分配 4K 磁盘空间。内部节点看起来如同叶节点。从 inode 复制 8 个 xad 项到内部节点,初始化头部以指向第 9 个项作为第一个空闲项。然后,通过使 inode 的第一个 xad 结构指向新分配的内部节点,JFS 更新 B+ 树的根。将更新 inode 中的头部以表示当前 B+ 树只使用 1 个 xad。(参见 图 4,例 4。)
文件 jfs_xtree.h 在 struct xtpage_t 中描述 B+ 树根的头部。文件 jfs_btree.h 是在 struct btpage_t 中的内部节点或叶节点的头部。
例子
下列例子进一步分析了盘区描述符和 xad 结构的用法:
连续分配的 1041377 字节文件。
相同的 1041377 字节文件,但在磁盘上拆分成三段。
1041377 字节的文件,但里面有一个"洞"(稀疏文件)。
连续分配的 16GB 文件。
在所有这些例子中,聚集块尺寸都是 1KB。
连续分配的 1041377 字节尺寸文件: 该文件需要 1017 个 1KB 聚集块,(在最后一个聚集块中,有 31 个字节丢失成为内部存储碎片)。要描述这个连续文件只需要一个 xad 结构:
|
|
在 1041377 字节文件分三段: 假设相同的文件拆分成磁盘上三个不同盘区:一个为 495 个聚集块长,一个为 22,一个为 500。需要三个 xad 结构来表示该文件,每个物理盘区需要一个:
|
该例中,0 号 xad 描述文件开始的 495 个物理聚集块。 xad_offset 字段包含 0,因为该 xad 描述以逻辑偏移量 0 开始的字节。第二个 xad,1 号 xad,描述文件接下来的 22 个物理聚集块。 xad_offset 字段包含 495,因为该 xad 描述以逻辑偏移量 506880 (495 * 1024) 开始的字节;前面的字节由 xad 0 描述。最后一个 xad 描述文件的最后 500 块。这里, xad_offset 字段是 517。请注意,对于非稀疏文件,给定 xad 的 xad_offset 字段等于所有以前 xad 结构长度和(在本例中,517 = 495 + 22)。如果这一关系总是成立的,那么 xad_offset 字段就是冗余的,可以消除。然而,下一个例子显示,对于稀疏文件, xad_offset 字段不是冗余的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。