Linux系统下进程内存空间模型

Linux下每个进程都有一个虚拟内存空间,32系统下一般是 4G大小。
其中包括:
从高地址到低地址来讲分别有以下几种:
整体上可以分为两种,内核区以及用户区,

  1. 内核区中是一些用户代码不可见的区域,比如页表就存放在这个区域。
  2. 用户区中从上到下分别是:
    a. 代码段: 可读不可写
    b. 数据段: 全局变量以及静态变量存放的区域
    c. 堆区: 动态内存,通过malloc, new 申请内存。
    d. 文件映射区域: 通过mmap系统调用,比如共享内存等映射物理空间的内存区域。
    e. 栈区:维护函数调用的上下文空间

拓展知识
3.
64位操作系统中虚拟空间大小一般是2^48, 并不需要64位大的地址空间,会造成资源浪费,256TB的寻址空间。
4.

进程之间共享内存方式有两种:shm与mmap。
shm:多个进程的虚拟地址直接共享同一块物理内存区域,访问速度快,大小受限制
mmap:多个进程的虚拟地址空间共享同一块磁盘空间,空间大,访问速度慢

mmap是一种内存映射方法,将物理文件或者对象映射到进程中的虚拟地址空间中一段虚拟地址。

mmap调用过程:
用户态调用mmap之后创建一个虚拟内存区域,内核态调用mmap创建磁盘空间到虚拟地址之间的映射,并建立页表。进程发起对映射空间的访问,引发缺页异常,将文件内容拷贝到物理内存。
5.
函数调用上下文空空间包括: 局部变量,函数参数,当前状态,函数调用信息。 栈空间向地址减少的方向增长。

函数调用过程使用的是堆栈实现,每个用户态进程对应一个调用栈,编译器使用它传递函数参数,保存返回地址,临时保存寄存器原有值以及从存储本地局部变量
(页表基址寄存器)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值