Linux 文件系统挂装与高层体系结构
构定义文件系统的名称、一组属性和两个超级块函数.也可以注销文件系统.
在注册新的文件系统时,会把这个文件系统和它的相关信息添加到 file_systems 列表中(见图 2 和 linux/include/linux/mount.h).这个列表定义可以支持的文件系统.在命令行上输入 cat /proc/filesystems,就可以查看这个列表. VFS 中维护的另一个结构是挂装的文件系统(见图 3).这个结构提供当前挂装的文件系统(见 linux/include/linux/fs.h).它链接下面讨论的超级块结构. 超级块 超级块结构表示一个文件系统.它包含管理文件系统所需的信息,包括文件系统名称(比如 ext2)、文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等).超级块通常存储在存储媒体上,但是如果超级块不存在,也可以实时创建它.可以在 ./linux/include/linux/fs.h 中找到超级块结构(见图 4). 超级块中的一个重要元素是超级块操作的定义.这个结构定义一组用来管理这个文件系统中的 inode 的函数.例如,可以用 alloc_inode 分配 inode,用 destroy_inode 删除 inode.可以用 read_inode 和 write_inode 读写 inode,用 sync_fs 执行文件系统同步.可以在 ./linux/include/linux/fs.h 中找到 super_operations 结构.每个文件系统提供自己的 inode 方法,这些方法实现操作并向 VFS 层提供通用的抽象. 拥有帝国一切,皆有可能。欢迎访问phome.net inode 和 dentry inode 表示文件系统中的一个对象,它具有惟一标识符.各个文件系统提供将文件名映射为惟一 inode 标识符和 inode 引用的方法.图 5 显示 inode 结构的一部分以及两个相关结构.请特别注意 inode_operations 和 file_operations.这些结构表示可以在这个 inode 上执行的操作.inode_operations 定义直接在 inode 上执行的操作,而 file_operations 定义与文件和目录相关的方法(标准系统调用). inode 和目录缓存分别保存最近使用的 inode 和 dentry.注意,对于 inode 缓存中的每个 inode,在目录缓存中都有一个对应的 dentry.可以在 ./linux/include/linux/fs.h 中找到 inode 和 dentry 结构. 缓冲区缓存 除了各个文件系统实现(可以在 ./linux/fs 中找到)之外,文件系统层的底部是缓冲区缓存.这个组件跟踪来自文件系统实现和物理设备(通过设备驱动程序)的读写请求.为了提高效率,Linux 对请求进行缓存,避免将所有请求发送到物理设备.缓存中缓存最近使用的缓冲区(页面),这些缓冲区可以快速提供给各个文件系统. 有趣的文件系统 本文没有讨论Linux中可用的具体文件系统,但是值得在这里稍微提一下.Linux 支持许多种文件系统,包括 MINIX、MS-DOS 和 ext2 等老式文件系统.Linux 还支持 ext3、JFS 和 ReiserFS 等新的日志型文件系统.另外,Linux 文件系统支持加密文件系统(比如 CFS)和虚拟文件系统(比如 /proc). 一种值得注意的文件系统是 Filesystem in Userspace(FUSE).这种文件系统可以将文件系统请求通过 VFS 发送回用户空间.,如果您有兴趣创建自己的文件系统,那么通过使用 FUSE 进行开发是一种不错的方法. 结束语 尽管文件系统的实现并不复杂,但它是可伸缩和可扩展的体系结构的好例子.文件系统体系结构已经发展了许多年,并成功地支持了许多不同类型的文件系统和许多目标存储设备类型.使用了基于插件的体系结构和多层的函数间接性,Linux 文件系统在近期的发展很值得关注. 拥有帝国一切,皆有可能。欢迎访问phome.net 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |