Linux内核源码分析 (B.x)Linux内存布局

一、32位系统的内存布局

在这里插入图片描述

  • 为什么要将进程地址空间划分成内核空间和用户空间?
    • 这个和处理器的体系结构有关。比如X86分为ring0~ring3级别,ring0给内核空间使用,ring3给用户空间使用;同样的,ARMv7也是如此,svc给内核使用,user级别给用户程序使用的。
  • 所有进程共享内存空间,但各自都独立享用用户空间,给每个进程提供了一个自己占用整个进程地址空间的假象。
  • 线性映射区跟物理内存之间的转换非常方便,只需要添加一个偏移量即可。线性映射区也被成为低端内存,除线性映射区外的内核空间为高端内存
  • vmalloc保证虚拟地址是连续的,不保证分配的物理页面的地址是连续的。
  • mmap空间用来映射文件和大段的匿名页面等,当内存分配大段的内存页面时,libc会偏向使用mmap来分配进程地址空间

二、进程的角度来看内存布局

在这里插入图片描述
在这里插入图片描述

  • .init段:程序初始化代码段
  • .text段:程序编译完成后的机器指令
  • .data段:已经初始化过的全局变量和静态变量
  • .bss段:保存没有初始化过的全局变量和静态变量

在这里插入图片描述

  • 该实例描述程序头描述elf文件如何被os映射到进程的虚拟地址空间的。
  • 观察发现第一个段中有.init段和.text段, 可读可执行
  • 观察发现第二个段中有 .data段和.bss段, 可读可写

在这里插入图片描述

  • 这里是将进程跑起来之后对应的效果。

在这里插入图片描述

三、64位系统的内存布局图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elec Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值