Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6269345
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2014-12-21 10:21:50

原文地址:Linux系统VFS机制 作者:雪山飞狐_87

  VFSLinuxUnix文件系统中采用的一种技术机制,旨在一个操作系统中支持多个不同类型的文件系统。VFS是操作系统
内核中这样一组数据结构与子程序的集合,它位于操作系统系统调用层面与具体类型文件系统
之间,负责 :
      1、记录操作系统中可以支持和已经安装有哪些文件系统类型;
      2、将相关系统调用转换为对具体类型文件系统的调用;
   
 3、负责不同类型文件系统间的协同工作(例如跨FS(文件系统)复制);
      4、实现对不同类型文件系统的动态装卸和可扩充性等。


        
     
      通过以上功能,VFS——
    1、
向用户、应用程序、和操作系统其他部件提供了一个通用的、统一的、标准的、抽象的、虚拟的系统调用接口界面(所以称Virtual); 
      2、对以上应用程序等掩盖不同类型文件系统的差异和细节;
      3、为以上应用程序等提供了对具体文件系统类型的程序独立性和透明性。
      例如,当用户程序API在两次运行中分别读EXT2NTFS文件,都使用同样的read()系统调用函数,程序API不必改变。
 
    VFS是从OS系统调用界面到各具体类型文件系统之间的中介、分支机构、转换机构(所以称switch)、函数转换表,其作用类似于设备
开关表、系统调用分支表、总线、主板插槽等。
VFS最关键的作用,就在于提供了对上述不同操作子程序的分支跳转支持机制。

      

      安装点和链接

    /d1/f1路径上可能存在两个不同类型的文件系统。
结论:需逐个分量逐次调用具体类型文件系统,而不能一次性的整个路径名转交。
因此,与具体类型文件系统的交互(即调用次数)增多了。

      因此,内存缓冲数据结构进入VFS、内存活动I结点,目录项,超级块,等


     为了统一管理和减少代码重复,文件系统类型无关的操作(即大部分内存操作)进入VFS
文件系统类型相关的操作(即所有外存操作,及少量内存操作)留在具体类型文件系统中。


以上这三个因素导致的VFS实际结构和过程。

                                                 VFS打开文件过程图
             
                                 
应用程序通过open系统调用进入内核
                                        
参数:路径名等(例如/d1/f1)
                                                                

根据/inode(OS初启时已进内存)d1目录项已在内存(系统打开文件表等),是则判断是否安装点并作处理,否则根据
操作表调用
FS类型相关函数读盘上根目录文件内容查有无d1,无则错返,有则建填d1dentry对象和inode对象(可能读盘inode)
                                                               

根据d1inodef1目录项已在内存否,否则根据操作表调用FS类型相关函数读盘上d1目录文件内容查有无f1,无则错返,
                       
有则建f1dentry对象、inode对象(可能读盘inode)file对象
                                

                      
成功返回文件句柄(进程打开文件表的行号)


          
         

 

 

 

 

阅读(1248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~