See Mips Run 之 MMU

MIPS使用TLB实现MMU功能,TLB的作用是将程序地址(虚拟地址)转换为物理地址。转换的好处主要在于:

  • 虚拟内存,实现虚拟内存连续,物理内存不连续。虚拟内存可以大于可用物理内存。
  • 内存保护,对指定的内存设置只读标志。这样就能保护程序中的.text段等,提高安全性。

TLB结构

TLB实际是一个内容索引存储器,速度和Cache相当。可以将TLB想象为一个结构体数组,数组大小一般为16/32/64。每行容纳一对相邻的虚拟页面对应的两个单独的物理地址。每行的结构如下:


VPN2:虚拟页号,虚拟地址的bit31-bit13,bit12-bit0属于页内地址。

ASID:地址空间标示符,页表中保存的是操作系统当前地址空间的标识。

PageMask:页掩码,可以用来映射更大的页。

G:全局标志位,设置时不需要理会ASID。

PFN:物理页号

Flags V D C:物理页标志,是否有效?是否脏?是否被缓存


读写TLB中数据需要用到的寄存器:

Index:用于读写时定位一行具体的TLB表项,语义和数组的索引一致。

Random:保存一个TLB表项时,随机将新TLB进行替换

Wired:使用它可以将TLB表中一些行永久存在表中不被替换。

EntryHi:用于读写VPN2/ASID

EntryLo0/EntryLo1:用于读写PFn/V/D/C


TLB操作命令:

tlbr:读取index指定的TLB行       EntryHi/EntryLo0/EntryLo1 <---- TLB[index]

tlbwi:写index指定的TLB行        EntryHi/EntryLo0/EntryLo1  ----->TLB[index]

tlbwr: 写Random指定的TLB行  EntryHi/EntryLo0/EntryL1/PageMask   -> TLB[random]            

tlbp: 查找TLB行                            根据EntryHi得到index (这条命令只是更新index,若要得到数据还需要使用tlbr)

更改TLB表项时,先写入EntryHi和EntryLo中必要的域,然后使用tlbwi/tlbwr指令传送到适当的TLB表项。


页表

TLB一般只有16-64行,因此最多只能查询到64*4K大小的虚拟地址/物理地址转换。而对于32位MIPS来说,虚拟地址空间远远超过这个范围。因此操作系统会在内存中为每个地址空间构建一个页表。

页表可以看作是用VPN做索引的线性数组,每行的格式和EntryLo寄存器匹配。每行大小为2X64位(兼容64位)

为了节省内存和方便切换上下文,页表被映射到kseg2地址空间。这个地址空间也是mapped。所以对于页表中间未用的空隙,实际上不需要分配物理地址。


页表和TLB的关系就像内存和Cache一样,当CPU遇到一个虚拟地址,会将虚拟地址所在的虚拟页号和当前地址空间ID组合,并在TLB中进行查询。查询的结果可能是:

命中:输出EntryLo0/EntryLo1得到物理页地址,并根据虚拟页内地址定位物理页内地址。

不命中:系统为未命中提供了一个异常处理入口,注意硬件会自动复制EntryHi。处理程序会访问页表,并将页表中对应行的数据替换到TLB中。这中间涉及到异常嵌套的问题,因为分配的页表也是在映射空间中,因此,读取页表也会触发TLB填充异常。对于TLB嵌套异常需要特殊处理。为了加快页表访问和定位速度,MIPS提供了Context寄存器。



Context寄存器和BadVaddr寄存器

在TLB未命中情况下,硬件会自动对Context寄存器和BadVAddr寄存器进行赋值。

其中BadVAddr存储的是发生TLB异常的虚拟地址

Context(BadVPN2)存储的是BadVAddr的高位。

结合Context(PTEBase),Context能够很快定位到页表中的一行,从而快速重填TLB。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值