深入理解计算机系统基础虚拟内存---端到端的地址翻译

端到端的地址翻译

参考:深入理解计算机系统基础第三版



提示:以下是本篇文章正文内容,下面案例可供参考

一、基础概念

1.地址翻译:地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS)中元素之间的映射。

地址翻译符号小结:
在这里插入图片描述

**虚拟存储器,被组织成为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,每个字节都有一个唯一的虚拟地址,作为到数组的索引。将主存看成一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,为每个进程提供了一致的地址空间,保护了每个进程的地址空间不被其他进程破坏。计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个惟一的物理地址,从0开始。根据虚拟寻址,CPU生成一个虚拟地址,通过MMU翻译成物理地址,来访问主存。
**页:虚拟存储器(VM)被分割为虚拟页(VP),物理存储器被分割为物理页(PP),大小为P字节,P=2p。
虚拟页面的集合分为三个不相交的子集:
未分配的:VM系统还未分配的页。未分配的块没有数据和它们相关联,不占用磁盘空间。
缓存的:当前缓存在物理存储器中的已分配页。
未缓存的:没有缓存在物理存储器中的已分配页。
**页表:页表记录了虚拟页和物理页的映射关系。虚拟地址空间中的每个页在页表中的一个固定偏移量处都有一个页表条目(PTE)。每个PTE由一个有效位和一个n位地址字段组成。有效位表明了该虚拟地址当前是否被缓存在主存中,地址字段表示主存中物理页的起始位置。
**页命中:CPU读虚拟存储器的一个字时,地址翻译硬件将虚拟地址作为一个索引,定位到一个PTE,判断有效位,根据PTE中的物理存储器地址构造出这个字的物理地址。
**缺页:缺页,缓存不命中。触发一个缺页异常。

二、解题过程

1.例题假设

例题:

这个示例是运行在有一个TLB和L1 d-cache的小系统上。做出如下假设:
*内存是按字节寻址的。
*内存访问是针对1字节的字的(不是4字节的字)。
*虚拟地址是14位长的(n=14)。
*物理地址是12位长的(m=12)。
*页面大小是64字节(p=64)。
*TLB是四路组相联,总共有16个条目。
*L1 d-cache 是物理寻址、直接映射的,行大小为4字节,面总共有16个组。
在这里插入图片描述

     图9-19展示了虚拟地址和物理地址的格式。因为每个页面是2^6=64个字节,所以虚拟地址和物理地址的低六位分别作为VPO和PPO。虚拟地址的高8位作为VPN。物理地址的高6位作为PPN。

在这里插入图片描述
    此图展示了小内存系统的一个快照,包括TLB(图a)、页表的一部分(图b)和L1高速缓存(图c)。在TLB和高速缓存的图上边,我们还展示了访问这些硬件设备时硬件是如何划分虚拟地址和物理地址的位的。
*TLB 。TLB是利用VPN的位进行虚拟寻址的。因为TLB有四个组,所以VPN的低2位就作为组索引(TLBI)。VPN中剩下的高6位最为标记(TLBT),用来区别可能映射到同一个TLB组的不同的VPN。
*页表。这些页表是一个单级设计,一共有2^8=256个页表条目(PTE)。然而,我们只对这些条目中的开头16个感兴趣,为了方便,我们用索引它的VPN来标识每个PTE;但是要记住这些VPN并不是页表的一部分,也不储存在内存中。另外,注意每个无效PTE的PPN都用一个破折号来表示,以加强一个概念:无论刚好这里存储的是什么位值,都是没有任何意义的。
*高速缓存。直接映射的缓存是通过物理地址中的字段来寻址的。因为每个块都是4字节,所以物理地址的低两位作为块偏移(CO)。因为有16组,所以接下来的4位就用来表示组索引(CI)。剩下的6位作为标记(CT)。

2.课后习题

示例:

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

解:
A. 虚拟地址:0x03d7 十六进制写成二进制为 0000 0011 1101 0111 ,虚拟地址是14位长,即 00001111010111。
B.虚拟地址低6位作为VPO,即010111 。高8位为VPN,即00001111,写成十六进制为0x0F。
因为TLB有四个组,所以VPN的低2位就作为组索引(TLBI),即11,写成十六进制为0x03。VPN中剩下的高6位最为标记(TLBT),即000011,写成十六进制为0x03。
去表a中查找数据。TLBI为03,是第三组,标记位为03,查找数据得 PPN为0D。TLB命中,没有缺页。
C.已知PPN为0D,PPO等于VPO,物理地址高6位为PPN,低6位为PPO,由此可得,物理地址格式为001101010111。
D.因为每个块都是4字节,所以物理地址的低两位作为块偏移(CO),即11,写成十六进制为0x3。因为有16组,所以接下来的4位就用来表示组索引(CI),即0101,写成十六进制为0x5。剩下的6位作为标记(CT),即001101,写成十六进制为0x0D。查c高速缓存表得:返回的缓存字节为0x1D


总结

      以上就上端到端的地址翻译的基础知识和课后习题。做此类题型,要牢记各种基础概念,清楚地址翻译过程,能够根据各种标志从页表、高速缓存表中查到有效信息。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值