0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CACHE高速缓冲存储器技术在嵌入式系统中的应用

牵手一起梦 来源:电子技术应用 作者:陈曦,李汉宁 2020-10-04 16:55 次阅读

描述了在实时嵌入式系统开发中遇到的与CACHE有关的问题。对引起这些问题的原因——CACHE和RAM的不一致性进行了讨论。最后,提出了解决问题的方法。

随着社会的发展、人们生活水平的提高,人们对嵌入式计算机应用的要求也越来越高。因此,对嵌入式系统的性能要求也越来越高。明显体现在嵌入式系统的CPU速度的不断提高上。但问题也随之而来,嵌入式CPU的主频不断地提高,一方面加强了CPU的处理能力,另一方面,在速度上造成了与慢速的系统存储器极不相配的情况,从而影响了整个系统的性能。

为了解决这个问题,引入了CACHE技术。CACHE是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。通过在主存和高速CPU之间设置一个小容量的高速存储器,在其中存放CPU常用的指令和数据,CPU对存储器的访问主要体现在对SRAM的存取,CPU可以不必加等待状态而保持高速操作。

采用CACHE技术,解决了CPU与主存之间速度不匹配的问题;但它又带来了一些其它问题,如本文将提到的一致性问题。

1 问题的发现与原因

在进行某嵌入式系统项目的开发过程中,有一个环节需要使用DMA方式进行数据传输。当程序运行后,发现传到目的地的数据块中经常会有一些错误的字节。如:数据本应为00 01 02 03 04 05 06 07 08 09 0A 0B 。..(16进制),结果却是00 01 02 03 00 00 00 00 08 09 0A 0B 。..。在某些环节也出现了类似的问题。例如,通过HDLC通道向外发送数据,发送的总是缓冲区初始化时的内容,实际要发送的数据总是发不出去,但使用调试工具看内存中的数据,却是正确的。

经过一段时间的调试,发现出现这种现象的环节都使用了DMA传输数据。在通过HDLC通道发送数据的例子中,HDLC通道内部也是用DMA方式从内存直接读数据并向外发送。经过分析,认为问题的原因是出在CACHE上,是由于CACHE数据与内存数据的不一致性造成的。

所谓CACHE数据与内存数据的不一致性,是指:在采用CACHE的系统中,同样一个数据可能既存在于CACHE中,也存在于主存中,数据一样则具有一致性,数据若不一样就叫做不一致性。具体表现在两个方面:

(1)更新时可能CACHE中的数据更新,而主存未更新,则造成数据丢失;

(2)在有DMA控制器的系统和多处理器系统中,有多个部件可以访问主存。这时,可能其中有些部件是直接访问主存,也可能每个DMA部件和处理器配置一个CACHE。这样,主存的一个区块可能对应于多个CACHE中的一个区块。于是会产生主存中的数据被某个总线部件更新过,而某个CACHE中的内容未更新,造成数据过时。

基于CACHE高速缓冲存储器技术在嵌入式系统中的应用

2 问题的分析

要解释这个问题,首先要了解CACHE的工作模式。CACHE的基本工作模式有两种:write-through模式和 copyback模式。在write-through模式下,所有的写操作都写入CACHE和RAM,保证了CACHE和RAM的一致。然而,每次对RAM都有写操作会使处理器的处理能力降低,并且占用总线带宽。在copyback模式下,写操作只写入CACHE,不写入RAM,从而提高了处理器性能和总线带宽。copyback模式下,CACHE中的内容只有在需要的时候才写到RAM中。当CACHE中无可用空间时,一般使用最近最少使用算法(LRU)来决定哪一个CACHE项被替换。copyback模式提供了很高的系统性能,但是需要更多的一致性作保证。为了便于理解,给出一个使用了CACHE的系统的逻辑框图,如图1所示。

该系统中两个地方会发生CACHE的不一致性:

(1)数据CACHE / RAM

数据CACHE与RAM之间的问题源于处理器和其他总线控制器对RAM的异步读写访问。DMA设备和其他总线控制器对RAM的访问是引起CACHE一致性问题的主要原因,这个问题可以通过在程序中加入一些代码来解决。

(2)共享CACHE LINE

当一个CACHE LINE被两个以上的线程共享时,也会产生一致性问题。当某个线程使一个CACHE LINE无效时,这个CACHE LINE中的一些项可能属于另外一个线程。这个问题也可以通过一定的方法来避免,只要在分配内存时大小是CACHE LINE大小的整数倍即可。

在哈佛体系结构、copyback模式和无软件干预的前提下,最佳的保持一致性的方法就是使用具有总线监听能力的硬件。将CACHE、RAM、DMA设备和其它所有的总线主控设备都连到一个物理总线上,以使CACHE可以对该总线上的总线交互过程进行监听,CACHE将对总线上的地址周期和控制(读/写)比特监听,数据周期则被延迟到需要时才进行。当CACHE中的一项被一个异步操作修改时,该CACHE项就会被标为无效。如果处理器对一个已经被标为无效的CACHE项进行访问时,CACHE就会从RAM中重新载入有效数据。在copyback模式下,处理器对CACHE进行写操作时,RAM相应地址中的内容就变成过时。如果另外一个设备想访问RAM中的这部分内容,CACHE就会抢占该访问周期,将有效的数据写入RAM。然后被抢占的访问周期重新开始并将读到RAM中的有效数据。但是,目前提供监听能力的板子并不多。

3 解决的方法

根据上面的分析和讨论,可见问题正是由数据CACHE / RAM的不一致性引起的。虽然关掉CACHE就可以解决一致性的问题,并且能够减小程序开发的复杂度。但是一个高性能的系统是需要CACHE的,关掉CACHE会大大降低系统的性能。因此,本文仅讨论在程序中加入代码来克服一致性问题的方法。

可以采用以下几种加入代码的方法来解决一致性的问题?本文使用WIND RIVER公司的嵌入式实时多任务操作系统VxWORKS,下面的函数都是VxWORKS提供的 :

(1)对于时间上不是那么关键的程序段,可以先用下面的代码维护数据CACHE的一致性。

cacheInvalidate DATA_CACHE address bytes

/ 输入缓冲区/

。..

cacheFlush DATA_CACHE address bytes

/输出缓冲区/

(2)对于时间上比较关键的程序段采用如下原则:在每次使用输出缓冲区前将其更新;在每次使用输入缓冲区前使其无效。

将缓冲区标示为“non-cacheable”可以防止一致性问题,这需要MMU支持。在分配缓冲区时,将其标示为“non-cacheable”即可。然而,动态缓冲区在释放时要标为“cacheable”,否则内存总会产生大量的缓冲区碎片。

下面给出一个高性能的驱动程序例子,它把更新/无效的概念进行了扩展。不是对整个CACHE系统,而是对每一个缓冲区都这样做。即通过分配对CACHE安全的缓冲区,在一个缓冲区的基础上操作,从而防止了不需要的更新/无效操作。在这个例子中使用了CACHE库中的函数cacheDMAMalloc? ,宏CACHE_DMA_INVALIDATE和CACHE_DMA_FLUSH实现一致性。在第4行调用函数cacheDMAMalloc 后,如果指针返回为非空,则说明分配到了一块对于一致性问题来说是安全的缓冲区。

第7行驱动程序在缓冲区中写入要传给外部设备的数据,在第9行准备传给外设之前,驱动程序必须更新数据CACHE以保证要传的数据是在内存中,而不是在CACHE中。

当驱动程序准备读外设传给内存的数据,在第13行驱动程序处理这些数据之前,必须使数据CACHE中对应于输入缓冲区的那部分无效以消除这些包含过时内容的条目。之后,驱动程序才能安全地处理从内存中取来的输入数据。

1: STATUS drvExample pBuf

2: void pBuf / 缓冲区指针 /

3: { /*

4: pBuf = cacheDMAMalloc BUF_SIZE

5: if pBuf == NULL

6: return ERROR /内存分配失败/

7: /其它初始化代码和向发送缓冲区填数据/

8: CACHE_DMA_FLUSH pBuf BUF_SIZE

9: drvWrite pBuf /向外设发送数据/

10: …… / 其它代码 /

11: drvWait /等待外设来的数据/

12: CACHE_DMA_INVALIDATE pBuf BUF_SIZE

13: / 处理外设来的数据 /

14: cacheDMAFree pBuf /释放内存 /

15: return OK

16:}

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    18894

    浏览量

    227044
  • 嵌入式
    +关注

    关注

    5042

    文章

    18795

    浏览量

    298140
  • 存储器
    +关注

    关注

    38

    文章

    7361

    浏览量

    163037
收藏 人收藏

    评论

    相关推荐

    中央处理高速缓冲存储器之间的联系

    计算机指令以及处理计算机软件的数据。中央处理主要包括运算(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储
    发表于 02-10 08:00

    高速缓冲存储器部件结构及原理解析

    高速缓冲存储器部件结构及原理解析 高速缓存 CACHE用途 设置 CPU 和 主存储器之间,
    发表于 04-15 11:18 4582次阅读

    低功耗的高性能四路组相联CMOS高速缓冲存储器

    低功耗的高性能四路组相联CMOS高速缓冲存储器
    发表于 01-19 21:22 12次下载

    高速缓冲存储器的作用解析

    高速缓冲存储器Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术
    发表于 11-15 09:50 7318次阅读
    <b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b>的作用解析

    高速缓冲存储器的特点解说

    高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。
    发表于 11-15 10:08 1.1w次阅读

    高速缓冲存储器电脑硬件的位置分析

    高速缓冲存储器通常由高速存储器、联想存储器、替换逻辑电路和相应的控制线路组成。在有高速
    发表于 11-15 10:38 3920次阅读
    <b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b><b class='flag-5'>在</b>电脑硬件<b class='flag-5'>中</b>的位置分析

    高速缓冲存储器的作用是什么_有什么特点

    高速缓冲存储器Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术
    发表于 12-06 15:26 2w次阅读
    <b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b>的作用是什么_有什么特点

    高速缓冲存储器基础知识详细介绍

    高速缓冲存储器Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM基于缓存的存储器层次结构行之有效,是因为较慢的存储
    发表于 12-06 17:35 1w次阅读
    <b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b>基础知识详细介绍

    介绍 TMS320C64x 多极高速缓冲存储器

    TMS320C64x+网络课程5——多极高速缓冲存储器,包cache的概念,cache miss的一些类型以及关于cache的使用优化。此网
    的头像 发表于 06-26 13:00 3706次阅读
    介绍 TMS320C64x 多极<b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b>

    高速缓冲存储器Cache的原理、设计及实现

    既可以以较快速度存取SRAM的数据,又不使系统成本上升过高,这就是Cache法。还有一种方法,采用新型存储器。目前,一般采用第3种方法。它是PC
    发表于 04-02 14:38 2230次阅读

    EE-271: 高速缓冲存储器Blackfin®处理的应用

    EE-271: 高速缓冲存储器Blackfin®处理的应用
    发表于 03-21 07:50 8次下载
    EE-271: <b class='flag-5'>高速</b><b class='flag-5'>缓冲存储器</b><b class='flag-5'>在</b>Blackfin®处理<b class='flag-5'>器</b><b class='flag-5'>中</b>的应用

    CPU设计之Cache存储器

    Cache存储器也被称为高速缓冲存储器,位于CPU和主存储器之间。之所以CPU和主存之间要加
    的头像 发表于 03-21 14:34 1044次阅读
    CPU设计之<b class='flag-5'>Cache</b><b class='flag-5'>存储器</b>

    高速缓冲存储器有什么作用

    技术实现,而不是像系统主存那样使用动态随机存储器(DRAM)技术。SRAM具有访问速度快但成本较高的特点,这使得高速
    的头像 发表于 09-10 14:09 111次阅读

    高速缓冲存储器与内存的区别

    高速缓冲存储器Cache)与内存(Memory)计算机体系结构扮演着至关重要的角色,它们之间存在显著的区别。以下将从定义、功能、
    的头像 发表于 09-10 14:12 128次阅读

    高速缓冲存储器的基本组成和工作原理

    高速缓冲存储器Cache)的工作原理,是基于计算机程序和数据访问的局部性原理,即程序执行过程,对数据的访问往往呈现出时间和空间的局部性
    的头像 发表于 09-10 14:14 72次阅读