文件系统的dentry结构疑问

发布于 2022-10-15 07:17:29 字数 132 浏览 22 评论 0

ULK3 P474页说,一旦目录被读入内存,VFS就把它转换成基于dentry结构的一个目录项对象。下边又说“请注意,目录项对象在磁盘上没有对应的镜像,因此在dentry结构中不包含指出该对象已被修改的字段”。看似矛盾,到底dentry是不是由磁盘上来到内存的呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

神回复 2022-10-22 07:17:29

Linux 中每个文件或目录都有一个dentry结构 是内核创建的数据结构(内存中),当中d_inode 指向文件的 inode!

云胡 2022-10-22 07:17:29

回复 2# zd零

    file结构是在进程打开文件的时候内核创建的,那dentry又是在什么情况下创建的呢

肤浅与狂妄 2022-10-22 07:17:29

回复 3# embeddedlwp

打开一个文件当然要 d_alloc() 一个dentry 啊!建议楼主完整看一下 sys_mount() 的过程!

洋洋洒洒 2022-10-22 07:17:29

回复 4# zd零

    ULK3中有这么一句:

目录项高速缓存:
由于从磁盘读入一个目录项并构造相应的目录项对象需要花费大量时间,所以,在完成对目录项对象的操作后,可能后面还要使用它,因此仍在内存中保留它有重要的意义。

这是不是说目录项在磁盘上啊

强辩 2022-10-22 07:17:29

目录本身也是一个文件,也有自己对应的inode。这个inode是保存在磁盘上的,里面存放的信息主要是一个文件列表,表示这个目录下面有哪些文件(子目录也是文件),文件的名字是什么,对应的inode号是什么。
磁盘上保存着的inode必定是足以描述整个目录结构的,否则掉电之后目录结构都找不回来了。

但是inode对目录结构的描述并不够直接。inode与inode之间并不是直接用指针相连的树型结构(它是要保存在磁盘上的),而是需要通过inode号来间接联系(具体的文件系统可能有不同的玩法)。
所以,当inode被读入内存之后,需要一种更为方便的结构来访问目录树,于是dentry就出来了。

dentry只是描述目录结构的一个附加结构,磁盘上并不保存它。它所需要的信息是由保存在磁盘上的inode来生成的。它的存在是为了方便目录结构的访问。

鲸落 2022-10-22 07:17:29

回复 3# embeddedlwp

    mount文件系统或是打开文件时,path_lookup()创建的。

情丝乱 2022-10-22 07:17:29

回复 6# kouu

     多谢

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文