学习网考试学习资料

Gzu521.com

Linux学习笔记(9)

LINUX教程   点击:次   发布时间:2006-12-19   【字体: 】   来源:blog
贵 州 学 习 网

目录项缓存包括的主要部分
被使用的目录项链表
该链表通过索引节点对象i_dentry项链接,因为一个给定的索引节点可能有多个链接,所以可能就有多个目录项对象,因此用一个链表链接它们 最近使用的双向链表
该链表含有未被使用的和负状态的目录项对象。由于该链以时间顺序插入,所以最后释放的目录项对象放在链表首部,最近最少使用的目录项对象总是靠近链表尾部。一旦目录项的告诉缓存空间开始变小的的时候,内核就从链表的尾部删除元素,使得多数最近经常使用的对象得以保留。 哈希表和相应的哈希函数快速地将给定的路径名解析未相关的目录项对象。

哈希表石由数组dentry_hashtable表示,其中每一个元素都是指向一组具有相同链值的目录项对象的指针。通过d_lookup()函数在缓存中查找,如果访问的对象不在目录项高速缓存中,哈希函数返回一个空值


从路径名到目标节点CSAyD VGuf3$",XY(本 文来 源于 我 的学 习网电脑课堂LINUX教程 htTP://WWw.GZu521.COm]CSAyD VGuf3$",XY

ext2

ext2磁盘布局在逻辑空间中的映象

超级块
ext2超级块是用来描述ext2文件系统整体信息的数据结构,是ext2的核心所在。它是个ext2_super_block数据结构

一些域的解释

文件系统中并非所有的块都可以使用,有些块是保留的,给超级块专用,块的数目在i_r_blocks_count定义。一旦空闲块总数等于保留块,普通用户就无法申请数据快了。如果保留块也被使用,则系统就可能无法使用了。 逻辑快是从0号开始,对块大小为1kb的文件系统,s_first_block为1,对其它文件系统,则为0 s_log_block_size以2的幂次方表示块的大小,单位1024字节 ext2要定期检查自己的状态,s_lastcheck记录最近一次检查状态的时间,而s_checkinterval则规定了两次检查状态的最大允许时间间隔 如果检查到文件系统有错误,则对s_errors赋一个错误的值

ext2_sb_info
每个文件系统自己的特性信息
[图]

ext2索引节点
[图]

解释:
逻辑块->物理块
ext2通过索引节点中的数据块指针数组进行逻辑块到物理块的映射。指针数组15项,前12个为直接块指针,后3个分别为“一次间接块指针”,“二次间接块指针”,“三次间接块指针”。

索引12中的元素包含一个块的逻辑号,这个块代表逻辑块号的一个二级数组。数组对应的文件快号从12到b/4+11,b是文件系统块的大小 索引13中的元素包含一个块的逻辑号,这个块代表逻辑块号的一个三级数组。数组对应的文件快号从b/4+12到(b/4)^2+(b/4)+11 索引14中的元素包含一个块的逻辑号,这个块代表逻辑块号的一个四级数组。数组对应的文件快号从 (b/4)^2+(b/4)+12到(b/4)^3+(b/4)^2+(b/4)+11

组描述符

ext2_group_desc的数据结构
struct ext2_group_desc{ ? _u32 bg_block_bitmap;//块位图所在的块号_u32 bg_inode_bitmap;索引节点位图所在的块号
_u32 bg_inode_table; 索引节点表的首块号
_u16 bg_free_blocks_count;空闲块号
_u16 bg_free_inodes_count; 空闲索引节点数
_u16 bg_used_dirs_count; 分配给目录的节点数
_u16 bg_pad; 填充,对齐到字;
_32 [3] bg_reserved;用null填充12个字节 ?}

每个块组都有一个相应的组描述符描述它,所有组描述符形成一个组描述符表,组描述符可能占多个数据块。 作用大。一旦描述符破坏,整个组块无法使用,再每个组块中备份

位图
数据块位图:每一位表示数据块的使用情况,1表示已分配,0表示空闲 索引位图也类似

用高速缓存管理位图块 每个高速缓存最多同时只能装入ext2_max_grop_loaded个位图块或索引块 采用类似lru算法管理高速缓存 ext2_sb_info中的四个域来管理这两个高速缓存s_block_bitmap_number[]存放进入高速缓存的块号(块组号),s_block_bitmap[]存放了相应块在高速缓存中的地址


load_block_bitmap()调入指定的数据块位图

1)如果指定的块组号大于块组数,出错,结束
?2)通过搜索s_block_bitmap_number[]数组可知位图块是否进入了高速缓存,如果进入,则结束,否则,继续 ?
3)如果块组数不大于ext2_max_grop_loaded,高速缓存就可以同时装入所有块组数据块位图,无论采用什么算法,只要从s_block_bitmap_number[]找到一个空闲的元素,将块组号写入,然后将位图块调入高速缓存,最后将它在高速缓存中的地址写入s_block_bitmap[]数组中

4)如果块组数大于ext2_max_grop_loaded,则需要采用一下算法:
首先通过s_block_bitmap_number[]数组判断高速缓存是否已满,若未满,则操作过程类似上面的步骤,不同的事要将s_block_bitmap_number[]数组各元素后移一位,用空出的第一个元素存储块组号,s_block_bitmap[]做同样的处理 如果高速缓存已满,将s_block_bitmap[]数组最后一项所指的位图块从高速缓存中交换出去,然后调入指定的位图块,最后对这两个数组操作类似上面相同的操作

索引节点表
每个块组中索引节点都存储在各自的索引节点表中,并且按照索引节点号依次存储。索引节点表一般要占好几个数据块 所有索引节点的大小,128字节。所以1024字节的数据块可以包含8个索引节点 计算索引节点表占用的块数:一个块组中索引节点总数/每个块中的索引节点数。
块组中索引节点总数放在超级块中的s_inode_per_group域

索引节点的域
_u16 i_mode 文件类型和访问权限
_u16 i_uid 文件所有者的标志符 ?
_u32 i_size 以字节为单位的文件长度
_u32 i_atime
_u32 i_ctime 时间信息 ?
_u32 i_dtime
_u16 i_links_count 硬链接计数器
_u32 i_blocks 文件的数据块数

ext2目录项
目录是一种特殊的文件,它是由ext2_dir_entry这个结构组成的列表。 结构是变长的,这样可以减少磁盘空间的浪费。 长度有限制:
文件名最长只能为255个字符
一般自动变成为4的倍数,不足补null 目录中有文件和子目录,每一项对应一个ext2_dir_entry

上一页 下一页
本文共10页: 第 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]

责任编辑:gzu521

电脑课堂分类
Windows 2000教程
Windows XP教程
Windows 2003教程
Windows Vista教程
LINUX教程
软件教学
办公软件
硬件DIY
分类推荐信息
更多...
大类最新文章
更多...