linux怎么管理空闲内存

linux怎么管理空闲内存,第1张

内存组织层次:页式管理—>(numa)—>node的zonelist—>32位DMA/NORMAL/HIGHMEM三个区,64位没有高端内存—>伙伴分配系统—>slab/slub/slob

2.创建进程时内存分配:实际上只分配task_struct和thread_info的内存,而且很可能是从slab缓存中分配的,当进程运行时由于缺页中断,才由内核层具体分配物理内存并与vm挂接

3.malloc是c runtime中的实现,是上层库的内存分配层,至于内核层的,可以看看__alloc_pages/alloc_pages/kmalloc(小内存直接slab,大内存还是alloc_pages)/vmalloc(alloc_page分配不连续的物理页,映射到连续的vm_struct中的pages指针数组)/vmap/map_vm_area等几个函数

Linux将物理内存按固定大小的页面(一般为4K)划分内存,在内核初始化时,会建立一个全局struct

page结构数组mem_map[

]。如系统中有76G物理内存,则物理内存页面数为76*1024*1024k/4K=

19922944个页面,mem_map[

]数组大小19922944,即为数组中每个元素和物理内存页面一一对应,整个数组就代表着系统中的全部物理页面。

在服务器中,存在NUMA架构(如Nehalem、Romly等),Linux将NUMA中内存访问速度一致(如按照内存通道划分)的部分称为一个节点(Node),用struct

pglist_data数据结构表示,通常使用时用它的typedef定义pg_data_t。系统中的每个结点都通过pgdat_list链表pg_data_t->node_next连接起来,该链接以NULL为结束标志。每个结点又进一步分为许多块,称为区域(zones)。区域表示内存中的一块范围。区域用struct

zone_struct数据结构表示,它的typedef定义为zone_t。更多详细的解答可以查看《Linux就该这么学》。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7286979.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存