b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

单循环链表 Linux VFS数据结构(7)

电脑杂谈  发布时间:2018-02-14 03:35:51  来源:网络整理

---------------------------------------------------------------------

每个目录项对象可以处于以下四种状态之一:

空闲状态(free)

处于该状态的目录项对象不包括有效的信息,且还没有被VFS使用。对应的内存区由slab分配器进行处理。

未使用状态(unused)

处于该状态的目录项对象当前还没有被内核使用。该对象的引用计数器d_count的值为0,但其d_inode字段仍然指向关联的索引节点。该目录项对象包含有效的信息,但为了在必要时回收内存,它的内容可能被丢弃。

正在使用状态(in use)

处于该状态的目录项对象当前正在被内核使用。该对象的引用计数器d_count的值为正数,其d_inode字段指向关联的索引节点对象。该目录项对象包含有效的信息,并且不能丢弃。

负状态(negative)

与目录项关联的索引节点不存在,那是因为相应的磁盘索引节点已被删除,或者因为目录项对象是通过解析一个不存在的路径名创建的。目录项对象的d_inode字段被置为NULL,但该对象仍然被保存在目录项高速缓存中,以便后续对同一文件目录名的查找操作能够快速完成。

与目录项关联的方法称为目录项操作,它描述了一个文件系统是如何重载一个标准的dentry operations。这些方法由dentry_operations结构体描述,该结构的地址存放在目录项对象的d_op字段中。由于他们是可选的或者VFS使用默认的例程,这些方法可能被设为NULL。其定义如下:

---------------------------------------------------------------------

include/linux/dcache.h

struct dentry_operations {

   int (*d_revalidate)(struct dentry *, struct nameidata *);

   int (*d_hash) (struct dentry *, struct qstr *);

   int (*d_compare) (struct dentry *, struct qstr *, struct qstr *);

   int (*d_delete)(struct dentry *);

   void (*d_release)(struct dentry *);

   void (*d_iput)(struct dentry *, struct inode *);

   char *(*d_dname)(struct dentry *, char *, int);

};

---------------------------------------------------------------------

d_revalidate:在把目录项对象转换为一个文件路径名之前,判定该目录项对象是否仍然有效。大多数文件系统将它设置为NULL,而网络文件系统可以指定自己的函数。

d_hash:生成一个散列值,用于目录项散列表的、特定于具体文件系统的散列函数。参数dentry标识包含路径分量的目录。第二个参数包含要查找的路径名分量以及由散列函数生成的散列值。

d_compare:比较两个文件名。name1应该属于dir所指的目录。

d_delete:对于一个dentry的最后的引用解除(delete)时调用。这意味着没有人正在使用这个dentry,但依然是有效的,并依然在dcache中。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76619-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...