Linux进程地址空间与进程内存布局详解


程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码。

初始化过的数据(Data):在程序运行初已经对变量进行初始化的数据。

未初始化过的数据(BSS):在程序运行初未对变量进行初始化的数据。

栈 (Stack):存储局部、临时变量,函数调用时,存储函数的返回指针,用于控制函数的调用和返回。在程序块开始时自动分配内存,结束时自动释放内存,其操作方式类似于数据结构中的栈。

堆 (Heap):存储动态内存分配,需要程序员手工分配,手工释放.注意它与数据结构中的堆是两回事,分配方式类似于链表。

二 内核空间和用户空间

Linux的虚拟地址空间范围为0~4G,Linux内核将这4G字节的空间分为两部分, 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。

Linux使用两级保护机制:0级供内核使用,3级供用户程序使用,每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的,最高的1GB字节虚拟内核空间则为所有进程以及内核所共享。
内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。不管是内核空间还是用户空间,它们都处于虚拟空间中。 虽然内核空间占据了每个虚拟空间中的最高1GB字节,但映射到物理内存却总是从最低地址(0x00000000),另外, 使用虚拟地址可以很好的保护 内核空间被用户空间破坏,虚拟地址到物理地址转换过程有操作系统和CPU共同完成(操作系统为CPU设置好页表,CPU通过MMU单元进行地址转换)。

注:多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盒中,这个 沙盒就是虚拟地址空间(virtual address space),在32位模式下,它总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每个进程都拥有一套属于它自己的页表。

Linux进程地址空间与进程内存布局详解,内核空间与用户空间相关推荐

  1. 【C++】C++对象模型:对象内存布局详解(C#实例)

    C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...

  2. linux进程间通信之Posix共享内存用法详解及代码举例

    Posix共享内存有两种非亲缘进程间的共享内存方法: 1).  使用内存映射文件,由open函数打开,再由mmap函数把返回的文件描述符映射到当前进程空间中的一个文件. 2). 使用共享内存区对象,由 ...

  3. 图说C++对象模型:对象内存布局详解

    目录 1.何为C++对象模型? 2.文章内容简介 3.理解虚函数表 3.1.多态与虚表 3.2.使用指针访问虚表 4.对象模型概述 4.1.简单对象模型 4.2.表格驱动模型 4.3.非继承下的C++ ...

  4. 图文并茂:JVM 内存布局详解

    来源:https://www.cnblogs.com/hyxiao97/p/15395886.html 内存布局 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定 ...

  5. JVM 内存布局详解,图文并茂,简直了

    内存布局 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来探讨jVM的 ...

  6. JVM 内存布局详解,图文并茂,大写的服

    内存布局 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来探讨jVM的 ...

  7. JVM 内存布局详解,图文并茂,写得太好了

    内存布局 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来探讨jVM的 ...

  8. JVM 内存布局详解,图文并茂,写得太好了!

    今年面试比较卷,技术面试官上来就爱问JVM,下面来分享一篇JVM干货. 内存布局 Heap 堆区 Metaspace 元空间 JVM Stacks 虚拟机栈 Native Method Stacks( ...

  9. Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)

    Linux -操作系统内存管理 存储系统 存储器的层次结构 Linux的内存管理 物理内存 物理内存管理 虚拟内存 虚拟地址空间 (写时拷贝) 和物理地址映射关系 页表 虚拟内存优缺点 「在 4GB ...

最新文章

  1. 当Python遇上朱茵、迪丽热巴、林志玲、王祖贤等众多美女
  2. 净化心灵的诗歌--《当你老了》
  3. 区块链演进及跨域安全解决方案
  4. 杨中科.NET5视频教程更新了:DI、配置系统、Logging、EF Core等
  5. 这个免费的交互式课程在一小时内学习JavaScript
  6. css用hover制作下拉菜单
  7. 利用samba服务为windows用户架设网盘的简单实践
  8. Magento教程 14:如何在Magento设定多货币
  9. 电路初级基本原理总结
  10. python中json模块_Python json模块与jsonpath模块区别详解
  11. spring4+struts2+hibernate5整合出现spring异常
  12. PyCharm高校固定资产管理系统django-python+vue
  13. [网路]Pads 2007常见问题备份解答
  14. java分析内存泄露工具_AIL-Framework下载-java内存泄露分析工具(Information Analysis Leaks)-东坡下载...
  15. html博客音乐播放器代码大全,播放器代码大全
  16. 怎么对视频进行简单补帧
  17. hdu 4565(推公式、矩阵快速幂)
  18. 火萤视频壁纸(让你的桌面丰富多彩)
  19. 数据中心机房监控大厅效果图
  20. 软件测试 —— Python(三)之数据序列(容器)

热门文章

  1. dojo Quick Start/dojo入门手册--package机制
  2. VS Tips]Visual Studio 2008 Toolbox里控件消失(#13119)的问题
  3. 2009年全球最佳IT十大认证
  4. 2004-5-12+ 用DataSet实现分页
  5. oracle常用的时间格式转换
  6. Table control中列隐藏实现方法
  7. COND SWITCH 操作符
  8. CO07利润中心必输
  9. SAP成本收集器两则
  10. SAP FI常用事务码