不如多看书|

小羊不叉烧

园龄:3年5个月粉丝:5关注:7

VM部分整理

前言

  1. 为什么需要VM?
  2. VM的三大重要能力是什么?
  3. VM为谁提供地址空间?

知识梳理

  1. 一个系统中的进程是与其他进程共享 CPU 和主存资源的。
  2. 它为每个进程提供了一个大的、一致的和私有的地址空间。
  3. VM三大重要能力:
  • 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
  • 它为每个进程提供了一致的地址空间,从而简化了内存管理。
  • 它保护了每个进程的地址空间不被其他进程破坏。

虚拟存储系统概念

image.png

  1. 加载时是否真正从磁盘调入信息到主存?

答:不会从磁盘调入,只是将虚拟页和磁盘上的数据/代码建立对应关系,称为“映射”。
在发生缺页时会“按需调页”。

虚拟内存和物理内存

  1. 每一个字节都有唯一的虚拟地址和唯一的物理地址。
  2. 主存被组织为一个由 M 个连续字节大小的单元组成的数组
    1. 第一个字节的地址位0,第二个字节的地址为1,依次类推。

计算:给出字节数求对应的地址空间的位数?
n位地址空间 包含 个地址数量,一个字节对应一个地址
所以M个字节数,就是指中m位地址空间

  1. 虚拟内存VM被组织为一个由存放在磁盘上的 N 个连续字节大小的单元组成的数组。
  2. 每个字节唯一的虚拟地址就作为数组的索引
  3. VP 0就代表 Virtual Page 0,就是指虚拟地址为0。这点在理解图很重要。
  4. 一个虚拟地址可以被分为两部分:虚拟页号VPN和虚拟页偏移量VPO
  5. DRAM 缓存是全相联的,所以任意物理页都可以包含任意虚拟页。
    1. 就是说PP 0并不一定对应着VP 0,两者索引没有任何关系。所以连续的页VP映射后可能会有不连续的PP。
  6. VP与PP
    1. VM 系统通过将虚拟内存分割为称为虚拟页(Virtual Page,VP)的大小固定的块,每个虚拟页的大小为 字节。
    2. 物理内存被分割为物理页(Physical Page,PP),大小也为 P 字节(物理页也被称为页帧(page frame)或者页框)。

注意:

  1. 一个VP的大小并不是一个字节的大小
  2. VP 与 PP 的大小相等

image.png

页表

  1. 注意:这种PTE 0并不是页表的一部分;并且PTE 0中数字代表着虚拟页号VPN
  2. 页表就是一个页表条目(Page Table Entry,PTE)的数组。

因此,每一行都代表着一个PTE。
假设每个 PTE 是由一个有效位(valid bit)和一个 n 位地址字段组成的。

image.png

分页

  1. 是否需要将一个进程的全部都装入内存?

答:不需要。根据程序的局部性调入当前活跃的页面,其余留在主存中。

虚拟存储管理概念就是“按需调页”

地址翻译

注意点:

  1. MMU在接收到CPU发送的虚拟地址后,会去页表中查询,页表中每一行都是一个PTE,所以MMU只能通过VPN查询到PTEA,即 PTE的地址。当然,加入TBL之后,MMU可以通过VPN查询TLB,直接得到PTE。

对比页表的TBL,两者都是将VPN作为索引,同时每一行都是一个PTE
但是页表在主存里,TLB在MMU 中,减少访问主存次数,加快了地址翻译速度

  1. 最后对PPN和PPO进行构造物理地址的也是MMU

image.png

缺页注意点:

  1. 页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协作完成。

操作系统内核负责维护主存页表的内存,以及在磁盘的DRAM之间来回传送页面。

  1. MMU接收到PTE之后触发异常,因为MMU会查询PTE 中的有效位,如果有效位为零则说明该页没有缓存在主存里。此时MMU传递 CPU 中的控制到操作系统内核中的缺页异常处理程序,这里便体现了硬件和操作系统内核协作完成。
  2. 缺页处理程序页面调入新的页面,会更新内存中的 PTE。之后缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU 将引起缺页的虚拟地址重新发送给 MMU。

image.png
image.png
在取出PTE之后MMU需要对PTE的有效位进行检查,那么可能会出现的异常情况:
有效位为1时要去考虑保护违例或访问违例的情况
image.png

将 VM 与物理寻址的高速缓存结合

  1. 高速缓存无需处理保护问题,因为访问权限的检査是地址翻译过程的一部分
  2. 页表条目可以缓存,页表条目也是有地址的PTEA。可以大幅度减少访问主存的次数

因此,PTEA命中则返回PTE地址,不需要去访问主存。
PTEA不命中则再去内存找PTE。

image.png

利用TLB加速地址翻译

关于TLB:

  1. 在 MMU 中包括了一个关于 PTE 的小的缓存,称为翻译后备缓冲器(Translation Lookaside Buffer,TLB)
  2. TLB 每一行都保存着一个由单个 PTE 组成的块。
  3. TLB是为了减少主存访问页表的次数
  4. TLB中的页表是由Cache中的页表项组成的,经常要查的页表放在Cache中

image.png
关于TLB内部不同组成部分:
image.png
image.png

地址翻译的不同结果

image.png
寻址方式:

  1. TLB是虚拟地址寻址的
  2. cache、主存是物理地址寻址的
  3. 磁盘是磁盘的方式地址寻址的 。

结果:

  1. CPU产生一个虚拟地址VA到MMU中,MMU首先根据虚拟页号VPN在TLB中找PTE。TLB命中,则MMU检查PTE的有效位,命中则取出PA,用PA在cache中找该PA对应的数据,如果找到,就把数据从cache中返回给CPU。
  2. 如果得到的 PTE 是无效的,那么就产生一个缺页,内核必须调入合适的页面,重新运行这条加载指令。
  3. 如果 TLB 不命中,那么 MMU根据VA,应用一定的逻辑计算出PTE的物理地址PTEA,用PTEA在cache中找PTE。
    1. 如果cache命中,把PTE返回给MMU,并填充到TLB中。
    2. 如果cache未命中,则用PA从主存中取数据,返回数据并填充cache对应部分。

本文作者:小羊不叉烧

本文链接:https://www.cnblogs.com/hereskiki/p/16972534.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   小羊不叉烧  阅读(125)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起