学习网考试学习资料

Gzu521.com

Linux学习笔记(10)

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

ext2_dir_entry结构

struct ext2_dir_entry{
_u32 inode; //节点号
_u16 rec_len; // 目录项的长度
_u8 name_len; //名字长度
char name[ext2_name_len];//文件名 };

各类文件使用数据块

常规文件
在创建的时候是空的,不需要数据块,只有在开始有数据的时候才需要数据块 目录
ext2以一种特殊的文件实现了目录,文件的数据块存放了文件名和相应的索引节点号 符号链:如果路径名不大于60个字符,就把它存放在索引节点的i_blocks域中,因此无需数据块。否则就需要一个单独的数据块

设备文件,管道和套接字
不需要数据块,所有必要的信息都存放在索引节点中。

ext2的文件类型

文件类型 描述
0 未知
1 正规文件
2 目录
3 字符设备
4 块设备
5 命名管道
6 套接字
7 符号链


创建索引节点

函数为ext2_new_inode()
参数为:dir,mode
新创建节点必须插到一个目录中,参数dir指的是这个目录的索引节点对象的地址 -----const struct inode *dir
mode指的是创建索引节点的类型

步骤
调用get_empty_inode()分配一个新的索引节点对象分配一个新的索引节点对象,并sb=dir->i_sb; 调用lock_super()获得超级块对象的互斥访问 如果新创建的索引节点是目录,,则要考虑将来是否能将其属下的文件都容纳在一个块组中。所以应该找个其空闲索引节点的数量超过整个设备上的平均值这么一个块组,而不惜离开父节点所在的块组,另起炉灶^_^ 如果新创建的节点是文件,首先考虑将其索引节点分配在其目录所在的块组,若无空闲索引节点,则沿着此块组往下继续查找。若还是没有,则从第一个块组从头开始查找。


确定了索引节点分配在哪个的块组,就要从索引节点位图中分配一个节点,(调用load_inode_bitmap()),从中寻找第一个空位,这样就得到了第一个空闲磁盘索引节点号 分配磁盘索引节点:把索引节点位图的相应位设置好,并把含有这个位图的缓冲区标记为“脏” 把块描述符的bg_free_inodes_count域减1。如果新的索引节点是个目录,则增加bg_used_dirs_count

把磁盘超级块的s_free_inodes_count减1, 初始化索引节点的域,如设置i_ino, 把新的索引节点插入到inode_hashtable。 调用mark_inode_dirty()把这个索引节点对象移到超级块的脏索引节点链表 调用unlock_super()释放超级块对象 返回新索引节点对象的地址

创建文件系统ext2

初始化超级块和组描述符 检查是否有缺陷的块,如果有,创建有缺陷块的链表 对每个块组,保留存放超级块、组描述符、索引节点表以及两个位图所需要的磁盘 把索引节点位图和每个块组的数据映射位图初始化为0 初始化每个块组的索引节点链表 创建/root目录 创建lost+found目录(有缺失和缺陷的) 更新这个两个块组中的位图 把有缺陷的块组织起来放在lost+found目录中

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

责任编辑:gzu521

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