1.VA转MVA
下面这个转换是使用硬件自动完成的
if(VA < 32M) then
MVA = VA | (PID << 25);
else
MVA = VA;
* 利用PID将VA转换成不同VA,那么多个进程的MVA就能存在于同一个页表中,那么在进行进程转换时,只需要取不同的页表就可以了(在实际使用中,进程也确实是小于32M的居多)。而如果是大进程,那么可能需要重新构建页表,那么就需要重新构建页表,那么进程切换的开销会很大。
2.页表转换
- 页表基址(TTB)存在于CP15的C2,
TTB[31:14]:(MVA[31:20]>>18):00
构成页表基址。 - 一级描述符:每一个页表项可以可以是
段页描述符
、粗页描述符
、细页描述符
- 段页描述符,直接指向1MB的内存空间
- 粗页描述符,有256个二级页表项,每个二级页表项指向4KB的内存空间
- 细叶描述符,有1024个二级页表项,每个二级页表项指向1KB的内存空间
二级描述符:
粗页描述符
、细页描述符
可以指向二级描述符,其中包括大页描述符
、小页描述符
、极小页描述符
:- 大页描述符:0b01为大页描述符,[31:16]为大页基址。[15:0]可以表示。但是粗页表中的页表项每项只能表示4KB,所以连续16个条目表示的都是同一个大页描述符。同理,对于细页表中,连续64个条目表示的都是同一个大页描述符。
- 小页描述符:0x10为小页描述符。[31:12]表示的为小页基址。[11:0]可以表示4KB大小。所以如果放在粗页表中,那么正好一一对应。如果放在细页表中,那么细页表中,连续四个条目表示同一个小页描述符
- 极小页描述符:0x11表示为极小页描述符,[31:10]为极小页基址。[9:0]可以表示1KB空间。极小页描述符只能放在细页表中,一个条目对应一个极小页描述符。
3.转换实例
- 一级转换 段转换:
页表基址寄存器[31:14]:MVA[31:20]
组成低两位为零的32位地址,MMU利用这个地址找到段描述符。段描述法的[31:20]:MVA[19:20]
即为PA- 二级转换 小页描述符保存在粗页表中:
页表基址寄存器[31:14]:MVA[31:20]
组成低两位为零的32位地址,MMU利用这个地址找到段描述符。粗页表描述符的[31:10]:MVA[19:12]
,组成低两位为零的32位地址,可以找到小页描述符。- ‘小页描述符[31;12]:MVA[11:0]’组成PA。
4.转换总结
- 一级转换负责转换到1M大小,之后要么使用段转换转换到物理地址。要么使用粗页表或细页表进行二级转换
- 大页[31:16] 小页[31:12] 极小页[31:10]
5.权限控制
- 内存的访问权限检查可以概括为以下两点:
- “域”决定是否对某块内存进行权限检查。
- “AP”决定如何对某块内存进行权限检查。
6. TLB的作用
从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读写数据;使用两级页表时需要3次访存。利用程序执行时的局部性特性,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目,这样可以大幅提高系统性能,这个存储器用来帮助快速地进行地址转换,称为”转译查找缓存”(TLB-Translation Lookaside Table)。
欢迎大家关注博主的公众号