页缓存、块缓存的结构__徐波摘要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
页缓存、块缓存的结构__徐波摘要

页缓存、块缓存的结构 P762~P766 徐波 Embedded System Lab 2014 页缓存、块缓存的结构 Linux运用一个功能广泛的缓冲和缓存框架来提高系统的速度 内核为块设备提供了两种通用的缓存方案: 1) 页缓存,针对以页为单位的所有操作,并考虑了特定体系结构上的页长度。一个主要的例子是内存映射技术。因为其他类型的文件访问也是基于内核中的这一技术实现的。所以页缓存实际上负责了块设备的大部分缓存工作。 2) 块缓存,以块为操作单位。在进行I/O操作时,存取的单位是设备的各个块,而不是整个内存页。尽管页长度对所有文件系统都是相同的,但块长度取决于特定的文件系统或其设置。因而,块缓存必须能够处理不同长度的块。 页缓存的结构 机制:若在缓存命中,这可以快速操作;否者从底层块设备中读取所需的页,页被读入内存后,页将被插入缓存中,然后进行后续操作。 内核与缓存交互:在不同位置加入flags linux采用基数树来管理页缓存中包含的页 页缓存的结构 顶点数据结构 struct radix_tree_root { unsigned int height; gfp_t gfp_mask; //构建树的数据结构实例的内存域分配信息 struct radix_tree_node *rnode; //指向下一个节点 }; 页缓存的结构 struct radix_tree_node { unsigned int height; /* Height from the bottom */ unsigned int count; //数组中已经占用的数目 struct rcu_head rcu_head; //用于RCU机制对基数树进行无锁查询 void *slots[RADIX_TREE_MAP_SIZE]; //指向其他结点或元素 unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS]; }; //tag标志, RCU机制:read-copy-update,第五章P284 内核radix-tree.c 页缓存的结构 脏数据: 定义:页内容与后备存储器中的数据不同 机制:某个节点标记成脏数据,其父节点也会标记,往上类推; 内核从上往下判断,不用遍历所有的,加速 回写: 几个内核守护进程在后台运行,称为pdflush,两种运行模式: 周期性激活,不考虑页缓存当前情况,扫描缓存中的页,将超出一定时间没有与底层块设备同步的页写回。 如果缓存中修改的项短时间内被修改很多,则激活pdflush 系统调用,用户或程序通知内核写回所有未同步数据 页缓存的结构 节省时间:修改文件或其他按页缓存的对象时,只会修改页的一部分,而非全部。内存将缓存中的页划分为较小的单位,成为缓冲区,同步缓冲区节省时间。 页缓存的结构 “地址空间”抽象:内层中的页与特定的块设备关联 获得缓存页的列表:每个地址空间都有一个宿主,一般为一个文件的inode,因为现有的inode都关联到超级块,所以内核只要扫描所有超级块并跟随相关的inode,就可以获得缓存页的列表 块缓存的结构 来自于底层块设备的块缓存在内存的缓冲区中,可以加速读写操作。 与内存页相比,块不仅比较小(大多数情况下),而且长度可变的,依赖于使用的块设备(或文件系统) 缓存主要是页:随着日渐倾向于使用基于页操作实现的通用文件存取方法,块缓存作为中枢系统缓存的重要性已经逐渐失去。主要的缓存任务现在由页缓存承担。另外,基于块的I/O的标准数据结构,现在已经不再是缓冲区,而是struct bio结构。 缓冲区用作小型的数据传输,一般设计的数据量是与块长度可比拟的。文件系统在处理元数据时,通常会使用此类方法。而裸数据的传输则按页进行,而缓冲区的实现也基于也缓存。 块缓存的结构 块缓存在结构上由两个部分组成: 1) 缓冲头(buffer head)包含了与缓冲区状态相关的所有管理数据,包括快号、块长度、访问计数器等。这些数据不是直接存储在缓冲头之后,而是存储在物理内存的一个独立区域中,由缓冲头结构中的一个对应的指针表示。 2) 有用数据保存在专门分配的页中,这些页也可能同时存在于页缓存中。 块缓存的结构 struct buffer_head { unsigned long b_state; /* buffer state bitmap (see above) 后面数据结构*/ struct buffer_head *b_this_page;

文档评论(0)

586334000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档