Chinaunix首页 | 论坛 | 博客

pwp

  • 博客访问: 45069
  • 博文数量: 9
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 13:52
文章分类

全部博文(9)

文章存档

2011年(1)

2010年(6)

2008年(2)

我的朋友

分类: LINUX

2010-09-27 17:12:54

文件:ext2块预留机制主要数据结构.doc.gz
大小:92KB
下载:下载

一、主要数据结构

预留块的信息是有一棵红黑树管理的,如图1:

struct rb_node

{

unsigned long rb_parent_color;

struct rb_node *rb_right;

struct rb_node *rb_left;

}

这个结构表示树中的一个节点。


struct rb_root

{

struct rb_node *rb_node;

};

这个结构只是个封装,用来指向一颗树的根节点。

注意上面节点中并没有数据,那么数据存放在哪里?

struct ext2_reserve_window {

ext2_fsblk_t _rsv_start; /* First byte reserved */

ext2_fsblk_t _rsv_end; /* Last byte reserved or 0 */

};

这个结构用于表示一个块预留区间,[_rsv_start_rsv_end]

struct ext2_reserve_window_node {

struct rb_node rsv_node;

__u32 rsv_goal_size;

__u32 rsv_alloc_hit;

struct ext2_reserve_window rsv_window;

};

这个结构既包含一个struct rb_node,又包含一个struct ext2_reserve_window,将两者结合起来了。


struct ext2_block_alloc_info {

struct ext2_reserve_window_node rsv_window_node;

__u32 last_alloc_logical_block;

ext2_fsblk_t last_alloc_physical_block;

};

这个结构描述了一个inode的预留窗口,以及上一次分配的逻辑磁盘块号和物理磁盘块号。

/*

* second extended file system inode data in memory

*/

struct ext2_inode_info {

……

/* block reservation info */

struct ext2_block_alloc_info *i_block_alloc_info;

};

这个结构是根据磁盘上的inode信息建立起来的,每个文件一个。


/*

* second extended-fs super-block data in memory

*/

struct ext2_sb_info {

/* root of the per fs reservation window tree */

spinlock_t s_rsv_window_lock;

struct rb_root s_rsv_window_root;

struct ext2_reserve_window_node s_rsv_window_head;

};

这个结构是根据磁盘中的超级块在内存中建立起来的,每个文件系统一个。其中s_rsv_window_root就是红黑树的根节点,s_rsv_window_head就是包含红黑树的根节点的struct ext2_reserve_window_node

二、主要数据结构之间的关系

  1. 一个文件系统对应一个ext2_sb_info结构,一个ext2_sb_info结构指向一红黑树。

  2. 每个文件inode对应一个ext2_inode_info结构,每个ext2_inode_info结构指向一个ext2_block_alloc_info结构。

  3. 每个ext2_block_alloc_info结构包含一个ext2_reserve_window结构。

  4. 每个ext2_reserve_window结构包含一个rb_node结构和一个ext2_reserve_window结构。

  5. rb_node结构用于组成一个树状结构。

  6. 每个ext2_reserve_window结构描述一个区间,并且多个ext2_reserve_window结构之间不会重叠。

    (这个图费了好久才画出来,但是这里不知道怎么放大,可以参考附件)

阅读(1228) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~