linux VFS 基础学习

书到用时方恨少 事非经过不知难


说到linux VFS, 就要知道:

- 她基于类unix文件系统

- 采用面向对象思想进行设计,抽象出通用的接口,隐藏了具体文件系统的实现细节。


主要有4个对象, superblock, inode dentry, file. 每个对象都由一个数据结构来表示,这个数据结构里有操作它的函数批针,以及一些表示特定性的成员。

superblock: 

 - filesystem metadata 相应于整个文件系统,

 - 有相对应的on-disk data, 因此有dirty flag

inode :

 - file metatdata相应于一个具体的文件

 - 有相对应的on-disk data, 因此有dirty flag

dentry:

 - directory entry, a companent 为了快速path lookup而生的对象,

 - 没有相对应的on-disk data, 因此没有dirty flag

file:

 - 代表一个被进程打开的文件,

 -  没有相对应的on-disk data, 因此没有dirty flag


在4个对象中, file的operations table比较重要,因为它们组成了最基本的unix system call.


此外在VFS中, 还有两个重要的object.

file_system_type:

描述一个具体的文件系统。一个文件系统只有一个file_system_type, 不管它有多少 个实例mount在系统上。举个例子,你有一个U盘被格式化成了vfat文件系统,有一个硬盘也被格式化成了vfat系统,它们都是vfat文件系统的一个实例,而系统中,真正表示vfat这个文件系统的只有一个file_system_type结构。

vfsmount:

它表示一个文件系统的具体实例, 换句话说, 就是一个mount point.


和进程相关的文件系统数据结构:

每个进程都有一列打开的文件,自己的根文件系统,自己的working directory, 自己的mount point等等。

进程描述符数据结构中,就有很多和文件系统相关的成员。

进程描述符的files成员指向一个files_struct结构, 表示该进程打开的一系列文件。

fs成员指向的一个fs_struct结构,表示该进程相关的文件系统的信息。如之前提到的自己的根文件系统,自己的working directory。

mnt_namespace指向一个mnt_namespace结构。每个进程都有自己的命名空间,即自己对系统上文件系统体系层次的独立

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值