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

具体操作见

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

justhost:“第4次VPS测评”,8.3元/月,200M带宽,不限流量,KVM虚拟,4个俄罗斯机房应有适合你的

justhost.ru官方来消息说已经对网络进行了比较全面的优化,针对中国电信、联通、移动来说,4个机房总有一个适合中国用户,让站长进行一下测试,这不就有了这篇有关justhost的VPS的第四次测评。本帖主要关注的是网络,对于其他的参数一概不管! 官方网站:https://justhost.ru 最低配VPS:8.3元/月,KVM,512M内存,5G硬盘,200M带宽,不限流量 购买链接:...

桔子数据58元/月 ,Cera美西云服务器 2核4G 50G数据盘 500M带宽 1000G流量

桔子数据(徐州铭联信息科技有限公司)成立于2020年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。 公司一直秉承”以人为本、客户为尊、永...

DogYun(300元/月),韩国独立服务器,E5/SSD+NVMe

DogYun(中文名称狗云)新上了一批韩国自动化上架独立服务器,使用月减200元优惠码后仅需每月300元,双E5 CPU,SSD+NVMe高性能硬盘,支持安装Linux或者Windows操作系统,下单自动化上架。这是一家成立于2019年的国人主机商,提供VPS和独立服务器租用等产品,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等。下面分享这款自动化上架韩国独立服务器的配置和优惠码信息。...

linux内存管理为你推荐
网站虚拟主机做网站必须要有虚拟主机吗?主机租用租用主机和购买空间有什么区别?免费注册域名怎样免费注册域名呢 要详细的步骤哦全能虚拟主机时代互联的全能云虚拟主机怎么样,稳不稳定,速度怎么样的?虚拟主机代理紧急寻求好的虚拟主机代理商域名注册服务万网域名注册服务怎么样?ip代理地址ip代理是什么?网站空间域名什么是网站域名和网站空间免费域名空间哪个免费空间的域名最好香港虚拟空间香港虚拟主机空间哪家最好
域名服务器是什么 网易域名邮箱 photonvps 论坛空间 申请个人网页 亚洲小于500m 智能骨干网 数字域名 免费活动 爱奇艺vip免费试用7天 idc查询 服务器是干什么用的 百度云加速 华为云建站 iki lamp是什么意思 工信部icp备案查询 xuni 徐州电信 上海联通 更多