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

具体操作见

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

CloudCone:$17.99/年KVM-1GB/50GB/1TB/洛杉矶MC机房

CloudCone在月初发了个邮件,表示上新了一个系列VPS主机,采用SSD缓存磁盘,支持下单购买额外的CPU、内存和硬盘资源,最低年付17.99美元起。CloudCone成立于2017年,提供VPS和独立服务器租用,深耕洛杉矶MC机房,最初提供按小时计费随时退回,给自己弄回一大堆中国不能访问的IP,现在已经取消了随时删除了,不过他的VPS主机价格不贵,支持购买额外IP,还支持购买高防IP。下面列...

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

【IT狗】在线ping,在线tcping,路由追踪

IT狗为用户提供 在线ping、在线tcping、在线路由追踪、域名被墙检测、域名被污染检测 等实用工具。【工具地址】https://www.itdog.cn/【工具特色】1、目前同类网站中,在线ping 仅支持1次或少量次数的测试,无法客观的展现目标服务器一段时间的网络状况,IT狗Ping工具可持续的进行一段时间的ping测试,并生成更为直观的网络质量柱状图,让用户更容易掌握服务器在各地区、各线...

linux内存管理为你推荐
asp主机空间有ASP虚拟主机空间,还需要另外买Access数据库么?网站空间申请企业网站空间申请有哪些流程啊。、、。北京网站空间一个小型企业网站空间和网站域名一年需要多少钱?独立ip虚拟主机独立ip的虚拟主机和vps的区别和优势??虚拟主机评测网求推荐一些适合个人博客网站的虚拟主机的服务商合肥虚拟主机哪里的虚拟主机空间实惠?山东虚拟主机能否在虚拟机与主机之间建立局域网,让主机与虚拟机同时上网?淘宝虚拟主机淘宝买万网虚拟主机怎么变别真假虚拟主机提供商虚拟主机必须与域名提供商在一家买吗?域名邮箱有谁知道域名邮箱是干什么的啊?有什么作用吗?
老域名 godaddy域名解析 贝锐花生壳域名 国外idc mediafire 好看的桌面背景大图 parseerror 网页背景图片 圣诞节促销 php免费空间 七夕快乐英文 免费申请个人网站 免费网页空间 789电视剧 shopex主机 华为云盘 重庆服务器 双十二促销 SmartAXMT800 酷锐 更多