VM部分整理
前言
- 为什么需要VM?
- VM的三大重要能力是什么?
- VM为谁提供地址空间?
知识梳理
- 一个系统中的进程是与其他进程共享 CPU 和主存资源的。
- 它为每个进程提供了一个大的、一致的和私有的地址空间。
- VM三大重要能力:
- 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
- 它为每个进程提供了一致的地址空间,从而简化了内存管理。
- 它保护了每个进程的地址空间不被其他进程破坏。
虚拟存储系统概念
- 加载时是否真正从磁盘调入信息到主存?
答:不会从磁盘调入,只是将虚拟页和磁盘上的数据/代码建立对应关系,称为“映射”。
在发生缺页时会“按需调页”。
虚拟内存和物理内存
- 每一个字节都有唯一的虚拟地址和唯一的物理地址。
- 主存被组织为一个由 M 个连续的字节大小的单元组成的数组。
- 第一个字节的地址位0,第二个字节的地址为1,依次类推。
计算:给出字节数求对应的地址空间的位数?
n位地址空间 包含个地址数量,一个字节对应一个地址
所以M个字节数,就是指中m位地址空间
- 虚拟内存VM被组织为一个由存放在磁盘上的 N 个连续的字节大小的单元组成的数组。
- 每个字节唯一的虚拟地址就作为数组的索引。
VP 0
就代表Virtual Page 0
,就是指虚拟地址为0。这点在理解图很重要。- 一个虚拟地址可以被分为两部分:虚拟页号VPN和虚拟页偏移量VPO
- DRAM 缓存是全相联的,所以任意物理页都可以包含任意虚拟页。
- 就是说
PP 0
并不一定对应着VP 0
,两者索引没有任何关系。所以连续的页VP映射后可能会有不连续的PP。
- 就是说
- VP与PP
- VM 系统通过将虚拟内存分割为称为虚拟页(Virtual Page,VP)的大小固定的块,每个虚拟页的大小为
字节。
- 物理内存被分割为物理页(Physical Page,PP),大小也为 P 字节(物理页也被称为页帧(page frame)或者页框)。
- VM 系统通过将虚拟内存分割为称为虚拟页(Virtual Page,VP)的大小固定的块,每个虚拟页的大小为
注意:
- 一个VP的大小并不是一个字节的大小
- VP 与 PP 的大小相等
页表
- 注意:这种
PTE 0
并不是页表的一部分;并且PTE 0
中数字代表着虚拟页号VPN - 页表就是一个页表条目(Page Table Entry,PTE)的数组。
因此,每一行都代表着一个PTE。
假设每个 PTE 是由一个有效位(valid bit)和一个 n 位地址字段组成的。
分页
- 是否需要将一个进程的全部都装入内存?
答:不需要。根据程序的局部性调入当前活跃的页面,其余留在主存中。
虚拟存储管理概念就是“按需调页”
地址翻译
注意点:
- MMU在接收到CPU发送的虚拟地址后,会去页表中查询,页表中每一行都是一个PTE,所以MMU只能通过VPN查询到PTEA,即 PTE的地址。当然,加入TBL之后,MMU可以通过VPN查询TLB,直接得到PTE。
对比页表的TBL,两者都是将VPN作为索引,同时每一行都是一个PTE
但是页表在主存里,TLB在MMU 中,减少访问主存次数,加快了地址翻译速度
- 最后对PPN和PPO进行构造物理地址的也是MMU
缺页注意点:
- 页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协作完成。
操作系统内核负责维护主存页表的内存,以及在磁盘的DRAM之间来回传送页面。
- 是MMU在接收到PTE之后触发异常,因为MMU会查询PTE 中的有效位,如果有效位为零则说明该页没有缓存在主存里。此时MMU传递 CPU 中的控制到操作系统内核中的缺页异常处理程序,这里便体现了硬件和操作系统内核协作完成。
- 缺页处理程序页面调入新的页面,会更新内存中的 PTE。之后缺页处理程序返回到原来的进程,再次执行导致缺页的指令。CPU 将引起缺页的虚拟地址重新发送给 MMU。
在取出PTE之后MMU需要对PTE的有效位进行检查,那么可能会出现的异常情况:
有效位为1时要去考虑保护违例或访问违例的情况
将 VM 与物理寻址的高速缓存结合
- 高速缓存无需处理保护问题,因为访问权限的检査是地址翻译过程的一部分。
- 页表条目可以缓存,页表条目也是有地址的PTEA。可以大幅度减少访问主存的次数。
因此,PTEA命中则返回PTE地址,不需要去访问主存。
PTEA不命中则再去内存找PTE。
利用TLB加速地址翻译
关于TLB:
- 在 MMU 中包括了一个关于 PTE 的小的缓存,称为翻译后备缓冲器(Translation Lookaside Buffer,TLB)
- TLB 每一行都保存着一个由单个 PTE 组成的块。
- TLB是为了减少主存访问页表的次数
- TLB中的页表是由Cache中的页表项组成的,经常要查的页表放在Cache中
关于TLB内部不同组成部分:
地址翻译的不同结果
寻址方式:
- TLB是虚拟地址寻址的
- cache、主存是物理地址寻址的
- 磁盘是磁盘的方式地址寻址的 。
结果:
- CPU产生一个虚拟地址VA到MMU中,MMU首先根据虚拟页号VPN在TLB中找PTE。TLB命中,则MMU检查PTE的有效位,命中则取出PA,用PA在cache中找该PA对应的数据,如果找到,就把数据从cache中返回给CPU。
- 如果得到的 PTE 是无效的,那么就产生一个缺页,内核必须调入合适的页面,重新运行这条加载指令。
- 如果 TLB 不命中,那么 MMU根据VA,应用一定的逻辑计算出PTE的物理地址PTEA,用PTEA在cache中找PTE。
- 如果cache命中,把PTE返回给MMU,并填充到TLB中。
- 如果cache未命中,则用PA从主存中取数据,返回数据并填充cache对应部分。
本文作者:小羊不叉烧
本文链接:https://www.cnblogs.com/hereskiki/p/16972534.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步