问:cpu的cache写缺失是什么意思,

善良的小伙伴 2015-08-05 02:53:09
这是网上搜索的:

Cache写机制:Write-through与Write-back

通常有三种方法:
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执行的效率提高,
缺点是实现起来技术比较复杂。
Write-through与Write-back和买卖东西相似,Write-Through就相当于你亲自去买东西,
你买到什么就可以亲手拿到;而Write-Back就和中介差不多,你给了中介钱,然后它告
诉你说你的东西买到了,然后就相信拿到这个东西了,但是要是出现特殊情况中介跑了,
你再去检查,东西原来没有真正到手。

对于写操作,存在写入缓存缺失数据的情况,这时有两种处理方式:
Write allocate:方式将写入位置读入缓存,然后采用write-hit
(缓存命中写入)操作。写缺失操作与读缺失操
作类似。
No-write allocate:方式并不将写入位置读入缓存,而是直接将
数据写入存储。这种方式下,只有读操作会
被缓存。
无论是Write-through还是Write-back都可以使用写缺失的两种方式之一
只是通常Write-back采用Write allocate方式,而Write-through采用No-write allocate方式;因为多次写入同一缓存时,Write allocate配合Write-back
可以提升性能;而对于Write-through则没有帮助。


首先它介绍了3种写cache时cache和内存同步的方式,然后又说了Write allocate和No-write allocate,这两个是写缺失,,读缺失是cpu读cache发现没有数据就叫读缺失很好理解,但是写缺失是啥意思??
...全文
5186 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuiliuyunzhong 2017-06-21
  • 打赏
  • 举报
回复
cache中存储着主存的一个自集。CPU写回时先将数据写入cache中,再写入主存,但是如果当前cache中没有要写回主存数据的相应地址的话,cache就发生了写缺失。其实就是在cache中找不到要写回的地址
qq_22747009 2016-08-12
  • 打赏
  • 举报
回复 2
这几天刚好在看组原。懵了好久。今天终于搞懂了 。写缺失意思就是cache里面没有我想写入数据的那个块的地址 比如,我想把数据写入地址1中,而1不在cache 里面 这就是写缺失。
善良的小伙伴 2015-08-06
  • 打赏
  • 举报
回复
引用 4 楼 cc_mugiwala 的回复:
[quote=引用 3 楼 cc_mugiwala 的回复:]
[quote=引用 2 楼 mydo 的回复:]
读和写的道理是类似的。拿直写(write-through)来说:写的时候需要同时更新物理内存;如果物理内存地址对应的值不在cache中则发生写缺失

我是不是应该这样理解:对于写操作,数据肯定是从寄存器出来,最终存到内存中,中间有没有经过cache我不管,就是说写缺失是一定会发生的,而发生写缺失了有两种处理方法:1是直接写内存,cache不管了,2是先写cache再写内存即是写命中。
这样理解对不对。[/quote]
主要是对“写缺失”这个概念不明朗。[/quote]


还有,这是书上的原话,在发生写缺失的时候,先把内存中的数据读出来,写到cache中,然后再存入内存中,为何要这样做呢?
善良的小伙伴 2015-08-06
  • 打赏
  • 举报
回复
引用 3 楼 cc_mugiwala 的回复:
[quote=引用 2 楼 mydo 的回复:] 读和写的道理是类似的。拿直写(write-through)来说:写的时候需要同时更新物理内存;如果物理内存地址对应的值不在cache中则发生写缺失
我是不是应该这样理解:对于写操作,数据肯定是从寄存器出来,最终存到内存中,中间有没有经过cache我不管,就是说写缺失是一定会发生的,而发生写缺失了有两种处理方法:1是直接写内存,cache不管了,2是先写cache再写内存即是写命中。 这样理解对不对。[/quote] 主要是对“写缺失”这个概念不明朗。
善良的小伙伴 2015-08-06
  • 打赏
  • 举报
回复
引用 2 楼 mydo 的回复:
读和写的道理是类似的。拿直写(write-through)来说:写的时候需要同时更新物理内存;如果物理内存地址对应的值不在cache中则发生写缺失
我是不是应该这样理解:对于写操作,数据肯定是从寄存器出来,最终存到内存中,中间有没有经过cache我不管,就是说写缺失是一定会发生的,而发生写缺失了有两种处理方法:1是直接写内存,cache不管了,2是先写cache再写内存即是写命中。 这样理解对不对。
赵4老师 2015-08-06
  • 打赏
  • 举报
回复
《The Intel 64 and IA-32 Architectures Software Developer's Manual》?
善良的小伙伴 2015-08-06
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
存在cache的系统中,写数据到内存会优先写到cache,如果此时要写的地址之前没有数据缓存在cache中,就出现write miss。 “在发生写缺失的时候,先把内存中的数据读出来,写到cache中,然后再存入内存中”这就是Write allocate方法,也可以不这样做,直接写入内存,不写cache。可能你觉得这个读没有意义,读进来的是废数据,实际上这是为了多处理器/多核环境下保持数据一致性必须的,在写完成之前,必须锁住这个地址防止其他处理器/核心访问。
你意思是读内存相当于加锁了吗。。
善良的小伙伴 2015-08-06
  • 打赏
  • 举报
回复
纠结了很长时间,懂了,我总结的所谓的“写缺失”有两种情况,1是写的时候cache为空,2是写的时候cache有值但是与内存不一样,即是dirty。看图便懂:
  • 打赏
  • 举报
回复 1
存在cache的系统中,写数据到内存会优先写到cache,如果此时要写的地址之前没有数据缓存在cache中,就出现write miss。 “在发生写缺失的时候,先把内存中的数据读出来,写到cache中,然后再存入内存中”这就是Write allocate方法,也可以不这样做,直接写入内存,不写cache。可能你觉得这个读没有意义,读进来的是废数据,实际上这是为了多处理器/多核环境下保持数据一致性必须的,在写完成之前,必须锁住这个地址防止其他处理器/核心访问。
大熊猫侯佩 2015-08-05
  • 打赏
  • 举报
回复
读和写的道理是类似的。拿直写(write-through)来说:写的时候需要同时更新物理内存;如果物理内存地址对应的值不在cache中则发生写缺失
赵4老师 2015-08-05
  • 打赏
  • 举报
回复
写缺失的意思就是写某个memory地址的内容时,该内容之前没在cache中缓存啊。 memory中只保存字节,每个字节对应其固定的地址。 cache中的每项保存:memory中对应的地址,及其对该地址上次读/写操作时对应的值。 我猜。

21,494

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧