Linux 64位进程地址空间分布概况
对于Linux 64位系统,理论上,64bit内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的空间,Linux实际上只用了其中一小部分(256T)。
Linux64位操作系统仅使用低47位,高17位做扩展(只能是全0或全1)。所以,实际用到的地址为空间为0x0000000000000000 ~ 0x00007FFFFFFFFFFF(user space)和0xFFFF800000000000 ~ 0xFFFFFFFFFFFFFFFF(kernel space),其余的都是unused space。
user space 也就是用户区由以下几部分组成:代码段,数据段,BSS段,heap,stack
在精细一些:一个进程在内存中的分配如下
在kernel中描述如下:
========================================================================================================================Start addr | Offset | End addr | Size | VM area description
========================================================================================================================| | | |0000000000000000 | 0 | 00007fffffffffff | 128 TB | user-space virtual memory, different per mm
__________________|____________|__________________|_________|___________________________________________________________| | | |0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | ... huge, almost 64 bits wide hole of non-canonical| | | | virtual memory addresses up to the -128 TB| | | | starting offset of kernel mappings.
__________________|____________|__________________|_________|___________________________________________________________|| Kernel-space virtual memory, shared between all processes:
____________________________________________________________|___________________________________________________________| | | |ffff800000000000 | -128 TB | ffff87ffffffffff | 8 TB | ... guard hole, also reserved for hypervisorffff880000000000 | -120 TB | ffff887fffffffff | 0.5 TB | LDT remap for PTIffff888000000000 | -119.5 TB | ffffc87fffffffff | 64 TB | direct mapping of all physical memory (page_offset_base)ffffc88000000000 | -55.5 TB | ffffc8ffffffffff | 0.5 TB | ... unused holeffffc90000000000 | -55 TB | ffffe8ffffffffff | 32 TB | vmalloc/ioremap space (vmalloc_base)ffffe90000000000 | -23 TB | ffffe9ffffffffff | 1 TB | ... unused holeffffea0000000000 | -22 TB | ffffeaffffffffff | 1 TB | virtual memory map (vmemmap_base)ffffeb0000000000 | -21 TB | ffffebffffffffff | 1 TB | ... unused holeffffec0000000000 | -20 TB | fffffbffffffffff | 16 TB | KASAN shadow memory
__________________|____________|__________________|_________|____________________________________________________________|| Identical layout to the 56-bit one from here on:
____________________________________________________________|____________________________________________________________| | | |fffffc0000000000 | -4 TB | fffffdffffffffff | 2 TB | ... unused hole| | | | vaddr_end for KASLRfffffe0000000000 | -2 TB | fffffe7fffffffff | 0.5 TB | cpu_entry_area mappingfffffe8000000000 | -1.5 TB | fffffeffffffffff | 0.5 TB | ... unused holeffffff0000000000 | -1 TB | ffffff7fffffffff | 0.5 TB | %esp fixup stacksffffff8000000000 | -512 GB | ffffffeeffffffff | 444 GB | ... unused holeffffffef00000000 | -68 GB | fffffffeffffffff | 64 GB | EFI region mapping spaceffffffff00000000 | -4 GB | ffffffff7fffffff | 2 GB | ... unused holeffffffff80000000 | -2 GB | ffffffff9fffffff | 512 MB | kernel text mapping, mapped to physical address 0ffffffff80000000 |-2048 MB | | |ffffffffa0000000 |-1536 MB | fffffffffeffffff | 1520 MB | module mapping spaceffffffffff000000 | -16 MB | | |FIXADDR_START | ~-11 MB | ffffffffff5fffff | ~0.5 MB | kernel-internal fixmap range, variable size and offsetffffffffff600000 | -10 MB | ffffffffff600fff | 4 kB | legacy vsyscall ABIffffffffffe00000 | -2 MB | ffffffffffffffff | 2 MB | ... unused hole
__________________|____________|__________________|_________|___________________________________________________________
参考:
https://www.cnblogs.com/arnoldlu/p/8051674.html
https://www.cnblogs.com/yizhanwillsucceed/p/13578076.html
https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt
Linux 64位进程地址空间分布概况相关推荐
- 【Linux】CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享
[Linux]CentOS7下安装Ngnix代理服务器详细过程 附Linux 64位 Ngnix压缩包百度云盘分享 Ngnix基本概况 Nginx (读作"engine X") 由 ...
- linux 64位内存划分,linux 64位内存空间大小?(linux 64 bits memory space size? [closed])
linux 64位内存空间大小?(linux 64 bits memory space size? [closed]) 在Linux 32bit中,内核占用1GB的内存,而用户空间将占用剩余的gigs ...
- linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...
第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...
- .net core vs java_VS Code 1.19.3调试.net core 2并始终满足“只能调试64位进程”
我在笔记本电脑上安装了 .net core 2.0 的x86和x64 sdk(win 7 sp1 x64) . 我不知道为什么vs代码(1.19.3和x64&官方c# extension)总是 ...
- Kali Linux 64位架构安装Veil-Evasion
Kali Linux 64位架构安装Veil-Evasion Veil-Evasion是一种生成有效载荷可执行文件的工具,可绕过常见的防病毒软件.由于技术的发展,大部分人都选择安装的Linux系统架构 ...
- LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8
标签: 第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elastic ...
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...
- linux卸载minicoda2,MiniConda2下载 MiniConda python 2.7 v4.3.30.2 Linux 64位 官方免费版(附安装步骤) 下载-脚本之家...
MiniConda python 2.7 Linux版是一款可以在Linux系统下使用的Python 环境管理工具,同时MiniConda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软 ...
- 64位进程调用32位dll的解决方法
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...
最新文章
- 赛门铁克针对勒索软件WannaCry发布全球预警
- C/C++各种系统开发环境搭建
- “睡服”面试官系列第十九篇之async函数(建议收藏学习)
- 【python】list append()和extend()区别
- 添加作者_卤肉,有“添加剂”才香?大错特错,没有这5种香料,什么味道都没有...
- Ubuntu之sshfs远程目录挂载到本地
- nyoj 1172 unlucky number
- 【Unity3D入门教程】Unity3D播放音频和视频
- mysql实时监控工具
- 改变世界的17个数学公式
- Qt编译报错:Error in Util.asciify(build-Project1_msvc-Desktop_Qt_5_8_0_MSVC2015_32bit_qt_58_w-Debug)
- Aras Innovator: TOC category的视图
- matlab中options,[转载]Matlab优化函数中options选项的修改
- 分机计算机怎么设置共享打印机,win7打印机共享设置分机怎么设置
- React-moveable的使用
- Qt编写可视化大屏电子看板系统13-基础版
- 做一个功能比较齐全的小程序商城选择好的系统很重要
- Android系统安全机制
- Yocto创建自己的分区(基于STM32MP1)
- 防抖和节流的理解与实现