Linux内核学习:虚拟文件系统

栏目: 后端 · 发布时间: 5年前

内容简介:Linux的成功因素之一是它具有与其它操作系统和谐共存的能力,其中代表作之一就是虚拟文件系统(VFS)。VFS的思想是把不同类型文件的共同信息放入内核,具体思路是通过Linux在用户进程(或C库)和文件系统之间引入了一个抽象层,该抽象层称之为虚拟文件系统(VFS)。

Linux的成功因素之一是它具有与其它操作系统和谐共存的能力,其中代表作之一就是虚拟文件系统(VFS)。

VFS的思想是把不同类型文件的共同信息放入内核,具体思路是通过 Linux 在用户进程(或C库)和文件系统之间引入了一个抽象层,该抽象层称之为虚拟文件系统(VFS)。

Linux内核学习:虚拟文件系统

VFS的任务主要是提供一种操作文件、目录以及其他对象的统一方法还有它必须能够与各种方法给出的具体文件系统实现达成妥协。

虚拟文件系统的类型

VFS的类型主要分三种:

  • 基于磁盘的文件系统:是在非易失介质上存储文件的经典方法,用以在多次会话之间保持文件的内容。

  • 特殊文件系统:在内核中生成,是一种使用用户应用程序与用户通讯的方法。它位于内核软件层,用来处理与Unix标准文件系统相关的所有系统调用(Linux的 proc文件系统就是这一类的最佳示例)

  • 网络文件系统:是基于磁盘文件系统和虚拟文件系统之间的折中,这些文件系统允许轻易访问属于其它网络计算机的文件系统所包含的文件(常见的网络文件系统有:NFS、Coda、AFS、CIFS、NCP等)

通用文件模型

通用文件模型严格反映传统Unix文件系统的文件模型,从本质上,Liunx不能对一个特点的函数进行硬编码来执行诸如read() 和 ioctl() 这类的操作,而是对每个操作都必须使用一个指针,指向要访问的具体文件系统的适当函数。通过通用文件模型,VFS使得用户可以直接使用open()、read()、write() 这样的调用而无须考虑具体这样的文件系统。

VFS采用了面向对象的设计思路,使用了一组数据结构来表示通用文件对象,这些对象组成了Linux的通用文件模型。

1)超级快对象(superblock object):存放已安装文件系统有关的信息

superblock的数据结构

Linux内核学习:虚拟文件系统

2)索引节点对象(inode object):存放具体文件的一般信息(内核在操作文件或目录时需要的全部信息)。一个索引节点代表文件系统中的一个文件,但是索引节点仅当文件被访问时,才在内存中创建。

inode的数据结构

Linux内核学习:虚拟文件系统

3)文件对象(file object):它代表由进程打开的文件。这类信息仅当进程访问期间存在于内核内存中。文件对象(不是物理文件)由相应的open()系统调用创建,由close()系统调用撤销。

file的数据结构

Linux内核学习:虚拟文件系统

4)目录项对象(dentry object):不是指目录,VFS把目录作为一个文件看待,这里的目录项对象指的是路径的一个组成部分,与对应文件进行链接的有关信息。

dentry的数据结构

Linux内核学习:虚拟文件系统

VFS对象之间的关系如下:

Linux内核学习:虚拟文件系统

进程与VFS对象之间的交互如下:

Linux内核学习:虚拟文件系统

目录项目高速缓存(dcache)

为了最大限度地提高处理目录项对象的效率,Linux使用目录项高速缓存,它由2种类型的数据结构组成:

  • 一个处于 正在使用未使用负状态 的目录对象的集合:正在使用和未使用的目录项对象对应一个有效的索引节点,负状态的目录项对象没有对应的有效索引节点

  • 一个散列表,从中能够快速获取与给定的文件名和目录名对应的目录项对象。

小结

VFS是一个胶水层,位于内核的底层和用户层之间。它提供了各种抽象数据结构来表示文件和inode。而真实文件系统必须填充这些结构,使得应用程序无需考虑底层文件系统,总是可以使用同样的接口访问和操作文件。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

你必须知道的495个C语言问题

你必须知道的495个C语言问题

Steve Summit / 孙云、朱群英 / 人民邮电出版社 / 2009-2 / 45.00元

“本书是Summit以及C FAQ在线列表的许多参与者多年心血的结晶,是C语言界最为珍贵的财富之一。我向所有C语言程序员推荐本书。” ——Francis Glassborow,著名C/C++专家,ACCU(C/C++用户协会)前主席 “本书清晰阐明了Kernighan与Ritchie《The C programming Language》一书中许多简略的地方,而且精彩地总结了C语言编程......一起来看看 《你必须知道的495个C语言问题》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具