学习网考试学习资料

Gzu521.com

Linux学习笔记(7)

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

super_block结构主要包括以下一些域:

描述文件系统整体信息的域
用于管理超级块的域 n
与具体文件系统相联系的域

描述文件系统整体信息的域:

kdev_t s_dev 具体文件系统的块设备标识符 n
unsigned long s_blocksize 具体文件系统的数据块大小
unsigned char s_blocksize_bits
块大小占用的位数,例如,块大小1024字节,则该值为10
unsigned long long s_maxbytes 文件最大长度
unsigned long s_flags 超级块标识
unsigned long s_magic 魔数

用于管理超级块的域:
struct list_head s_list 用于形成超级块链表
struct semaphore s_lock 锁
struct rw_semaphore s_umount 读写超级块时进行同步
unsigned char s_dirt 该超级块修改标识
struct dentry *s_root 指向该文件系统安装目录的dentry结构
int s_count 对超级块的使用记数
struct list_head s_dirty “脏”索引节点链表的头节点
struct list_head s_locked_inodes 要同步的索引节点链表的头节点
struct list_head s_files 该超级块上的所有打开文件链表头节点

与具体文件系统相联系的域:
struct file_system_type *s_type 指向具体文件系统file_system_struct结构的指针 struct super_operations *s_op 指向具体文件系统super_operations结构的指针 n struct dquot_operations *dq_op 指向具体文件系统用于限额操作的dquot_operations结构的指针
union u 各种文件系统的特定信息。

超级块链表
所有超级块对象,以双向循环链表的形式连接在一起,链表头节点保存在super_blocks变量(定义在fs/super.c):
[图]

索引节点对象(inode)

文件系统处理文件所需的信息
索引节点对文件是唯一的
具体文件系统的索引节点存储在磁盘上,使用的时候,必须调入内存,填写vfs的索引节点。所以vfs的索引节点是动态节点。

inode结构主要包括以下一些域

描述文件信息的域
用于索引节点管理的域
用于索引节点操作的域
其他

kdev_t i_dev 设备标识号
umode_t i_mode 文件类型和访问权限
link_t i_nlink 与该索引节点建立的连接数
uid_t i_uid 文件所有者号
gid_t i_gid 所有者所在组号
kdev_t i_rdev 实际设备号
off_t i_size 文件大小(字节)
unsigned long i_blksize 块大小
unsigned long i_blocks 该文件占用块数
time_t i_atime 文件最后访问时间
time_t i_mtime 文件最后修改时间
time_t i_ctime 节点修改时间
unsigned long i_version 版本号
struct semaphore i_zombie 僵死索引节点的信号量 JCV x8c !y!h-[转 贴 于 我 的 学 习 网 电脑课堂LINUX教程 HTtp://wwW.gzU521.coM)JCV x8c !y!h-

用于索引节点管理的域
struct list_head i_hash 形成哈希链表
struct list_head i_list 形成索引节点链表
struct list_head i_dentry 目录项链表的头节点

用于索引节点操作的域:
struct inode_operations *i_op 索引节点的操作
struct super_block *i_sb 指向该文件系统的超级块
atomic_t i_count 使用该节点的进程数
struct file_operations *i_fop 文件操作
unsigned char i_lock 用于同步操作,锁定节点
struct semaphore i_sem 用于同步的信号量
wait_queue_head_t *i_wait 指向索引节点等待队列
unsigned char i_dirt 修改标识
struct file_lock *i_flock 指向文件加锁链表的指针
struct dquot *i_dquot[maxquotas] 索引节点的磁盘限额

其它
unsigned long i_state 索引节点的状态标识
unsigned int i_flags 文件系统的安装标识
atomic_t i_writecount 写进程的引用计数
unsigned int i_attr_flags 文件创建标识
union u 共同体

索引节点链表

索引节点至少在下列链表之一:
(1)未用索引节点链表 链表头节点保存在inode_unused变量,i_count=0; n (2)正在使用索引节点链表 链表头节点保存在inode_in_use变量,i_count>0, i_nlink>0
(3)每个超级块的脏索引节点链表
链表头节点保存在相应超级块的s_dirty,i_count>0, i_nlink>0, i_state & i_dirty

未用索引节点链表[图]
正在使用索引节点链表[图]
脏索引节点链表[图]


目录项(dentry)

每个文件除了有一个索引节点结构外,还有目录项dentry结构。

dentry结构代表的是逻辑意义上的文件,在磁盘上没有对应的映象。而inode结构代表的是物理意义上的文件,对于一个具体的文件系统,在磁盘上有对应的映象。

一个dentry结构必有一个inode结构,而一个inode可能对应多个dentry结构。
由于从磁盘读入一个文件并构造相应的目录项需要花费大量的时间,而在完成对目录项的操作后,可能后面还会用到,所以在内存中要保留它。

dentry结构定义在include/linux/dcache.h中

dentry的域

atomic_t d_count 目录项引用计数
unsigned int d_flags 目录项标识
struct inode * d_inode 与文件名关联的索引节点
struct dentry * d_parent 父目录的目录项
struct list_head d_hash 形成目录项哈希链表
struct list_head d_lru 未使用的目录项链表
struct list_head d_child 形成父目录的子目录项链表
struct list_head d_subdirs 子目录链表的头节点
struct list_head d_alias 形成索引节点别名链表
int d_mounted 该目录项安装文件系统数目
struct qstr d_name 目录项名(快速查找)
unsigned long d_time 由d_revalidate函数使用
struct dentry_operations *d_op 目录项操作函数
struct super_block * d_sb 所在文件系统的
void * d_fsdata 具体文件系统的数据,目前只为nfs所用
unsigned char d_iname[dname_inline_len] 短文件名,24个字符

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

责任编辑:gzu521

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