3.1计算机体系结构、内存分层体系

  1. image.png
  2. image.png
  3. image.png
  4. 操作系统管理内存的方法、
    • 程序重定位
    • 分段
    • 分页
    • 虚拟内存
    • 按需分页虚拟内存
  5. 硬件依赖
    • 必须知道内存架构
    • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

      3.2 地址空间与地址生成

  • 物理地址空间-硬件支持的地址空间

    image.pngimage.pngimage.png

  • 逻辑地址空间-运行程序所拥有的的内存范围

    MMU

    CPU通过MMU与物理内存地址建立映射关系,MMU表可通过应用程序的逻辑地址找到对应的物理内存地址

    物理地址生成流程

  1. AMU部件发出需要指令内容
  2. MMU查看物理地址
  3. 控制器发出物理地址内容请求
  4. 内存发送到物理地址的内容给CPU

    操作系统完成建立物理、逻辑地址映射对应关系。通过分配的有效地址空间完成内存安全检测

3.3 连续内存分配:内存碎片与分区的动态分配

内存碎片

  1. 外碎片
    1. 在分配单元间未分配使用的内存,地址内存单元块中间的小碎片
  2. 内碎片

    1. 在分配单元中的已分配使用的内存,应用程序无法使用已分配的地址块中的内存地址

      分区的动态分配

      image.png
    • 第一分配匹配

    image.png

    • 最优适配

      image.png

    • 最差适配

    image.png

    3.4 非连续内存分配

    连续内存分配会造成内存碎片

image.png

两种硬件方案

分段(更好的分离和管理内存地址)

  • 程序的分段地址空间

image.png

  • 分段寻址方案

image.pngimage.png

分页

分段可变,分页的页帧不变,物理页与逻辑页大小相同,大小是2的幂,e,g,512,4096

页帧
image.pngimage.png

image.png
页寻址机制
image.png
image.png

页表(page table)由操作系统建立,页内偏移地址一致


软件方案(分表)

操作系统结合物理设备完成段表的建立

  • image.png
  • image.png

分页机制的性能问题

  • 访问一个内存单元需要2次内存访问
    • 一次用于获取页表项
    • 一次用于访问数据
  • 页表可能非常大
    • 64位机器每页1024字节,需要内存的管理 - 图22
  • 方案

    • 缓存

      • TLB
      • image.png

        编程保证内存局部性、密集性,减少TLB缺失

    • 间接访问

      3.5非连续内存分配:页表—二级、多级分表

      二级页表

  • image.png

    多级页表

  • image.png

    多级页表机制时间开销大、节省空间开销,时间开销可通过TLB(缓存)解决

3.6非连续内存分配:页表—反向页表

image.png

3.7虚拟内存

虚拟内存技术

覆盖技术

  • image.png

交换技术

  • image.png

    虚存技术

  • image.png

  • image.png

image.png
image.png
image.png
image.png
image.png

3.8按需分页虚拟内存

页面置换算法

局部页面置换算法

  • 最优页面置换算法(OPT,optimal)
  • 先进先出算法 (FIFO)
    • 开销小、Belady现象
  • 最近最久未使用算法(LRU, Least Recently Used)
    • 性能好、开销大
  • 时钟页置换算法(Clock)
  • 二次机会法
  • 最不常用法(LFU, Least Frequently Used)

    算法局部性有效

全局页面置换算法

动态页面帧、局部页面置换算法存在问题

  • 工作集模型

    1. 工作集
    2. 常驻集

      两种算法

  • 工作集页置换算法

    • 超出工作集丢页
    • 固定窗口
  • 缺页率置换算法(PFF, page fault frequency)

    通过缺页率的变化来动态调整工作集窗口的大小

    • 可变工作集大小
      • 当缺页率高的时候-增加工作集
      • 当缺页率低的时候-减少工作集
  • 抖动问题
    • 分配进程的物理页太少、不能包含整个工作集,导致缺页中断过多、速度降低。这种现象成为‘抖动’
    • 驻留内存的进程数目增加,分配给每个进程的物理页帧不断减少,缺页率上升