Linux:Cache 之 write back和write through

为了保证cache和memory的数据一致性,通常有三种方法:

  1. write through:CPU向cache写入数据时,同时向memory也写一份,使cache和memory的数据保持一致。优点是简单,缺点是每次都要访问memory,速度比较慢。
  2. post write:CPU更新cache数据时,把更新的数据写入到一个更新缓冲器,在合适的时候才对memory进行更新。这样可以提高cache访问速度,但是,在数据连续被更新两次以上的时候,缓冲区将不够使用,被迫同时更新memory。
  3. write back:CPU更新cache时,只是把更新的cache区标记一下,并不同步更新memory。只是在cache区要被新进入的数据取代时,才更新 memory。这样做的原因是考虑到很多时候cache存入的是中间结果,没有必要同步更新memory。优点是CPU执行的效率提高,缺点是实现起来技 术比较复杂。

     
   对于cache的算法,大方面有两种,即Write-Through(通写)和Write-Back(回写).    

        Write-Through,也就是说OS发送的处理data的请求,一直要等到全部memory里面的data正确写到稳定存储media(如硬盘) 中,然后返回给OS报告处理完毕,然后OS才会去update其状态;这种情况下,通常不会有dirty cache.      

        Write-Back,就是在OS发送处理data的请求后,该算法会将它用buffer存起来,并在没有正确写到稳定存储media(如硬盘)中 前,就告诉OS处理完毕,然后OS就会去update;但是要是此时掉电或其他故障,buffer的数据没有被写入稳定存储media(如硬盘),那么 os update的信息就和media中的信息不一致.为了避免这样,所以才用NVRAM,它在调电后数据仍然不丢失,但是在被重新上电后,其数据会是 dirty的,也就是楼主所提到的dirty cache(如何将dirty cache更新到media,这是Write-Back应该做的事)。    

        这和买卖东西相似,Write-Through就相当于你亲自去买东西,你买到什么就可以亲手拿到;而Write-Back就和中介差不多,你给了中介 钱,然后它告诉你说你的东西买到了,然后就相信拿到这个东西了,但是要是出现特殊情况中介跑了(掉链子了),你再去检查,东西原来没有真正到手。 

1、Cache的两个类型
    --Write Through
    当写数据进Cache时,也同时更新了相应的Memory里的内容
    --Write back
    只是写到Cache里,Memory的内容要等到cache保存的要被别的数据替换或者系统做cache flush时,才会被更新。


2、Cache的两个函数
    --Flush
    把Cache内容写回Memory,当Cache为Write through,不需要Flush
    --Invalidate
    把Cache内容直接丢掉不要。


3、Cache的使用场合
    当有DMA在使用memory的时候,一般要用到cache的处理。因为DMA在访问memory时是不经过cache的。比较典型的比如在 Ethernet,wireless,USB等driver里,DMA会操作descriptors和packet buffers,Driver要做这些处理
    --如果driver使用descripter和packet buffer的地址都是cache的地址,那么
    a)、Driver在读descripter里一些状态比如Owned by CPU/DMA,有没有收到包时,要对descripter当前结构里的内容做cache invalidate,收到packet后,也要对packet buffer做cache invalidate。
    b)、Driver在写descripter里一些状态比如Owned by DMA,要发送包时,要对descripter当前结构里的内容做cache flush,发送packet时,也要对packet buffer做cache flush。
    --有些driver会对descripter使用uncache 地址,那么上面两种情况里invalidate/flush就不用做了。一般很少会对packet buffer也用uncache地址的,因为对packet内容的处理将会很频繁,使用uncache会很慢。而descripter一般由于结构比较 小,如果也使用cache地址的话,做invalidate/flush的时间消耗可能会比uncache的还要多。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
作为一个AI语言模型,我并没有实际参与到cache硬件设计实验中,但我可以帮你总结一下cache硬件设计实验的一些要点。 Cache是计算机中的一种高速缓存,通常被用于存储访问频率较高的数据,以提高计算机运行速度。在cache硬件设计实验中,通常需要考虑以下几个方面: 1. Cache的结构设计:cache通常分为多级结构,其中L1 cache通常位于CPU内部,L2 cache位于CPU和主存之间,L3 cache位于主存和磁盘之间。在设计cache结构时,需要考虑cache的大小、行数、列数等参数,并根据不同的应用场景选择适当的cache结构。 2. Cache的映射方式:cache的映射方式通常包括直接映射、全相联映射和组相联映射。直接映射将主存地址映射到唯一的cache行中,全相联映射将主存地址映射到所有cache行中,组相联映射则将主存地址映射到一组cache行中。在设计cache映射方式时,需要权衡cache的访问速度和命中率等因素。 3. Cache的替换策略:当cache已满并需要替换一些数据时,需要选择合适的替换策略。常见的替换策略包括最近最少使用(LRU)、先进先出(FIFO)和随机替换等。在设计cache替换策略时,需要考虑cache的访问模式和数据访问时序等因素。 4. Cache的写策略:当CPU写入数据到cache时,需要选择合适的写策略。常见的写策略包括写回(write-back)和写直达(write-through)等。在设计cache写策略时,需要权衡cache的访问速度和数据的一致性等因素。 以上是cache硬件设计实验中的一些要点,希望能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值