vmalloc
vmalloc_init
for_each_possible_cpu(i) {
// vfree_deferred 类型变量的 链表 和 工作任务 free_work
// free_work用于vfree执行时延迟异步释放vmalloc内存
struct vfree_deferred *p;
...
// vmap_block_queue 类型变量的链表和锁
// vmap_block_queue 是 非连续内存块队列管理结构
struct vmap_block_queue *vbq;
...
}
// 将vmalloc_init之前的过程中分配的vmalloc区域插入红黑树vmap_area_root中
// 将挂接在vmlist链表的各项__insert_vmap_area()输入到非连续内存块的管理中
// vmlist的初始化是通过iotable_init初始化(arm32)
// 最终所有的vmalloc的eara都会挂到vmap_area_list链表中
for (tmp = vmlist; tmp; tmp = tmp->next) {
struct vmap_area *va = kmem_cache_zalloc(vmap_area_cachep, GFP_NOWAIT);
va->vm = tmp;
...
insert_vmap_area(va, &vmap_area_root, &vmap_area_list);
}
vmap_init_free_space();
vmap_initialized = true;
vmap_area 结构体 中 有两个成员
1. list , 用来挂 在 vmap_area_list
2. rb_node , 用来挂 在 vmap_area_root
其他成员
va_start vmalloc区的虚拟区间起始地址
va_end vmalloc区的虚拟区间结束地址
flags 类型标识
rb_node 插入红黑树vmap_area_root的节点
list 用于加入链表vmap_area_list的节点
purge_list 用于加入到全局链表vmap_purge_list中
vm 指向对应的vm_struct
上一篇:OK6410A 开发板 (八) 38 linux-5.11 OK6410A 为什么需要这么多内存管理器
下一篇:OK6410A 开发板 (八) 36 linux-5.11 OK6410A 内存管理第四阶段
推荐阅读最新更新时间:2024-11-05 17:00
设计资源 培训 开发板 精华推荐
- DEMO9S12NE64E,用于 MC9S12NE64 微控制器系列应用的演示板
- LTC2754-16 演示板、16 位、四路串行、SoftSpan、1LSB INL Iout DAC
- NSV45020AT1G 恒流 LED 灯串的典型应用
- L78L15C正压稳压器可调输出稳压器的典型应用
- 具有备用电池的 LTC3633AEFE-2 2.5V 稳压器的典型应用电路
- 使用 TC7117 模数转换器的典型应用
- 0.8V DC转DC硬盘单路输出电源
- MIC2778 蜂窝电话电池监控器的典型应用
- 51单片机脱机下载和烧录器
- 具有 250:1 PWM 调光和 LED 开路保护的 LT3755EMSE-2 21W 降压-升压模式的典型应用电路