linux下写穿/直写(Write-Through)与写回(Write-Back)

13 篇文章 0 订阅

CPU使用高速缓存(DCache)时,它对内存的的写操作有两种模式:写穿(write-throuht)、写回(write-back)。

写穿(write-throuht)模式

该模式下,CPU对主存写数据时,不经过DCdcache直接写到内存,此时对于写的实现比较简单,如果系统只用写穿模式的话,DCache则变成了读缓存了。

写回(write-back)模式:

CPU写入数据时,不直接将数据写入内存,而是写入DCdcache,当dcache数据被替换出去时才写回主存。 
此时存在一个问题,并不是所有的dcache中的数据都被修改过,因此没必要把所有替换出去的数据都重新写入主存。 
为了表示哪些数据被修改过(dcache中是数据和主存中的数据是否不一致),dcache中每一块增加了一个记录信息位,CPU修改过的DCdcache时,设置此记录信息位(此时数据块为脏的(dirty), cache数据写入到主存时清理此位(此时数据块为干净的(clean)。 
有了次记录信息位,数据从dcache替换到主存时只替换脏的数据块即可),

为什么有写回模式 
大家都是知道cache速度远大于RAM(主存)。通过DCache吸收系统的写操作,在必要的时候再统一写入主存,从而减少频繁的相对较慢的对主存的写操作,这样明显能加速系统。同样的思想在主存与磁盘中也存在。

比较:

现在系统中,写回策略设置了写缓冲器,减少了访问主存的次数,但是写通方式设计比较容易,维护数据的一致性跟简单。

WB(write back)+WA(write allocation) 

è¿éåå¾çæè¿°

若存在缓存,即CPU先访问缓存, 
1.当请求是读请求时,若命中,直接返回其数据;当未命中时,先再缓存中分配一个缓存快,判断当前缓存块是不是脏数据(被修改过的数据),如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,修改dirty位为,clean(未被修改);返回数据。

2.当请求是写请求时,若命中,直接将新数据写入缓存,并且标记dirt位为,dirty(被修改);若未命中,分配一块缓存块,,判断当前缓存块是不是脏数据,如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,将新数据写入缓存块,并标记为dirty。

WT(write through )+WN(write no allocation) 
这里写图片描述

1.解释与wb类似

 

consult:

https://blog.csdn.net/davie1love/article/details/47342695 

https://blog.csdn.net/dark5669/article/details/53895744

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值