内存碎片问题
Posted 刘伟伟920647590
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存碎片问题相关的知识,希望对你有一定的参考价值。
1. 如何查看Linux内存页的大小
[root@VM-32-4-centos ~]# getconf PAGE_SIZE 4096
2. Linux采用了伙伴算法来解决上述难题
内存组织:
把所有的空闲页按照大小分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页的页块。最大可以申请1024个连续页,对应4MB大小的连续内存。
内存申请:
假设要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。
内存释放:
页框块在释放时,内核会主动将两个互为伙伴的页框块合并为一个较大的页框块,成功后会试图寻找伙伴并合并为更大的内存块,直至块的大小超过上限或者没有伙伴为止。互为伙伴的两个内存块必须符合以下条件:
1、两个块具有相同的大小;
2、两个块的物理地址连续;
3、第一个快的物理地址是两个块大小的整数倍。
3. slab算法
以上是关于内存碎片问题的主要内容,如果未能解决你的问题,请参考以下文章