本文介绍32bit mips的内存地址空间:
KUSEG:
0x00000000~0x7FFFFFFF 2G
用户空间,只能通过MMU访问
KSEG0:
0x80000000~0x9FFFFFFF 512M
内核空间,在内核态可直接访问,访问时会通过cache
KSEG1:
0xA0000000~0xBFFFFFFF 512M
内核空间,在内核态可直接访问,访问时不通过cache
KSEG2:
0xC0000000~0xFFFFFFFF 1G
内核空间,在内核态访问,但必须通过MMU
在MIPS系统复位后处于内核态,此时访问KSEG0和KSEG1的地址,相当于是访问的物理地址为KSEG0&0x1FFFFFFF和KSEG1&0x1FFFFFFF:
例如:
访问0x80004000和访问0xC0004000,相当于是访问的物理地址0x00004000
在MIPS处于内核状态时可以访问KSEG2内的地址,但是必须通过MMU做映射。
在MIPS处于用户态的情况下只有KUEG的地址空间可用,所以最大只有2G的地址空间,如果访问的地址超出KSEG0就会产生异常
因此MIPS CPU访问一个地址转换为物理地址的方法是:
判断地址在KSEG0和KSEG1内时,直接&0x1FFFFFFF得到物理地址
不在KSEG0和KSEG1时通过TLB做转换得到物理地址