2020年5月9日 下午10:58
硬件文件系统 VS 虚拟文件系统
- 硬件文件系统 :硬件文件存储模式设计,解决如何存储的问题
- 虚拟文件系统 :数据结构的设计,来模拟我们需要的关系、逻辑,来达到抽象的目的,进行统一的文件管理,叫做虚拟文件系统
核心:简单做一个梳理,帮助理解记忆

- 对于每一个进程,打开的文件都有一个文件描述符,在 files_struct 里面会有文件描述符数组。每个一个文件描述符是这个数组的下标,里面的内容指向一个 file 结构,表示打开的文件。这个结构里面有这个文件对应的 inode,最重要的是这个文件对应的操作 file_operation。如果操作这个文件,就看这个 file_operation 里面的定义了。
- 对于每一个打开的文件,都有一个 dentry 对应,虽然叫作 directory entry,但是不仅仅表示文件夹,也表示文件。它最重要的作用就是指向这个文件对应的 inode。
- 如果说 file 结构是一个文件打开以后才创建的,dentry 是放在一个 dentry cache 里面的,文件关闭了,他依然存在,因而他可以更长期地维护内存中的文件的表示和硬盘上文件的表示之间的关系。
- inode 结构就表示硬盘上的 inode,包括块设备号等。
- 几乎每一种结构都有自己对应的 operation 结构,里面都是一些方法,因而当后面遇到对于某种结构进行处理的时候,如果不容易找到相应的处理函数,就先找这个 operation 结构,就清楚了。
从层次划分的角度去理解文件系统所处的位置:中间的核心

虚拟文件系统的三个核心数据结构:
- 文件挂载类mount struct + file类 + dentry
- Mount struct :用来抽象表示人类的挂载动作
- file:表示当前打开的文件
- dentry:
- 与file的区别:
- file会在文件关闭后delete,dentry实体会有缓存
- dentry有parent属性,用来抽象表示文件树的链接关系
- dentry主要用来指向文件的inode

- 与file的区别:
文件查找缓存的设计:主要是在dentry上面做
- 在这里面,我们需要先查找文件路径最后一部分对应的 dentry。如何查找呢?
- Linux 为了提高目录项对象的处理效率,设计与实现了目录项高速缓存 dentry cache,简称 dcache。它主要由两个数据结构组成:
- 哈希表 dentry_hashtable:dcache 中的所有 dentry 对象都通过 d_hash 指针链到相应的 dentry 哈希链表中;
- 未使用的 dentry 对象链表 s_dentry_lru:dentry 对象通过其 d_lru 指针链入 LRU 链表中。LRU 的意思是最近最少使用,我们已经好几次看到它了。只要有它,就说明长时间不使用,就应该释放了。
