VM
一、物理和虚拟寻址
物理寻址
虚拟寻址
二、地址空间
地址空间是一个非负整数地址的有序集合:
如果地址空间中的整数是连续的,那么我们说它是一个线性地址空间。
为了在一个带虚拟内存的系统中,CPU 从一个有 N=2^n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间。
一个地址空间的大小是由表示最大地址所需要的位数来描述的。例如,一个包含n = 2^n个地址的虚拟地址空间就叫做一个 n 位地址空间。现代系统通常支持 32 位或者 64 位虚拟地址空间。
一个系统还有一个物理地址空间,对应于系统中物理内存的 M 个字节
允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。这就是虚拟内存的基本思想。主存中的每字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。
三、虚拟内存作为缓存的工具
和存储器层次结构中其他缓存一样,磁盘(较低层)上的数据被分割成块,这些块作为磁盘和主存(较高层)之间的传输单元。
VM 系统通过将虚拟内存分割为称为虚拟页(VP)的大小固定的块来处理这个问题。物理内存被分割为物理页(PP),大小也为 P 字节(物理页也被称为页帧(page frame))。
VP
未分配的:VM 系统还未分配(或者创建)的页。未分配的块没有任何数据和它们相关联,因此也就不占用任何磁盘空间。
未缓存的:未缓存在物理内存中的已分配页。
已缓存的:当前已缓存在物理内存中的已分配页。
页表的工作原理
页表 PT
页表条目PTE
页命中:
我们的cpu想访问虚拟地址所在的虚拟页(VP3),根据页表,找出页表中第三条的值.判断有效位。 如果有效位为1,DRMA缓存命中,根据物理页号,找到物理页当中的内容,返回。
缺页:
若有效位为0,参数缺页异常,调用内核缺页异常处理程序。内核通过页面置换算法选择一个页面作为被覆盖的页面,将该页的内容刷新到磁盘空间当中。然后把VP3映射的磁盘文件缓存到该物理页上面。然后页表中第三条,有效位变成1,第二部分存储上了可以对应物理内存页的地址的内容。
分配页:
用 malloc 的结果。在这个示例中,VP5 的分配过程是在磁盘上创建空间并更新 PTE 5 , 使它指向磁盘上这个新创建的页面。
局部性
局部性(locality)原理导致这个机制的命中率比较高
局部性原则保证了在任意时刻,程序将趋向于在一个较小的活动瓦面 (active page)集合上工作,这个集合叫做工作集(working set)或者常驻集合(resident set)。
如果工作集的大小超出了物理内存的大小,那么程序将产生一种不幸的状态,叫做抖动(thrashmg),这时页面将不断地换进换出。
四、 虚拟内存作为缓存管理的工具
五、虚拟内存作为内存保护的工具
六、地址翻译
地址翻译是虚拟地址空间中的元素和物理地址空间中元素之间的映射
使用页表地址翻译
1、读页表基地址得到首地址,和虚拟页号一起计算页号所在地址
2、check有效位,若1则得到PPN(物理页号),再和VPO一起得到物理地址。若0则缺页中断。
页命中
缺页
利用TLB加速地址翻译
端到端的地址翻译
上图TLB是四路组相连,所以MMU一开始分析虚拟地址的时候会将低两位(TLBI)作为组索引(图中的6、7两位,有点偏),得到是TLB中的哪一行,再遍历这行的四项,对比标记位(TLBT)看看是否匹配,若是(且有效位为1),则直接得到物理地址,若不是,则继续访问缓存。
先去TLB里面找,找不到 再去页表里面找,找到对应的物理地址的PPN,物理地址对应的PPN加上PPO得到物理地址,再根据物理地址去cache里面找对应的内容。
多级页表
nNnQK-1650973912069)]
先去TLB里面找,找不到 再去页表里面找,找到对应的物理地址的PPN,物理地址对应的PPN加上PPO得到物理地址,再根据物理地址去cache里面找对应的内容。