关闭

linux VFS 基础学习

标签: linux
802人阅读 评论(0) 收藏 举报
分类:

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


说到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结构。每个进程都有自己的命名空间,即自己对系统上文件系统体系层次的独立

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29599次
    • 积分:426
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论