关于CPU的几个概念自己的理解

现代处理器为了提高性能都引入了高速缓存、写缓冲区、无效队列(有些处理器比如X86没有)等东西,本文将和大家一起来看看这些东西究竟是个啥玩意,能解决什么问题。

高速缓存

由于对现代处理器的运行速度要求越来越高,为了提高性能,硬件设计者就引入了高速缓存的概念。处理器有了高速缓存后,就不直接跟内存发生读写操作,而是读写高速缓存里数据。

写缓冲区

现代处理器都有自己的写缓冲区,来临时保存写入内存中的数据,要注意的是写缓冲区只对自己的处理器可见。在介绍写缓冲区之前,必需先要了解MESI(缓存一致性)协议。现代处理器都有自己的缓存,各个处理器的线程访问同一个共享变量时,就会在各自的处理器缓存里有一个共享变量的副本,当某个线程修改了这个共享变量的值后,各个副本之间的数据如何同步呢,这时就引入了MESI协议。
有人会说这个MESI协议跟我写缓冲区有啥关系,别急,听我道来。MESI协议里当一个处理器对某个共享变量要进行写操作时,需要向总线发送一个Invalidate请求消息,同时每个处理器还会对总线进行嗅探,如果发现了其他处理发出的写共享变量的请求消息,同时自己高速缓存里也存在这个共享变量的副本的话,就会删除高速缓存的副本,并且回复一个Invalidate Acknowledge响应消息,确保其他处理器的高速缓存里的副本都被删除后,才会执行写的操作。重点来了,你发现了没,MESI协议解决了缓存一致性问题,但是会带来性能问题,这个发送请求消息,到等待其他处理器删除响应消息的过程无疑是很消耗时间的,为了解决MESI协议的性能问题就引入了写缓存区。
处理器将写操作写入写缓冲区,并发送Invalidate请求消息,不再等待其他处理器的响应消息。实际上当处理器接收到其他处理器的Invalidate Acknowledge响应消息后,才真正地将写缓冲区的写操作数据刷新到高速缓存(或者内存,具体看硬件实现方式),这个时候写操作才算真正完成。
在这里插入图片描述

无效队列

处理器在接收到Invalidatea请求消息后,并不马上删除消息中指定地址对应的副本数据,而是将消息存入无效队列后,就直接回复Invalidate Acknowledge响应消息,从而减少了处理器写操作的等待时间,一切为了性能。

为了性能产生的可见性问题

1、因为处理器写缓冲区是仅对自己可见的,换句话说写缓冲区的数据其他处理器是不可读取的,这也就造成了,一个处理器更新一个共享变量的值,其他处理器看不到这个更新后的值。

2、处理器将写缓存区的值更新了,并且刷新到自己的高速缓存里,同时也发出了请求消息通知了其他处理器,但是其他处理器将消息存入了无效队列。此时其他处理器的线程从它高速缓存里读到的值还是脏值。
关于硬件底层是怎么解决可见性问题,欢迎关注我在百度百家号平台账号,后面会有文章来解读。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值