构建分布式系统必学:Linux系统中元数据使用计数机制
来源:互联网 发布:怎么用dw制作淘宝网页 编辑:程序博客网 时间:2024/06/05 03:42
在 Linux 文件系统中,元数据的引用计数主要用于管理元数据(如 inode, dentry 结构)在内存中的创建、使用和释放。了解这部分的机制,有利于深入认识文件系统的运行机制,以及Linux如何在内存中管理元数据。这部分内容也是构建分布式文件系统所必须的知识,由此才能保证元数据在分布式文件系统中的正确使用。
概述
元数据是一个文件系统的重要部分。很多书籍和文章都介绍过 dentry 和 inode 在 Linux 中的作用和机制,但却很少有文献涉及到它们的使用计数( usage counter )。使用计数的机制看似很简单:使用了一个元数据就递增,用完了就递减。但在这句简单的描述后面,具体的过程到底是如何进行的呢?这实际上贯穿了整个元数据的操作以及元数据在内存中的管理。了解这部分的机制,是一个很有意思的过程,可以让你看到 Linux 严谨缜密的思路,可以深入认识 Linux 文件系统的运行机制。这部分内容也是构建分布式文件系统所必须的知识。
本文仍然从两方面来介绍使用计数:增加和减少。最后再看一下在分布式环境中有哪些变化。
这里所引用的代码依据的是 Linux 内核 2.6.20 的版本。
回页首
使用计数的增加
创建操作
元数据的创建主要可以分为对文件的创建和对目录的创建。不管是文件还是目录,它们都对应同样的元数据结构,在内存中都有 inode 和 dentry 。
下面我们分别看一下主要的两个创建操作:创建文件和创建目录。
(1)创建文件
创建文件是通过系统调用 sys_open() ,并设置 O_CREATE 标志位来实现的。其调用过程如下:
sys_open() > do_sys_open() > do_filp_open() > open_namei()
在 open_namei() 中,会创建出 dentry 和 inode 结构。先看关于 dentry 的路径:
open_namei() > lookup_hash() > __lookup_hash()
这里会分成3种情况:
- 在 dcache 中查找:
__lookup_hash() > cached_lookup() > d_lookup() > __d_lookup()
- 分配新的 dentry:
__lookup_hash() > d_alloc() > atomic_set(&dentry -> d_count, 1);
- 在具体文件系统中查找:
__lookup_hash() > i_op -> lookup()
和查找有关的内容我们在后面介绍,这里只看创建,也就 d_alloc() ,它会分配一个新的 dentry 结构,在分配的过程中,就会把 dentry 的使用计数初始化为1。在 d_alloc() 中,还会通过函数 dget() 递增父目录的使用计数,这是为了防止父目录在该 dentry 删除前被删除。(“/”除外,它没有父目录):
d_alloc() > dget(parent) > atomic_inc(&dentry->d_count);
我们再看关于 inode 的路径:
本文转自IBM Developerworks中国
请点击此处查看全文
- 构建分布式系统必学:Linux系统中元数据使用计数机制
- Linux 文件系统中元数据使用计数的机制
- Linux文件系统中元数据使用计数的机制
- 操作Linux系统 必学的60个命令
- Linux系统工程师必学的系统管理命令
- 分布式系统中的通信机制
- 构建嵌入式LINUX系统
- 构建嵌入式Linux系统
- 构建嵌入式Linux系统
- Linux内核构建系统
- Linux系统构建
- 新装linux系统必做
- 用Java和XML构建分布式系统
- 基于CCM构建SOC分布式系统
- 用JAVA和XML构建分布式系统
- 用JAVA和XML构建分布式系统
- 用JAVA和XML构建分布式系统
- 用JAVA和XML构建分布式系统
- VC6学习经验积累
- 在Spring托管的Hibernate中使用二级缓存
- 与小i机器人的无聊对话
- 模板引擎SMARTY
- 为什么用 CXF 和 Spring 创建 Web 服务?
- 构建分布式系统必学:Linux系统中元数据使用计数机制
- 在VC中操纵网页可以提交获取某个input中的值
- 增强 Firefox 中的 Find 命令
- 由浅入深带你使用Dojo工具包
- AIX FAQ 第 3 期
- 信息架构本质 6分:分布式数据挖掘
- 基于 Struts 2 拦截器实现细粒度的基于角色的存取控制
- MAPBASIC提高Eval的精度
- DELPHI中图片处理若干小问题