课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存功能是程序员在开发软件的时候会经常用到的一个功能,而本文我们就简单来了解一下,缓存读写以及应用场景都有哪些类型。
一、缓存读写
写直达(writethrough)
任一从CPU发出的写信号送到cache的同时,也写入主存,以保证主存的数据能够同步更新。
写回(writeback)
如果当发生写操作时,数据已经在CPUCache里的话,则把数据更新到CPUCache里,同时标记CPUCache里的这个CacheBlock为脏(CacheBlock的数据和内存是不一致);
如果当发生写操作时,数据所对应的CacheBlock里存放的是「别的内存地址的数据」的话,就要检查这个CacheBlock里的数据有没有被标记为脏的,如果是脏的话,我们就要把这个CacheBlock里的数据写回到内存,然后再把当前要写入的数据,写入到这个CacheBlock里,同时也把它标记为脏的;如果CacheBlock里面的数据没有被标记为脏,则就直接将数据写入到这个CacheBlock里,然后再把这个CacheBlock标记为脏。
读贯穿(readthrough)
CPU的所有对主存的数据请求都先送到cache,如果命中,则不请求访问主存,并将数据送出;如果不命中,则向主存请求数据。
读旁路(readaside)
CPU发出数据请求时,并不是单通道地穿过Cache。而是向Cache和主存同时发出请求。由于Cache速度更快,如果命中,则Cache在将数据回送给CPU的同时,还来得及中断CPU对主存的请求;不命中。则Cache不做任何动作。由CPU直接访问主存。
二、应用场景
文件系统是基于vxWorks开发的。针对CACHE不一致问题,分析vxWorks系统提供的cacheLib,提出两种解决方法:
所有经过DMA操作的数据都用cacheDmaMalloc申请内存空间
默认用malloc申请的内存不是缓存安全的。用cacheDmaMalloc可以为DMA设备和驱动分配缓存安全的内存缓冲。
调用cacheFlush和cacheInvalidate解决问题
cacheFlush强制将缓冲的数据更新到内存。对于写贯穿类型,cacheFlush什么都不需要做因为内存和缓存条目是匹配的。cacheInvalidate将所有的缓冲条目都设置为无效,完全切断内存和缓冲之间的联系。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。