第13章 虚拟文件系统

第13章 虚拟文件系统

VFS:

用户可以直接调用open(),read(),write()而无需考虑具体文件系统和实际物理介质。即可以跨系统,介质隔离来访问数据。协作性和泛型。linux可以支持多种文件系统,FAT,NETF。。(因为其定义了所有文件系统都支持的,基本的,概念上的接口和数据结构;同时实际文件系统也将自身的诸如“打开文件”,“目录是什么”这些概念在形式上保持和VFS一致(即核心操作能对接,VFS能调用子文文件系统的接口函数来完成数据查找)),所以需要实际文件系统通过编程提供VFS所期望的抽象接口(包括一些linux强制要求的信息(如索引节点结构体)和函数,使得双方在逻辑上可以完全对接)和数据结构

一次写的过程:进入系统调用sys_write(),这个函数会找到目的文件系统的标准读写函数(猜测:将相关函数载入到内部的方法结构体中直接用内核调用,进而触发硬件驱动),之后传递参数让目的文件系统实现读写。

linux文件系统:

首先:子文件系统需要注册到file_system_type中才能使用,用其描述了该文件系统及其性能。

安装点用vfsmount表示,包含安装点的相关信息(这个暂时不太理解)。

其次在内核中使用超级块来描述该注册系统。

目录和文件均是文件

文件以索引节点的形式存储在单独的块中

控制信息集中存储于超级块(存于磁盘中)

1.超级块

代表一个具体的已安装的文件系统,包括自身主机的磁盘,也包括U盘安装之后注册的关于U盘的超级块。

形式:超级块位于磁盘特定扇区中的(注册时由内核通过封装好的指令从介质中直接读取到页缓存中的已经创建的超级块对象中)

struct super_block{..}

超级块操作:最重要,由超级块中s_op指向,包含的操作如下:

//-----------------,

2.索引节点对象:

 包含了内核在操作文件或者目录时所需要的全部信息(存放于磁盘索引节点或者是以存放于文件内的信息(总之能够填充到内存的索引节点映射中去)),总之需要在内存中映射。

索引节点代表一个确切的文件,也可以是设备或者管道这些特殊文件(被访问的时候才会在内存中创建),

磁盘中必须提供最重要的信息,其余的如果没有映射到内存中可以随他去。

struct inode{  ...  }

inode_operations{    索引节点操作函数指针集合  }   //在给定的节点上,可能由VFS执行(通过传递给内核来执行(此时作为挂载外设)),也可能是发送指令由具备CPU能力的存储对像文件来执行并返回数据(此时作为两个并行体,只是对接)。

//------------------,

3.目录项对象:

方便查找操作,解析路径耗时,且代码比较繁琐(设计正则表达式那些)

注意:目录项没有对应的磁盘数据结构,是VFS根据路径在访问某个文件的时候现场创建(所以目录项无须写回操作)。

4.文件对象:

表示进程已经打开的文件并用以执行直接操作的标志记录,用以记录当前文件的使用锁,访问模式,文件当前位移量(文件指针),事件池(有函数描述睡眠)。。(内核为了便于执行文件在内存中创建的临时表,磁盘不提供)

struct file{  实际文件操作所需要的所有记录,操作表指针      }

操作函数表:struct file_operations{。。。}  //对文件的增删改查操作,数据写回文件,将文件映射到地址空间中(int mmap(file,vm_area),由系统调用mmap()予以调用)。  

注:文件映射到地址空间,比直接读(read()先到页缓冲)速度来的快

其它的数据结构:

struct file_struct{        }    //每个进程指向唯一的,包含打开的文件(file结构体数组)和文件描述符

struct fs_struct{        }       //每个进程指向唯一的,保存当前正在执行的文件

struct mmt_namespace{    }   //猜测:是为每一个进程指定命名空间,不同的命名空间里面指向不同的文件系统,以确保区分以及权限要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值