首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Vxworks下的高速缓冲存储器一致性问题

Vxworks下的高速缓冲存储器一致性问题

关键字:Vxworks   高速缓冲存储器   风河Wind River  
1. Vxworks下的高速缓冲存储器一致性问题
美国风河(Wind River)公司的VxWorks是目前最先进的实时嵌入式操作系统。Tornade是它的集成一体开发环境。然而,VxWorks下编程硬件驱动程序时却存在着高速缓冲存储器一致性(Cache Coherence)的问题。该系统下有两个cache区:数据高速缓冲存储器和指令高速缓冲存储器。本文讨论的高速缓冲存储器问题均指数据高速缓冲存储器。

高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致)。这个问题常发生在CPU内核与另一个设备异步访问内存时。

高速缓冲存储器可以工作在Write-through或copyback模式。在Write-through模式下,数据输出时,系统会把数据同时写入高速缓冲存储器和内存中。这样就保证了输出时的高速缓冲存储器一致性。但该模式却无法解决输入时的高速缓冲存储器一致性问题.在Copyback模式下。系统只写数据到高速缓冲存储器中,因此对于数据输入和输出都存在高速缓冲存储器一致性问题。

VxWorks下通常有两种方法解决高速缓冲存储器一致性问题。

(1)Cache-safe buffer(即non-cacheable 的buffer)。这种情况下,CPU读数据时会从内存中读取.而不是从高速缓冲存储器中读取:而CPU写数据时则同时写入高速缓冲存储器和内存.

该方案可通过以下两种方法实现.

* 在内存段属性中定义此段buffer,空间属性为non-cacheable;

* 在内存管理单元MMU支持下,用cacheDmaMalloc()/cacheDmaFree()获得此段buffer。则此段buffer是non-cacheable的(注意无MMU时。分配的buffer是cacheable。此法不支持这种情况)。

(2)对于cacheable的buffer空间,采用flush()/invalidate()函数或宏来配合读/写使用此段buffer空间。flush()将高速缓冲存储器中的数据写入内存。invalidate()则将内存中数据写入高速缓冲存储器。这两个函数都保证了高速缓冲存储器与内存同步。

实际flush()/invalidate()函数有如下两组,功能相同稍有区别:

组1:CACHE_DMA_FLUSH()函数和CACHE_DMA_INVALIDATE()函数

组2:cacheFlush()函数和cacheInvalidate()函数

第一组实际是2个宏,与cacheDmaMalloc()函数配合使用。
返回列表