最近一直在学LINUX,但是从没有真正的理解文件系统含义和作用,最近整理了一些关于文件系统的资料:        

来自百度百科:

     VFS是一个异构文件系统之上的软件粘合层(注:有时也把VFS称为可堆叠的文件系统(Stackable Filesystem),因为VFS可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样,故而得名)。通过VFS,可以为访问文件系统的系统调用提供一个统一的抽象接口。  VFS最早由Sun公司提出以实现NFS(Network FileSystem,网络文件系统)。但是现在很多Unix系统都采用了VFS(包括Linux、FreeBSD、Solaris等)。  Linux下的VFS:  VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能进行。而在Linux下,通过VFS,一个抽象的通用访问接口屏蔽了底层文件系统和物理介质的差异性,每一种类型的文件系统代码都隐藏了实现的细节。因此,对于VFS层和内核的其它部分而言,每一种类型的文件系统看起来都是一样的,在Linux中,VFS采用的是面向对象的编程方法。


以下是来自csdn论坛:

编译进内核,就是直接在vmlinuz里面有代码了。在引导的时候就可以直接使用。

如果是模块的话,在引导的时候需要借助initrd那个虚拟文件进行预加载,然后给内核引导用。

同时模块还可以在内核已经运行了的情况下insmod和modprobe或者进行操作。就如同Windows中的驱动类似,但是免除了重启这个繁琐的步骤。


文件系统这个词理解比较混淆,其实应该分两个部分:一部分是软件,就是如何识别和操作特定的文件系统格式,这部分一般来说是在内核里面,比如你如果要支持FAT32,你就要把FAT32的支持编译到内核里面。

另外一部分是硬件或者说介质,即按照某个文件系统的格式把一些数据放到介质的某个区域,比如以存储在内存里面的cramfs的根文件系统为例,需要在内存的某个区域按照cramfs的格式把根文件系统放在那里,同时通过命令行或者其它方式告诉内核内存的那个区域存储有cramfs的数据,内核就会用cramfs对应的软件(就是第一部分)来解释和操作这些数据。

就整个嵌入式系统而言,可以分为三个部分1.uboot 2.kernel 3.文件系统。其中kernel中以VFS去支持各种文件系统,如yaffs,ext3,cramfs等等。所谓的yaffs,就个人理解为一种管理物理介质的系统,如NAND FLASH,而在内核中以VFS来屏蔽各种文件系统的接口不同,以VFS向kernel提供一个统一的接口。如打开一个文件时统一使用open,写时采用write,而不用去考虑是那种文件系统,也不用去考虑文件系统是如何将数据写入物理介质的。其中 kernel中的配置,只是让VFS支持这种接口。以上是个人理解,如有错误请各位指教。



Logo

更多推荐