MIPS虚拟地址到物理地址转换过程

    开启虚拟地址使能的系统上,CPU发起的访问最初都是虚拟地址VA,而真正从物理主存中获取内容需给内存控制器的地址是物理地址PA,所以在CPU发起访问后,需要一系列的动作完成VA到PA的转换,这需要OS和硬件协同来完成。一些概念如MMU,TLB,页表等如下所述:http://blog.csdn.net/kklvsports/article/details/9208511。简要过程如下:VA以页表大小取余,得到PA的低位,关键是PA的高位(PFN)如何得到。内存中存放着页表,页表记录的是VPN到PFN的对应关系(一般可能会分为多级页表),以VPN查询页表即可获得PFN。为了加速这个查询,引入了TLB,TLB记录的是一个内存页表的一个子集,相当于是内存页表的缓存。所以MMU在以VPN索引先在TLB中查找页表,如果查询TLB miss则会产生异常,由异常处理程序进行地址转换。

VA转换需要的相关寄存器:

MIPS虚拟地址到物理地址转换过程_第1张图片

EntryHi寄存器,各个位域的含义如下:

ASID: Address Space ID地址空间标示符

VPN2:Virtual PageNumber 虚拟页号,2意思mips映射两个物理页表

FillVPN2的扩展

R:MIPS64才有,意义如下

MIPS虚拟地址到物理地址转换过程_第2张图片

PageMask寄存器用于配置页表大小:

MIPS虚拟地址到物理地址转换过程_第3张图片


EntryLo0/EntryLo1寄存器

MIPS虚拟地址到物理地址转换过程_第4张图片

Gglobalflag全局标志,如果该bit置位,在TLB匹配的时候忽略ASID

Vvalidflag有效标志

Ddirtyflag脏”标志,指示该页是否可写,为1表示可写

Ccacheabilityand Coherency

PFNpageframe number物理帧号

Fill: 该位域对写操作,读操作返回全0

虚拟地址转换为物理地址过程为:

虚拟地址的高位(VPN)和当前程序的ASID送给TLB,与TLB中的所有entry表项同时进行匹配,匹配过程中如果有如下都满足的TLB表项,从中读取PFN,V,D

        1.当前程序(进程)ASID等于TLB表项中的ASID(EntryHiGbit置位的话,不比较ASID)

2.虚拟地址的bit63~62TLB表项的R字段相同

3.虚拟地址的相应位域和TLB的VPN2相同,相应位域取决于PageMask寄存器设置的页表大小

注意最终转换是否成功取决于V,D域。如果V无效,该entry无效,产生TLB无效异常;如果D指示不可写,而有写操作会产生TLB修改异常。如果没有上述异常,即是TLB命中,命中entryPFN和虚拟地址低位(1KBpage的话是低10bit4KBpage的话低12bit)构成最终的物理地址。



你可能感兴趣的:(MIPS)