linux从内核内存到malloc

本文详细探讨了Linux内核的内存管理,包括物理页分配的伙伴系统、slab技术、vmalloc/vfree、kmalloc/kfree、brk、mmap以及malloc的实现。特别讨论了ptmalloc、tcmalloc和jemalloc的优缺点,最后介绍了写时复制技术在进程 fork 中的应用。
摘要由CSDN通过智能技术生成

1、物理页分配和管理,页单位——伙伴系统,避免外部碎片

 

由于某些物理页位于内存中的特殊为值,因此所有物理页不能一视同仁,通过zone将物理页分区,跟据每个区域zone划分形成链表,2^n的页框构成free_area[MAX_ORDER](MAX_ORDER默认11)。内核中分配空闲页面的基本函数是get_free_page/get_free_pages,它们或是分配单页或是分配指定的页面(1、2、4、8…1024页)。

2、小于一页,slab技术——避免内部碎片

在伙伴分配器之上,进一步划分物理页面至小物理块。“存储池”核心思想,。内存片段(小块内存)被看作对象,当被使用完后,并不直接释放而是被缓存到“存储池”里,留做下次使用,这无疑避免了频繁创建与销毁对象所带来的额外负载。

Slab技术不但避免了内存内部分片(下文将解释)带来的不便(引入Slab分配器的主要目的是为了减少对伙伴系统分配算法的调用次数——频繁分配和回收必然会导致内存碎片——难以找到大块连续的可用内存),而且可以很好地利用硬件缓存提高访问速度。

slab中的对象分配和销毁使用kmem_cache_alloc与kmem_cache_free。

Linux 内核提供了 slab 层(slab 分配器),其扮演了通用数据结构缓存层的角色。slab 层把不同的对象划分为所谓高速缓存组,其中每个高速缓存组都存放不同类型的对象,每种对象类型对应一个高速缓存。例如,一个高速缓存用于存放进程描述符,而另一个高速缓存存放索引节点对象,然

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值