分类:
2009-01-03 12:37:47
本文讲述了MIPS64架构所支持的几种工作模式,内容来源自MIPS64架构手册第三卷。
MIPS64 PRA需要两种工作模式:用户模式与内核模式。PRA还支持两种额外模式:超级用户模式和EJTAG调试模式。
调试模式:当CP0 Debug寄存器的DM位为1时,处理器工作在调试模式,可以访问所有资源。
内核模式:当Debug寄存器DM位为0,并且满足下面任一条件。
CP0 Status寄存器的KSU为0b00
Status寄存器的EXL为1
Status寄存器的ERL为1
处理器上电时进入内核模式,在中断,异常或错误的情况下也进入内核模式。当上面三个条件均不成立时,处理器返回用户模式或者超级用户模式,一般通过eret指令。
超级用户模式:当满足下面所有条件时,工作在超级用户模式
Debug寄存器的DM为0
Status寄存器的KSU为0b01
Status寄存器的EXL和ERL均为0
用户模式:当满足下面所有条件时,工作在用户模式
Debug[DM] = 0
Status[KSU] = 0b10
Status[EXL]与Status[ERL]均为0
使能64位地址:
Status[KX]=1时,可以访问内核64位地址空间
Status[SX]=1时,可以访问超级用户64位地址空间
Status[UX]=1时,可以访问用户64位地址空间
处理器的工作模式与64位地址使能与否无关。比如,处理器工作在内核模式下,访问用户空间地址由UX控制,而非KX。
如果试图访问没有使能的64位地址空间,将引起地址错误异常(Address Error Exception, AdEL或者AdES)
TLB未命中时,异常向量由64位地址使能决定。如果64位地址未使能,使用TLB Refill Vector,如果使能了,则使用XTLB Refill Vector。
使能64位操作:下列任一条件满足即可
处理器工作在内核模式,超级用户模式或者调试模式下
Status[PX]=1
处理器工作在用户模式下,Status[UX]=1
后两条表明,PX为1或者UX为1,用户模式中进行64位操作都是可以的。
当未使能而执行64位操作时,将引发Reserved Instruction Exception
64位浮点操作使能:下列任一条件满足
Release1实现下,只有64位操作使能,64位浮点操作才被使能
Release2实现下,如果FIR的F64位为1,则使能。
64位FPR使能
访问64位FPRs由Status[FR]控制,如果FR为1,FPRs解释为32个64位寄存器,若FR为0,FPRs解释为32个32位寄存器,此时64位数据按奇偶寄存器对存储。
协处理器0使能:满足下列任一条件
处理器工作在内核模式或调试模式下
Status[CU0]为1
即CU0位是控制用户模式,超级用户模式访问CP0的权限的。