【MIPS CPU 体系结构概述1】连载3:

4. MMU和 内存管理

对于MIPS的MMU和相应的内存管理,读者需要注意的是:不存在x86或PowerPC的实模
式。
这一点是MIPS CPU 的一个很重要的特点(或缺点)。

* MIPS 存储体系结构
这里笔者不讨论MIPS64的存储结构,而只是关注32位机器。 MIPS将存储空间划分为4大块--kuseg, kseg0,kseg1 and kseg2. 0xFFFF FFFF

mapped kseg2
0xC000 0000
unmapped uncached kseg1
0xA000 0000
unmapped cached kseg0
0x8000 0000
2G kuseg
0x0000 0000

对于上述结构,读者要记住以下几点:

* 当开电(Power On)的时候,只有kseg0 and kseg1 是可以存取的。

*kseg0 512M(From 0x8000 0000 to 0xA000 0000)直接被缺省映射到物理内存0x0000 0000 to 0x2000 0000, 并且是缓存被开启的(cache-enabled)
*kseg1 512M(From 0xA000 0000 to 0xC000 0000)直接被缺省映射到物理内存0x0000 0000 t0 0x2000 0000,并且是没有缓存的(non cachable)。
以上两点对于理解基于MIPS的驱动程序或操作系统的启动是至关重要的。细心的读者会 发现:kseg1有点象其他CPU的实模式方式。
*在加电时(POWER ON)!(虚拟)地址from 0x0000 0000 to 0x8000 0000 是不可以存取的,必须 等到MMU TLB初始化之后才可以。

*同理对从0xC000 0000 到0xFFFF 0000的地址是不可存取的。

*MIPS的CPU运行有3个态--User Mode(用户态); Supervisor Mode(管理态) 和Kernel
Mode(核心态)。 简单而言,读者只需要了解用户态和核心态。操作系统一般而言也只 利用这个CPU的状态。
下面是读者必须非常清楚的:
×在用户态下,CPU能而且只能存取kuseg的地址。
×CPU必须运行在管理态或核心态下去存取kseg0,kseg1和kseg2的地址空间。
与其他CPU一样,MIPS CPU是通过TLB 来将虚拟地址转换成物理地址。
下面谈谈MIPS的ASID(Address Space Identifier). 简单而言,ASID与虚拟地址一起构成一个 定位一个TLB 的钥匙(KEY)。换句话说,虚拟 地址本身是不能唯一
确定一个TLB的。一般而言,在大多数操作系统中,一个ASID的值其实就是一个相应的
进程标识ID。

--电子创新网--
粤ICP备12070055号