[计算机]文件系统的缓存.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文档。上传文档
查看更多
[计算机]文件系统的缓存

文件系统的缓存管理 1 缓存的概念 1 2 dentry缓存和inode缓存 1 2.1 文件名查找 1 2.2 dentry缓存 2 2.3 dentry缓存的查找方式 2 2.4 dentry缓存的管理 2 2.5 超级块的dentry缓存 2 2.6 dentry的数据结构 2 2.7 inode缓存 3 3 Page和Buffer缓存 3 3.1 缓存的作用 3 3.2 缓存的种类 3 3.3 附属在页缓存上的块缓存 3 3.4 独立的块缓存 4 3.5 /proc/meminfo中Buffers和Cached的区别 4 4 数据回写 4 4.1 概念 4 4.2 周期性写回 5 4.3 完全同步 5 4.4 强制写回 5 4.5 当今最新进展 5 5 proc文件系统 5 5.1 概述 5 5.2 proc中文件的读写方法 6 6 通过proc文件系统管理缓存 6 7 示例 7 8 The Swap Cache 7 缓存的概念 缓存位于客户和服务中间,用来加速访问。 常见的缓存有CPU缓存、浏览器缓存、代理服务器缓存等。 dentry缓存和inode缓存 文件名查找 如果想打开/usr/local/bin/xxx,首先要知道xxx的inode,它保存在/usr/local/bin这个目录文件中,要打开/usr/local/bin这个文件,需要知道/usr/local/bin的inode,它的inode保存在/usr/local这个目录文件中,依次类推,直至查找“/”的inode。实际操作中,先打开磁盘中的/目录文件,查找/usr的inode,然后打开磁盘中的/usr文件,查找/usr/local的inode,依次如此这般。因此文件名查找需要反复查询inode表,并打开相应的目录文件读取inode。 dentry缓存 在打开文件时,将需要的目录项都复制一份到内存中,下次需要读取相同的inode时,通过dentry缓存直接找到对应的inode dentry缓存的查找方式 dentry的数据结构中有d_subdirs链表,链表元素可以连接到它的子目录和文件的dentry实例,搜索时沿着这个链表搜索。 dentry缓存的管理 内存中维护一个散列表(dentry_hashtable)包含了所有的dentry对象,还有一个LRU(最近最少使用,least recently used)链表,当某个dentry不再被使用时(使用计数d_count为0),放进这个列表。新放进LRU的dentry项置于链表的起始处,这表明越旧的dentry项就越靠后,在内核需要更多内存时,就会把一些比较旧的dentry释放掉。 LRU链表中的对象同时也处于散列表中,因此在需要时,也可通过散列表找到它,将其从LRU表中删除,同时将其使用计数加1。 超级块的dentry缓存 在超级块的内存结构中,包含一个指针s_root,它指向内存中一个dentry实例。因此所有文件系统的根目录的dentry都在文件系统挂载的同时就加载到内存中了,相应的inode缓存也必然已经加载到内存中。 dentry的数据结构 struct dentry { atomic_t d_count; unsigned int d_flags; /* protected by d_lock */ spinlock_t d_lock; /* per dentry lock */ int d_mounted; struct inode *d_inode; /* Where the name belongs to - NULL is * negative */ /* * The next three fields are touched by __d_lookup. Place them here * so they all fit in a cache line. */ struct hlist_node d_hash; /* lookup hash list */ struct dentry *d_parent; /* parent directory */ struct qstr d_name; struct list_head d_lru; /* LRU list */ /* * d_child and d_rcu can share memory */ union { struct list_head d_child; /* child of parent list */ struct rcu_head d_rcu; } d_u; struct list_head d_subdirs; /* our ch

文档评论(0)

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

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

1亿VIP精品文档

相关文档