这一节描述文件布局使用的 B+ 树数据结构。选择 B+ 树是为了提高读写盘区的性
能,这是 JFS 必须进行的最普通操作。B+ 树为读取文件的特定盘区提供快速搜索。
它还提供有效方法将盘区添加或插入文件中。较为少见的情形是:当删除文件时, JFS
需要遍历整个 B+ 树。为了保证 JFS 会删除 B+ 树使用的块以及文件数据,对于
遍历 B+ 树效率也很高。
盘区分配描述符(xad 结构)描述盘区并且又添加了表示文件所需的两个字段:描述盘
区表示的逻辑字节地址的偏移量和标志字段。盘区分配描述符结构在 jfs_xtree.h,
struct xad 中定义。
xad 结构为:
struct xad {
unsigned ag:8;
unsigned rsvrd:16;
unsigned o#1:8;
uint32 o#2;
unsigned len:24;
unsigned addr1:8;
uint32 addr2;
} xad_t;
其中:
ag 是包含各种标志的 8 位字段。这些标志能够表示写入时复制、是否分配了盘区但
没有记录它、压缩信息等等。
rsvrd 是保留供将来使用的 16 位字段。它总为零。
o#1,o#2 是 40 位字段,包含盘区中第一个块的逻辑偏移量。逻辑偏移量是以聚集块
尺寸为单位表示;也就是说,要取得一个字节,偏移量必须乘以聚集块尺寸。
len 是 24 位字段,包含盘区的长度。长度以聚集块尺寸为单位表示。
addr1,addr2 是 40 位字段,包含盘区的地址。地址以聚集块尺寸为单位表示。
xad 结构描述了两个抽象范围:
磁 盘上 磁 盘 块 的 物 理 范 围 。 它 以 聚 集 块 号 xad_address 开 始 , 并 且 延 伸 为
xad_length 聚集块。
文件内字节的逻辑范围。它以字节号 xad_o#set * AGBS(聚集块尺寸)开始,并且
延伸为 xad_length*AGBS 字节。
当然,物理范围和逻辑范围有相同长度的字节。请注意,xad_o#set 以聚集块尺寸为单
- 1
- 2
前往页