转换过程:
一:概念
1:几个模型:
l 段(section):对应1MB大小(20位)
l 微页(Tiny Page):对应1KB大小(10位)
l 小页(Small Page):对应4KB大小(12位)
l 大页(Large Page):对应64KB大小(16位)
2:地址转换表的两级模型:
l 一级表:包括段表或指向二级表
l 二级表:包括各种页表
翻译过程总是从取一级表开始,与段式相比,页的翻译还需要取二级表
二:过程
1:翻译表基址
当片上的TLB(translation table buffer)里没有所需的虚拟地址对应的项时,启动翻译过程。此时要用到翻译表基址寄存器(TLTR)---CP15的REG2。TLBR只有[31:14]位是有意义的,其余位应该为零,所以一级表必须16KB对齐。
2:取一级表
由TLBR[31:14],加上虚拟地址VA[31:20]位,再加两个0位一起组成了一个32位的物理地址,该地址选中一个4字节的翻译表项(TLTE),称为一级描述符。
3:一级描述符
每个TLTE都是一个描述符,说明了其所关联的1MB虚拟地址是如何映射的(它管的是VA的[19:0]位到物理地址的映射关系)。最低两位的组合标志着四种可能:
l 位[1:0]=0b00:虚拟地址不进行映射,此时访问该TLTE会引发翻译异常,软件可以将位 [31:2]用于其他目的。
l 位[1:0]=0b10:该TLTE表示一个段描述符。
l 位[0]=1:该TLTE表示一个二级表指针,给出一个二级粗页表或二级细页表的物理地址(bit[1]==0对应corse table—CT;bit[1]==1对应fine table--FT)。每种表说明了其所关联的1MB虚拟地址是如何映射的。一个二级粗表为1KB,可映射大、小页。一个二级细表为4KB,可映射大、小、微页。
3.1:段描述符
3.2:粗页表描述符
l [1:0] 粗页表指针标志(0b01)
l [4:2] 这几位是Implementation Defined
l [8:5] domain filed,指明该描述符控制16个域中的一个。
l [9] 未定义,为0
l [31:10]二级粗表的指针,也是二级fetch操作的地址,显然二级粗表必须1KB对齐。
如果一级fetch得到的是一个粗表描述符,则会进行二级fetch,并得到一个二级描述符。
3.3:细表描述符
l [1:0] 细页表指针标志(0b11)
l [4:2] 这几位是Implementation Defined
l [8:5] domain filed,指明该描述符控制16个域中的一个。
l [11:9] 未定义,为0
l [31:12]二级细表的指针,也是二级fetch操作的地址,显然二级粗表必须4KB对齐。
如果一级fetch得到的是一个细表描述符,则会进行二级fetch,并得到一个二级描述符。
4:二级描述符
每个二级粗表项对应4KB虚拟地址的映射,而二级细表项对应1KB虚拟地址映射。每一项都是一个页描述符,分别可以描述一块大于4KB或1KB大小的页,此时同一个描述符会被多次使用,以确保不同虚拟地址都访问相同的物理页。根据二级描述符的最低两位:
l 位[1:0]=0b00: 此时所关联的虚拟地址不映射
l 位[1:0]=0b01: 此时该项位大页描述符,表述64KB的虚拟地址。在一个二级细表中,大页描述符必须重复64次,而在二级粗表中,大页描述符要重复16次,以此确保其所关联的所有虚拟地址都被描述。
l 位[1:0]=0b10:
l 位[1:0]=0b11: