linux文件体系结构和虚拟文件系统

        linux中的虚拟文件系统(Virtual File System, VFS)是一种采用面向对象编程策略(尽管书写操作系统的C语言本身不支持面向对象编程,但是思想还是可以借鉴的),是对该操作系统所支持的所有实际物理文件系统的一种抽象,用于提供给用户进程或者系统调用操作当前系统中所有文件统一的接口,而不用关心当前操作系统中存在哪几种实际的物理文件系统。也可以这么说VFS实际提供了面向对象编程中的一种接口(或者抽象类),而所有的实际物理文件系统需要实现接口所定义的接口(或者使用抽象类中的缺省实现)。

        在用户应用程序中或者通过C标准库提供的操作文件的接口或者直接使用系统调用操作文件系统时,使用的是VFS提供的一种抽象接口。而系统调用就像是一种切换器,是进程从用户空间进入内核空间的入口,之后由内核代表用户进程运行在该进程的系统空间的堆栈中(在创建进程的时候,内核会在内核空间为每个进程创建两个内存页(每页4K或者8K)或者一个系统页、一个中断页)。

        很明显,VFS屏蔽了底层物理文件系统的实现细节,只对外提供一组操作系统中文件的统一入口。因此,即使各个底层物理文件系统之间的差别再大,对于用户而言也是透明的。每种底层的物理文件系统只需对VFS系统提供各自的接口,供VFS系统调用即可。

        与VFS相关的所有数据结构只存在于物理内存中。所以系统每次初始化的时候都需要首先在内存中建立起一颗VFS的目录树(在linux中成为namespace),实际上便是在物理内存中建立相应的数据结构。 VFS目录树在linux的文件系统模块中是个很重要的概念,不能与实际文件系统相混淆。

        linux中文件系统的组织和系统调用之间的结构图如下:


                               

图 1 VFS系统结构图

        buffer cache在这里的作用就是缓冲区高速缓存,用于减小对实际物理存储设备之间的请求次数,加快应用程序的响应速度。内核使用LRU(最近最少使用算法)管理缓冲区中缓存。当缓冲区中的脏数据达到一定的比例、距离上次一周期刷新的时间间隔超过一定的数值时,内核自动唤醒flusher后台进程刷新内存中的脏数据回实际的后备存储空间。具体的介绍可以参见《linux内核设计与实现》页高速缓存和页回写一章。

        如前所述,linux站在高度抽象的角度看待本系统中的文件系统和针对文件系统的相关操作。linux使用超级块、文件、目录项和安装点四个概念管理系统的所有文件及目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值