Linux内存管理详解.ppt

上传人:京东小超市 文档编号:5801869 上传时间:2020-08-09 格式:PPT 页数:25 大小:417KB
返回 下载 相关 举报
Linux内存管理详解.ppt_第1页
第1页 / 共25页
Linux内存管理详解.ppt_第2页
第2页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Linux内存管理详解.ppt》由会员分享,可在线阅读,更多相关《Linux内存管理详解.ppt(25页珍藏版)》请在三一文库上搜索。

1、ConfidentialConfidential Linux Memory Manager Actions Microelectronics Co., Ltd. 拷 道 宅 呕 咸 绪 农 痕 走 震 脂 乓 殷 灵 孽 扑 萤 坛 狸 烩 滔 汽 懊 两 抓 殃 慑 潞 钨 搂 髓 昔 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Agenda Linux对外提供的内存管 理接口 linux 内存镜像图3 1 3 2 3 4 Linux 内存管 理算法介绍 3 3 Linux如何防止 内存碎片 勇 彼

2、 晶 复 栏 堤 谱 南 镰 贤 搽 旬 仁 另 嫉 谤 歪 厕 箭 睁 衍 灸 恰 滩 滁 仍 旨 血 捧 养 膳 映 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Linux Image v蓝色字体部分 v可用空间 钩 万 鸟 端 阁 缮 了 期 谭 塘 翘 浊 饮 慈 叠 核 桶 灯 获 硕 邪 建 势 栓 蕉 概 试 汝 讣 坝 顽 嫉 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Linux 如何防止内

3、存碎片 v内存碎片 内部碎片: 系统为了满足一小段内存区(连续)的需要,不 得不分配了一大区域连续内存给它,从而造成了 空间浪费 外部碎片 系统虽有足够的内存,但却是分散的碎片,无法 满足对大块“连续内存”的需求 缺 撕 集 津 葡 派 歹 翁 护 橱 象 喜 屏 俘 爷 忙 椰 挛 糖 纬 岳 驯 氨 示 挠 广 逝 厘 啃 厅 掷 捌 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Linux 如何防止内存碎片 vlinux减少外部碎片 伙伴系统(buddy算法)把内存块按大小分组管理 ,一定程度上减

4、轻了外部碎片的危害,因为页框 分 配不在盲目,而是按照大小依次有序进行,不 过伙伴关系只是减轻了外部碎片,但并未彻底消 除 ,但是伙伴系统同时又带来很多的内部碎片 vlinux减少外部碎片 SLAB,SLUB,SLOB分配器使得一个页面内众多 小块内存可独立被分配使用,避免了内部分片, 节约了空闲内存 滋 掐 阑 昔 惑 八 辟 纺 蓑 戮 噪 刻 替 吵 岁 刚 际 费 冗 臃 下 岭 葵 穗 嚼 华 毅 贸 传 会 氛 废 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Linux 如何防止内存碎片

5、linux 内存管理层次关系图1 仕 蒂 擂 危 椎 恼 举 虫 簿 衣 矛 僳 铸 佬 敬 捕 而 调 雪 具 坪 摧 辐 研 罢 审 祟 耙 窝 噬 构 书 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Linux 如何防止内存碎片 linux 内存管理层次 关系图2 芳 可 掳 喳 沾 系 哎 立 调 庙 潜 屏 召 犊 柳 辆 攘 卖 徘 瘪 蔬 胀 标 配 曹 豢 橡 贰 庭 尿 白 拧 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 Confident

6、ialConfidential Linux 内存管理算法介绍 v Buddy System算法原理 vBuddy System是一种经典的内存管理算法。在Unix和 Linux操作系统中都有用到。其作用是减少存储空间中的空 洞、减少碎片、增加利用率。避免外碎片的方法有两种: va.利用分页单元把一组非连续的空闲页框映射到连续的线性 地址区间。 vb.开发适当的技术来记录现存的空闲连续页框块的情况,以 尽量避免为满足对小块的请求而把大块的空闲块进行分割。 v基于下面三种原因,内核选择第二种避免方法: va.在某些情况下,连续的页框确实必要。 vb.即使连续页框的分配不是很必要,它在保持内核页表不

7、变 方面所起的作用也是不容忽视的。假如修改页表,则导致平 均访存次数增加,从而频繁刷新TLB。 vc.通过4M的页可以访问大块连续的物理内存,相对于4K页的 使用,TLB未命中率降低,加快平均访存速度。 瓮 绒 窃 骆 盂 饿 恭 划 彩 红 瑟 砰 端 缎 园 舀 跌 讨 夫 狄 对 怜 嘶 芜 吐 险 煎 具 疹 沫 葵 雁 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential v buddy算法将所有空闲页框分组为11个块链表,每个块链 表分别包含1,2,4,8,16,32,64,128,256,512,

8、1024个连续的 页框,每个块的第一个页框的物理地址是该块大小的整数 倍。如,大小为16个页框的块,其起始地址是16*212的 倍数。 v 例,假设要请求一个128个页框的块,算法先检查128个 页框的链表是否有空闲块,如果没有则查256个页框的链 表,有则将256个页框的块分裂两份,一份使用,一份插 入128个页框的链表。如果还没有,就查512个页框的链 表,有的话就分裂为 128,128,256,一个128使用,剩 余两个插入对应链表。如果在512还没查到,则返回出错 信号。 v 回收过程相反 唯 谓 句 执 煎 瑟 逝 丑 宋 卧 炯 稳 皮 陕 峻 荡 替 口 奶 唬 控 官 彻 霸

9、哇 瘤 讣 酵 剂 屠 弛 丫 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential 巧 亏 巴 径 峰 店 帛 骄 癌 孺 贫 扒 况 话 帖 针 西 斑 药 殴 旱 掏 嫡 腊 叭 箭 砖 蚊 窿 莫 凡 姆 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential 下 杯 哆 馒 屏 铝 囊 吼 铆 到 甥 限 遁 跪 剖 敞 掏 穗 呕 奥 帜 凛 汕 氧 袜 圈 背 穷 泼 盅 霖 粳 L i n u x 内 存 管 理

10、详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential v static inline struct page *alloc_pages(gfp_t gfp_mask, unsigned int order) v void _free_pages(struct page *page, unsigned int order) v 分配内存的单位为页面数,分配时候传入order值, order 为0 ,1,2,n v 分别分配1,2,4,2n个页面 v 伙伴系统(Buddy算法)分配的页面物理上是连续的,因此使用伙伴系统 分配的内存大小最大为210 *

11、 PAGESIZE = 4K * 4K = 4M v unsigned long _get_free_pages(gfp_t gfp_mask, unsigned int order) v void free_pages(unsigned long addr, unsigned int order) Buddy算法虽然能很好的减少外部碎片的产生,但是他却可用导致很多的 内部碎片 号 嗓 烟 即 搓 胶 暖 辩 侠 掉 癣 毙 玉 腐 夹 漳 熬 痉 享 埠 厩 展 铱 蝗 酱 泰 挛 桓 粳 饵 汞 盂 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 C

12、onfidentialConfidential slab/slob/slub的作用: 以页为最小单位分配内存对于内核管理系统物理内存 来说的确比较方便,但内核自身最常使用 的内存却往 往是很小(远远小于一页)的内存块比如存放文 件描述符、进程描述符、虚拟内存区域描述符等行为 所需的内存都不足一页。这些用来存放描述符的 内存 相比页面而言,就好比是面包屑与面包。一个整页中 可以聚集多个这种这些小块内存;而且这些小块内存 块也和面包屑一样频繁地生成/销毁。 为了满足内核对这种小内存块的需要,Linux系统采用 了一种被称为slab分配器的技术。Slab分配器的实现 相当复杂,但原理不难,其核心思想

13、就是“存储池”的 运用。内存片段(小块内存)被看作对象,当被使用完后 ,并不直接释放而是被缓存到“存储池”里,留做下 次 使用,这无疑避免了频繁创建与销毁对象所带来的额 外负载。 寅 旱 详 铸 获 娜 抽 芍 旗 蝎 橡 砸 矮 舆 狮 贝 趴 厉 钵 烧 规 匈 煮 纷 秘 朗 借 选 卞 高 跃 汲 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential slab 分配器的主要结构 丫 予 句 南 陡 鹰 本 飘 占 阀 守 诣 闷 永 饮 束 累 限 灼 歌 橱 憨 与 揍 鼎 挖 蹈 姆 连 狐 寻 却

14、 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential SLUB v2.6.22中的SLAB内存管理代码将被SLUB代替。 SLAB是经典的管理内核的内存的代码,但是slab维 护了大量的对象队列,这些队列虽然可以很快地被 分 配,但是过于复杂,而且维护所占用的空间会 随着系统节点的增加而急剧增长。 vslub就是作为slab的可替代选项出现的。slub是 一种不使用队列的分配器。slub取消了大量的队列 和相 关维护费用,获得了极大的性能和伸缩性提 高,并在总体上简化了slab结构,使用了基于每 CPU的缓存

15、,同时保留了slab的用户接口,而且 slub还提 供了强大的诊断和调试能力 曲 汕 坯 堆 橙 卒 介 意 腊 讽 攻 习 秤 格 蹈 征 沪 鸣 吨 贩 哟 配 洪 脏 鹤 凄 组 衷 锻 件 探 绢 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential slob slob是一个相对简单一些的分配器,主要使用在小型 的嵌入式系统。在选择了CONFIG_EMBEDDED后, 就可以选用CONFIG_SLOB选项,使用SLOB 分配器 中。 slob是一个经典的K vskbuff_head_cache = km

16、em_cache_create(“skbuff_head_cache“, sizeof(struct sk_buff), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL); v SLAB_HWCACHE_ALIGN:指定cache对齐(cache line对齐,如32字 节对齐). v SLAB_PANIC:指示创建失败时候,系统halt v 除非你觉得分配的内存结构体会频繁地生成/销毁,否则 请直接使用 kmalloc分配空间. v 杀 句 爷 牵 橡 跋 小 棋 唯 宙 沂 汛 瞧 麓 邀 民 越 瞄 课 漠 吴 隋 霸 雕 洋 瘫 斗 妆 疆 此 膛 俄 L

17、 i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential v除非你觉得分配的内存结构体会频繁地生成/销毁, 否则 请直接使用kmalloc分配空间. v例子: v分配: vskb = kmem_cache_alloc_node(cache, gfp_mask, node); v释放: v kmem_cache_free(skbuff_head_cache, skb); 蒋 切 年 净 琼 庄 瞳 伐 嘿 奎 壕 诉 冀 炼 茎 撩 朋 矿 哲 饯 娜 锹 侯 炼 支 斧 撞 疲 馒 反 粳 找 L i n u x 内

18、 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential vVmalloc: v不能在中断中使用: vvoid *vmalloc(unsigned long size) vvoid vfree(const void *addr) vKmalloc: vstatic inline void *kmalloc(size_t size, gfp_t flags) vvoid kfree(const void *objp) 扣 神 途 篡 毫 嘛 炭 牢 掖 杭 芽 究 剂 愧 镰 似 莽 棕 坟 棉 重 肄 湾 籍 配 疆 臆 甩 壕 排 冤

19、 番 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Actions Microelectronics Co., Ltd. 师 睫 疥 缓 腾 脊 裸 琴 惫 娩 显 篷 亏 倔 搏 腕 厘 邹 哭 湘 括 粮 忌 窃 往 捷 翘 将 耐 荷 廊 纲 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解 ConfidentialConfidential Actions Microelectronics Co., Ltd. 沂 溢 条 改 苗 汇 醇 批 筋 惮 潍 基 眶 扶 柯 健 翌 矿 丘 杨 望 恶 盾 状 湛 簇 邯 宴 饿 绢 碳 撰 L i n u x 内 存 管 理 详 解 L i n u x 内 存 管 理 详 解

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1