哈喽大家好,今天继续更新CHI协议系列,上次和大家一起学习了一下cacheline的几种状态。那么,从今天起,我们就正式来看看chi里面具体的事务类型。
- Read事务
首先read事务,很明显就是用来读数据的,这个很好理解。但是这个读可就没有我们平时理解的那么简单了,chi为了保证cache的一致性,搞了好多种类型的读。要把这些读都搞明白,cacheline状态的含义一定要滚瓜烂熟,没看的同学可以先去看看我的上一个帖子。
下面我们具体来看看每种read的定义和区别:
a,ReadNoSnp
这个是最简单的读,nosnp嘛,就是没有snoop(关于snoop是啥,不懂的同学可以先去了解一下,这里不展开说了),所以这个事务就是向非snoop的区域读一个数据来,不涉及一致性的东西。非snoop区域,说白了就是memory,内存嘛。
b,ReadOnce,ReadOnceMakeInvalid,ReadOnceCleanInvalid
ReadOnce也很简单啦,就是他只能读取Snoop地址区域的数据,就是它肯定得去cache里面拿数据了,但是对cacheline状态没啥要求。那么后面这两个呢,ReadOnceMakeInvalid,ReadOnceCleanInvalid名字这么长,看着蛮唬人的。其实就是在readonce的基础上多了一些功能。
ReadOnceMakeInvalid首先也是去snoop区域读数据,然后建议(但不是必须)无效掉其他的cacheline,但如果有cacheline为dirty并且被无效掉了,那么直接丢弃。这个事