进程地址空间

用户空间中进程的内存,由进程可寻址的虚拟内存组成,一般为32位或64位的平坦地址空间,但不是所有虚拟地址都可以访问的,其中可以被访问的合法地址空间称为 内存区域,内存区域有对进程可读、可写、可执行属性,包括代码段、数据段、bss段、进程用户空间栈、共享库、内存映射文件、共享内存段、匿名内存映射,当一个进程的地址空间与另一个进程的地址空间有相同的内存地址,称为 线程(是否共享地址空间是进程和线程的唯一区别)
                                                                                                              
内存描述符(mm_struct)结构体表示进程的地址空间,包含和进程地址空间有关的全部信息(mm_users、mm_count、mmlist、mmap、mm_rb,其中mmap和mm_rb指向全部内存区域对象,前者使用 链表,后者使用 红黑树)                                                                                                                                                                                                                                                                                 
  • 进程描述符(task_struct)中mm域存放着进程使用的内存描述符                                                                                                                                           
内核线程没有进程地址空间,不需要访问任何用户空间的内存,当需要访问内核内存时,直接使用前一个进程的内存描述符       

虚拟内存地址(VMA)由vm_area_struct结构体描述了指定地址空间内连续区间上的一个独立内存范围,作为一个单独的内存对象管理,拥有一致属性,vm_mm域指定了相关的mm_struct结构体,vm_flags包含了内存区域的整体信息(如vm_shared、vm_reserved、vm_read等)

cat /proc/n/maps (和pmap)都可以查看给定进程的内存空间和其中所含的内存区域
输出格式:
开始-结束 访问权限 偏移 主设备号:次设备号 i节点 文件,mapped表示进程的全部地址空间,writable/private表示可写和私有的

do_mmap()函数创建一个新的线性地址区间,由file指定文件,文件中从偏移offset处开始,长度为len字节的范围内的数据,指定了文件名和偏移量(文件映射),为null( 匿名映射

linux中使用三级页表来完成地址转换(虚拟地址-物理地址),顶级页表(页全局目录PGD)、二级页表(中间页目录PMD),最后一级页表(页表)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值