文件系统的dentry结构疑问
ULK3 P474页说,一旦目录被读入内存,VFS就把它转换成基于dentry结构的一个目录项对象。下边又说“请注意,目录项对象在磁盘上没有对应的镜像,因此在dentry结构中不包含指出该对象已被修改的字段”。看似矛盾,到底dentry是不是由磁盘上来到内存的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Linux 中每个文件或目录都有一个dentry结构 是内核创建的数据结构(内存中),当中d_inode 指向文件的 inode!
回复 2# zd零
file结构是在进程打开文件的时候内核创建的,那dentry又是在什么情况下创建的呢
回复 3# embeddedlwp
打开一个文件当然要 d_alloc() 一个dentry 啊!建议楼主完整看一下 sys_mount() 的过程!
回复 4# zd零
ULK3中有这么一句:
目录项高速缓存:
由于从磁盘读入一个目录项并构造相应的目录项对象需要花费大量时间,所以,在完成对目录项对象的操作后,可能后面还要使用它,因此仍在内存中保留它有重要的意义。
这是不是说目录项在磁盘上啊
目录本身也是一个文件,也有自己对应的inode。这个inode是保存在磁盘上的,里面存放的信息主要是一个文件列表,表示这个目录下面有哪些文件(子目录也是文件),文件的名字是什么,对应的inode号是什么。
磁盘上保存着的inode必定是足以描述整个目录结构的,否则掉电之后目录结构都找不回来了。
但是inode对目录结构的描述并不够直接。inode与inode之间并不是直接用指针相连的树型结构(它是要保存在磁盘上的),而是需要通过inode号来间接联系(具体的文件系统可能有不同的玩法)。
所以,当inode被读入内存之后,需要一种更为方便的结构来访问目录树,于是dentry就出来了。
dentry只是描述目录结构的一个附加结构,磁盘上并不保存它。它所需要的信息是由保存在磁盘上的inode来生成的。它的存在是为了方便目录结构的访问。
回复 3# embeddedlwp
mount文件系统或是打开文件时,path_lookup()创建的。
回复 6# kouu
多谢