




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Internal Use Only Internal Use Only 内核管理页面使用了 2 个算法 伙伴算法和 slub 算法 伙伴算法以页为单位 管理内存 但在大多数情况下 程序需要的并不是一整页 而是几个 几十个字节 的小内存 于是需要另外一套系统来完成对小内存的管理 这就是 slub 系统 slub 系统运行在伙伴系统之上 为内核提供小内存管理的功能 slub 把内存分组管理 每个组分别包含 2 3 2 4 2 11 个字节 在 4K 页 大小的默认情况下 另外还有两个特殊的组 分别是 96B 和 192B 共 11 组 之 所以这样分配是因为如果申请 2 12B 大小的内存 就可以使用伙伴系统提供的接 口直接申请一个完整的页面即可 slub 就相当于零售商 它向伙伴系统 批发 内存 然后在零售出去 一下是整 个 slub 系统的框图 一切的一切源于 kmalloc caches 12 这个数组 该数组的定义如下 struct kmem cache kmalloc caches PAGE SHIFT cacheline aligned 每个数组元素对应一种大小的内存 可以把一个 kmem cache 结构体看做是 一个特定大小内存的零售商 整个 slub 系统中共有 12 个这样的零售商 每个 零 Internal Use Only Internal Use Only 售商 只 零售 特定大小的内存 例如 有的 零售商 只 零售 8Byte 大小的内存 有的只 零售 16Byte 大小的内存 每个零售商 kmem cache 有两个 部门 一个是 仓库 kmem cache node 一个 营业厅 kmem cache cpu 营业厅 里只保留一个 slab 只有在营业厅 kmem cache cpu 中没有空闲内存的情况下才会从仓库中换 出其他的 slab 所谓 slab 就是零售商 kmem cache 批发的连续的整页内存 零售商把这些整 页的内存分成许多小内存 然后分别 零售 出去 一个 slab 可能包含多个连续的 内存页 slab 的大小和零售商有关 相关数据结构 物理页按照对象 object 大小组织成单向链表 对象大小时候 objsize 指定的 例如 16 字节的对象大小 每个 object 就是 16 字节 每个 object 包含指向下一个 object 的指针 该指针的位置是每个 object 的起始地址 offset 每个 object 示意 图如下 void 指向的是下一个空闲的 object 的首地址 这样 object 就连成了一个单链表 向 slub 系统申请内存块 object 时 slub 系统把内存块当成 object 看待 1 slub 系统刚刚创建出来 这是第一次申请 此时 slub 系统刚建立起来 营业厅 kmem cache cpu 和仓库 kmem cache node 中没有任何可用的 slab 可以使用 如下图中 1 所示 Internal Use Only Internal Use Only 因此只能向伙伴系统申请空闲的内存页 并把这些页面分成很多个 object 取出其中的一个 object 标志为已被占用 并返回给用户 其余的 object 标 志为空闲并放在 kmem cache cpu 中保存 kmem cache cpu 的 freelist 变量中保存着下一个空闲 object 的地址 上图 2 表示申请一个新的 slab 并把第一个空闲的 object 返回给用户 freelist 指向下一个空闲的 object 2 slub 的 kmem cache cpu 中保存的 slab 上有空闲的 object 可以使用 这种情况是最简单的一种 直接把 kmem cache cpu 中保存的一个空闲 object 返回给用户 并把 freelist 指向下一个空闲的 object 3 slub 已经连续申请了很多页 现在 kmem cache cpu 中已经没有空闲的 object 了 但 kmem cache node 的 partial 中有空闲的 object 所以从 kmem cache node 的 partial 变量中获取有空闲 object 的 slab 并把一个 Internal Use Only Internal Use Only 空闲的 object 返回给用户 上图中 kmem cache cpu 中已经都被占用的 slab 放到仓库中 kmem cache node 中有两个双链表 partial 和 full 分别盛放不满的 slab slab 中有空闲的 object 和全满的 slab slab 中没有空闲的 object 然 后从 partial 中挑出一个不满的 slab 放到 kmem cache cpu 中 Internal Use Only Internal Use Only 上图中 kmem cache cpu 中中找出空闲的 object 返回给用户 4 slub 已经连续申请了很多页 现在 kmem cache cpu 中保存的物理页上已 经没有空闲的 object 可以使用了 而此时 kmem cache node 中没有空闲 的页面了 只能向内存管理器 伙伴算法 申请 slab 并把该 slab 初始化 返回第一个空闲的 object Internal Use Only Internal Use Only 上图表示 kmem cache node 中没有空闲的 object 可以使用 所以只能 重新申请一个 slab 把新申请的 slab 中的一个空闲 object 返回给用户使用 freelist 指向下一个 空闲 object Internal Use Only Internal Use Only 向 slub 系统释放内存块 object 时 如果 kmem cache cpu 中缓存的 slab 就是该 object 所在的 slab 则把该 object 放在空闲链表中即可 如果 kmem cache cpu 中缓存的 slab 不是该 object 所在的 slab 然后把该 object 释放到该 object 所在的 slab 中 在释放 object 的时候可以分为一下三种情况 1 object 在释放之前 slab 是 full 状态的时候 slab 中的 object 都是被占用的 释放该 object 后 这是该 slab 就是半满 partail 的状态了 这时需要 把该 slab 添加到 kmem cache node 中的 partial 链表中 Internal Use Only Internal Use Only 2 slab 是 partial 状态时 slab 中既有 object 被占用 又有空闲的 直接把 该 object 加入到该 slab 的空闲队列中即可 Internal Use Only Internal Use Only 3 该 object 在释放后 sla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 预应力工程施工进度优化方案
- 光山县2024-2025学年第一学期四年级语文期末学业展示考题及答案
- 农村供水提升工程施工方案
- 2025年机械专业考试试题及答案
- 租赁车间合同范本(含设备搬迁及运输服务)
- 2025年现代汉语下册试题及答案
- 污水处理厂扩建及再生水利用工程建设工程方案
- 房屋租赁合同签订租赁保证金缴纳及退还流程详解
- 零碳循环经济产业园建设项目建设工程方案
- 500MW光伏项目建筑工程方案
- 杭州2025网约车区域考试试题和答案
- 养生保健的四季保养总结
- 2025年甘肃省定西市辅警考试真题及答案
- 2025年下半年全国教师资格证考试中学《综合素质》真题及答案
- 脑梗死后遗症疾病课件
- 2025年乡镇综合执法队员职业素养要求及考试要点
- 弱视治疗设备(光源不直接照射眼底)注册审查指导原则2025
- 2025年村级后备干部考试题库(含答案)
- 2025-2026学年教科版(2024)小学体育与健康三年级全一册《情绪会调控》教学设计
- 银行情绪与压力管理课件
- 脚手架施工方案
评论
0/150
提交评论