Linux 文件系统中元数据使用计数的机制
在 Linux 文件系统中,元数据的引用计数主要用于管理元数据(如 inode, dentry 结构)在内存中的创建、使用和释放.了解这部分的机制,有利于深入认识文件系统的运行机制,以及Linux如何在内存中管理元数据.这部分内容也是构建分布式文件系统所的知识,由此才能保证元数据在分布式文件系统中的正确使用. 概述 元数据是一个文件系统的重要部分.很多书籍和文章都介绍过 dentry 和 inode 在 Linux 中的作用和机制,但却很少有文献涉及到它们的使用计数( usage counter ).使用计数的机制看似很简单:使用了一个元数据就递增,用完了就递减.但在这句简单的描述后面,具体的过程到底是如何进行的呢?这实际上贯穿了整个元数据的操作以及元数据在内存中的管理.了解这部分的机制,是一个很有意思的过程,可以让你看到 Linux 严谨缜密的思路,可以深入认识 Linux 文件系统的运行机制.这部分内容也是构建分布式文件系统所的知识. 本文仍然从两方面来介绍使用计数:增加和减少.再看一下在分布式环境中有哪些变化. 这里所引用的代码依据的是 Linux 内核 2.6.20 的版本. 使用计数的增加 创建操作 元数据的创建主要可以分为对文件的创建和对目录的创建.不管是文件还是目录,它们都对应同样的元数据结构,在内存中都有 inode 和 dentry . 下面我们分别看一下主要的两个创建操作:创建文件和创建目录. (1)创建文件 创建文件是通过系统调用 sys_open() ,并设置 O_CREATE 标志位来实现的.其调用过程如下:
在 open_namei() 中,会创建出 dentry 和 inode 结构.先看关于 dentry 的路径:
●在 dcache 中查找: __lookup_hash() > cached_lookup() > d_lookup() > __d_lookup()
我们再看关于 inode 的路径:
最终会调用具体文件系统的 create 函数.这里以 Ext2 为例,其调用过程如下:
具体文件系统在分配 inode 结构的时候,会通过初始化把 inode 的 i_count 域置为1.同时还把 inode 的 i_nlink 域置为1,这个域表示 inode 的 hard link 的数目,其值会被写入到具体文件系统的磁盘中. 总结一下,通过创建操作,会在内存中建立起 dentry 和 inode 结构,并且会把它们的使用计数都初始化为1.
(2)创建目录 创建目录和创建文件是类似的,这里我们简单看一下调用的路径就清楚了. 创建目录是通过系统调用 sys_mkdir() 来实现的.关于 dentry 的路径如下:
|
||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |