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。


对于MIPS体系结构当前发展的资料是最新的,相对于第一版而言,增加了许多新材料,包括对MIPS32和MIPS64对体系结构的标准化、多线程等全新的扩展,对广为流行的Linux系统在MIPS体系结构上的实现也做了很好的处理。是初学者较好的了解MIPS体系结构的材料,也是有经验开发人员好的参考材料。 译者说明 译为主。个别情况下参考某些译法进行慘订,或者根捃译者的理解直接翻详。例 如对于 cache alias的翻译,以及第七章对于两种非数NaN的翻译等等 第十一章对于 JTAG probe的翻译,处理有所不同。一种较为广泛的译法 是译成“探针,”译者也采用了这种译法。但“探针”一词在缺乏上下文的情况 下容易引起歧义,也容易让不熟悉的人认为它是一种细长的针形设备。有鉴于 此,文中也给出∫另一种译法,即“接探器。”“接探”一词漾于“JTAG"的音译“接 探格”-一又可以理解为意译,即“·种集成电路的连接测试、探测的标准规 格。”这样理解, probe作为符合“接探格”的设备,译成“接探器”就很自然,兼顾 了音和意,也消除∫歧义。译文中同时采用∫两种译法,但基木侏持一鈫。哪种 译法更好,读者可自己判断 从207年7月27日的草稿,到2007年9月7日的初稿,其作了较大的 修订。此后又有两次局部的修订,更正了译文中的一些错误。2007年12月31日 的版本作了更全而的修订,修订范闱主要是针对书的后半部分。该次修订的幅 度较大,除了纠止笔误外,对些译得不够准确、比较生硬、或者衔接不好的地 方也作了不少调整,某些不够清晰的插图重新制作,个别表格排版有轻微变动。 此外,该次修订在书后增加了《译者补遗》一节,介绍了几条与PC代码有关的 MIPS汇编指小语句的说明,希望对部分读者有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值