虚拟内存

功能:

  1. 缓存
    将主存作为磁盘的高速缓存,在主存和磁盘之间传递数据。
    主存被组织成M个连续字节单元组成的数组,每个字节都有唯一的物理地址。
    这里写图片描述
    n位地址空间:2^n个地址的虚拟地址空间
    m位地址空间:2^m个地址的虚拟地址空间
    VP(虚拟页):2^p个地址

    • 未分配的
    • 未缓存的:已分配但未缓存在物理内存中
    • 缓存的

    PP(物理页,页帧):2^p个地址
    SRAM缓存:CPU和主存之间的L1,L2,L3高级缓存
    DRAM缓存:

    • 虚拟页缓存在主存
    • 全相联:每一个虚拟页可以放在任意的物理页中
    • 写回:直到这个缓存需要被置换出去,才写入到内存中

    地址翻译
    这里写图片描述

    • VA(虚拟地址)

      • VPN(虚拟页号):
        n-1位~p位.MMU(内存管理单元)通过该值选择PTE的表项
      • VPO(虚拟页面偏移):
        p-1位~0位
    • PA(物理地址)

      • PPN(物理页号):
        m-1位~p位对应页表存储的地址
      • PPO(物理页偏移量):
        p-1位~0位。与VPO相同。

    PTE(页表):
    这里写图片描述

    1. 位于物理内存
    2. 由有效位(是否被缓存)和地址(物理页号或磁盘地址)组成
    3. 局部性原理:程序趋向于在工作集(较小的工作页面)工作。如果工作集超出了物理内存的大小,程序会thrashing(抖动)

    多层页表:
    由于虚拟地址的位数比物理内存的位数要大,为了减少PTE所占的空间,所以采用多层页表,第n层的页表中的条目指向第n+1层的页表,逐层索引下去直到得到物理地址。
    VPV被划分成K段,对应每级页表的索引。
    这里写图片描述

    TLB(翻译后备缓冲器):(图CS6)

    位于MMU,作为页表在CPU上的缓存。

    1. TLBT:VA的n-1位~p+t位
    2. TLBT:VA的p+t+1位~p位

    访问流程:
    这里写图片描述
    这里写图片描述

    1. CPU生成1个虚拟地址并传给MMU。
    2. MMU从TLB取出相应的PTE
    3. TLB不命中:
      1. MMU生成PTE地址,并向主存发送请求。
      2. 主存向MMU返回PTE
        • 页命中:
          1. MMU生成物理地址,并向主存发送请求。
          2. 主存向CPU返回数据
        • 缺页:
          1. PTE的有效位是0,DRAM缓存不命中。
          2. 触发缺页异常后,内核调用异常处理程序。
          3. 异常处理程序返回后重新执行访问指令。
  2. 内存管理
    操作系统为每个进程提供独立的虚拟地址空间。多个虚拟页面的地址可以映射到同一物理页面。

    • 简化共享:不同虚拟空间的地址可以映射到同一物理地址。
    • 简化链接:由于进程使用统一的地址空间
      这里写图片描述链接器生成的可执行文件独立于实际位置。
    • 简化加载:CP566?
  3. 保护内存
    这里写图片描述
    在PTE上添加额外的许可位来控制访问权限(读、写、执行)。当指令违反访问权限时,Linux shell报告段错误异常。

实例:CP573

14 位的虚拟地址(n=14)
12 位的物理地址(n=12)
页大小为 64 字节(P=64)

  • TLB:
    • 4个集合
    • 每个集合有 4 条记录
  • DRAM缓存:
    • 16 个组,每个块 4 个字节
    • 直接映射(即 16 个集合)

CPU读虚拟地址0x03D4:

  1. 根据CP575的表1所示,MMU根据VPN(即TLBI和TLBT)在TLB检索是否有对应的PPN。
  2. 命中则可以通过PPN和VPO获得对应的PA;不命中时,则需要通过PTE获得对应的PPN(也可能缺页)。
  3. MMU将PA发送给缓存。如CP575表2所示,缓存检测CT标记后(可能缓存不命中),读出在偏移量CO的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值