读薄《Linux 内核设计与实现》(6) - 虚拟文件系统
2016-11-07 21:24
337 查看
这篇文章是《读薄「Linux 内核设计与实现」》系列文章的第 VI 篇,本文主要讲了以下问题:Linux 虚拟文件系统的概念、相关接口等内容。
VFS 协同不同文件系统的工作
它定义了所有文件系统都支持的、基本的、概念上的接口和数据结构
对一个具体实现的文件系统,在处理时需要概念上的转换,例如将目录看为文件
它由
目录项对象有 3 种状态:
被使用:该目录项对用一个有效的索引节点(d_inode 所指的),且存在一个或多个使用者
未被使用:该目录项对应一个有效的索引节点,但 VFS 当前未使用它(d_count = 0)
负状态:该目录项没有对应的有效索引节点(d_inode 为 NULL)
目录项缓存主要包括 3 个部分:
『被使用的』目录项链表:一个给定的索引节点可能有多个链接,可能有多个目录项对象,用链表连接
『最近被使用的目录项的』双向链表:该链表含有被使用的和负状态的目录项对象
散列表和散列函数用来快速地将给定路径解析为相关目录项对象
本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!
0x00 虚拟文件系统概念
虚拟文件系统(VFS)为用户空间提供了文件系统接口VFS 协同不同文件系统的工作
0x01 通用文件接口
VFS 使得用户可以直接使用open(),
read(),
write()这样的系统调用而无需考虑具体文件系统和实际物理介质
0x02 文件系统的抽象层
VFS 提供了一个通用的文件系统模型,该模型囊括了任何文件系统的常用功能集合和行为它定义了所有文件系统都支持的、基本的、概念上的接口和数据结构
对一个具体实现的文件系统,在处理时需要概念上的转换,例如将目录看为文件
0x03 VFS 中的对象
I 超级块对象
它代表一个具体的已安装文件系统,各种文件系统都必须实现超级块对象,用于存放特定文件系统的信息它由
super_block结构体表示,定义于
<linux/fs.h>中
II 索引节点对象
它代表一个具体文件,包含了内核在操作文件或目录时需要的全部信息,索引节点对象由 inode 结构体表示,她定义在<linux/fs.h>中
III 目录项对象
VFS 把目录项当做文件对待,为了方便查找操作,引入目录项概念,每个 dentry 代表路径中的一个特定部分,目录项由 dentry 结构体表示,定义在文件<linux/dcache.h>中
目录项对象有 3 种状态:
被使用:该目录项对用一个有效的索引节点(d_inode 所指的),且存在一个或多个使用者
未被使用:该目录项对应一个有效的索引节点,但 VFS 当前未使用它(d_count = 0)
负状态:该目录项没有对应的有效索引节点(d_inode 为 NULL)
目录项缓存主要包括 3 个部分:
『被使用的』目录项链表:一个给定的索引节点可能有多个链接,可能有多个目录项对象,用链表连接
『最近被使用的目录项的』双向链表:该链表含有被使用的和负状态的目录项对象
散列表和散列函数用来快速地将给定路径解析为相关目录项对象
IV 文件对象
文件对象表示进程已打开的文件,是已打开的文件在内存中的表示,由 file 结构体表示,定义在文件<linux/fs.h>中。
本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!
相关文章推荐
- Linux 内核设计与实现(第二版)第4章
- Linux内核设计与实现 读书笔记
- linux内核设计与实现【第三版】摘记----第一章:linux内核简介
- Linux内核设计与实现 学习笔记(7)设备与模块
- 《Linux 内核设计与实现》(LKD)第三版译者序
- 《Linux 内核设计与实现》(LKD)第三版译者序
- 每日阅读6之linux内核设计与实现——抢占与上下文切换
- Linux内核设计与实现——内核同步
- linux内核设计与实现思想 – C风格的面向对象
- Linux内核设计与实现记录
- Linux内核设计与实现 之二 从内核出发
- Linux 2.4.x内核中网络协议栈QoS模块(TC)的设计与实现
- Linux Kernel Development (中文译名Linux 内核设计与实现) 勘误 (第一版和第二版)
- Linux&nbsp;内核设计与实现(一)
- Linux内核设计与实现——7 中断与中断处理(2)
- 每日阅读1之内核设计与实现(第三版)4.5——linux调度实现之时间记账
- 每日阅读4之linux内核设计与实现——linux调度实现之调度器入口
- 每日月的8之linux内核设计与实现——中断与中断处理
- linux 内核设计与实现(第二章笔记)
- LKD (linux内核设计与实现)笔记