文件系统系列学习笔记(1)
2012-09-20 18:13
381 查看
话说做文件系统也半年多了,没啥总结、没啥积累,遇到问题还是临时看代码。写这个系列的目的有二:
1 对文件系统形成系统化的认识。
2 督促自己好好抓住业余时间好好学习。
3 本地文件系统之后就是分布式系统(hadoop+分布式计算),这是后话。。。
注:以Linux文件系统作为基点,“深为目,情为本”。 :-)
废话少说,开始了。。。
一 VFS
为了支持种类繁多的不同种文件系统,Linux提出了VFS虚拟文件系统的概念。虚拟文件系统说的直接点就是Linux为了屏蔽各种文件系统的差异性提供的一套抽象的通用数据结构和相应的操作函数,所谓实现依赖于抽象嘛(俺的理解),其他不同种类的文件系统只需要实现VFS提供的操作函数和数据结构及可连接入操作系统文件系统大家庭。可以引用一个<<深入理解>>的例子:
考虑下面使用场景:cp /floop/test /temp/test
其中/floop是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统的目录,如图所示:
![](http://pic002.cnblogs.com/images/2012/433109/2012091722455379.png)
整如你所见,cp应用程序直接与VFS进行交互,它不必关心所交互的具体文件系统类型。
二 VFS所支持的文件系统类型大致分为三类:
1 磁盘文件系统
- Linux使用的如ext2、ext3;
- unix家族的文件系统如ufs、minix;
- 微软的文件系统如MS-DOS、VFAT、NTFS
- ISO9660 CD_ROM、DVD文件系统
- 其他如HPFS(IBM)、HFS(apple)、AFFS、ADFS
2 网络文件系统
- NFS、CODA、AFS、CIFS。
3 特殊文件系统
- 如linux中的/proc
三 通用文件系统模型
VFS的主题思想是引入一个通用的文件系统模型,这个模型能够表示所有支持的文件系统。要实现每个具体的文件系统必须将将其组织结构转换为虚拟文件系统的通用文件模型。例如在通用文件系统模型中,每个目录被看做是一个文件,可以包括若干个文件和其他的子目录。但是某些磁盘文件系统利用文件的分配表存放每个文件在目录树中的位置,在这些文件系统中存放的是目录不是文件。通用文件系统模型定义了一个约束,这个约束包括一些数据结构和操作接口,具体的文件系统只需支持这些约束就可以挂入系统的文件系统。
通用文件系统模型定义了一些数据结构机器对应的操作,最重要的是四大对象:索引节点对象(inode)、目录项对象(dentry)、超级块对象、文件对象。
下篇文章重点介绍这四大对象,及他们之间的关系。
1 对文件系统形成系统化的认识。
2 督促自己好好抓住业余时间好好学习。
3 本地文件系统之后就是分布式系统(hadoop+分布式计算),这是后话。。。
注:以Linux文件系统作为基点,“深为目,情为本”。 :-)
废话少说,开始了。。。
一 VFS
为了支持种类繁多的不同种文件系统,Linux提出了VFS虚拟文件系统的概念。虚拟文件系统说的直接点就是Linux为了屏蔽各种文件系统的差异性提供的一套抽象的通用数据结构和相应的操作函数,所谓实现依赖于抽象嘛(俺的理解),其他不同种类的文件系统只需要实现VFS提供的操作函数和数据结构及可连接入操作系统文件系统大家庭。可以引用一个<<深入理解>>的例子:
考虑下面使用场景:cp /floop/test /temp/test
其中/floop是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统的目录,如图所示:
![](http://pic002.cnblogs.com/images/2012/433109/2012091722455379.png)
inf = open("/tmp/test", O_WRONLY|O_CREAT|O_TRUNC, 0600); outf = open("/floppy/test", O_RDONLY,0); do { i = read(inf, buf, 4096); write(outf, buf, i); }while(i); close(inf); close(outf);
整如你所见,cp应用程序直接与VFS进行交互,它不必关心所交互的具体文件系统类型。
二 VFS所支持的文件系统类型大致分为三类:
1 磁盘文件系统
- Linux使用的如ext2、ext3;
- unix家族的文件系统如ufs、minix;
- 微软的文件系统如MS-DOS、VFAT、NTFS
- ISO9660 CD_ROM、DVD文件系统
- 其他如HPFS(IBM)、HFS(apple)、AFFS、ADFS
2 网络文件系统
- NFS、CODA、AFS、CIFS。
3 特殊文件系统
- 如linux中的/proc
三 通用文件系统模型
VFS的主题思想是引入一个通用的文件系统模型,这个模型能够表示所有支持的文件系统。要实现每个具体的文件系统必须将将其组织结构转换为虚拟文件系统的通用文件模型。例如在通用文件系统模型中,每个目录被看做是一个文件,可以包括若干个文件和其他的子目录。但是某些磁盘文件系统利用文件的分配表存放每个文件在目录树中的位置,在这些文件系统中存放的是目录不是文件。通用文件系统模型定义了一个约束,这个约束包括一些数据结构和操作接口,具体的文件系统只需支持这些约束就可以挂入系统的文件系统。
通用文件系统模型定义了一些数据结构机器对应的操作,最重要的是四大对象:索引节点对象(inode)、目录项对象(dentry)、超级块对象、文件对象。
下篇文章重点介绍这四大对象,及他们之间的关系。
相关文章推荐
- 文件系统系列学习笔记(4)
- 文件系统系列学习笔记 - inode/dentry/file/super(2)
- hadoop2.7.2学习笔记05-hadoop文件系统API定义-简介
- MongoDB 学习笔记(五):固定集合、GridFS文件系统与服务器端脚本
- Linux 学习笔记 -- 第二部分 Linux 文件、目录与磁盘格式 -- 第8章 Linux 磁盘与文件系统管理
- Ubuntu 操作系统学习笔记之文件系统
- Linux 学习笔记(五)文件系统
- Linux学习笔记3_文件系统常用命令
- Linux FHS标准文件系统学习笔记
- Linux 学习笔记_5_Linux引导流程解析_2_inittab文件剖析及系统启动流程分析
- C#学习笔记——文件系统数据
- Linux初级学习之不同系统之间的文件传输 第十二章学习笔记
- 磁盘及文件系统管理_学习笔记
- Linux/Unix C编程之系统函数文件读写 学习笔记
- ubuntu之shell编程学习笔记6——文件和文件系统
- 操作系统学习笔记:文件系统接口
- [文件系统]文件系统学习笔记(五)---mount系统调用(1)
- 大数据学习系列(1)-- linux之文件系统结构介绍
- 飞思卡尔开发板学习笔记——构建根文件系统
- Node.js学习笔记7-文件系统