Ext2那些事儿(三)

在第一回中我们已经谈到了VFS,即Virtual File System,下面就着重讲讲这个。


3. 虚拟文件系统(Virtual File System)

Linux内核中包含一层叫虚拟文件系统的东东,它是干啥用的呢?在前面已经讲过了,其实它就是起一个承上启下和下情上达的作用。Linux支持多种文件系统,就是依靠虚拟文件系统隔离了不同文件系统之间的区别,使得上层应用能够通过它调用到具体的文件系统操作。具体说来就是这样的,当一个进程发起一个文件操作时,内核调用VFS中的函数。该函数则处理一些与下层具体文件系统无关的操作,并将依赖于文件系统的操作重定向给下层具体文件系统的代码,交由它进行处理。文件系统代码采用缓冲缓存函数来请求对设备的I/O操作。如下图所示:

从图中可以看到,Minix FS, DOS FS, ext FS, ext2 FS都能为VFS所调用来进行文件操作。这个就很像现在流行的设计模式,有一种模式叫依赖倒转原则,即“上层模块不应该依赖下层模块,两个都应该依赖抽象” 和 “抽象不依赖细节,细节应该依赖抽象”。其目的就是当下层模块改变之后,上层的模块不需要改变,依然能够使用。这个是不是和咱们的VFS与下层文件系统的关系很像?当下层的文件系统从DOS FS换为ext2 FS时,上层的应用程序是不需要跟着改变的。那么这个是怎么实现的呢?其实就是VFS规定了下面的文件系统必须提供给它调用的操作,你能提供这些操作,就没问题,有资格加入俱乐部和我们一起玩。如果你不能提供这些操作,则对不起,你自己玩去吧。这些操作涉及到三类对象:文件系统、inodes和打开的文件。


VFS作为上层领导,当然知道linux kernel支持哪些文件系统类型。在内核配置时,他那就有了一个表,这个表里每一项描述一个文件系统,当然不是什么职位、专业、学历、特长、兴趣之类的,而是文件系统类型的名称、以及指向要mount这个文件系统时的一个函数。当一个文件系统要被mount时,其mount函数就会被调用。该函数的任务是读取磁盘的超级块(super block),初始化它自己的内部变量,并返回给一个mount完成的文件系统描述符给VFS。该文件系统被mount之后,VFS的函数就可以使用这个描述符来访问该文件系统的所提供的服务了。


这里出现了一个新词,super block,是什么?我们知道,磁盘可以进行分区,在Windows下,你可以分成C、D、E、F...之类的,然后C盘放系统,D盘安装软件,E盘放游戏,F盘放学习资料,等等。每一个分区呢,都可以格式化为某种文件系统,比如C盘用NTFS,D盘用FAT32之类,当然在Windows下没法mount上ext的文件系统。在Linux下,这些分区mount上文件系统后,文件系统会把该分区的信息放在某个地方,这个地方就是super block。一个super block通常包含的信息包括:该分区有多大,以及该分区的名字等等。


好,解释完新名词,我们接着往下说。一个mount上的文件系统描述符包含几种数据:文件系统类型的信息、由该文件系统内核代码提供的函数指针、以及该文件系统代码所拥有的私有数据。而其中的函数指针则能够允许VFS来访问文件系统内部的操作。


VFS还使用两类其他类型的描述符:inode描述符和打开文件描述符。每个描述符包含了使用中的相关文件和一组由文件系统代码提供的操作信息。inode描述符包含了能够被用来在任何文件上操作的函数指针,而打开文件描述符则包含了只能对打开的文件进行操作的函数指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值