分配Linux 内存管理: Kmalloc

linux内存管理  时间:2021-01-15  阅读:()

Linux 内存管理 Kmal loc

Linux内存管理: Kmal loc

这里只说物理内存管理l inux内核的看了很多讲解的内存的东西但是自己总结的时候总感觉无从下手这里就从实际物理内存分配接口开始吧。

Kmal loc它分配连续的物理内存空间它不负责把分配的内存空间清

零它能分配多大的呢并且它只能分配ZONE_NORMAL的不能分配dma 和high里的也就是只分配低端内存.一般情况下内存被分为三个zoneNORMAL、 DMA、 HIGH.

这个函数是建立在slab分配器的基础上的,通过cache而cache有通过slab分配obj 。在开始分析kmal loc函数之前我们需要说明一下l inux内核物理内存的分配函数API  __get_free_pages它会调用al loc_pages它的特点是不能从HIGHMEM分配内存分配2的幂个连续物理页面。它有简化模式只分配一page __get_free_page,而get_zeroed_page接口分配的页面内容对应填充为0.从dma分配可以调用__get_dma_pages(它本质也是调用__get_free_pages

那么终极接口al loc_pages它可以从任何zone里申请内存 当然前提设置对应的flags.参考内核 l inux3.18.13参考书籍:《l inux内核设计与实现》

《l inux设备驱动程序》 《深入理解l inux设备驱动内核机制》

下面我们就说说kmal loc 关于分配时候的flags这里不讨论具体可以参考资料我们先看头文件#include而关于它的具体实现我们看slab.h

一般系统默认#include

这里可以补充下代码关于kmal loc_sizes.h

我们看到函数开头需要说明一下 __bui ltin_constant_p是编译器gcc 内置函数用于判断一个值是否为编译时常量如果是常数函数返回1 否则返回0。此内置函数的典型用法是在宏中用于手动编译时优化显然如果size为常数则用__kmal loc(size, flags);申请内存.

它查询需要分配的内存在哪个系统cache然后调用

我们看具体代码

它实际的分配是slab_al loc

它调用objp=__do_cache_al loc(cachep, flags);除了检查一些标志等继续调用

____cache_al loc(cachep, flags);

它是一个统一的接口 有检测numa和uma  l inux默认是uma除非指定了numa

这里我们假定是第一次使用分配内存那么根据在kmem_cache_init 中的mal loc_sizes[]的初始化在kmal loc的时候返回的kmal loc_cache指针指向的cache中用到这样个函数我们知道不论array被赋了什么值最后都要初始化avai l等值.

所以如果array不可用那么就会调用当然如果array可用那么直接返回申请的obj的内存指针.

由于第一次使用nodel ist上slab链表都为空所以must_grow

它调用cache_grow这个函数首先计算了slab着色处理。然后调用kmem_getpages申请page大小根据cache->gfporder它返回申请pages 的虚拟地址.

而关于slab着色跟硬件缓冲有关为了尽量避免缓存冲突不命中问题提高效率cache_l ine问题。可以参考《深入理解计算机系统》。

具体操作见

我们看看另外一个很重要的操作

LOCVPS(29.6元/月)KVM架构 香港/美国机房全场8折

LOCVPS商家我们还是比较熟悉的老牌的国内服务商,包括他们还有其他的产品品牌。这不看到商家的信息,有新增KVM架构轻量/迷你套餐,提供的机房包括香港云地和美国洛杉矶,适用全场8折优惠,月付29.6元起。LOCVPS是一家成立于2011年的稳定老牌国人商家,主要从事XEN、KVM架构的国外VPS销售,主推洛杉矶MC、洛杉矶C3、香港邦联、香港沙田电信、香港大埔、日本东京、日本大阪、新加坡等数据中心...

Sparkedhost($8/月)美国迈阿密AMD Ryzen高性能VPS;免费100G高防

sparkedhost怎么样?sparkedhost主机。Sparkedhost于2017年7月注册在美国康涅狄格州,2018年收购了ClynexHost,2019年8月从Taltum Solutions SL收购了The Beast Hosting,同年10月从Reilly Bauer收购了OptNode Hosting。sparkedhost当前的业务主要为:为游戏“我的世界”提供服务器、虚拟...

TmhHost香港三网CN2 GIA月付45元起,美国CN2 GIA高防VPS季付99元起

TmhHost是一家国内正规公司,具备ISP\ICP等资质,主营国内外云服务器及独立服务器租用业务,目前,商家新上香港三网CN2 GIA线路VPS及国内镇江BGP高防云主机,其中香港三网CN2 GIA线路最低每月45元起;同时对美国洛杉矶CN2 GIA线路高防及普通VPS进行优惠促销,优惠后美国洛杉矶Cera机房CN2 GIA线路高防VPS季付99元起。香港CN2 GIA安畅机房,三网回程CN2 ...

linux内存管理为你推荐
虚拟主机价格谁知道虚拟主机的价格?域名空间代理现在代理域名空间赚钱吗中文域名注册查询域名还分中文和英文的吗,在哪里可以查到中文域名到期了?com域名空间域名解析,我是一个新手站长,我买了一个空间跟一个COM域名,空间自带一个2级域名,我想把这个COM域名绑定到空间上,咋么办?急急急!求大神帮我,我创建一个游戏论坛,也查不到资料,可以给20元,我的手机13685455534,谢谢网站空间商网站空间商的选择??深圳网站空间怎样申请免费网站空间上海虚拟主机上海虚拟主机哪家好啊?东莞虚拟主机哪里的虚拟主机便宜 性价比高?台湾虚拟主机香港虚拟主机和台湾虚拟主机比较,哪个更好!?www二级域名www的域名是一级域名还是二级域名
www二级域名 紧急升级请记住新域名 台湾服务器租用 俄罗斯vps 双线vps kvmla 电影服务器 网站监控 typecho 镇江联通宽带 lol台服官网 网站卫士 域名和空间 佛山高防服务器 免费网络 ssl加速 国外代理服务器 深圳主机托管 mteam 什么是dns 更多