内存学习3 vma研究

Vulkan系列教程—VMA教程(一)—快速上手VMA Vulkan的内存分配器VMA系列教程 阅读详情

结合
linux内存管理之用户态内存管理
http://blog.youkuaiyun.com/shipinsky/article/details/78221511 一起学习


|   vma0   |         |      vma1       |          |   vma2     |
start0    end0     start1             end1       start2       end2

                                                                    addr在这里则返回NULL                                           
                               addr在这里的话返回vma1,addr越过end1就返回vma2了
                addr在这里的话也返回vma1,如果小于end0则返回vma0了

对于find_vma来说,
它查找线性区vm_end大于addr的第一个线性区的位置;
并返回这个线性区描述符的地址;
如果没有这样的线性区存在,则返回NULL。
注意该函数选择的线性区不一定包含addr,因为addr可能位于任何线性区之外。

struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr)

对于find_vma_prev来说,跟前者的差别在于pprev指向ppstruct

vm_area_struct *
find_vma_prev(struct mm_struct *mm, unsigned long addr,
struct vm_area_struct **pprev)

参考文章:
linux proc maps文件分析
http://blog.youkuaiyun.com/lijzheng/article/details/23618365

【linux3.10】从内存反向映射(reverse mapping)的角度来看vma的组织和使用 前言 准备 名词解释 虚拟内存vma   假如你来设计linux内核,你会如何管理有限的内存呢?最直观最简单的一种方法是,只要有人(进程)申请内存资源,你就直接给它。但这样有个问题,如果某些人(进程)申请了很多内存但却不使用,那这些内存岂不是被白白浪费掉了?于是你想了个办法,有人申请内存时,先拿小本本记录下来某人(进程)申请了多大内存,但先不给他使用,防止他拿了内存却不干事,等到他真的要用的时候,再根据本本上的记录来给他实际分配内存。这样,虚拟内存的概念就有了,你在小本本上的每一条记录,都是一块虚拟内存。 阅读详情

相关推荐

【Linux 内存管理】3 进程地址空间 - VMA操作函数

当一个进程要运行起来需要以下的内存结构:用户态: - 代码段、全局变量、BSS - 函数栈 - 堆空间 - 内存映射区内核态 - 内核代码、全局变量、BSS - 内核数据结构:task_struct - 内核栈、动态分配的内存Linux为虚拟内存不同的段,提供了不同的数据结构来描述,在Linux内核眼中所有的进程、线程都是task统一用task_struct描述。- task_struct 数据结构中的mm字段(mm_struct类型)描述了进程或线程用户态的内存信息。

u010971180的博客 749

好用的博客和网站

大学四年自学走来,这些私藏的【实用工具/学习网站】我贡献出来了 https://blog.youkuaiyun.com/qq382495414/article/details/103215443

shipinsky的博客 149

【linux3.10】从mmap的实现来看vma的组织和使用

准备 概念明晰 mmap是linux提供的一种共享内存的方案,用户可以把文件映射进内核,内核返回一个地址,用户对这个地址进行操作,就等于直接对文件进行读写,优点是省去了常规读写文件的把用户态数据拷贝进内核的开销,并且多个进程可以映射同一个文件,也是一种多进程通信的方案。关于共享内存,可以参阅宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇) vma,全称virtual_memory_area,直译过来就是虚拟内存区域。我们知道,linux是用虚拟内存管理进程的,进程申请内存时内核并不会直接分配物

sjc2870的博客 1535

malloc 初始化_内存管理(23)VMA和malloc

VMA操作应用进程申请内存空间通常使用malloc或者mmap来完成。我们知道在ARM32架构中0~3G的地址空间是分配给用户进程地址空间的。为了能在系统中(宏观上)同时运行多个进程,互不干扰操作系统想了一个办法,就是基于某一时刻只能运行一个进程的客观事实,系统为每个进程都准备了一套0~3G的虚拟地址空间,他们可以以各自特定的规则映射到物理空间。此刻哪儿个进程在运行就使用哪儿个进程的地址空间及映射...

weixin_39520880的博客 562

【linux3.10】内存反向映射中的anon_vma是per process的吗?

前言 在学习虚拟内存的反向映射部分时,遇到了struct anon_vma这个结构,在网上看了很多篇帖子,都说是per process的,但是自己阅读代码过程发现逻辑似乎并不是这样,一时就很奇怪,是帖子描述的有问题,还是我没有理解透彻?实践出真知,与其在代码上纠结半天,不如根据看代码运行结果,让我们进入内核这个黑箱子,来看看它究竟如何运作 工具准备 我使用的是bcc这个工具,使用起来非常简单,在centos下只要yum install bcc-tools -y,再加上可以使用python,就可以使用bcc这

sjc2870的博客 626

[deprecated]第三章:GEM分析:3.4 drm_vma_offset_manager VMA管理器

Linux DRM框架中的VMA管理机制通过drm_vma_offset_manager和drm_vma_offset_node实现显存的安全高效映射。前者管理线性地址空间分配,后者处理访问权限控制,采用读写锁保护并发安全。该机制支持多进程隔离、权限撤销和扩展,是现代GPU驱动mmap管理的核心基础设施。最佳实践包括及时分配/回收节点、权限管理及利用内置锁机制保障高并发安全。

图形/计算GPU的驱动与虚拟化技术分享园地 2705

Linux 内存管理窥探(15):虚拟内存 VMA 浅析

在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配...

StephenZhou 9592

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 644

内存映射与VMA

&#8194一般情况下,用户空间是不能也不应该直接访问设备的,但是,设备驱动程序中可以实现mmap()函数,这个函数使得用户空间能直接访问设备的物理地址。实际上,mmap()实现了这样的一个映射过程:他将用户空间的一段内存与设备内存关联,当用户访问用户空间的这段地址范围时,实际上会转化为对设备的访问。 &#8149这种能力对于显示适配器一类的设备非常有意义,如果用户空间可以直接通过...

进步源于记录,优秀来自分享 1634

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1608

告别硬编码!用Aviator 5.3.3实现动态规则引擎,Spring Boot项目实战教程

本文详细介绍了如何使用Aviator 5.3.3在Spring Boot项目中实现动态规则引擎,告别硬编码。通过Maven依赖集成、规则模型设计、规则执行引擎实现及电商促销系统实战案例,展示了Aviator在动态规则配置中的高效应用,提升业务灵活性和开发效率。

weixin_30329623的博客 446

vma的基本操作

在Linux内核中,这样的区域被称之为虚拟内存区域(virtual memory areas),简称vma。一个vma就是一块连续的线性地址空间的抽象,它拥有自身的权限(可读,可写,可执行等等) ,每一个虚拟内存区域都由一个相关的struct vm_area_struct结构来描述 struct vm_area_struct { struct mm_struct * vm_mm; /* 所

farmwang的专栏 6189

别再死记硬背了!用LTspice和Simulink仿真,5分钟搞懂巴特沃斯、切比雪夫、贝塞尔滤波器的区别

本文通过LTspice和Simulink仿真工具,直观对比了巴特沃斯、切比雪夫和贝塞尔滤波器的特性差异。从通带波纹、过渡带陡峭度到相位线性度,详细解析了三种经典滤波器的设计哲学与应用场景,帮助工程师和学生快速掌握滤波器选型技巧,提升电路设计效率。

weixin_33910191的博客 523

linux进程地址空间--vma的基本操作

在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配

vanbreaker的专栏 2万+

PX4无人机offboard开发之旅

(慢慢更)无人机OFFBOARD开发

InTereSTingHE的博客 1078

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1915

linux vma,内存管理 – Linux内核API find_vma

find_vma函数功能描述:find_vma( )函数根据一个属于某个进程的虚拟地址,找到其所属的进程虚拟区间,并返回相应的vma_area_struct结构体指针。find_vma文件包含#includefind_vma函数定义在内核源码中的位置:linux-3.19.3/mm/mmap.c函数定义格式:struct vm_area_struct * find_vma(struct mm_st...

weixin_39776298的博客 868

数字电路逻辑与设计实验三 译码器和数据选择器

1. 译码器功能测试 将 74LS139 按图 3.1 接线,按表 3.2 输入电平分别置位,填输出状态表。 2. 译码器转换 将双 2-4 线译码器转换为 3-8 线译码器。 (1)画出转换电路图。 (2)在实验箱上接线并验证设计是否正确。 (3)设计并填表写该 3-8 线译码器功能表,画出输入、输出波形。 3. 数据选择器的测试及应用 (1) 将双 4 选 1 数据选择器 74LS153 参照图 3.2 接线,测试其功能并填写功能表 3.3。 (2)将实验箱脉冲信号源中固定连续脉冲 4 个不

欢迎交流学习心得 3085

内存管理vma_内存管理(23)VMA和malloc

VMA操作应用进程申请内存空间通常使用malloc或者mmap来完成。我们知道在ARM32架构中0~3G的地址空间是分配给用户进程地址空间的。为了能在系统中(宏观上)同时运行多个进程,互不干扰操作系统想了一个办法,就是基于某一时刻只能运行一个进程的客观事实,系统为每个进程都准备了一套0~3G的虚拟地址空间,他们可以以各自特定的规则映射到物理空间。此刻哪儿个进程在运行就使用哪儿个进程的地址空间及映射...

weixin_28876287的博客 811

linux安装配置Mysql详细步骤

下载Mysql rpm包 官网下载:https://dev.mysql.com/downloads/mysql/ 如果你到了这里,本地应该有了如下四个rpm包: mysql-community-client-5.7.26-1.el6.x86_64.rpm mysql-community-common-5.7.26-1.el6.x86_64.rpm mysql-community-libs-5...

🏆 前端领域优质创作者 7万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

虚拟内存空间VMA

以下图为例,首先通过execve()执行elf,则该可执行文件的text段,data段,stack段就建立了,在进程运行过程中,可能需要借助ld.so加载动态链接库,比如最常用的libc,则libc.so的text段,data段也建立了,而后可能通过mmap()的匿名映射来实现与其他进程的共享内存,还有可能通过brk()来扩大heap段的大小。vma是通过一个双向链表(早期的内核实现是单向链表)串起来的,现存的vma按起始地址以递增次序被归入链表中,每个vma是这个链表里的一个节点。(都是虚拟地址哈)。

一墨的博客 756

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux VMA创建场景详解

本文总结了Linux内核中VMA(虚拟内存区域)的主要创建场景,包括常见系统调用和特殊场景。关键创建方式包括:1)mmap()进行匿名/文件/共享内存映射;2)malloc()大内存分配(>128KB)触发mmap;3)程序加载时自动创建各段VMA;4)mprotect()修改权限导致VMA分割;5)线程创建时生成栈VMA;6)设备文件映射创建设备VMA。其他操作如fork()复制VMA、mremap()调整VMA等也会影响VMA布局。这些机制共同构成了Linux灵活的内存管理基础。

图形/计算GPU的驱动与虚拟化技术分享园地 2231

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LMA与VMA总结

ldscriptldscipt是gcc下的链接脚本, 顾名思义, 就是告诉别人, 这些代码该怎么链接. 链接就是,将多个目标文件合并为一个目标文件,称作可执行文件。 每个目标文件都包含一连串的section,最常见,最基础的至少有: .text,代码段,就是CPU要运行的指令代码; .data,数据段,程序中包含的一些数据,放在这个段里; .bss,未初始化段,记录了程序里有哪些未初始化的

github_30220885的博客 9309

Linux内存管理 (7)VMA操作

https://www.cnblogs.com/arnoldlu/p/8329279.html 专题:Linux内存管理专题 关键词:VMA、vm_area_struct、查找/插入/合并VMA、红黑树。 用户进程可以拥有3GB大小的空间,远大于物理内存,那么这些用户进程的虚拟地址空间是如何管理的呢? malloc()或mmap()操作都会要求在虚拟地址空间中分配内存块,但这些内存在物理上往往都是...

hbcbgcx的博客 753

【C++ 内存申请】从 C++ new 到内核:虚拟内存、VMA 与内存泄漏的全链路解析

本文深入探讨了C++内存管理的底层机制,从三个视角解析了内存分配与释放的过程:1)C++运行库通过堆池管理虚拟内存,new/malloc通常不直接触发系统调用;2)操作系统通过VMA管理虚拟地址空间,采用按需分配策略;3)硬件MMU在首次访问时触发缺页中断完成物理内存分配。文章还分析了内存释放的并发安全问题,指出free不等于立即munmap,并解释了TLB刷新机制。最后区分了进程级和内核级内存泄漏的影响,强调进程退出后OS会完全回收其资源。通过多层次的对比,揭示了从编程语言到硬件的内存管理全貌。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1141

linux vma 是什么

可使用内存产生 1 用户空间动态申请内存时往往只是获得一块虚拟地址的使用权 2 而并没有将这块虚拟地址区域与实际的物理内存对应上, 3 只有当用户空间真正操作申请的内存时,才会触发一次缺页异常,这时内核才会分配实际的物理内存给用户空间。 用户进程的虚拟地址空间包含了若干区域 大致为 可执行文件的二进制代码,也就是程序的代码段 存储全局变量的数据段 用于保存局部变量和实现函数调用的栈 环境变量和命令行参数 程序使用的动态库的代码 用于映射文件内容的区域 虚拟内存区域(virtual memory

aningxiaoxixi的博客 1446
上一篇: linux模块编译需要指定私有的.h头文件目录方法
下一篇: likely和unlikely学习
天麓
博客等级 码龄22年 323粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值