进程虚拟空间分布中特殊的VMA

64/32位Linux系统的差异(地址空间布局,系统调用)对比分析 映射地址:可以看到,对应的地址0x7fd9b8c00000是PSE页,映射了10M,是PMD级的大页映射,也就是2M页面的映射。连续影射了5个PMD大页。这些大页的分配是在mmap后,执行memset(addr, 0x5a, ...)时通过page fault流程进行分配的,对应执行hugetlb_fault的执行流程。 阅读详情

进程虚拟地址空间分布中,有几个特殊的区域,它们并不会映射到可执行文件内,分别为:堆、栈、vdso

1.堆

堆是由系统库进行管理的,我们通过C语言的 malloc() 内存分配函数分配到的空间就是在堆中分配的;

2.栈

也称堆栈,每个线程都有属于自己的堆栈。

3.vdso

事实上,“vdso”的地址已经位于内核空间了(即大于0xC0000000),它是一个内核的模块,进程可以通过它来与内核进行通信


一个进程基本上可以分为如下几种VMA区域:

代码VMA:权限只读可执行;有映像文件

数据VMA:权限可读写、可执行;有映像文件

堆VMA:权限可读写、可执行;无映像文件,匿名,可以向上扩展

栈VMA:权限可读写、不可执行;无映像文件,匿名,可以向下扩展 

linux内核学习2:内存管理 一、页框管理 1.1. 页框的定义和数据结构 内核以页框为基本单位管理物理内存,分页单元中,页指一组数据,而存放这组数据的物理内存就是页框,当这组数据被释放后,若有其他数据请求访问此内存,那么页框中的页将会改变。 内核必须记录每个页框当前的状态。如,内核必须能区分哪些页框包含的是属于进展的也,哪些页框包含的是内核代码或者内核数据。同理,内核还必须能确认动态内存中页框是否空闲。这种状态信息被保存在一个描述符数组中,每个页框对应数组中的一个元素,这种类型为sruct page描述符 struct page是内存 阅读详情

相关推荐

Linux进程地址空间——虚拟内存区域(VMA)的基本操作

在Linux中,进程的地址空间被划分为多个虚拟内存区域(Virtual Memory Area,VMA),每个VMA对应着一段连续的虚拟内存地址范围,并具有相应的属性。其中,起始地址和结束地址表示VMA的虚拟内存地址范围,权限表示该VMA的访问权限,偏移量表示VMA在文件中的偏移量(若不是基于文件映射的VMA,则为0),设备号和inode号用于标识文件(若有),文件名表示VMA所映射的文件名(若有)。此外,对于复杂的VMA操作,可能需要深入了解Linux内核的实现细节和相关系统调用的使用方法。

ByteKnight的博客 813

linux 查看内核是否转发_Linux内核模块编程小例子之查看虚拟内存VMA(virtual memory areas)信息...

前言: 在 32 位的系统上,线性地址空间为 4GB,其中用户进程占有 3GB 线性地址空间,内核占有 1GB 线性地址空间。由于虚拟内存的引入,使的每个进程都可拥有 3GB 的虚拟内存。 用户进程的虚拟地址空间包含若干区域,这些区域的分布方式因体系结构的差异而不同,但所有的方式都包含下列成分: (1) 代码段:可执行文件的二进制代码 (2) 数据段:存储全局变量 (3) 栈:用于保存局部变量和...

weixin_39957265的博客 367

别再只盯着版图画了!聊聊CMOS工艺里那个‘看不见的手’:STI应力(LOD效应)对模拟电路的实际影响

本文深入探讨了CMOS工艺中STI应力(LOD效应)对模拟电路设计的实际影响,揭示了这一隐形变量如何导致电流镜匹配偏差等常见问题。通过分析应力产生的物理机制、空间分布特性,以及提供伪器件设计、版图布局优化等实用解决方案,帮助工程师有效管理STI应力效应,提升电路性能。文章还探讨了FinFET工艺下的新挑战及机器学习在应力优化中的应用前景。

weixin_42656416的博客 359

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

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

系统运维 418

LBS之五:时空索引--空间邻域搜索的高效实践

时空索引的原理及最佳实践

whascj的博客 1365

使用 Python 获取网络数据

本文介绍了 Python 获取网络数据、使用 requests 库、编写爬虫代码以及使用 IP 代理的方法。Python 的 requests 库非常方便,可以帮助我们快速访问网络资源。编写爬虫程序需要掌握正则表达式、HTTP 协议等知识,同时需要注意爬取速度和频率,以避免对被爬取网站造成负担。最后,使用 IP 代理可以帮助我们隐匿身份,保护我们的网络安全。

互联说 2695

操作系统实验3——虚拟内存管理

操作系统实验3 虚拟内存管理一、 实验目的二、 实验内容三、 实验准备1. 关键数据结构1.1. vma_struct1.2. mm_struct2. 关系结构图四、 实验步骤(一) 练习0:填写已有实验(二) 练习1:给未被映射的地址映射上物理页五、 总结六、 附录 一、 实验目的 了解虚拟内存的Page Fault异常处理实现 了解页替换算法在操作系统中的实现 二、 实验内容 本次实验是在实验二的基础上,借助于页表机制和实验一中涉及的中断异常处理机制,完成Page Fault异常处理和FIFO

weixin_43973089的博客 5472

4.7W防削顶单声道D类音频功率放大器HT6872介绍

HT6872是一款低EMI,防削顶失真,单声道免滤波D类音频功率放大器。在6.5V电源,10%THD+N,4Ω负载条件下,输出4.71W功率,在各类音频终端应用中维持高效率并提供AB类放大器的性能。

weichen_78的博客 4699

2020-10-12

linux中mmap系统调用原理分析与实现 1、mmap系统调用(功能) void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset ) 内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。 2、mmap系统调用(参数) 1)addr: 指定映射的起...

u014426028的博客 790

智警杯1.4---excel可视化

知识点

lulu001128的博客 949

基于YOLOv8的植物生长阶段识别系统设计与实现

本文详细介绍了一个基于YOLOv8深度学习模型的植物生长阶段识别系统,包含完整的数据集构建、模型训练、评估以及基于PyQt5的用户界面开发过程。系统能够自动识别植物在不同生长阶段(如发芽期、生长期、开花期、结果期等)的形态特征,为精准农业和智能种植提供技术支持。文章提供了完整的代码实现,并讨论了模型优化策略和实际应用场景。关键词:植物生长阶段识别、YOLOv8、目标检测、PyQt5、深度学习。

YOLO 465

Linux:进程的命令行参数环境变量和虚拟空间地址的初识

了解环境变量,初识虚拟地址空间的大轮廓

2601_95175861的博客 389

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

6.可执行文件的装载与进程——《程序员的自我修养》读书笔记

本文为《程序员的自我修养——链接、装载与库》的读书笔记,内容和图片为书本内容的整理。 6.1 进程虚拟地址空间 程序在运行起来后将拥有自己独立的虚拟地址空间(Virtual Address Space),这个空间的大小由计算机的硬件决定。对于32位OS,使用32位指针寻址,寻址空间为0 ~ 2^32-1,即0x00000000 ~ 0xFFFFFFFF,共4GB。对于64位OS,使用64位指针寻址...

FunkyPants的博客 460

Claude Desktop新功能:让非技术人士也能自主编程

摘要: Anthropic近日在Claude桌面应用中集成了Claude Code功能,显著降低了非技术用户的使用门槛。Claude Code作为代理式编程工具,支持多任务并行处理、Git隔离和可视化会话管理,无需命令行操作即可实现代码调试、重构等复杂任务。新增的“计划模式”通过先分析后执行的流程,确保安全性,使产品经理、数据分析师等非开发者也能参与技术工作。这一更新标志着AI技术正打破专业壁垒,让领域专家无需编码背景即可利用高级工具,推动技术民主化。

独立开发,substack顶级编辑 1540

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Linux可执行文件的装载与进程2

最近打算抽空学习张绍文老师的《Android开发高手课》。想要彻底理解的实现原理。发现理解起来都没有那么容易,在阅读代码的过程中,发现C++、linux、native hook、framework等方面的功底均有所不足。张绍文老师说过:“看再多的文章,不去思考文章所讲的内容和意图也是没用的;思考再多,不去动手真正实践也是没用的。“把进阶的各个主题由点到线串联起来,但这背后必然少不了一些基础的、底层的知识进行支撑”。这里就把空缺的知识进行补足。

Shujie 223

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

可执行文件的装载与进程

可执行文件的装载与进程 1。进程虚拟地址空间 每个进程运行起来以后,都将有一个自己的虚拟地址空间,其实这还是计算机制造出来的假象,让进程误以为此时只有它自己在运行,所有内存都只有他自己在使用,一般来说,C语言指针的大小的位数与虚拟空间的位数相同,32位平台下指针为32位,4字节。64位平台下的指针为8字节,但是有些特殊的CPU,并不是这样,暂且不考虑特殊的CPU。 暂时以32位平台为例,这个

密码小仙女 1260

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux内存管理:虚拟地址空间(静态分析总篇)

由一个进程的虚拟(或逻辑)地址所构成的地址空间,一看就非常抽象,说了跟没说一样,现在让我们先抛弃抽象的概念,从一个故事开始:现在有一个千万富翁,他手里面有3千万,这个富翁有5个儿子,富翁对他的每一个儿子都说:儿啊,等我死后,我的三千万就都是你的了。此时他的每一个儿子都很开心,他们都认为等老爹死了就可以得到他的三千万,然后他们就开始幻想了,大儿子想等拿到钱后就买一百双AJ,二儿子想等拿到线后就去澳门当赌神.....但是此时钱还不是他们的,他们就只是在做白日梦而已。

TCW1121的博客 492

最清楚的mmap()详解与源码分析

内核版本: 4.1 函数原型 void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 这是mmap的函数原型,而系统调用的接口在mm/map.c中的: unsigned long ksys_mmap_pgoff(unsigned ...

m0_37313888的博客 1740

《程序员的自我修养——链接、装载与库》——装载

导读   可执行文件只有装载到内存以后才能被CPU执行。早期装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置,随着硬件MMU的诞生,多进程、多用户、虚拟存储的操作系统出现以后,可执行文件的装载过程变得非常复杂。现在我们通过ELF文件在linux下的装载过程,来层层拨开迷雾,看看可执行文件装载的本质到底是什么? 目录 进程的虚拟地址空间 装载方式 进程虚拟地址空间的分布 ...

weixin_30467087的博客 178

虚拟地址空间:用户空间和内核空间 物理内存管理:伙伴系统以及slab分配器

一.虚拟地址空间 直接使用物理内存面临的问题: 内存缺乏访问控制,安全性不足 各进程同时访问物理内存,可能会互相产生影响,没有独立性 物理内存极小,而并发进程所需又大,容易导致内存不足 进程所需空间不一,容易导致内存碎片化问题 基于以上几种原因,Linux通过mm_struct结构体描述了一个虚拟的,连续的,独立的地址空间.也就是所说的虚拟地址空间. 程序运行时,在建立了虚拟地址空间后,并没有分配实际的物理内存,而是当进程需要实际访问内存资源的时候就会由内核的请求分页机制产生缺页中断,这时才

HUAERBUSHI521的博客 1602

程序员的自我修养:链接、装载与库(链接)

步骤名称核心任务关键数据结构1符号解析确定哪些符号需要重定位全局符号表2重定位表确定在哪里修正、如何修正.rel.text.rel.data3重定位过程根据公式计算并写入正确地址重定位类型、计算公式。

weixin_44446626的博客 461

Linux可执行文件与进程的虚拟地址空间

作者简介:本文由西邮陈莉君教授研一学生贺东升编辑,梁金荣、张孝家校对建议结合之前的《linux的内存寻址方式》看。Linux可执行文件与进程的虚拟地址空间一个可执行文件被执行的同时也伴随...

Peter的专栏 3695

linux进程的内存空间映射(段)

linux下进程内存空间的映射

qq_43707773的博客 1093

进程虚拟内存管理

概述 在32位linux系统中,每一个进程拥有3GB的虚拟内存空间,所有进程共享1GB的内核空间。对每一个进程来讲,都有一个task_struct结构体,包含该进程的所有信息,其中就包括最为重要的mm_struct,它提供了进程在内存布局中的所有必要信息。 相关的数据结构 mm_struct 操作系统运用了面向对象的思路对mm_struct进行封装,Linux就是通过mm_struct实现了内存管理。一个进程的虚拟地址空间主要由两个数据结构进行描述,一个是mm_struct,另一个是vm_area_stru

MIRSTAMP的博客 847
上一篇: 详解LMA(装载内存地址)与VMA(虚拟内存地址)
下一篇: 可执行文件从装载到运行的全过程描述
Virtual_Func
博客等级 码龄11年 38粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值