虚拟存储器

目录

1.为什么引入虚存的概念?

2.物理和虚拟寻址

3.地址空间

4.虚拟存储器作为缓存的工具

5.虚拟存储器作为存储管理的工具

6.虚拟存储器作为存储器保护的工具

7.地址翻译

8.存储器映射




1.为什么引入虚存的概念?

  • 一个系统中的进程与其他进程共享CPU和主存资源,存储器更加难以管理。
  • 虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件、内核软件的完美交互
  • 为每个进程提供一个大、一致的私有地址空间。

能力:

  • 高效使用主存:将主存看成存储在磁盘上的地址空间的高速缓存,主存中只保持活动区域,根据需要在主存&&磁盘间来回传送数据。
  • 简化存储器管理:为每个进程提供一致的私有地址空间。
  • 保护每个进程的地址空间不被其他进程破坏。

2.物理和虚拟寻址

物理寻址:主存被组织成一个M个连续的,字节大小的单元,组成的数组。每个字节一个物理地址。CPU生成一个物理地址->送到存储器。

虚拟寻址:CPU生成一个虚拟地址(VA)->转换为适当的物理地址->送到存储器。

地址翻译

  • CPU硬件和操作系统的密切配合
  • CPU芯片上的存储管理单元的专用硬件,利用主存中的查询表动态翻译虚拟地址(表的内容操作系统管理)

 3.地址空间

  • 一个非负整数地址的有序集合(如果是连续:线性地址空间)
  • n位地址空间:虚拟存储器
  •  物理地址空间:M不要求是2的幂次
  • 主存中的每个字节都有一个选自虚拟地址空间的地址,和一个选自物理地址空间的地址。

4.虚拟存储器作为缓存的工具

  • 磁盘上的数据被分割成块,作为磁盘和主存之间的传输单元。
  • 分割成块:虚拟存储器->虚拟页,物理存储器->物理页(页帧)都是虚拟存储器字节
  • 虚拟页面的集合分为(不相交子集):

        ①未分配的:VM系统还未分配(或创建)的页,没有任何数据关联,不占磁盘空间

        ②缓存的:当前缓存在物理存储器的已分配页

        ③未缓存的:没有缓存在物理存储器的已分配页

虚拟存储器

①DRAM缓存的组织结构:

  • 虚拟存储器系统的缓存,在主存中缓存虚拟页
  • DRAM缓存的不命中比SRAM缓存的不命中昂贵,由磁盘服务
  • 虚拟页比较大(4KB~2MB)
  • DRAM缓存全相联,替换算法更复杂
  • 使用写回

直写式 WT,Write Through 与 回写式 WB,Write Back 指的是缓冲内存的工作方式 直写式缓存方式是 当 CPU 要将数据写入内存时除了更新缓冲内存上的数据外也将数据写在 DRAM中以维持主存与缓冲内存的一致性 当要写入内存的数据一多 速度自然就慢了下来

回写式的缓存方式是 每当 CPU 要将数据写入内存时 只会先更新缓冲内存上的数据 随后再让缓冲内存在总线不塞车的时候才把数据写回 DRAM 所以速度自然快得多

②页表

  • 虚拟页在DRAM中吗?在哪个物理页?
  • PTE页表项:虚拟地址空间中每个页都在页表中对应一个条目:1有效位+n地址段(假设)

下图:VP0、VP5未分配,VP3、VP6分配未被缓存,其他被缓存

 

虚拟存储器

③页命中

 如上图,假如读VP2中的虚拟存储器中一个字节,通过虚拟地址->找到页表项PTE2->有效位=1->物理地址get√

④缺页

引用VP3中一个字->找到PTE3->有效位=0->触发一个缺页异常

->调用内核缺页处理程序->选择牺牲页VP4:

  • VP4已被修改:内核将VP4拷贝回磁盘
  • VP4未被修改:不拷贝

->内核从磁盘拷贝VP3到PTE3,返回->重新启动导致缺页的指令->页命中

⑤交换/页面调度

  • 在磁盘和存储器中传送页的活动
  • 从磁盘换入DRAM,从DRAM换出磁盘
  • 按需页面调度:一直等待,当有不命中时才换入页面

⑥分配页面

操作系统分配一个新的虚拟存储器页时,例如,调用malloc->在磁盘上创建空间->更新PTE5,指向磁盘上的页面

虚拟存储器

⑦局部性

  • 保证了在任意时刻,程序往往在一个较小的活动页面集合工作(工作集、常驻集)。
  • 工作集的大小大于物理存储器的大小:颠簸,页面不断换进换出

unix的getrusage检测缺页数量


 5.虚拟存储器作为存储管理的工具

 操作系统为每个进程提供一个独立的页表:多个虚拟页面可以映射到同一个物理页面

虚拟存储器

简化链接:

  • 独立的私有地址空间,每个进程的存储器映像使用相同的基本格式。总是0x80480000/0x400000开始。
  • 链接器可生成全链接的可执行文件,独立于物理存储器中代码和数据的最终位置的。

简化加载:

  • 容易向存储器中加载可执行目标文件,和共享对象文件
  • Linux加载器,分配虚拟页的一个连续的片chunk),从0x08048000/0x400000开始虚拟页标记为无效,页表条目指向目标文件中适当位置。
  • 加载器不实际从磁盘拷贝数据到存储器,引用时按需调入。

简化共享

  • 独立地址空间,为操作系统提供管理用户进程,和操作系统自身间共享的一致机制。
  • 私有数据、代码、堆、栈,操作系统新建页表,映射到不同物理页面。
  • 共享的(内核代码,库程序),操作系统将不同进程中适当的虚拟页面映射到相同的物理页面。

简化存储器分配

  • 虚拟存储器向用户进程,提供了一个简单的分配额外存储器的机制。
  • 如malloc,操作系统分配k个连续的虚存页面,映射到物理存储器中任意位置的k个物理页面。

6.虚拟存储器作为存储器保护的工具

 

7.地址翻译

8.存储器映射