Linux中的vmalloc有什么作用
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容主要讲解"Linux中的vmalloc有什么作用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux中的vmalloc有什么作用"吧!走进vm
千家信息网最后更新 2025年12月03日Linux中的vmalloc有什么作用
本篇内容主要讲解"Linux中的vmalloc有什么作用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Linux中的vmalloc有什么作用"吧!
走进vmalloc
根据前面的系列文章,我们知道了buddy system是基于页框分配器,kmalloc是基于slab分配器,而且这些分配的地址都是物理内存连续的。但是随着碎片化的积累,连续物理内存的分配就会变得困难,对于那些非DMA访问,不一定非要连续物理内存的话完全可以像malloc那样,将不连续的物理内存页框映射到连续的虚拟地址空间中,这就是vmap的来源)(提供把离散的page映射到连续的虚拟地址空间),vmalloc的分配就是基于这个机制来实现的。

vmalloc最小分配一个page,并且分配到的页面不保证是连续的,因为vmalloc内部调用alloc_page多次分配单个页面。

vmalloc的区域就是在上图中VMALLOC_START - VMALLOC_END之间,可通过/proc/vmallocinfo查看。
数据结构
vmap_area 描述一段虚拟地址的区域,可以将struct vm_struct构成一个链表,维护多段映射。
struct vmap_area {
unsigned long va_start; //vmalloc申请虚拟地址返回的起始地址
unsigned long va_end; //vmalloc申请申请虚拟地址返回的结束地址
unsigned long flags;
//挂接到vmap_area_root红黑树
struct rb_node rb_node; /* address sorted rbtree */
//挂接到vmap_area_list链表
struct list_head list; /* address sorted list */
struct llist_node purge_list; /* "lazy purge" list */
//如果当前VA处于使用状态(即在vmap_area_root为根的红黑树中和vmap_area_list链表中),vm有效,指向用于管理虚拟地址和物理页之间的映射关系的描述符
struct vm_struct *vm;
struct rcu_head rcu_head;
};
vm_struct 管理虚拟地址和物理页之间的映射关系
struct vm_struct {
struct vm_struct *next; //指向下一个vm结构体
void *addr; //当前vmalloc区域的虚拟地址的起始地址
unsigned long size; //当前vmalloc区域的虚拟地址的大小
unsigned long flags;
//vamlloc分配获取的各个物理页面并是不连续的,每个物理页面用struct page描述,一个vm_struct对用到的管理所有物理页面的struct page构成一个数组,而pages就是指向这个数组的指针。
struct page **pages;
unsigned int nr_pages; //vmalloc映射的page数目
phys_addr_t phys_addr; //用来映射硬件设备的IO共享内存,其他情况下为0
const void *caller; //调用vmalloc函数的函数的地址
};
vmalloc
主要分以下三步:
从VMALLOC_START到VMALLOC_END查找空闲的虚拟地址空间(hole) 根据分配的size,调用alloc_page依次分配单个页面. 把分配的单个页面,映射到第一步中找到的连续的虚拟地址。把分配的单个页面,映射到第一步中找到的连续的虚拟地址。
到此,相信大家对"Linux中的vmalloc有什么作用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
地址
分配
物理
页面
内存
区域
单个
就是
作用
之间
指向
空间
管理
内容
函数
分配器
数组
结构
学习
起始
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
弘扬新风正气保护网络安全
安卓软件开发学习 知乎
关于网络安全该写的内容
宇视摄像头服务器地址如何添加
货拉拉系统软件开发贵用
中国互联网消费科技绝对天下第一
锐捷路由器变服务器
国家网络安全审查法实施时间
银行软件开发岗面经
kaluza软件开发
网络安全区是什么意思
个人计算机网络技术职业规划
再生邦网络技术
怎样把头像保存到服务器
济南网吧网络技术
玩具出口数据库
oracle数据库连接工具
惠州回收服务器免费上门评估
网络安全市场细分
软件开发一直在迷茫
和平精英的服务器账号怎么注册
服务器管理网不通
网络安全wifi密码
剑侠世界互通服务器
西安6年软件开发
网页登录数据库设计
自定义许可证服务器地址
网络安全推荐书籍
思科ftp服务器配置实验
北京pdu服务器专用电源批发商