Linux文系统原理.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux文系统原理

Linux文件系统原理 概述 要理解linux的文件系统,要从理解虚拟文件系统(VFS,Virtual Filesystem)开始。其结构可以用图表1来描述。 图表 SEQ 图表 \* ARABIC 1 虚拟文件系统 它到底是什么? 虚拟文件系统是Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口。它也提供了内核中的一个抽象功能,允许不同的文件系统共存。 工作方式概述 注册和安装一个文件系统 如果你想在内核中支持一种新的文件系统的话,你所需要做的仅仅是调用函数register_filesystem()。你向内核中传递一个描述文件系统实现 的结构(struct filesystem), 此结构将被加入到内核的支持文件系统表中去。你可以运行下面的命令: % cat /proc/filesystems 这样可以看到你的系统支持哪些文件系统。 内核模块必须提供两个用于加载和卸载时调用的接口,这两个接口由两个固定的宏引出,分别为module_init(),module_exit()。文件系统在作为模块被加载到内核时,调用register_filesystem(),把自己注册为一种文件系统。在模块被卸载时,调用unregister_filesystem()从内核中注消。以JFFS为例: // 定义一种文件系统jffs_fs_type,其名称为“JFFS” static DECLARE_FSTYPE_DEV(jffs_fs_type, jffs, jffs_read_super); static int __init init_jffs_fs(void) { printk(KERN_INFO JFFS version JFFS_VERSION_STRING , (C) 1999, 2000 Axis Communications AB\n); #ifdef CONFIG_JFFS_PROC_FS jffs_proc_root = proc_mkdir(jffs, proc_root_fs); #endif fm_cache = kmem_cache_create(jffs_fm, sizeof(struct jffs_fm), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); node_cache = kmem_cache_create(jffs_node,sizeof(struct jffs_node), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); // 注册文件系统 return register_filesystem(jffs_fs_type); } static void __exit exit_jffs_fs(void) { // 注消文件系统 unregister_filesystem(jffs_fs_type); kmem_cache_destroy(fm_cache); kmem_cache_destroy(node_cache); } // 引出模块的加载和卸载时调用的接口 module_init(init_jffs_fs) module_exit(exit_jffs_fs) 当一个mount请求出现时,VFS将会为特定的文件系统调用相应的方法。安装点的dentry结构将会被改为指向新文件系统的根i节点。 打开一个文件 VFS实现了open系统调用。路径参数被VFS用来在目录入口缓存(dentry cache or dcache)。这提供了一个将路径名转化为特定的dentry的一个快的查找机制。 一个单独的dentry通常包含一个指向i节点(inode)的指针。i节点存在于磁盘驱动器上,它可以是一个规则文件,目录,FIFO文 件,等等。Dentry存在于RAM中,并且永远不会被存到磁盘上:它们仅仅为了提高系统性能而存在。i节点存在于磁盘上,当需要时被拷入内存中,之后对 它的任何改变将被写回磁盘。存在于RAM中的i节点就是VFS的i节点,dentry所包含的指针指向的就是它。 dcache是你的整个文件空间的观察点。大多数情况下不可能有足够的RAM空间来放我们的文件空间的所有文件的目录入口缓存(dentry),所以我们的dcache会有缺少的项。为了将路径名转换为一个dentry,VFS不得不采取创建dentry的方式,并在创建dentry时将指针指向相应的i节点。这是通过对i节点的查找完成的。 为了查找一个文件的i节点(通常从磁盘上读),VFS需要调用该文件的父目录的lookup()方法,此方法是特定的文件系统所设置的。后面对此将会有更详尽的描述。 一旦VFS得到了所需要的

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档