1. Inode是用来管理一个段的,简单说,一个Inode就是代表一个数据段.Inode可以说是一个结构体,它也是像上面一样,按顺序存储到Inode页面中,一个Inode页面可以存储多个Inode节点.如果页面中所有的空间都用来存放已经使用的Inode,则这个页面就称为满Inode页面,否则为半满Inode页面.
2. 当表空间的FSP_SEG_INODES_FREE中没有空闲的INODE时,就从表空间分配一个页作为INODE页;即INODE页的分配有表空间来管理, 即FSP_SEG_INODES_FREE, FSP_SEG_INODES_FULL两个链表来管理所有当前表空间的INODE页。所有的INODE页将有双向链表来管理。即FLS_PREV和FLS_NEXT是双向链表的前向后后向指针。
3. INODE节点是一个段原来管理该段下所有的extend(簇)。
|
下面两个字段是双向链表的节点,这个节点会被连接到表空间页中的FSP_SEG_INODES_FREE或FSP_SEG_INODES_FULL的链表中
|
FLST_PREV, FIL_ADDR_BYTE | 指向前一个INODE页双向链表节点 |
FLST_NEXT, FIL_ADDR_BYTE | 指向后一个INODE页双向链表节点 |
FSEG_ID | 段ID, 当新分配一个段时,从表空间头页(FIL_PAGE_TYPE_FSP_HDR)的FSP_SEG_ID记录中读取赋给这个,然后FIL_PAGE_TYPE_FSP_HDR中的FSP_SEG_ID加一作为下一个段的段ID |
FSEG_NOT_FULL_N_USED
|
从上面叙述中知道,表空间控制信息中有满簇链表,半满簇链表,空闲簇链表,而段的Inode信息
中也有这些信息,这两个其实是不同的,表空间中的链表管理的是整个表空间中所有的簇,
包括满簇、半满簇及空闲簇,而段的Inode信息中管理的是属于自己段中的满簇,半满簇及空闲簇.
当段新申请一个簇时,如果段上面没有空闲的簇,此时它会从表空间的簇链表中找,找到后从
相应链表中摘下来挂到段空闲簇链表中;
这个地址用来存储上面半满簇链表中所有已经使用的页面总数, 在部分使用的extents中使用中的page总数目 4个byte;主要用于统计半满链表中已经使用了多少个页 |
FSEG_FREE
| 这个地址用来存储所有属于这个段的空闲簇的链表头指针,这些extent是从表空间的FSP_FREE链表中获取的: 属于该segment的空闲的extents的列表 |
FSEG_NOT_FULL
|
一个段管理很多簇,这些簇都是属于这个段的,这个地址是用来存储所有半满簇的链表头指针部分使用的extents
|
FSEG_FULL
|
这个地址用来存储所有满簇的链表头指针 ,全部被使用的extents
|
FSEG_MAGIC_N
|
Magic Number: The value 97937874 is stored as a marker that this file segment INODE entry has been properly initialized.
|
FSEG_FRAG_ARR
| 这个数组是用来管理从表空间直接分配的页的页号,当这个数组用完时,则只能从表空间先分配extent到inode的空闲链表(FSEG_FREE),再从inode管理的extent中分配. |
1. 每个INODE ENTRY管理一个段(如索引段(即B+树的内部节点)下的所有extend(簇),数据段(B+树的叶子节点),回滚段等等),这个段下的所有页由extend(簇)来管理