《计算机组成与设计》阅读笔记——虚拟存储器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/winter_wu_1998/article/details/84952897
  • 虚拟存储器(VM)
    • 主存也可以成为磁盘的cache,这项技术叫做虚拟存储器
    • 每个程序有自己独立的内存空间
    • 主存只要存放程序中活跃的那一部分即可,这也是局部性原理
    • VM和cache的原理是一样的,不过VM中块被叫做页
    • 采用全相联的方式组织
      • 降低了缺失率
      • 可以使用复杂的替换机制优化
      • 由于使用了页表,不需要进行查找
      • 和直接映射组织法很像,主要区别是多了一个额外的页表,同时可以在任意位置替换,而不是一一对应
  • 构造动机
    • 允许在多个程序之间同时安全地共享存储器
    • 消除有限的主存容量对程序设计的限制
  • 虚拟地址
    • 虚拟地址可以比物理地址长
    • 虚拟地址由处理器产生,再由页表转换成物理地址(即主存中的地址)
    • 连续的虚拟地址可以被映射到不连续的物理地址
      • 这种重定位允许我们将程序加载到主存的任意位置
    • 多个虚拟地址可以映射到同一个物理地址
      • 这使得不同的程序可以共享一部分代码
    • 虚拟地址分割为虚拟页号和页内偏移
      • 物理页和虚拟页一样大
      • 虚拟页号转换为物理页号,偏移不变

在这里插入图片描述

  • 页表

    • 存放在主存中

    • 以虚拟页号为索引,存放物理页号

    • 每个程序都有私有的页表

      • 每个程序都有一个页表寄存器指向相对的页表开头
      • 只保存寄存器,并不保存整个页表
    • 更新页表由操作系统负责

    • 页表不需要tag,因为包含了每个可能的虚拟页的映射

    • 减少页表大小

      • 使用多级页表,未被使用的虚拟内存段在第二级即以上不分配页表项
      • 将未使用的页表放入磁盘中
        在这里插入图片描述
  • 缺页

    • 操作系统在创建一个进程(程序)的时候会在磁盘上单独分配一部分空间来储存物理页
      • 这个区域被称作交换区
      • 同时会创建一个数据结构(新页表)来储蓄物理页到磁盘页的映射,这个结构可能是页表的一部分,也可能单独存放在主存上
    • 缺页后被换出的物理页被写入交换区
    • 由于写的时间很长,因此最好采用回写法
    • 由于对于磁盘访问时间传输数据的时间要少很多,因此把整个页通过写回法放入磁盘中更好
  • 快表(TLB)

    • 由于页表储存在主存中,每次访问虚拟地址需要访问两次主存
      • 第一次获得物理地址
      • 第二次获得数据
    • 对于页项的使用也具有局部性
    • 通过一个特殊的cache(TLB)存储最近使用过的页表项
      • 全相联组织
  • 结合主存的cache和页表的cache(TLB)

    • cache采用物理地址
      • 先要访问TLB再访问cache,如下1图
    • cache采用虚拟地址
      • 直接通过虚拟地址访问cache,当cache缺失时转成物理地址,如下2图
      • 问题是可能不同程序将不同的虚拟地址映射到同一个物理地址,于是同一个物理地址中的数据可能存在于cache中不同的位置,两个程序不知道相互间的数据变化
    • 如果页表发生缺页,那么cache不可能命中.如下3图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 虚拟存储器中的保护
    • 用户进程不能更改自己的页表,操作系统负责修改页表。
    • 页表放在保护地址空间
    • 当从进程A切换到进程B时,不仅需要切换页表寄存器指向,还要清空TLB中属于A的表项
      • 或者可以通过增加一个进程标识符来避免清空

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/84952897