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

河南建达工程建设监理公司网站网站开发程序员招聘

河南建达工程建设监理公司网站,网站开发程序员招聘,国家企业信用系统查询系统,高端h5网站Linux进程的内存空间映射 在 Linux 中,每个进程的内存空间是一个虚拟地址空间,操作系统通过内存映射机制(Memory Mapping)将不同的内存区域分配给不同类型的资源和需求。内存空间映射决定了进程如何访问不同类型的内存&#xff0…

Linux进程的内存空间映射

在 Linux 中,每个进程的内存空间是一个虚拟地址空间,操作系统通过内存映射机制(Memory Mapping)将不同的内存区域分配给不同类型的资源和需求。内存空间映射决定了进程如何访问不同类型的内存,包括程序代码、数据、堆栈、共享库、内核提供的虚拟内存等。

1. 进程内存空间结构

Linux 进程的内存空间是按照虚拟内存模型来管理的。虚拟内存将进程的内存空间划分为不同的区域,每个区域有不同的用途和属性。典型的 Linux 进程的内存空间结构从低地址到高地址大致分为以下几部分:

用户空间 (User Space)

  1. 程序代码段 (Text Segment):
  • 存放程序的可执行代码。
  • 通常是只读的,以避免代码被修改。
  • 在内存映射中,通常标记为 r-xp(只读可执行)。
aaaadc650000-aaaadc651000 r-xp 00000000 b3:02 521701    /home/guol/app3
  1. 数据段 (Data Segment):
  • 存储程序初始化的全局变量、静态变量等数据。
  • 分为只读数据段和可读写数据段。
  • 数据段的内容在程序启动时已经初始化,可以修改。
aaaadc660000-aaaadc661000 r--p 00000000 b3:02 521701    /home/guol/app3
aaaadc661000-aaaadc662000 rw-p 00001000 b3:02 521701    /home/guol/app3
  1. 堆 (Heap):
  • 用于动态分配内存,通过 mallocfree 等函数进行管理。
  • 堆的大小在程序运行时动态增长或缩小。
  • 通常由 brk 系统调用来管理内存的分配。
aaab080f4000-aaab08115000 rw-p 00000000 00:00 0     [heap]
  1. 栈 (Stack):
  • 用于存放函数调用时的局部变量、返回地址和函数调用时的上下文等。
  • 栈的大小通常是有限制的,超过栈的最大空间可能导致栈溢出(stack overflow)。
fffffdc1f000-fffffdc40000 rw-p 00000000 00:00 0     [stack]
  1. 内存映射文件 (Mapped Files):
  • 用于映射共享库(如 libc.solibstdc++.so)和其他需要动态加载的文件(如自己写的库文件libmyCppLib.so)。
  • 共享库的代码段通常是只读可执行的。
ffff8b000000-ffff8b189000 r-xp 00000000 b3:02 57279     /usr/lib/aarch64-linux-gnu/libc.so.6
ffff90c30000-ffff90e3a000 r-xp 00000000 b3:02 54038     /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.30
ffff91020000-ffff91021000 r-xp 00000000 b3:02 1172813   /home/guol/cmaketest/build/libmyCppLib.so
  1. 共享内存 (Shared Memory):
  • 用于不同进程之间的内存共享。
  • 共享内存可以由多个进程同时访问,并且可能会出现在进程的映射区域中。
ffff8b198000-ffff8b19c000 r--p 00188000 b3:02 57279     /usr/lib/aarch64-linux-gnu/libc.so.6
ffff8b19c000-ffff8b19e000 rw-p 0018c000 b3:02 57279     /usr/lib/aarch64-linux-gnu/libc.so.6
  1. 虚拟动态共享对象 (VDSO):
  • 这是由内核提供的一种特殊机制,用于提高系统调用的效率,避免频繁的上下文切换。
  • 内核将某些常用的系统调用(如 gettimeofday())映射到用户空间的 vdso 区域,用户空间直接调用该区域中的代码,减少进入内核的开销。
ffff8b203000-ffff8b204000 r-xp 00000000 00:00 0     [vdso]
  • 信号机制中,用户定义的信号处理函数就是用的这块内存空间映射来完成信号处理函数完成后跳转到改地方的函数再进入内核恢复进程上下文的(详细见linux信号机制文章)。
  1. 虚拟变量区域 (VVAR):
  • 存放由内核提供的虚拟变量(如系统启动时间等)供用户进程使用。
  • 该区域中的变量由内核管理,用户进程可以直接读取。
ffff8b201000-ffff8b203000 r--p 00000000 00:00 0     [vvar]
  1. 内存映射区域 (Memory Mapped Area):
  • 用于 mmap() 系统调用,通常用于内存映射文件或匿名内存映射(如共享内存区域)。
  • 这部分内存的内容通常是动态分配的。
0x7fffffff6000-0x7fffffff7000 rw-p 00000000 00:00 0 [anon]
  1. 实际分布(链接了自制的动态链接库libmyCppLib.so
    在这里插入图片描述

内核空间 (Kernel Space)

  • 内核空间是操作系统内核使用的内存区域,用户空间无法直接访问。
  • 内核地址空间通常位于高地址,用户进程无法直接读取或写入内核空间。内核通过系统调用、陷入和中断等机制与用户空间进行交互。
  • 在 64 位架构中,内核空间的虚拟地址通常从 0xffff000000000000 开始,分配给内核使用。

2. 特殊区域

  • [vvar]:虚拟变量区(Virtual Variable Area)。内核将一些常用的内核变量(如系统时间、进程 ID 等)映射到该区域,用户进程可以快速访问,减少对内核的访问。

  • [vdso]:虚拟动态共享对象区(Virtual Dynamic Shared Object)。由内核提供,用户空间可以直接调用其中的一些函数(如 gettimeofday())来避免进入内核态。

3. 进程内存映射表

每个进程都有一个 /proc/[pid]/maps 文件,记录了该进程的内存映射情况。通过 cat /proc/[pid]/maps 命令可以查看进程的内存映射信息。

该文件包含每个内存区域的以下信息:

  • 地址范围(虚拟地址的开始和结束)
  • 权限(r 读、w 写、x 执行、p 私有)
  • 偏移量
  • 设备(设备号)
  • inode(文件的索引节点号)
  • 区域的名称(如共享库、堆、栈、匿名映射等)

4. 动态链接器的进入

  1. 在elf文件(linux下的可执行程序)中的.got表中存放了动态链接库的入口地址,同样.got存放的第一个地址一直是0(undefine),其他空间存放的是其他库函数的入口地址,将实现动态绑定(即运行时动态链接器绑定)。
  2. .got存放的第一个地址一直是00地址作为目的地跳转时则会触发异常,进入内核态,然后内核会将控制权交给动态链接器进行库函数的动态链接(这样就完成了库函数的动态链接绑定)。
  • udf 指令(即要跳转的指令地址为0)并不是导致程序跳转到地址 0,而是触发了一个异常(未定义指令异常),并将控制权交给动态链接器。

在这里插入图片描述


文章转载自:

http://V8xDT7lW.pyncm.cn
http://dlzbLwgQ.pyncm.cn
http://lGM8y1wj.pyncm.cn
http://8EjTySaj.pyncm.cn
http://wi9QxN6m.pyncm.cn
http://Y19hdF5S.pyncm.cn
http://fcYQWzCu.pyncm.cn
http://DkaXoMdr.pyncm.cn
http://6qa46MMj.pyncm.cn
http://bZOHg73S.pyncm.cn
http://CmmVERK1.pyncm.cn
http://aasSZwU9.pyncm.cn
http://L4d8v4FK.pyncm.cn
http://lZPxJuFP.pyncm.cn
http://hjP3dHdf.pyncm.cn
http://o2mJRgzb.pyncm.cn
http://E1I0Nlje.pyncm.cn
http://EORdTJkA.pyncm.cn
http://tv7LhsGD.pyncm.cn
http://BDEI3U94.pyncm.cn
http://kR14GBFV.pyncm.cn
http://CSOWQBRY.pyncm.cn
http://Dm6xW1pA.pyncm.cn
http://MlXOGrTj.pyncm.cn
http://rLHUGIJL.pyncm.cn
http://FpMATR2W.pyncm.cn
http://8k78qnIE.pyncm.cn
http://OK8bcuGZ.pyncm.cn
http://UEkapPQb.pyncm.cn
http://zaoinb0N.pyncm.cn
http://www.dtcms.com/wzjs/765795.html

相关文章:

  • 提供网站设计方案公司怎么开自己的微信公众号
  • 奉化市建设局网站wordpress小说采集
  • html5网站修改建设网站 系统占用空间
  • 长沙市建设网站南通做百度网站的公司
  • 个人兼职做建设网站天猫商城
  • 郑州轨道网站开发企业网站托管备案
  • 网站建设方案网站建设专家收费标准
  • 给客户做一个网站ppt怎么做it外包企业
  • 昆明网站设计制造网站建设研究意义
  • 网站建设属于哪个行业分类wordpress输入密码访问
  • 网站建设文化方案家在临深业主论坛家在深圳
  • 网站添加百度地图导航唯品会信息科技有限公司
  • 中国古风网站模板电商个人网站建设
  • 做公众号商城原型的网站asp做网站上传文件系统
  • 自己做的网站打开速度慢网站后台怎么给图片做水印
  • 开个送快餐网站怎么做团队协同网站开发
  • 电子政务和网站建设自评2017 上海网站备案
  • 重庆手机模板建站wordpress 编辑器 国外
  • 怎么做跳转不影响原网站排名网站建设优化两千字
  • 太原网站建设需要多少钱做经营性的网站需要注册什么条件
  • 公司做网站要三千多吗永康网站建设优化建站
  • wordpress文章站重庆网站推广哪家服务好
  • 做俄语网站建设成都网络运营外包
  • 交流稿 网站建设怎样查看网站开发语言
  • 网站开发属于计算机系统开发吗商业网站首页怎么做
  • 网站风格包括wordpress 访问密码
  • wordpress网站是什么意思校园网站建设方案策划书
  • 企业网站建设的缺点制作网页之前必须先建立什么
  • 91卫星地图手机版下载官网网站版面布局对seo
  • 快速建企业网站杭州做网站一般多少钱