Linux下的进程内存结构
Linux下的进程内存结构
虚拟内存管理
Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的地址空间,该地址空间大小为4GB的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但更安全(用户不能直接访问物理内存),而且用户程序可以使用比实际物理内存更大的地址空间。
虚拟空间
4GB的进程地址空间会被分成两部分———用户空间和内核空间。用户地址空间是0~3GB(0xC0000000),内核地址空间占据 3~4GB,用户进程在通常情况下只能访问用户空间虚拟地址,不能访问内核空间的虚拟地址,只有用户进程使用系统调用(代表用户进程在内核态执行)时才会访问到内核空间。每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它不会跟着变化,是固定的。内核空间地址有自己对应的页表,用户进程有着各自不同的页表,每个进程的用户空间都是完全独立的,互不相干。进程的虚拟内存地址空间如图(进程地空间的分布)。
内核虚拟内存 |
---|
堆栈 |
↓ |
Linux动态链接器 |
共享库的内存映射区域 |
↑ |
堆 |
数据段(.data、.bss) |
只读段(.init、.text、.rodata) |
段
用户空间包括以下几个功能区域(通常称为“段”)
- 只读段 ,具有只读属性,包含程序代码(.init和.text)和只读数据(.rodata);
- 数据段,存放的是全局变量和静态变量,其中初始化数据段存放在显示初始化的全局变量和静态变量,未初始化数据段,此段通常被称为BBS段,存放未进行显示初始化的全局变量和静态变量。
- 栈,由系统自动分配释放,存放函数的参数值、局部变量的值、返回地址等。
- 堆存放动态分配的数据,一般由程序员动态分配和释放,若程序员不释放,程序结束可能由系统自动回收。
- 共享库的内存映射区域,这是Linux动态链接器和其他共享库代码的映射区域。
因为在Linux系统每个进程都会有“/proc”文件系统下的与之对应的一个目录,例如init进程相关信息存放在“/proc/1”目录下。因此可以通过proc文件系统查看某个进程的地址空间的映射情况。
Linux下的进程内存结构相关推荐
- linux查看进程的内存使用情况,[转]linux下查看进程内存使用情况
动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...
- linux下对进程按照内存使用情况进行排序
linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...
- 【Linux】从冯诺依曼体系到初识Linux下的进程
目录 前言 1.冯诺依曼体系结构 2.管理和操作系统 3.初识进程 1.描述进程PCB(process control block) 1.标识符pid fork接口创建子进程 2.进程状态 3.进程优 ...
- Linux第二次试验:Linux下的进程通信实验
Linux第二次试验:Linux下的进程通信实验 前言 一.实验目的 二.实验工具与设备 三.实验预备知识 三.实验内容和步骤 五.实验代码及步骤截图 六.实验总结 前言 为了帮助同学们完成痛苦的实验 ...
- Linux下进程间通信--共享内存:最快的进程间通信方式
内存共享最新整理: Linux下进程间通信-共享内存 - 码到城攻共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式https://www.codecomeon.com/posts/109/ ...
- linux下查看进程的线程数,linux查看进程的线程数
top -H -p $PID #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...
- 查看linux进程的设备io,Linux下查看进程IO工具iopp
Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况.如果要细看具体那一个程序点用的IO较高,可以使用iotop .不过iotop对内核版本和Python版本有要求 ...
- linux下僵尸进程(<defunct>进程)的产生与避免
一.什么是僵尸进程 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态时,看到这些进程的状态栏为 ...
- Linux下,进程的相关知识,进程的消耗,常用信息,状态,静态查询命令ps,动态查询命令top
Linux下,进程的相关知识,进程的来源,去向,状态,静态查询命令ps 一.进程主要组成部分 0.没有执行的程序就是普通文本文件,将程序运行起来以后就是进程,进程又有以下组成部分 1.一个或多个文件 ...
最新文章
- php this 代表什么,php中$this-是什么意义
- easyui左侧导航菜单右侧载入百度地图项目框架
- java 静态代码块和spring @value注解注入执行顺序
- chromium 一些设置 --插件安装
- 正确理解三极管的放大区、饱和区、截止区
- VSCode连接远程服务器及docker
- un7.2:IDEA中实现登录功能
- HDU 6447 YJJ's Salesman
- MySQL数据库之——初识MySQL
- mac批量修改文件名、后缀名
- 2022-07-10 第四小组 孙翰章 CSS学习笔记
- 我的工训:加强沟通、加深理解、扩大分享!
- 无锁队列的实现 | 酷壳 - CoolShell.cn
- Qt写的流量监控 and 网络延迟 and 自动隐藏
- 由极点五笔到QQ五笔的转换想到的
- C#工业相机SDK二次开发 未能加载文件或程序集“CLIDelegate.dll”或它的某一个依赖项。找不到指定的模块。”
- 后端返回二进制文件流 前端处理并下载jpg格式图片
- Fiddler 工具使用
- 调查报告数据分析怎么做?
- linux查看u盘的分区,linux磁盘管理——识别和使用u盘
热门文章
- python3.7适用的opencv_通过python3.7.3使用openCV截图一个区域
- python 线程安全的数据类型_详解python多线程、锁、event事件机制的简单使用
- oracle awr报告生成_5.性能测试 - Oracle体系结构和性能优化简介
- mysql并发死锁问题解决
- 使用ThreadLocal和AtomicInteger将int属性改为线程安全的计数器
- 虚拟机环境下ansible方式部署tidb3.0时系统检测不通过
- javajs ---- 判断字符串中是否包含子串
- linux7怎么配yum,centos7怎么配置yum
- mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?
- Win10设置防火墙,使局域网能访问此电脑的Tomcat服务