OverView
每个TLB Entry通过4个类域来实现页识别、转译、访问控制以及存储属性的定义。
关于每个域的属性可直接参考手册定义表,下面主要介绍4个类域的技术支持:
1. 页识别 Page Identification
1)虚拟地址产生 Virtual Address Formation
2)地址空间识别符 Address Space Identifier
针对两个独立的虚拟地址空间,由识别符的0和1来区别;
一个针对于系统的中断处理以及系统级代码和数据的访存;
一个针对于应用层的代码与数据的访存;通常,用户态时,MSR的IS(取指)以及DS(取值)位会标记为1,
以允许应用层的代码和数据的访存;
然后,当发生中断时,MSR的IS、DS自动清零,通过系统级的TLB
便可以访问中断的代码以及数据区(也就是说,此时的TLB Entry中
TS=0 <–TS与MSR的IS、DS保持对应);
当然,操作系统也可能把一些系统级的代码与数据区置于应用层地址
空间(当然,对应的TS=1),这样在用户态就可以访问。(例如:
一些共享的系统库函数);那么,此时,如果系统级代码要想访问
这些区域时,也就需要首先设置MSR[IS,DS] = 1来获取应用层的TLB
(除非在系统级TLB中也存在同样可选的定义)。由上,当应用层代码运行时(MSR[IS,DS] = 1),使用TLB entries
需要设置TS=1;反言之,在系统级时(MSR[IS,DS] = 0),TS=0;
当然,尽管在用户模式,也可以设置MSR[IS,DS]=0(特权模式也一样),
但此时需要注意的是,如果是中断发生导致的MSR清零,在修改MSR
[IS,DS]=1时,需要建立对应的页表入口,以保证系统级的中断处理代码
(TS=0)能够正常访问和执行。
* Note:*
* 对于中断处理Handler的有效地址,软件应尽可能保证为其找到 *
* 有效的TLB entry(TS=0,SX=1),否则引起异常后也会导致 *
* SRR0/SSR1(保存中断地址及MS