首页 > 系统服务 > 详细

进程地址空间

时间:2021-02-15 23:21:19      阅读:27      评论:0      收藏:0      [点我收藏+]

进程地址空间

进程地址空间就是允许进程使用的全部线性地址,用mm_struct内存描述符表示

  • 内核线程使用前一个进程的内存描述符,mm字段为NULL,active_mm为前一个进程的active_mm;普通进程的mm和active_mm相同
  • 几个重要字段:
    • pgd:指向页目录
    • 堆的起始和最后地址
    • 用户态堆栈起始地址
    • 代码段起始和最后地址
    • 数据的首尾地址
  • 段错误:
    • 访问了不在有效范围内的内存区域
    • 以不正确的方式访问了有效地址
  • Linux不区别对待线程和进程,线程对于Linux来说仅仅是共享特定资源的进程,比如地址空间mm_struct

线性区(虚存区VMA)

vm_area_struct线性区描述符表示一个线性地址区间,进程地址空间里有多个线性区

  • 用链表和红黑树组织
    • 链表,在mm_struct中用mmap字段表示,通常在遍历整个线性区集合时来使用
    • 红黑树,在mm_struct中用mm_rb表示,用来搜索含有指定地址的线性区
  • 每个线性区都由一组连续的页组成,相关权限都会复制到对应的页表项
  • 每个VMA对其相关的mm_struct都是唯一的,即共享mm_struct就共享里面的所有VMA,否则尽管两个VMA指向同一个东西,也不能只用一个VMA

mmap

mmap底层调用do_mmap,创建一个新的线性地址区间

缺页异常处理程序

  • 缺页的两种情况:
    • 编程错误
    • 引用属于进程地址空间但还尚未分配物理页框的页
  • 总体方案
    技术分享图片

进程地址空间

原文:https://www.cnblogs.com/wasi-991017/p/14402606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!