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-16MDMA 16M-896MNormal 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虚拟地址分布图
从这个图里我们知道用户空间为2G0x0-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 x86arm会有不同的虚拟空间.
既然我们已经开辟了虚拟地址空间那么还需要做的当然是和页面一一映射起来.看函数__vmal loc_area_node
而insert_vmal loc_vml ist很明显把vm_struct插入到vml ist。 那么就完成了整个过程没有想象的复杂 当然对内存有了更多的认识这里还需要说一下一般情况下有高端内存会比没有的好些防止了vmal loc申请的时候造成的TLB抖动等问题更少的破坏normal空间。
可以通过proc来查看vmal loc的一下信息
还有
HostKvm又上新了,这次上架了2个线路产品:俄罗斯和香港高防VPS,其中俄罗斯经测试电信CN2线路,而香港高防VPS提供30Gbps攻击防御。HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。俄罗斯VPSCPU:1core内存:2G...
tmthosting怎么样?tmthosting家本站也分享过多次,之前也是不温不火的商家,加上商家的价格略贵,之到斯巴达商家出现,这个商家才被中国用户熟知,原因就是斯巴达家的机器是三网回程AS4837线路,而且也没有多余的加价,斯巴达家断货后,有朋友发现TMTHosting竟然也在同一机房,所以大家就都入手了TMTHosting家的机器。目前,TMTHosting商家放出了夏季优惠,针对VPS推...
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...