
linux 内核内存管理
文章平均质量分 97
主要讲解linux内核中内存管理相关的内容
爱好学习的青年人
学习学习再学习
展开
-
页回收机制的原理
当我们申请分配页的时候,页分配器首先尝试使用低水线分配页。如果使用低水线分配失败,说明内存轻微不足,页分配器将会唤醒内存节点的页回收内核线程,异步回收页,然后尝试使用最低水线分配页。如果使用最低水线分配失败,说明内存严重不足,页分配器会直接回收。物理页根据是否有存储设备支持分为两类。(1)交换支持的页:没有存储设备支持的物理页,包括匿名页,以及tmpfs文件系统(内存中的文件系统)的文件页和进程在修改私有的文件映射时复制生成的匿名页。(2)存储设备支持的文件页。针对不同的物理页,采用不同的回收策略:(1)原创 2022-08-08 02:25:50 · 430 阅读 · 0 评论 -
反碎片化技术(外部碎片)的原理
如何避免Linux的物理内存碎片化内存碎片可分为内部碎片和外部碎片,对于内核来说,外部碎片是一个问题,内核有时候需要分配超过一页的物理内存,因为内核使用线性映射区域的虚拟地址,所以必须分配连续的物理页。为解决外部碎片问题,内核引入反碎片技术:a)2.6.33版本引入虚拟可移动区域;b)2.6.23版本引入成块回收(集中回收),从3.5版本废除,被内存碎片整理技术取代。c)2.6.24版本引入了根据可移动性分组的技术,把物理页分为不可移动页、可移动页和可回收页3种类型,伙伴分配器中已经介绍了这种反碎片技术。d原创 2022-08-06 23:07:35 · 1163 阅读 · 0 评论 -
页错误异常处理(page fault)的实现
在取指令或数据的时候,处理器的内存管理单元需要把虚拟地址转换成物理地址。如果虚拟页没有映射到物理页,或者没有访问权限,处理器将生成页错误异常(page fault)。原创 2022-08-06 07:55:30 · 3264 阅读 · 0 评论 -
页表缓存(TLB)和巨型页的实现
页表缓存(TLB)和巨型页的实现原创 2022-08-06 01:20:21 · 1238 阅读 · 0 评论 -
不连续页分配器 & 每处理器内存分配器 & 页表
当设备长时间运行后,内存碎片化,很难找到连续的物理页。在这种情况下,如果需要分配长度超过一页的内存块,可以使用不连续页分配器,分配虚拟地址连续但是物理地址不连续的内存块。在32位系统中,不连续页分配器还有一个好处:优先从高端内存区域分配页,保留稀缺的低端内存区域。vmalloc的优点:vmalloc的大块内存(大于等于1页)分配成功率一般高于kmalloc以及高阶buddy。避免外部碎片的问题,在机器长时间运行后,外部碎片严重,可能出现无法通过buddy或者kmalloc等分配大块连续的物理内存,这个时候原创 2022-08-05 17:05:24 · 757 阅读 · 0 评论 -
块分配器SLAB的内核实现
假设一个slab包含4个对象,使用1号对象存放空闲对象链表,初始状态如图3.28所示。这种方案会不会导致可以分配的对象减少一个呢?答案是不会,存放空闲对象链表的对象可以被分配。这种方案采用了巧妙的方法。(1)必须把存放空闲对象链表的对象索引放在空闲对象数组的最后面,保证这个对象是最后一个被分配出去的。(2)分配最后一个空闲对象,page->active增加到4,page->freelist变成空指针,所有对象被分配出去,已经不需要空闲对象链表,如图3.29所示。...原创 2022-08-04 23:53:13 · 702 阅读 · 0 评论 -
伙伴分配器的内核实现
内核中的伙伴分配器原创 2022-08-02 00:32:29 · 710 阅读 · 0 评论 -
mmap内核实现及物理内存组织结构
mmap内核实现及物理内存组织结构原创 2022-07-31 00:00:59 · 511 阅读 · 0 评论 -
内存映射原理及mmap
内存映射原理及mmap原创 2022-07-30 23:58:35 · 1647 阅读 · 0 评论 -
内存管理架构及虚拟地址空间布局
内存管理架构及虚拟地址空间布局原创 2022-07-30 23:56:38 · 874 阅读 · 0 评论