2h1g做视频网站,如何用手机编程游戏,上海网站建设 觉策动力,vue.js合作做网站么段不对应表空间中某一个连续的物理区域#xff0c;而是一个逻辑上的概念#xff0c;由若干个零散的页面以及一些完整的区组成。像每个区都有对应的XDES Entry来记录这个区中的属性一样#xff0c;定义了一个INODE Entry结构来记录段中的属性。 它的各个部分释义如下#xf…段不对应表空间中某一个连续的物理区域而是一个逻辑上的概念由若干个零散的页面以及一些完整的区组成。像每个区都有对应的XDES Entry来记录这个区中的属性一样定义了一个INODE Entry结构来记录段中的属性。 它的各个部分释义如下
Segment ID
就是指这个 INODE Entry 结构对应的段的编号ID。
NOT_FULL_N_USED
这个字段指的是在 NOT_FULL 链表中已经使用了多少个页面。下次从 NOT_FULL 链表分配空闲页面时可以直接根据这个字段的值定位到。而不用从链表中的第一个页面开始遍历着寻找空闲页面。
List Base Node
分别为段的 FREE 链表、 NOT_FULL 链表、 FULL 链表定义了 List Base Node 这样我们想查找某个段的某个链表的头节点和尾节点的时候就可以直接到这个部分找到对应链表的 List Base Node 。
Magic Number
这个值是用来标记这个 INODE Entry 是否已经被初始化了初始化的意思就是把各个字段的值都填进去了。如果这个数字是值的 97937874 表明该 INODE Entry 已经初始化否则没有被初始化。
Fragment Array Entry
每个 Fragment Array Entry 结构都对应着一个零散的页面这个结构一共4个字节表示一个零散页面的页号。
9.2.5 各类型页面详细情况
9.2.5.1 FSP_HDR 类型
首先看第一个组的第一个页面当然也是表空间的第一个页面页号为 0 。这个页面的类型是 FSP_HDR 它存储了表空间的一些整体属性以及第一个组内256个区的对应的 XDES Entry 结构直接看这个类型的页面的示意图 从图中可以看出一个完整的 FSP_HDR 类型的页面大致由5个部分组成各个部分的具体释义如下表 名称 中文名 占用空间大小 简单描述 file header 文件头部 38字节 页的一些通用信息 file space header 表空间头部 112 字节 表空间的一些整体属性信息 XDES Entry 区描述信息 10240 字节 存储本组256个区对应的属性信息 Empty Space 尚未使用空间 5986 字节 用于页结构的填充没啥实际意义 File Trailer 文件尾部 8 字节 8 字节
File Space Header部分 下面是各个属性的简单描述 名称 占用空间大小 描述 Space ID 4字节 表空间的ID Not Used 4字节 这4个字节未被使用可以忽略 Size 4字节 当前表空间占有的页面数 FREE Limit 4字节 尚未被初始化的最小页号大于或等于这个页号的区对应的XDES Entry结构都没有被加入FREE链表 Space Flags 4字节 表空间的一些占用存储空间比较小的属性 FRAG_N_USED 4字节 FREE_FRAG链表中已使用的页面数量 List Base Node for FREE List 16字节 FREE链表的基节点 List Base Node for FREE_FRAGList 16字节 FREE_FREG链表的基节点 List Base Node for FULL_FRAGList 16字节 FULL_FREG链表的基节点 Next Unused Segment ID 16字节 当前表空间中下一个未使用的 Segment ID List Base Node forSEG_INODES_FULL List 16字节 SEG_INODES_FULL链表的基节点 List Base Node forSEG_INODES_FREE List 16字节 SEG_INODES_FREE链表的基节点
List Base Node for FREE List 、 List Base Node for FREE_FRAG List 、 List Base Node forFULL_FRAG List这三个分别是直属于表空间的 FREE 链表的基节点、 FREE_FRAG 链表的基节点、FULL_FRAG 链表的基节点这三个链表的基节点在表空间的位置是固定的就是在表空间的第一个页面也就是 FSP_HDR 类型的页面的 File Space Header 部分。
FRAG_N_USED
这个字段表明在 FREE_FRAG 链表中已经使用的页面数量方便之后在链表中查找空闲的页面。
FREE Limit
表空间对应着具体的磁盘文件创建表空间的时候对应的磁盘文件中都没有数据所以我们需要对表空间完成一个初始化操作包括为表空间中的区建立 XDES Entry 结构为各个段建立INODE Entry 结构建立各种链表等操作。一开始为表空间申请的空间实际上绝大部分都是空的我们可以选择吧所有的空闲区对应的 XDES Entry 结构加入FREE 链表也可以选择只把一部分的空闲区加入 FREE 链表等啥时候空闲链表中的 XDES Entry 结构对应的区不够使了再把之前没有加入 FREE 链表的空闲区对应的 XDES Entry 结构加入 FREE 链表中心思想就是啥时候用到啥时候初始化为表空间定义了 FREE Limit 这个字段在该字段表示的页号之前的区都被初始化了之后的区尚未被初始化。
Next Unused Segment ID
表中每个索引都对应2个段每个段都有一个唯一的ID那当我们为某个表新创建一个索引的时候就意味着要创建两个新的段。 NextUnused Segment ID 的字段该字段表明当前表空间中最大的段ID的下一个ID这样在创建新段的时候赋予新段一个唯一的ID值就直接使用这个字段的值就好。
Space Flags
表空间对于一些布尔类型的属性只需要几个比特位搞定的属性都放在这个Space Flags中存储虽然它只有4个字节32个比特位大小却存储了好多表空间的属性详细情况如下表
|标志名称|占用的空间单位bit|描述| |:--:|:--:|:--:| | POST_ANTELOPE |1|表示文件格式是否大于 ANTELOPE || ZIP_SSIZE |4|表示压缩页面的大小| | ATOMIC_BLOBS |1|表示是否自动把值非常长的字段放到BLOB页里|| PAGE_SSIZE |4|页面大小| | DATA_DIR |1|表示表空间是否是从默认的数据目录中获取的| | SHARED |1|是否为共享表空间| | TEMPORARY |1|是否为临时表空间| | ENCRYPTION |1|表空间是否加密| | UNUSED |18|没有使用到的比特位|
List Base Node for SEG_INODES_FULL List 和 List Base Node for SEG_INODES_FREE List
每个段对应的 INODE Entry 结构会集中存放到一个类型位 INODE 的页中如果表空间中的段特别多则会有多个 INODE Entry 结构可能一个页放不下这些 INODE 类型的页会组成两种列表
SEG_INODES_FULL 链表该链表中的 INODE 类型的页面都已经被 INODE Entry 结构填充满了没空闲空间存放额外的 INODE Entry 了。SEG_INODES_FREE 链表该链表中的 INODE 类型的页面都已经仍有空闲空间来存放 INODE Entry 结构。
XDES Entry部分
XDESEntry 就是在表空间的第一个页面中保存的。我们知道一个 XDES Entry 结构的大小是40字节但是一个页面的大小有限只能存放有限个 XDES Entry 结构所以我们才把256个区划分成一组在每组的第一个页面中存放256个 XDES Entry 结构。大家回看那个 FSP_HDR 类型页面的示意图 XDES Entry 0 就对应着 extent 0 XDESEntry 1 就对应着 extent 1 ... 依此类推 XDES Entry255 就对应着 extent 255 。
每个区对应的XDES Entry结构的地址都是固定的。