异常控制流&虚拟内存学习总结

 

  1. 异常控制流(Exceptional Contrl Flow, ECF)

    • 概念:

      • ECF: 现代系统通过使控制流发生突变,用来响应处理器状态中的某些变化。
    • 异常的类别:

      • 中断

        • 异步发生,来自外部IO设备。、
      • 系统调用

        • 用户程序调用内核接口。
      • 故障

        • 缺页异常。
      • 终止

    • 进程

      • 抽象 = 独立CPU + 独立内存。

      • 用户态、内核态。 切换到内核态一般就是中断、系统调用咯。

      • 上下文切换

        • 主要切换: CPU相关 + 内存相关 + 进程相关。

          • CPU相关 = 寄存器
          • 内存相关 = 页表
          • 进程相关 = 进程表
        • 系统调用、中断都可能引发上下文切换

    • 信号

      • 通知进程发生了某种类型的事件
      • 多个相同类型的信号,接收进程收到相同类型会丢弃。
  2. 虚报内存

    • 对内存的一种抽象。 为每个进程提供一致的地址空间。 这个图看看书,很经典。

    • 页表:

      • 记录了当前进程内,虚拟地址->物理地址的映射。
      • 减少内存占用, 压缩页面的思想,使用多级页表。
    • 页命中=访问物理地址,如果数据存在于内存中,即为页命中。如果数据不在内存中,则为缺页。

    • 分配页面

      • malloc操作=在硬盘上创建相应空间 + 更新页面, 真实访问时再触发缺页异常,加载到内存。
    • 内存映射

      • 将内存和磁盘对象关联起来。 普通文件(mmap) 或者 匿名文件(shmget).
      • 多个进程可以共享同一片内存。
      • 多个进程如果数据要做到独立,可以将区域标记为私有对象, 有修改时再使用"写时复制"的技术。
    • fork

      • 创建出子进程。
      • 复制CPU相关信息(寄存器) + 内存信息(页表) + 进程信息(进程表)
      • 使用内存映射共享同一片数据, 并且将区域标记为私有对象。
    • 动态内存分配

      • 分离适配。GLIBC使用这种内存分配方式

        • 维护空闲链表数组, 每个链表的字节固定。
        • 分配的时候, 找到合适的链表, 分配。 如果找不到,找到更大的链表来拆分。
        • 释放时,可以考虑合并。
        • 内存不足时, brk从系统申请, 加装到链表里。
      • 伙伴系统。 是分离适配的一种特例。 每个链表的长度都是2的n次方。

      • 待完善

        • 这个内存分配是一大难点。 需要实践学习。
        • Glibc malloc针对小块内存分配会有内存碎片问题, tcmalloc则不会。 这里需要细细学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值