Linux下的进程内存结构

虚拟内存管理

Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的地址空间,该地址空间大小为4GB的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但更安全(用户不能直接访问物理内存),而且用户程序可以使用比实际物理内存更大的地址空间。

虚拟空间

4GB的进程地址空间会被分成两部分———用户空间和内核空间。用户地址空间是0~3GB(0xC0000000),内核地址空间占据 3~4GB,用户进程在通常情况下只能访问用户空间虚拟地址,不能访问内核空间的虚拟地址,只有用户进程使用系统调用(代表用户进程在内核态执行)时才会访问到内核空间。每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它不会跟着变化,是固定的。内核空间地址有自己对应的页表,用户进程有着各自不同的页表,每个进程的用户空间都是完全独立的,互不相干。进程的虚拟内存地址空间如图(进程地空间的分布)。

内核虚拟内存
堆栈
Linux动态链接器
共享库的内存映射区域
数据段(.data、.bss)
只读段(.init、.text、.rodata)

用户空间包括以下几个功能区域(通常称为“段”)

  1. 只读段 ,具有只读属性,包含程序代码(.init和.text)和只读数据(.rodata);
  2. 数据段,存放的是全局变量和静态变量,其中初始化数据段存放在显示初始化的全局变量和静态变量,未初始化数据段,此段通常被称为BBS段,存放未进行显示初始化的全局变量和静态变量。
  3. ,由系统自动分配释放,存放函数的参数值、局部变量的值、返回地址等。
  4. 存放动态分配的数据,一般由程序员动态分配和释放,若程序员不释放,程序结束可能由系统自动回收。
  5. 共享库的内存映射区域,这是Linux动态链接器和其他共享库代码的映射区域。

因为在Linux系统每个进程都会有“/proc”文件系统下的与之对应的一个目录,例如init进程相关信息存放在“/proc/1”目录下。因此可以通过proc文件系统查看某个进程的地址空间的映射情况。


Linux下的进程内存结构相关推荐

  1. linux查看进程的内存使用情况,[转]linux下查看进程内存使用情况

    动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...

  2. linux下对进程按照内存使用情况进行排序

    linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...

  3. 【Linux】从冯诺依曼体系到初识Linux下的进程

    目录 前言 1.冯诺依曼体系结构 2.管理和操作系统 3.初识进程 1.描述进程PCB(process control block) 1.标识符pid fork接口创建子进程 2.进程状态 3.进程优 ...

  4. Linux第二次试验:Linux下的进程通信实验

    Linux第二次试验:Linux下的进程通信实验 前言 一.实验目的 二.实验工具与设备 三.实验预备知识 三.实验内容和步骤 五.实验代码及步骤截图 六.实验总结 前言 为了帮助同学们完成痛苦的实验 ...

  5. Linux下进程间通信--共享内存:最快的进程间通信方式

    内存共享最新整理: Linux下进程间通信-共享内存 - 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式https://www.codecomeon.com/posts/109/ ...

  6. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

  7. 查看linux进程的设备io,Linux下查看进程IO工具iopp

    Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况.如果要细看具体那一个程序点用的IO较高,可以使用iotop .不过iotop对内核版本和Python版本有要求 ...

  8. linux下僵尸进程(<defunct>进程)的产生与避免

    一.什么是僵尸进程 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态时,看到这些进程的状态栏为 ...

  9. Linux下,进程的相关知识,进程的消耗,常用信息,状态,静态查询命令ps,动态查询命令top

    Linux下,进程的相关知识,进程的来源,去向,状态,静态查询命令ps 一.进程主要组成部分 0.没有执行的程序就是普通文本文件,将程序运行起来以后就是进程,进程又有以下组成部分 1.一个或多个文件 ...

最新文章

  1. php this 代表什么,php中$this-是什么意义
  2. easyui左侧导航菜单右侧载入百度地图项目框架
  3. java 静态代码块和spring @value注解注入执行顺序
  4. chromium 一些设置 --插件安装
  5. 正确理解三极管的放大区、饱和区、截止区
  6. VSCode连接远程服务器及docker
  7. un7.2:IDEA中实现登录功能
  8. HDU 6447 YJJ's Salesman
  9. MySQL数据库之——初识MySQL
  10. mac批量修改文件名、后缀名
  11. 2022-07-10 第四小组 孙翰章 CSS学习笔记
  12. 我的工训:加强沟通、加深理解、扩大分享!
  13. 无锁队列的实现 | 酷壳 - CoolShell.cn
  14. Qt写的流量监控 and 网络延迟 and 自动隐藏
  15. 由极点五笔到QQ五笔的转换想到的
  16. C#工业相机SDK二次开发 未能加载文件或程序集“CLIDelegate.dll”或它的某一个依赖项。找不到指定的模块。”
  17. 后端返回二进制文件流 前端处理并下载jpg格式图片
  18. Fiddler 工具使用
  19. 调查报告数据分析怎么做?
  20. linux查看u盘的分区,linux磁盘管理——识别和使用u盘

热门文章

  1. python3.7适用的opencv_通过python3.7.3使用openCV截图一个区域
  2. python 线程安全的数据类型_详解python多线程、锁、event事件机制的简单使用
  3. oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
  4. mysql并发死锁问题解决
  5. 使用ThreadLocal和AtomicInteger将int属性改为线程安全的计数器
  6. 虚拟机环境下ansible方式部署tidb3.0时系统检测不通过
  7. javajs ---- 判断字符串中是否包含子串
  8. linux7怎么配yum,centos7怎么配置yum
  9. mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?
  10. Win10设置防火墙,使局域网能访问此电脑的Tomcat服务