SylixOS中PPC架构系列介绍-Cache篇

1. Cache简介

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

2. SylixOS中Cache架构

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

2.1      API层Cache接口

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

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

cache.c文件中提供各种API接口,包括API_CacheEnable、API_CacheDisable、API_CacheLock、API_CacheUnlock、API_CacheFlush、API_CacheFlushPage、API_CacheInvalidate、API_CacheInvalidatePage、API_CacheClear、API_CacheClearPage、API_CacheTextUpdate、API_CacheDataUpdate、API_CacheLocalTextUpdate等常用的Cache操作函数。所有API接口实现的Cache操作均是通过获取全局结构体变量_G_cacheopLib的函数指针成员完成相应操作的。

2.2      Arch层Cache接口

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

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

SylixOS中PPC架构的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系列体系架构目前主要包括E200、E500和60x系列。

3.1      E200系列

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

3.2      E500系列

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

3.3      60x系列

60x系列Cache操作函数代码位于/libsylixos/SylixOS/arch/ppc/mm/cache/ppc60x目录下,目前SylixOS中60x系列CPU实现包括603、604、EC603、745、83xx。其中ppcCache603.c、ppcCache604.c、ppcCache745x.c、ppcCache83xx.c、ppcCacheEC603.c文件定义了各个CPU的Cache驱动结构。60x系列各种CPU使用同一种Cache接口,具体实现在ppcCache60xAsm.S在文件中。包括ppc60xICacheEnable、ppc60xDCacheEnable、ppc60xICacheDisable、ppc60xDCacheDisable、ppc60xICacheInvalidate、ppc60xDCacheClear、ppc60xDCacheInvalidate、ppc60xDCacheFlush等等函数。

3.4      其他待实现系列

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

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

原文地址:http://blog.51cto.com/12833848/2152133

时间: 2024-07-31 23:25:42

SylixOS中PPC架构系列介绍-Cache篇的相关文章

zookeeper中的事件监听--cache篇

最近有接触zookeeper,有用到一部分的功能,所以在这里简单记录一下: Curator中事件的监听 原生zookeeper的事件监听采用Watcher实现,不过Watcher监听是一次性的,如果需要继续监听该事件,必须重新注册. Curator中采用cache来封装了对事件的监听,在包org.apache.curator.framework.recipes.cache封装了3种类型的事件监听. cache 分为三种(其实就是从不同的维度去解析cache): 1.PathChildrenCac

[安卓基础]011存储数据(中)——sqlite语法介绍

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

大型网站架构系列:缓存在分布式系统中的应用(三)

本文是<缓存在分布式系统中的应用>第三篇文章. 上次主要给大家分享了,缓存在分布式系统中的应用,主要从不同的场景,介绍了CDN,反向代理,分布式缓存,本地缓存的常规架构和基本原理. 因为时间关于,原计划分享<缓存常见问题>的内容,没有讲.本次主要针对缓存的常见个问题,做一个介绍.主要有以下议题: 一.分享大纲 分享大纲 数据一致性 缓存高可用 缓存雪崩 缓存穿透 参考资料 分享总结 二.数据一致性 缓存是在数据持久化之前的一个节点,主要是将热点数据放到离用户最近或访问速度更快的介质

互联网神经学系列第五篇:研究大脑中的谷歌,脸书和华为思科路由,脑互联网生理学

本文是互联网神经学系列第五篇-"大脑中的类互联网应用和结构,脑互联网生理学" 一.人类大脑研究的困境 大脑的秘密一直是科学皇冠上最明亮的宝石之一,但在两千年前,人们确连它的重要意义还不知道,例如著名的亚里士多德(Aristotle,公元前384-前322)认为神智在心,是心控制着我们的思想,情绪.大约公元前5世纪,地中海科斯岛上托名希波克拉底(Hippocrates)的一群医生被认为是最早发现了脑是神智的载体,在希波克拉底著作中有如下一段话."人们应当认识到:我们的愉悦.欢乐

openstack架构简单介绍J版(更新中)

title : OPENSTACK架构简单介绍 openstack的发展及历史 openstack是什么? OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算?软件,以Apache许可证授权.而且是一个自由软件和开放源码项目. 通俗点来讲,openstack就是一个用python编写的linux软件,openstack是一个开源云平台. openstack能干嘛? openstack最基础的功能就是产生云主机(vm虚拟机).用这些虚拟机能够做你想做的非常多事.比如产

Visual Studio 实用扩展推荐   Visual Studio 拥有非常不错的可扩展性,在之前的文章中,我也给大家示范了如何进行编辑器的扩展(详见文末参考资源)。在本篇文章中,我将介绍几款非常实用的扩展,从而帮助我们提高开发效率。 C# outline   Visual Studio 默认的大纲方案只允许在方法级别及以上进行代码的折叠,无法对一个if、while的区块进行折叠

Visual Studio 实用扩展推荐 Visual Studio 拥有非常不错的可扩展性,在之前的文章中,我也给大家示范了如何进行编辑器的扩展(详见文末参考资源).在本篇文章中,我将介绍几款非常实用的扩展,从而帮助我们提高开发效率. C# outline Visual Studio 默认的大纲方案只允许在方法级别及以上进行代码的折叠,无法对一个if.while的区块进行折叠,而这款工具则正好弥补了这个问题. highlight all occurrences of selected word

SylixOS中ROOTFS介绍

ROOTFS简介ROOTFS(根文件系统)是一种特殊的文件系统,根文件系统是内核启动时挂载的第一个文件系统,因此根文件系统包括了SylixOS启动时所必须的目录和关键性的文件,例如内核启动时所必需的etc目录,以及系统命令bin目录等,任何包括这些SylixOS启动所必须的文件都可以成为根文件系统.SylixOS的ROOTFS属于虚拟类型的根文件系统,因为此文件系统并不存在于具体的物理磁盘中,而是系统启动后动态创建的,并将此系统保存于内存中. 根目录文件系统映射配置参数系统内核启动参数函数API

大型网站架构系列:负载均衡详解(4)

本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法.具体参考文章,详见最后的链接. 三.LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,用来实现Linux平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器. 基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的 服务器,从而将一组

在Node.js中使用RabbitMQ系列一 Hello world

在前一篇文章中可伸缩架构简短系列中提到过关于异步的问题.当时推荐使用RabbitMQ来做任务队列的实现方案.本篇文章以Node.js为例子,来实际操作如何和RabbitMQ进行交互. 介绍 RabbitMQ是一个消息代理.它最初的思想特别简单:接受并且转发消息.你可以将它想象为邮局:当你将邮件放到信箱中,你可以非常肯定快件员最终会将邮件交到接受人手中.你可以把RabbitMQ比喻为信箱.邮局和快递员.RabbitMQ和邮局之间主要的区别是它不处理纸张,而是接受.存储和转发二进制数据?消息. 在R