Linux 虚拟系统文件交换器剖析
name 条目,以及一个针对 user 目录的 name 条目.通过这种方式,dentry 简洁地映射到现在使用的文件系统.
dentry 对象由 dentry 结构定义(在 ./linux/include/fs/dcache.h 中).它由许多元素组成,这些元素在文件系统和物理数据中跟踪条目之间的关系(比如文件名).图 5 展示了 dentry 对象的简化图示.dentry 引用 super_block,super_block 定义包含该对象的特定文件系统实例.接下来是该对象的父 dentry(父目录),其后是包含在一个列表中的子 dentry(如果该对象刚好是一个目录的话).然后,为 dentry 定义操作(比如 hash、compare、delete 和 release 等等).接着定义对象的名称,在这里名称保存在 dentry 中而不是 inode 中.,提供一个到 VFS inode 的引用. 图 5. dentry 对象的简化表示
注意,dentry 对象仅存在文件系统内存中,而不能储存在磁盘上.仅永久储存文件系统 inode,dentry 对象的目的是改善性能.您可以在 ./linux/include/dcache.h 中看到 dentry 的完整描述.
文件对象 在 Linux 系统中打开的每个文件都都存在一个 file 对象.这个对象为特定用户提供打开的实例的信息.图 6 提供了文件对象的简化视图.在图中可以看到,path 结构提供到 dentry 和 vfsmount 的引用.为每个文件定义了一组文件操作,常见的文件操作包括 open、close、read、write 和 flush 等.接着定义一组标志和权限(包括组和所有者).,为特定文件实例定义状态数据,比如文件的当前偏移量. 拥有帝国一切,皆有可能。欢迎访问phome.net 图 6. 文件对象的简化表示
对象关系 我们已经查看了 VFS 层中的各种重要对象,现在我们通过一个图表展示它们之间的关系.到目前为止,我都是以一种自下而上的方式探索对象,现在我们采用自上而下方式,从用户透视图中考察对象(见 图 7). 在顶层是打开的 file 对象,它由进程的文件描述符列表引用.file 对象引用 dentry 对象,后者引用 inode.inode 和 dentry 对象都引用底层的 super_block 对象.可能有多个文件对象引用同一个 dentry(当两个用户共享同一个文件时).注意,在图 7 中一个 dentry 对象还引用另一个 dentry 对象.在这里,目录引用文件,而文件反过来引用特定文件的 inode. 图 7. VFS 中的主要对象之间的关系
VFS架构 VFS 的内部架构由一个调度层(提供文件系统抽象)和许多缓存(用于改善文件系统操作的性能)组成.这个小节探索内部架构和主要对象之间的交互(见图 8). 图 8. VFS 层的高级视图
在 VFS 中动态管理的两个主要对象是 dentry 和 inode 对象.缓存这两个对象,以改善访问底层文件系统的性能.当打开一个文件时,dentry 缓存将被表示目录级别(目录级别表示路径)的条目填充.此外,还为该对象创建一个表示文件的 inode.使用散列表创建 dentry 缓存,并且根据对象名分配缓存.dentry 缓存的条目从 dentry_cache slab 分配器分配,并且在缓存存在压力时使用最近不使用(least-recently-used,LRU)算法删除条目.您可以在 ./linux/fs/dcache.c 和 ./linux/include/linux/dcache.h 中找到与 dentry 缓存相关的函数. 为了实现更快的查找速度,inode 缓存被实现为两个列表和一个散列表.第一个列表定义当前使用的 inode;第二个列表定义未使用的 inode.正在使用的 inode 还储存在散列表中.从 inode_cache slab 分配器分配单个 inode 缓存对象.您可以在 ./linux/fs/inode.c 和 ./linux/include/fs.h 中找到与 inode 缓存相关的函数.在现在的实现中,dentry 缓存支配着 inode 缓存.如果存在一个 dentry 对象,那么 inode 缓存中也将存在一个 inode 对象.查找是在 dentry 缓存中执行的,这将导致 inode 缓存中出现一个 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |