当前位置: 首页 > news >正文

linux kernel 6.x 用户态地址空间探究

最近做个项目需要研究用户态虚拟地址划分情况,找到多个app的共有未使用区间。偶然发现6.1.49和6.8的kernel用户态虚拟地址划分似乎有些不一样。下面使用数据进行分析。

大家都知道linux应用空间的地址划分是:

  • stack高地址开始,向下生长。
  • mmap区域/库加载区域/匿名映射区,介于stack和heap之间,中间隔多少?文档说是随机。
  • heap区,向上生长。
  • 代码段,BSS...

写了个测试程序然后每个程序运行100次来看看这些区域的起始地址在哪里,先是6.1.49kernel,文件系统用的是ubuntu22:

如上图所示:

stack: 起始地址最稳定,基本一条直线,同时也是最高地址。

mmap:地址在stack之下,但是不同程序的起始地址会有波动。

heap:在最下边,起始地址同样有波动。

地址空间波动:

mmap和heap的波动在1TB,mmap起始到heap起始有41TB的空间,中间有很大的冗余。

接下来看下6.8kernel,文件系统同样是ubuntu22:

明显可以看到在最新的6.8kernel中,mmap和heap区的起始地址波动变大:

波动均在16TB,并且是类似正弦曲线的波动。这也导致了heap和mmap中间的空白冗余变小。

总结:6.8的mmap和heap起始地址波动变大,所以如果要对多个app找到相同的未使用虚拟地址区间,6.8要比6.1.49更难,并且要分配不同的策略。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分类评价指标
  • 计算机网络 --- 计算机网络的分类
  • C语言---函数概念深入学习基础(3)
  • spring 事物使用场景说明
  • SpringBoot项目部署+属性配置方式+多环境开发
  • 59 - I. 滑动窗口的最大值
  • Windows自动化程序开发指南
  • 获取STM32 MCU的唯一ID
  • Unity动画系统详解
  • C、C++、JAVA 的区别与联系
  • 如何在本地部署大语言模型
  • Python爱心射线(完整代码)
  • 一文弄懂FLink状态及checkpoint源码
  • Liunx常用指令
  • TypeScript系列:初篇 - 类型系统
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 08.Android之View事件问题
  • es6要点
  • Mysql5.6主从复制
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Puppeteer:浏览器控制器
  • SpiderData 2019年2月23日 DApp数据排行榜
  • storm drpc实例
  • 飞驰在Mesos的涡轮引擎上
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 诡异!React stopPropagation失灵
  • 判断客户端类型,Android,iOS,PC
  • 浅谈Golang中select的用法
  • 主流的CSS水平和垂直居中技术大全
  • 最近的计划
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #pragma multi_compile #pragma shader_feature
  • (C++哈希表01)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Forward) Music Player: From UI Proposal to Code
  • (LeetCode C++)盛最多水的容器
  • (规划)24届春招和25届暑假实习路线准备规划
  • (回溯) LeetCode 131. 分割回文串
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十三)Flask之特殊装饰器详解
  • (转)Oracle存储过程编写经验和优化措施
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net Application的目录
  • .net core 6 集成和使用 mongodb
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET6实现破解Modbus poll点表配置文件
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • 。。。。。
  • @angular/cli项目构建--Dynamic.Form
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [012-1].第12节:Mysql的配置文件的使用
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试