此处仅简单分析每个命令的含义,背景,以及可能的状态变化,对于每个trans具体包含的流程,将在下文描述;
write类型的操作分为三类,Immediate Write/ Write Zero/ Copy Back write;
Copy Back write
RN访问HN;
==============================================================
WriteBack ptl/full
- 往HN或者SN发送一条dirty的cacheline数据;如果是partial的, 就用ptl的命令发送;
- 根据上面的描述,那么RN在发送时的状态,只能是UD/SD;
- 状态转换图如下:
- 发送流程如下:
==============================================================
WriteCleanFull
- 将整条dirty的cacheline数据写入HN, 但是自身仍然保持该cacheline的clean态;
- 根据上面的描述,发送该命令时的RN状态,只能是UD/SD;
- 命令完成后状态为:UC/SC;
- 状态转化图如下:
==============================================================
WriteEvictFull
- 将UC的cacheline, 写入下一级cache; -> 初始状态只能是UC;
- 状态转换图示如下:
==============================================================
WriteEvictOrEvict
- 这个请求类似于将writeevictfull/evict这两个命令合并成一个,这种方式允许HN来决定是否发送命令;
- 将clean的cacheline(UC/SC), 写到下一级cache;
- HN可以选择是否接收这个数据,如果不接受,那么就不会有数据的传递(evict);
- 如果completer不接收数据,则数据不会发送过来;
- 如果需要发送地址,data size为cacheline size;
- likelyShared表示当前这个cacheline的状态;
- 初始状态如下:
- 结束状态都是invalid, 不管数据是否接收;
(Comp响应,就是不要发数据)