一、背景
按照MIPS的规范,在32位系统中程序地址(虚拟地址)空间分成4个部分:
其中,kseg0与kseg1指向的地址空间指向的是同一块512MB物理地址,即0x00000000~0x20000000的物理地址,这一块地址在龙芯1b的地址划分中,是作为ddr的地址与I/O设备地址
这两段地址不需要经过MMU即可访问,其中kseg0需要经过cache,所以在cache初始化之前不能访问。也就是说不经过MMU的情况下,只能访问到最多512MB的内存空间。
如果需要使用超过512MB空间则需要使用MMU进行程序地址(虚拟地址)与物理地址的转换,否则未作映射的内存不能使用,这个时候就需要将TLB初始化。
二、TLB初始化配置方法
假设:首先确定需要做映射的内存空间大小以及起始位置,假设需要将kuseg的2G内存空间都用上,那么虚拟地址的大小就是2G,起始地址为0x00000000;需要映射到的物理地址大小也为2G,起始地址为0x30000000。
从手册可以知道,gs232共有32个TLB表项,所以按照页式的虚拟内存管理机制,2G的内存需要每页的大小为:2048MB/32=64MB。