地址Linux内存管理:Vmalloc

linux内存管理  时间:2021-01-15  阅读:()

Linux内存管理 Vmal loc

在前面我们讲解了kmal loc申请连续物理内存的操作 以及原理和基础cache.在内核中还有另外一个接口函数那就是vmal loc 申请一片连续的虚拟地址空间但不保证物理空间连续实际上我们会想到用户空间的mal loc mal loc它是标准的gl ibc封装的一个函数最终实现是通过系统调用brk和mmap来实现 以后在分析它的实现过程.它就是申请连续的虚拟空间但是不保证物理内存的连续 当然用户程序也不怎么关心这个问题只所以会关心物理内存的连续性一般是由于设备驱动的使用或者DMA.但是vmal loc申请效率比较低还会造成TLB抖动.一般内核里常用kmal loc.除非特殊需求比如要获取大块内存时实例就是当ko模块加载到内核运行时 即需要vmal loc.释放函数 vfree

参考内核3.8.13

这里是说32位的处理器 即最大寻址4G虚拟空间 当然现在已经64位比较普及了后续补上吧而虚拟地址到物理地址的转化往往需要硬件的支持才能提高效率 即MMU。

当然前提需要os先建立页表PT.在l inux内核这4G空间并不是完全给用户空间使用在高端0xC0000000 3G开始留给内核空间使用x86默认配置默认0-16MDMA 16M-896MNormal 896M-1G 128M作为高端内存分配区域 当然这个区域也是可是配置的. .kmal loc函数返回的是虚拟地址(线性地址). kmal loc特殊之处在于它分配的内存是物理上连续的,这对于要进行DMA的设备十分重要.而用vmal loc分配的内存只

是线性地址连续,物理地址不一定连续,不能直接用于DMA。我们可以参考一个图 它是arm32

架构的内核虚拟地址分配图下面我们就看看vmal loc函数

(mm/vmal loc.c)

这里我们只用关注size即可而vmal loc优先从高端内存分配并且可以睡眠.继续重点看一下__vmal loc_node:

因为这里提到了VMALLOC_START和它们究竟是什么值呢 这里看了arm32和mips32的根据架构虚拟地址分配不同而不同比如mips就比较特殊在arch/mips/include/asm/pgtable-32.h 中首先看mips虚拟地址分布图

从这个图里我们知道用户空间为2G0x0-0x7fff ffff ,dma或者normal 内存映射

在kseg0 512M /kseg1,而对于vmal loc申请的虚拟地址在kseg2中当然还有其他一些特殊的映射比如io等.

在arch/arm/include/asm/pgtable.h

在看一个图

我们知道物理内存简单分为三个区域 ZONE_NORMAL、 ZONE_DMA、ZONE_HIGHMEMvmal loc我们看到它是默认从ZONE_HIGMEM里申请但是这两个函数虚拟地址是保持一致的 即都占用了4G地址空间的内核虚拟地址.通过上面的图我们确定了虚拟地址从哪里分配以及对于的物理空间从哪里分配。

下面看看vmal loc核心实现

它的基本实现思路很简单 1.分配虚拟地址空间2.对虚拟地址空间进行页表映射

需要熟知下面两个结构体 structvmap_area vm_struct *area 

这里在说明一下vmal loc_init的初始化.

其实在讲slab机制的时候已经说过。

下面就说说__get_vm_area_node函数

这个函数核心就是al loc_vmap_area这个很有趣的之前我们讲到了vmal loc申请的虚拟地址范围而它只传递了size而已对于mips x86arm会有不同的虚拟空间.

既然我们已经开辟了虚拟地址空间那么还需要做的当然是和页面一一映射起来.看函数__vmal loc_area_node

而insert_vmal loc_vml ist很明显把vm_struct插入到vml ist。 那么就完成了整个过程没有想象的复杂 当然对内存有了更多的认识这里还需要说一下一般情况下有高端内存会比没有的好些防止了vmal loc申请的时候造成的TLB抖动等问题更少的破坏normal空间。

可以通过proc来查看vmal loc的一下信息

还有

青云互联:洛杉矶CN2弹性云限时七折,Cera机房三网CN2gia回程,13.3元/月起

青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...

香港服务器多少钱一个月?香港云服务器最便宜价格

香港服务器多少钱一个月?香港服务器租用配置价格一个月多少,现在很多中小型企业在建站时都会租用香港服务器,租用香港服务器可以使网站访问更流畅、稳定性更好,安全性会更高等等。香港服务器的租用和其他地区的服务器租用配置元素都是一样的,那么为什么香港服务器那么受欢迎呢,香港云服务器最便宜价格多少钱一个月呢?阿里云轻量应用服务器最便宜的是1核1G峰值带宽30Mbps,24元/月,288元/年。不过我们一般选...

RAKsmart新年钜惠:E3服务器秒杀$30/月起,新上韩国服务器,香港/日本/美国站群服务器,VPS月付$1.99起,GPU服务器,高防服务器_vps香港

RAKsmart发布了新年钜惠活动,即日起到2月28日,商家每天推出限量服务器秒杀,美国服务器每月30美元起,新上了韩国服务器、GPU服务器、香港/日本/美国常规+站群服务器、1-10Gbps不限流量大带宽服务器等大量库存;VPS主机全场提供7折优惠码,同时针对部分特惠套餐无码直购每月仅1.99美元,支持使用PayPal或者支付宝等方式付款,有中英文网页及客服支持。爆款秒杀10台/天可选精品网/大...

linux内存管理为你推荐
海外虚拟主机空间美国虚拟空间哪个好?全能虚拟主机免费的虚拟主机不可以修改网站?外国虚拟主机为什么淘宝上的 外国的虚拟主机 这么便宜?网站空间购买怎么购买一个网站空间及购买注意事项虚拟主机管理系统大家都用的是什么虚拟主机管理系统?分享一下成都虚拟主机一个虚拟主机最多支持几个子目录呢?一个百度推广账户是不是只能推广一个主域名下的网站?虚拟主机99idc网站后台织梦系统重装、空间转移、及上传技巧有哪些?二级域名什么是一级域名和二级域名以及三级域名域名交易域名可以过户吗?顶级域名什么是顶级域名
域名解析 已备案域名 万网域名注册 泛域名绑定 火山主机 香港主机 paypal认证 台湾谷歌网址 创梦 怎样建立邮箱 admit的用法 免费防火墙 腾讯实名认证中心 流量计费 爱奇艺会员免费试用 跟踪路由命令 512mb 服务器硬件配置 万网服务器 小夜博客 更多