Chinaunix首页 | 论坛 | 博客
  • 博客访问: 602906
  • 博文数量: 68
  • 博客积分: 2621
  • 博客等级: 少校
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 21:04
文章分类

全部博文(68)

文章存档

2013年(8)

2012年(52)

2010年(8)

分类: LINUX

2010-10-24 20:58:29

   在看内核0.11文件系统源码时,发现自己的理解有个误区。在/linux-0.11/fs/inode.c中,iget()函数中有一句 nr = ROOT_INO (ROOT_INO = 1),  就觉得很奇怪,怎么能给inode赋值为1呢,后来发现nr指的是inode号,而不是inode。于是,又翻出自己以前的博文,觉得写的比较清楚明白,希望遇到同样问题的可以参考一下。虽然只是一个小问题,但却会影响我们的理解。

目录,目录项,索引节点的关系
(貌似我在这个问题上纠结了很久,一直搞不清三者的关系,这次经过去我们小组的讨论,终于清晰了)

在Linux操作系统中,目录就是目录文件。

一个目录文件包含了一组目录项,目录项是放在data block中的。

一个目录项主要包括了文件名和索引节点号,索引节点号是指向索引节点表( system inode table )中对应的索引节点的。
或者这样解释一下目录项( 这是大家一起讨论出来的 ),因为目录可以包含子目录,目录是可以层层嵌套的,所以形成文件路径,而文件路径中的每一部分就是所谓的目录项(dentry)。
注:内核后来的版本采用ext文件系统时,目录项中就不是存放索引节点号,然后找到索引节点表,再找到索引节点了。而是目录项中存放文件名和一个指向索引节点的指针。

索引节点是文件系统处理文件所需要的所有信息都存放在称为索引节点的数据结构中。主要就是文件的属性,包括链接数、文件所有者、文件建立和修改的时间,文件在磁盘的位置,文件大小、使用权限等等。


阅读(15763) | 评论(2) | 转发(0) |
0

上一篇:什么是数据结构

下一篇:硬链接与软链接

给主人留下些什么吧!~~

zbbhhh2023-02-19 11:08:14

chinaunix网友:很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

应该是不正确的。首先本质上目录和目录项是不同的,准确来说,目录是目录文件的简称,目录文件存储在硬盘的中;目录项为内存数据结构,存储在内存中。其次,我也是来寻找答案的,对于这二者的概念不甚清晰,以我的理解,在通过文件路径查找文件内容的过程中,会不断在目录文件的Inode和其对应的block间辗转,直到定位到具体的文件内容,此期间,我认为目录文件对应的block中只存储了类似于目录项的内容,即inode-文件名,但应该不是目录项,这部分内容属于目录文件的内容;最后,找到文件之后,对文件进行相关操作,打开文件表会收录这次查找过程,转化为文件句柄进行存储,文件句柄的复杂内容中,有一项就是目录项,目录项记录了文件名和inode指针;由此可见目录文件的内容和文件句柄中目录项的内容极其相似,但二者绝不能混为一谈。硬盘中目录文件的存在意义是保存文件系统的内容,属于保存信息源,内容准确且全面,但倘若每次查找文件都要进硬盘,将会消耗大量的访问文件时间;此时,内存中的目录项就体现了他存在的意义,访问过的路径就保存下(也是因为空间局部性原理),以方便下次迅速访问。

回复 | 举报

chinaunix网友2010-10-25 16:23:28

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com