我是靠谱客的博主 想人陪泥猴桃,最近开发中收集的这篇文章主要介绍Linux虚拟地址空间分布,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是虚拟内存?
IBM在解释虚拟内存的概念时用了四句话:
如果它存在,而且你能看到它,它是真实的;
如果它不存在,但是你能看到它,它是虚拟的;
如果它存在,但是你看不到它,它是透明的;
如果它不存在,而且你也看不到它,那肯定是你把它擦掉了。

在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4GB的内存地址块。在Linux系统中, 内核进程和用户进程所占的虚拟内存比例是1:3,0~3G为用户空间,3G~4G为内核空间。而Windows系统为2:2,0~2G为用户空间,2G~4G为内核空间(通过设置Large-Address-Aware Executables标志也可为1:3)。这并不意味着内核使用那么多物理内存,仅表示它可支配这部分地址空间,根据需要将其映射到物理内存。

虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被处理器引用。内核空间在页表中拥有较高特权级,因此用户态程序试图访问这些页时会导致一个页错误(page fault)。在Linux中,内核空间是持续存在的,并且在所有进程中都映射到同样的物理内存。内核代码和数据总是可寻址,随时准备处理中断和系统调用。与此相反,用户模式地址空间的映射随进程切换的发生而不断变化,操作系统会为每个进程分配4G的虚拟地址空间。

Linux虚拟地址空间的分布如下图:
这里写图片描述
现在来分别介绍各段:

.text段

代码段也称正文段或文本段,通常用于存放程序执行代码(即CPU执行的机器指令)。一般C语言执行语句都编译成机器代码保存在代码段。通常代码段是可共享的,因此

最后

以上就是想人陪泥猴桃为你收集整理的Linux虚拟地址空间分布的全部内容,希望文章能够帮你解决Linux虚拟地址空间分布所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部