Toggle navigation
首页
问答
文章
话题
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
slab内存分配器
发布于 2008-06-20 16:43:10 浏览:4335
slab内存分配器[DragonFlyBSD版本] DragonFlyBSD的内核内存分配采用了slab分配器,相应的代码文件是kern_slaballoc.c和slaballoc.h。 1、slab内存分配器把内存划分为小内存分配和大内存分配,两者的策略并不相同。 2、代码中的slab结构 根据系统总的内存大小,选择合适的zone大小(每个zone的大小都是相同的,一般为2^n个page) 对于一个特定的zone,在上面分配的chunk大小是固定的(即zone中,除了zone本身结构体中占用的大小外,剩余的内存被划分为相同大小的chunk,chunk即通常意义上分配出去的内存块) 而不同chunk大小的zone放在一个zone数组链表中管理,zone数组一般是128, 256, 512, 1024, 2048...chunk大小的zone方式排列。 zone结构中包括:chunk size,freed chunk,UIndex及UEndIndex(初始时UIndex指向第一个chunk), UIndexMax等 3、小内存分配: 当需要分配一块大小为size的小内存时, 分配器先根据size获得是哪种zone,然后取zone数组链表的表头,如果存在 先检查是否有freed chunk,如果有分配之,否则分配UIndex,并把UIndex指向下一个项(如果UIndex到达UEndIndex,那么表示这个zone中的chunk已经分配完毕,需要把这个zone从zone数组链表中移除) 如果zone数组链表表头是空,那么需要新分配一块zone空间(先在系统的freed zones链表中查找是否有空闲zone,否则采用大内存分配策略),把它的第一块chunk分配出去并把新分配的zone放到zone数组链表中维护。 4、小内存释放 根据是否小内存地址获得相应zone的地址(因为zone的分配是zone对齐的),把小内存放到freed chunk链表中,如果freed chunk链表数目达到这个zone中最大chunk数目时(意味着这个zone是全部空闲的),把这个zone放到freed zones链表中。如果freed zones链表的数目超过一定数值时(例如2),把多余的空闲zone给释放掉(通过大内存释放方式) 5、大内存分配释放策略 直接按照page的整数倍进行分配释放; 大内存分配、释放需要考虑的一个问题:当需要释放一块内存时,如何知道这块内存是大内存还是小内存? 方法:用一个kmemusage数组记录每个page的使用方式(如果1GB内存,需要1M空间记录其状态)。大内存分配时,需要在kmemusage相应项中记录使用了多少个page数,释放时再把这个page数清为零。 6、多核的考虑 zone列表在每个CPU的存放一份,释放时,如果释放了另一CPU管理的chunk,可以通过发消息的形式给此CPU然后由此CPU释放掉。 7、slab算法的体现 slab分配的object即chunk,释放后将先保存在相应zone的freed chunk列表中,这样就实现了object的cache。 但对于在对象分配时进行对象自动构造,此功能似乎不在DragonFlyBSD代码中。
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
4.3k
关于作者
bernard
This guy hasn't written anything yet
提问
414
回答
5811
被采纳
49
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]The RFB Protocol中文版
7
[GUI相关]嵌入式系统中文输入法的设计
8
20081101 RT-Thread开发者聚会总结
9
嵌入式系统基础
10
linux2.4.19在at91rm9200 上的寄存器设置
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
五分钟玩转RT-Thread新社区
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
国产MCU移植系列教程汇总,欢迎查看!
最新文章
1
RT-Thread Studio V2.2.4 Release Note
2
RT-Thread studio里面的PWM驱动提示有误(浪费几个小时)
3
关于时间片调度算法issue的分析与解决
4
【社区福利】6月积分兑好礼(机械键盘、开发板、小风扇...)
5
[ART smart 开发板] SDL测试
热门标签
RT-Thread Studio
串口
LWIP
AT
FinSH
Env
ART-Pi
SPI
Bootloader
USB
Hardfault
CAN
文件系统
studio
DMA
RT-Thread
线程
Nano
stm32
ota
MQTT
SCons
rtthread
ESP8266
freemodbus
软件包
I2C
UART
flash
cubemx
RTC
定时器
W5500
FAL
BSP
rt-smart
rtt
PWM
AB32VG1
ADC
编译报错
msh
socket
SDIO
C++
dfs
at_device
SFUD
MicroPython
RT-Studio
本月问答贡献
小小李sunny
41
个答案
10
次被采纳
出出啊
34
个答案
10
次被采纳
红枫
25
个答案
7
次被采纳
crystal266
23
个答案
6
次被采纳
lchnu
13
个答案
6
次被采纳
本月文章贡献
张世争
11
篇文章
31
次点赞
吉利咕噜2022
7
篇文章
15
次点赞
xusiwei1236
3
篇文章
11
次点赞
crystal266
3
篇文章
8
次点赞
Liutao
3
篇文章
4
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部