分配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问题。可以参考《深入理解计算机系统》。

具体操作见

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

Hostodo:$19.99/年KVM-1GB/12GB/4TB/拉斯维加斯

Hostodo发布了几款采用NVMe磁盘的促销套餐,从512MB内存起,最低年付14.99美元,基于KVM架构,开设在拉斯维加斯机房。这是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,产品性能一般,数据中心目前在拉斯维加斯和迈阿密,支持使用PayPal或者支付宝等付款方式。下面列出几款NVMe硬盘套餐配置信息。CPU:1core内存:512MB...

华纳云新人下单立减40元/香港云服务器月付60元起,香港双向CN2(GIA)

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供数据中心基础服务、互联网业务解决方案, 以及香港服务器租用、香港服务器托管、香港云服务器、美国云服务器,云计算、云安全技术研发等产品和服务。其中云服务器基于成熟的 ...

90IDC-香港云主机,美国服务器,日本KVM高性能云主机,创建高性能CLOUD只需60秒即可开通使用!

官方网站:点击访问90IDC官方网站优惠码:云八五折优惠劵:90IDCHK85,仅适用于香港CLOUD主机含特惠型。活动方案:年付特惠服务器:CPU均为Intel Xeon两颗,纯CN2永不混线,让您的网站更快一步。香港大浦CN2測速網址: http://194.105.63.191美国三网CN2測速網址: http://154.7.13.95香港购买地址:https://www.90idc.ne...

linux内存管理为你推荐
cm域名注册什么是CM域名?.cm .cm域名免费国外空间哪些免费的国外空间最好?速度快.功能大?国内免费空间国内哪里有免费的空间?空间域名空间和域名是什么?免费域名空间求1个免费空间送域名那种域名备案域名怎么进行备案?asp虚拟空间ASP空间是什么意思?网站空间购买怎么购买一个网站空间及购买注意事项最好的虚拟主机谁来推荐一下哪里的虚拟主机比较好中文域名中文域名有哪些?
域名申请 网站空间购买 cn域名价格 便宜vps 网易域名邮箱 金万维动态域名 免费cn域名 草根过期域名 highfrequency diahosting 56折 老左博客 淘宝双十一2018 linux空间 股票老左 网站卫士 国外免费asp空间 Updog web服务器搭建 双线asp空间 更多