1. Cache简介

Cache:高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandomAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRandomAccessMemory静态存储器)组成。它是位于CPU与内存间的一种容量较小但速度很高的存储器。

 

2. SylixOSCache架构

SylixOS中为了对Cache进行有效的管理,提供了API层的系统接口,隐藏硬件架构之间的差异。在不同的CPU架构下,又各自封装了Arch层的Cache操作接口。

 

2.1      APICache接口

SylixOSCache层封装的API接口代码位于/libsylixos/SylixOS/kernel/cache目录下,包括cache.ccache.h两个文件,提供包括Cache使能、禁能、刷新、回写、内存分配等等一系列接口。

cache.c文件中维护全局结构体变量_G_cacheopLib保存CPU架构的各种Cache操作接口函数,也即是从Arch层获取到的不同体系结构下的Cache操作接口函数。

cache.c文件中提供各种API接口,包括API_CacheEnableAPI_CacheDisableAPI_CacheLockAPI_CacheUnlockAPI_CacheFlushAPI_CacheFlushPageAPI_CacheInvalidateAPI_CacheInvalidatePageAPI_CacheClearAPI_CacheClearPageAPI_CacheTextUpdateAPI_CacheDataUpdateAPI_CacheLocalTextUpdate等常用的Cache操作函数。所有API接口实现的Cache操作均是通过获取全局结构体变量_G_cacheopLib的函数指针成员完成相应操作的。

 

2.2      ArchCache接口

BSP程序中调用函数API_CacheLibPrimaryInit初始化Cache系统,其中调用到函数archCacheInit,然后在PPC架构下会调用函数ppcCacheInit,通过调用函数ppcCacheProbe探测Cache类型。Cache探测过程中会遍历结构体数组_G_ppcCacheDrivers,查询到系统中已支持的PPC架构的Cache类型,则会初始化全局结构体变量_G_cacheopLib,供APICache接口使用。

 

3. PPC架构下Cache操作实现分析

SylixOSPPC架构的Cache操作函数代码位于/libsylixos/SylixOS/arch/ppc/mm/cache目录下,其中common目录下封装了通用的PPC架构的Cache驱动。

在调用函数ppcCacheProbe之后,如果成功探测到Cache类型,结构体指针_G_pcachedriver则会指向指定CPU型号的Cache驱动操作函数集。

类似于API层提供的各种接口,common目录下的ppcCache.c文件中同样封装了常用的Cache操作函数集合。这些函数操作集即为API层全局结构体变量_G_cacheopLib中各个函数指针提供真正的函数实现。

SylixOS目前实现的PPC系列体系架构目前主要包括E200E50060x系列。

 

3.1      E200系列

E200系列Cache操作函数代码位于/libsylixos/SylixOS/arch/ppc/mm/cache/e200目录下,其中ppcCacheE200.c文件定义了E200Cache驱动结构,包括ppcE200CacheProbe__ppcE200CacheDisable__ppcE200CacheEnableppcE200DCacheClearppcE200DCacheFlush等等函数。各个函数的具体实现位于汇编文件ppcCacheE200Asm.S中。

 

3.2      E500系列

E500系列Cache操作函数代码位于/libsylixos/SylixOS/arch/ppc/mm/cache/e500目录下,其中ppcCacheE500.c文件定义了E500Cache驱动结构,包括ppcE500CacheProbeppcE500DCacheDisableppcE500DCacheEnableppcE500ICacheDisableppcE500IcacheEnableppcE500DcacheFlushAllppcE500DCacheFlush等等函数。各个函数的具体实现位于汇编文件ppcCacheE500Asm.S中。

 

3.3      60x系列

60x系列Cache操作函数代码位于/libsylixos/SylixOS/arch/ppc/mm/cache/ppc60x目录下,目前SylixOS60x系列CPU实现包括603604EC60374583xx。其中ppcCache603.cppcCache604.cppcCache745x.cppcCache83xx.cppcCacheEC603.c文件定义了各个CPUCache驱动结构。60x系列各种CPU使用同一种Cache接口,具体实现在ppcCache60xAsm.S在文件中。包括ppc60xICacheEnableppc60xDCacheEnableppc60xICacheDisableppc60xDCacheDisableppc60xICacheInvalidateppc60xDCacheClearppc60xDCacheInvalidateppc60xDCacheFlush等等函数。

 

3.4      其他待实现系列

其他待实现PPC系列CPU,添加驱动代码时,需在/libsylixos/SylixOS/arch/ppc/mm/cache/目录下添加对应系列的文件目录,在其目录下增加对应的.c.S文件,.c文件中定义Cache操作函数集合,.S文件中实现Cache操作内容。

添加完成驱动后,在common目录下ppcCache.c文件中结构体_G_ppcCacheDrivers中添加对应的驱动指针,随后在初始化此系列CPU的时候即可探测到新添加的系列的Cache函数集合。