嵌入式中cache使用及数据操作一致性机制

来源:互联网 发布:cntv for mac 编辑:程序博客网 时间:2024/05/30 04:29

       嵌入式中RAM实际使用的地址空间会出现不连续的情况,如片上RAM2块,片外DRAM 1块,映射后可能出现如下情况:

       在使用cache时,就要特别注意,要注意每一块RAM地址空间的配置,每一块可以被配置成cache映射区和cache非映射区。

在嵌入式系统中,一般会存在多master(主设备)情况,如典型的master:CPU0,CPU1, DMA0, DMA1, SATA, NANDC等。

      一般典型的嵌入式32位地址空间映射如下图示:

                                                                                   


       对在cache映射区的地址空间操作,就要考虑memory存储的内容一致性。多master内如果有cache存在时就要考

虑数据分散的一致性问题。要确保多master读取写入数据时整体的一致性。可以通过总线探测,cache等及时回刷等技术来实现

对某一地址空间存储的数据一致性保证。

       对不在cache映射区的地址空间操作,每次master操作该地址空间时,都会去RAM中直接读取数据,可以保证RAM中数据一致性。


       保证了某内存地址数据的唯一性后,就能保证多master同时能够使用到想要的数据吗?这是不可能的,多master同时读取数据时,

又涉及到多master对总线的抢占使用问题。如果多master同时在使用总线访问RAM,由于总线仲裁机制原因,可能会出现某个master

读取的数据出现老数据和新数据混合现象造成数据混乱,导致程序出错。

        因此,需要保证某一个master在执行某个代码片段时使用数据的正确性,让多个master顺序使用某RAM地址空间的存续数据。

硬件原子操作数据指令应运而生,如load/store、swp、总线探测等指令。这种指令可以保证访问RAM时原子性操作,基于此,

操作系统之上的互斥锁,自旋锁,信号量,读写锁等得以实现。这些锁机制都要基于底层硬件的原子指令来实现。

        否则锁机制就是一句空话。




原创粉丝点击