MIPS微处理器的存储管理单元

摘要:存储管理单元是构成CPU的基本部件,其性能优劣将直接影响CPU的处理能力。特别是在Rjsc结构的微处理器中。本文结合MIPS 4KC微处理器的体系结构和流水线结构,简要介绍了MIPS微处理器的存储管理单元。

微处理器的设计是芯片设计的核心,从应用的角度CPU分为主要的3类,即“x86 CPU”,“嵌入式CPU”和“其他高性能CPU”。x86 CPU是指PC用的CPU即x86体系结构的CPU,主要是Intel公司的CPU,也包括AMD和威盛等公司与其兼容的CPU。嵌人式CPU是指应用于各种信息设备里的CPU,一般功能不太强、主要是以低价格、低功耗为特征,著名的有ARM,MIPS等公司的CPU。MIPS起源于Stanford University的电机系,其创始人John L.Hen。nessy在1984年在硅谷创立了MIPS INC。它是最早的,最成功的RISC(Reduced Instruction Set Computer)处理器之一。MIPS体系结构具有良好的可扩展性,满足从超低功耗需求的处理器需求。MIPS体系结构也是目前业界唯一全兼容的32/64位体系结构。MIPS32TM 4Kc是MIPS系列处理器中应用最
为广泛的一个。本文以MIPS 4Kc为例,介绍了MIPS微处理器的内存管理机制。

1 MIPS 4Kc存储管理单元的介绍
MIPS 4K系列处理器内核提供一个性能完善的存储管理部件(MMU)作为执行单元和高速缓存控制器之间的一个接口,它使用一个片内的地址转换后备缓冲存储器(TLB)将虚拟地址转换成物理地址。MMU执行的虚存转换速度非常快。图1是MIPS32 4Kc Core的架构模块图。

图1 MIPS32 4Kc Core的架构模块图

虚存系统通过将大的虚拟地址空间中的地址转换成物理内存空间,而扩充程序可使用的地址空间。当操作系统管理物理内存空间以适应在同一内存执行多任务操作时,这种转换显得非常有用。MMU的另一个作用是保护内存,定义高速缓存(Cache)协议。

在MIPS 4Kc处理器内核的存储管理单元(MMU)是基于TLB的。TLB包括2个地址转换缓冲器:JTLB和ITLB/DTLB。JTLB是l6个双人口,全相联的TLB。ITLB/DTLB是3口全相联指令/数据TLB。当计算出一个地址时,首先会在TLB(ITL或DTLB)中查找,如果没有在TLB中找到,那么就
会到JTLB中去查找;如果在JTLB中也没有找到,那么就会产生一个异常信息。图2说明了4Kc内核中ITLB、DTLB和JTLB的工作流程。

图2 MIPS32 4Kc Core中通过Cache的地址转换

2 MIPS结构中的3种操作模式
MIPS 4Kc微处理器支持3种操作模式:用户模式(User mode)、核心模式(Kernel mode)和调试模
式(Debug mode)。用户模式对于应用程序而言最经常使用。核心模式主要是用于异常处理和操作系统复位时,包括CPO(0号协处理器)管理和I/O设备接口。调试模式主要用于软件调试。通常,处理器处于用户模式。当系统处理复位状态或检测到异常状态时,处理器进入核心模式,在执行列外返回指令之前,一直保持在核心模式。用户模式的地址空间是核心模式地址空间的一个子集。在用户模式,地址空间是OxO000_oooo到Ox7FFF—FFFF,Ox8000—0000到OxFFFF_FFFF这个地址段是不可以访问的。如果访问,会引起异常。在调试模式下,系统可以访问同核心模式相同的地址空间,而且还可以访问到调试地址段。

操作模式不同,虚拟内存段的划分也会不同。32位的虚拟地址构成了4G Byte虚拟地址空间。从图3可以看出,在3种不同的操作模式下,4G的虚拟地址空间的划分情况。

图3 MIPS32 4Kc的虚拟地址空间

在MIPS 4Kc微处理器中,一个非映射的段不能使用TLB来进行地址转换。非映射的段会固定映射到物理地址。除了kseg0段,非映射的段始终不访问Cache。ksegO段能够访问Cache,取决于K0位,而K0位是由CPO的config寄存器来确定的。

映射的段则可以通过TLB,将虚拟地址转换成物理地址。对4Kc内核来说,映射段的地址转换是基于页的。对页会定义它的属性及能否访问Cache(即控制Cache的可存取特性)。

2.1 用户模式下的虚拟寻址
在用户模式下,可以使用单个均匀的2G Byte虚拟地址空间。从图4可以看出在此模式下,虚拟地址的定位。

图4 用户模式下的虚拟地址空间

表1列出了在用户模式各段的值。对于用户模式所有有效的虚拟地址,地址的最高位A<31>为0,这表明用户模式只能访问虚拟地址空间的一半。在用户模式下,虚拟地址超过这个访问范围,就会发出异常信息。

表1 用户模式段表

2.2 核心模式下的虚拟寻址
当检测到一个非调试异常时,EXL或ERL位会被置位,处理器就进人核心模式,直到执行一条例外返回(ERET)指令为止。ERET指令使处理器恢复到检测例外之前所处的模式。在核心模式下UM=0,ERL=1,EXL=1。图5详细表明了在核心模式下,虚拟地址的划分情况。

图5 核心模式下的虚拟地址空间

kuseg,kuseg2,kuseg3的地址空间需要经过ITLB进行地址转换,得到物理地址以及是否访问
Cache。此时kuseg0不通过ITLB的查找进行地址转换,而是直接转换成一个固定的物理地址,访问Cache。kusegl也不通过TLB的查找进行地址转换,直接转换成一个固定的物理地址,但是不访问Cache。

2.3 调试模式下的虚拟寻址
调试模式下的地址转换与核心模式类似,除了与kuseg3的一部分共存的dseg是不通过TLB查找而直接转换成一个固定的物理地址,dseg段也是不访问Cache的。

其中dseg段再被细分成2部分0xFF20—0000到0xFF2F—FFFF(检测段)和0xFF30—0000到0xFF3F— FFFF(内存映射调试寄存器段)。具体见表2。

表2 调试模式段的划分表

3 地址转换后备缓冲存储器
地址转换后备缓冲存储器(TLB)包括1个联合缓冲存储器(JTLB)和2个小规模的地址缓冲存储器(ITLB和DTLB)。

3.1 联合地址转换后备缓冲存储器
MIPS 4Kc内核提供1个l6双口,全相联的JTLB。它可以将32页虚拟页映射到对应的物理地址。JTLB提供l6对奇/偶页面映像,1个页面可映射的地址范围为4KB一16MB。当指明地址映像时,由当前ASID扩充的虚拟地址同时检查每个JTLB项中的虚拟标签(Tag)部分是否有相符的。因为JTLB既可以进行指令虚拟地址转换又可以进行数据虚拟地址转换,所以成为联合TLB。

图6显示了JTLB的格式。每个Tag都对应2个物理数据人口:1个偶数页和1个奇数页。虚拟地址的最高位并不参与Tag的比较,它是用来决定采用哪个物理地址。

图6 JTLB的组织结构图

PageMask寄存器是一个用来读或写TLB的读/写寄存器。它通过按项比较的屏蔽,实现可变的页长。TLB的读和写操作使用这一寄存器作为源或者目标。当虚拟地址进行转换时,根据页面大小,由TLB中相应位指定虚拟地址<24:13>中的那些位来参加比较。表3给出了整个页长范围用的屏蔽(Mask)值。

表3 页面屏蔽表

VPN2(虚拟页面号除2):代表2个页。Tag比较时,VPN<31:25>总是参加比较,VPN<24:13>是否参加比较由PageMask寄存器决定。

G:全局位决定ASID是否参加比较。G=1,ASID不参加比较;G=0,ASID参加比较。G位是CP0寄存器EntryLoO和Entryl_ol逻辑与的结果。

ASID<7:O>:地址空间标志符。表示这一行是哪个进程或线程的。虚拟地址用的ASID来扩充,可以减少当切换上下文时TLB的刷新频度。ASID放在CP0中的EntryHi寄存器中,和Tag中的ASID进行比较。

PFN0<31:12>,PFNI<31:12>:物理帧号。定义了物理地址的高位。

CO<2:O>,C1<2:0>:是否经过Cache存取。见表4。

Do,Dl:“脏”或写允许位。指示该页已经写过或是可写的。如果该位是1,允许写该页;否则,写该页会引发异常。

V0,V1:有效位。该位为1,指示该项有效。否则,引发TLB无效异常。

软件通过TLBWI和TLBWR两条指令来向JTLB的相应项里写数据。

表4一致性真值表

3.2 指令地址转换后备缓冲存储器
ITLB是一个3口、全相联TLB,用来产生指令流的物理地址。它的页面是固定的4K。ITLB是通过硬件来管理的,对软件而言是透明的。当计算出一个指令地址时,将这个虚拟地址和3口的ITLB的内容进行比较,如果没有在ITLB中找到该地址,我们称之为ITLB缺失,将在下一个时钟周期到JTLB中去查找,如果该地址在JTLB中找到,我们称之为命中,那么就会对ITLB进行回写,这时会重新在ITLB中进行比较,产生物理地址。由此可见,ITLB缺失至少花费2个时钟周期,如果此时JTLB忙(或者不命中),那么将花费更多的时间。

3.3 数据地址转换后备缓冲存储器
DTLB是一个3口、全相联TLB。能够比JTLB更快的产生LOAD/STORE类的地址。和ITLB类似,DTLB的页面也是固定的4K;也是通过硬件来管理,对软件是透明的。和ITLB不同的是,当转换LOAD/STORE类地址时,是在DTLB和JTLB中同时查找,如果DTLB缺失而JTLB命中,那么在当前这个周期,数据就会回写进DTLB。DTLB命中,就会产生物理地址。这种并行处理的方式,将会缩短DTLB缺失的时间损失。

4 虚拟地址向物理地址的转换
将虚拟地址和TLB中的虚拟地址进行比较,得到物理地址,这就是通过TLB来进行虚拟地址到物理地址的转换。当虚拟地址的虚拟页号(VPN)和TLB中的虚拟页号相同时。此时,或者全局位G被置1,或者虚拟地址的ASID和TLB中的ASID相同,就是TLB命中。若果没有命中,那么就会产生一个TLB异常信号。操作系统将会从内存中重写TLB。如图7。

图7 4Kc内核虚拟地址向物理地址转换示意图

每1个JTLB口都包括1个Tag阵列和2个数据阵列。如果命中,虚拟地址的高位部分就会被存储在JTLB数据阵列中的PFN替换。当出现4Kc内核不支持的不同大小的页面,此时数据无效,会产生一个TLB无效异常。

如果TLB缺失,那么会产生一个异常信号,此时就会从内存中回写信息到TLB。至于回写到哪个口,可以由操作系统来选择,也可以由硬件写人。CPO中的Random寄存器选择执行TLBWR指令时写入的TLB口。4Kc内核还提供写比较机制来确保不出现多TLB命中。当写TLB时,先要检测有没有多项匹配,如果发现1个以上的匹配,那么就会发生Machine Check的异常信号,这就是比较机制。

作者:贺 宁,金钊

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