嵌入式系统中的CACHE问题.doc_第1页
嵌入式系统中的CACHE问题.doc_第2页
嵌入式系统中的CACHE问题.doc_第3页
嵌入式系统中的CACHE问题.doc_第4页
嵌入式系统中的CACHE问题.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统中的CACHE问题嵌入式系统中的CACHE问题 嵌入式系统论文 嵌入式系统中的CACHE问题摘要:描述了在实时嵌入式系统开发中遇到的与有关的问题。对引起这些问题的原因和的不一致性进行了讨论。最后,提出了解决问题的方法。 关键词:嵌入式实时系统 不一致性随着社会的发展、人们生活水平的提高,人们对嵌入式计算机应用的要求也越来越高。因此,对嵌入式系统的性能要求也越来越高。明显体现在嵌入式系统的速度的不断提高上。但问题也随之而来,嵌入式的主频不断地提高,一方面加强了的处理能力,另一方面,在速度上造成了与慢速的系统存储器极不相配的情况,从而影响了整个系统的性能。为了解决这个问题,引入了技术。是一种高速缓冲存储器,是为了解决和主存之间速度不匹配而采用的一项重要技术。通过在主存和高速之间设置一个小容量的高速存储器,在其中存放常用的指令和数据,对存储器的访问主要体现在对的存取,可以不必加等待状态而保持高速操作。采用技术,解决了与主存之间速度不匹配的问题;但它又带来了一些其它问题,如本文将提到的一致性问题。 问题的发现与原因在进行某嵌入式系统项目的开发过程中,有一个环节需要使用方式进行数据传输。当程序运行后,发现传到目的地的数据块中经常会有一些错误的字节。如:数据本应为 (进制),结果却是 。在某些环节也出现了类似的问题。例如,通过通道向外发送数据,发送的总是缓冲区初始化时的内容,实际要发送的数据总是发不出去,但使用调试工具看内存中的数据,却是正确的。经过一段时间的调试,发现出现这种现象的环节都使用了传输数据。在通过通道发送数据的例子中,通道内部也是用方式从内存直接读数据并向外发送。经过分析,认为问题的原因是出在上,是由于数据与内存数据的不一致性造成的。所谓数据与内存数据的不一致性,是指:在采用的系统中,同样一个数据可能既存在于中,也存在于主存中,数据一样则具有一致性,数据若不一样就叫做不一致性。具体表现在两个方面:()更新时可能中的数据更新,而主存未更新,则造成数据丢失;()在有控制器的系统和多处理器系统中,有多个部件可以访问主存。这时,可能其中有些部件是直接访问主存,也可能每个部件和处理器配置一个。这样,主存的一个区块可能对应于多个中的一个区块。于是会产生主存中的数据被某个总线部件更新过,而某个中的内容未更新,造成数据过时。 问题的分析要解释这个问题,首先要了解的工作模式。的基本工作模式有两种:模式和 模式。在模式下,所有的写操作都写入和,保证了和的一致。然而,每次对都有写操作会使处理器的处理能力降低,并且占用总线带宽。在模式下,写操作只写入,不写入,从而提高了处理器性能和总线带宽。模式下,中的内容只有在需要的时候才写到中。当中无可用空间时,一般使用最近最少使用算法()来决定哪一个项被替换。模式提供了很高的系统性能,但是需要更多的一致性作保证。为了便于理解,给出一个使用了的系统的逻辑框图,如图所示。该系统中两个地方会发生的不一致性:()数据 数据与之间的问题源于处理器和其他总线控制器对的异步读写访问。设备和其他总线控制器对的访问是引起一致性问题的主要原因,这个问题可以通过在程序中加入一些代码来解决。()共享 当一个 被两个以上的线程共享时,也会产生一致性问题。当某个线程使一个 无效时,这个 中的一些项可能属于另外一个线程。这个问题也可以通过一定的方法来避免,只要在分配内存时大小是 大小的整数倍即可。在哈佛体系结构、模式和无软件干预的前提下,最佳的保持一致性的方法就是使用具有总线监听能力的硬件。将、设备和其它所有的总线主控设备都连到一个物理总线上,以使可以对该总线上的总线交互过程进行监听,将对总线上的地址周期和控制(读写)比特监听,数据周期则被延迟到需要时才进行。当中的一项被一个异步操作修改时,该项就会被标为无效。如果处理器对一个已经被标为无效的项进行访问时,就会从中重新载入有效数据。在模式下,处理器对进行写操作时,相应地址中的内容就变成过时。如果另外一个设备想访问中的这部分内容,就会抢占该访问周期,将有效的数据写入。然后被抢占的访问周期重新开始并将读到中的有效数据。但是,目前提供监听能力的板子并不多。 解决的方法根据上面的分析和讨论,可见问题正是由数据 的不一致性引起的。虽然关掉就可以解决一致性的问题,并且能够减小程序开发的复杂度。但是一个高性能的系统是需要的,关掉会大大降低系统的性能。因此,本文仅讨论在程序中加入代码来克服一致性问题的方法。可以采用以下几种加入代码的方法来解决一致性的问题本文使用 公司的嵌入式实时多任务操作系统,下面的函数都是提供的:()对于时间上不是那么关键的程序段,可以先用下面的代码维护数据的一致性。 输入缓冲区 输出缓冲区()对于时间上比较关键的程序段采用如下原则:在每次使用输出缓冲区前将其更新;在每次使用输入缓冲区前使其无效。将缓冲区标示为“”可以防止一致性问题,这需要支持。在分配缓冲区时,将其标示为“”即可。然而,动态缓冲区在释放时要标为“”,否则内存总会产生大量的缓冲区碎片。下面给出一个高性能的驱动程序例子,它把更新无效的概念进行了扩展。不是对整个系统,而是对每一个缓冲区都这样做。即通过分配对安全的缓冲区,在一个缓冲区的基础上操作,从而防止了不需要的更新无效操作。在这个例子中使用了库中的函数 ,宏和实现一致性。在第行调用函数 后,如果指针返回为非空,则说明分配到了一块对于一致性问题来说是安全的缓冲区。第行驱动程序在缓冲区中写入要传给外部设备的数据,在第行准备传给外设之前,驱动程序必须更新数据以保证要传的数据是在内存中,而不是在中。当驱动程序准备读外设传给内存的数据,在第行驱动程序处理这些数据之前,必须使数据中对应于输入缓冲区的那部分无效以消除这些包含过时内容的条

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论