linux文件系统

为了管理外存设备,计算机系统将外设抽象为可随机访问的块,块设备驱动程序负责由抽象到具体的转换。用户可直接在设备驱动程序这一层次使用块设备,不过这种使用方式很不方便,需要用户自己去负责外设的分配、回收、查找、定位等操作。因此,人们又把块设备抽象为文件系统,通过文件系统管理块设备中的数据。

随着操作系统的发展,人们创造出了许多种文件系统FATEXT2/PROCNTFSUFS等,不同文件系统中的文件无法共享,会导致系统的不兼容性。为了解决这一问题,又对真实的文件系统进行了抽象,提出VFS的概念,它把所有的I/O操作统一到了一个框架之下。因此,文件系统是现代操作系统的核心之一。

为了能够读取不同文件系统的文件、添加新的文件系统和网络上的计算机共享文件,人们提出了多种解决方案AT&T的文件系统开关、DECgnode体系结构、SUNvnode/vfs体系结构等。后来vnode/vfs成为事实上的标准。vnode/vfs的设计目标是:

同时支持多种文件系统类型,包括Unix系统和非Unix系统。

同一块磁盘包含多种文件系统,并提供统一接口。

为在网络上共享文件提供支持(访问远程节点上的文件系统和访问本地文件系统完全一样)。

允许用户开发自己的文件系统,并允许用户以模块的方式加载自己的文件系统。

真实的文件系统存在于设备中,而VFS只存在于内存中,系统启动时产生,系统关闭时注销。实现的主要思路是在内核中提供一个文件系统框架,包括接口函数集、管理用的数据结构和各种缓存机制。VFS在计算机系统中提供向上和向下两个方面的接口,向上由需要进行I/O操作的用户(包括应用程序和系统的其它模块)使用。如:对文件、设备、网络的打开、关闭、读、写等操作。向下为实现真实的文件系统提供依据,只要实现了VFS向下提供的这组接口,VFS就会认为它是一个真实的文件系统。为了实现上下层接口之间的转换,VFS必须维护许多数据结构。比如:描述文件系统信息的super_block结构、记录文件和目录信息的VFS inode结构、描述每个打开文件和和设备信息的file结构、描述文件组织关系的dentry结构、描述文件系统类型的file_system_type结构、记录已安装文件系统信息的vfsmount结构、记录设备驱动程序的chrdevsblkdevs数组等。这些结构的信息来源于真实的文件系统或设备驱动程序。

系统初始化时,VFS支持的每种文件系统和外部设备都需要向VFS注册,真实的文件系统在使用之前还需要安装。在使用文件、设备、目录之前需要获得它的VFS inode,然后再将其打开。在注册、安装、获得和打开的过程中,VFS建立起了上下层接口的映射关系,从而实现准确的操作转换。

由于缓存机制是全系统共享的,所以不适宜在真实的文件系统中实现,合理的设计应是让VFS统一管理所有的缓存。VFS管理的缓存包括目录项缓存、iNode缓存和buffer cache

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章