UC:Unique Clean,该缓存行的数据只在当前缓存中,且和主存的数据一致;缓存行的数据可以被修改,而不需要通知其它的缓存;在收到snoop请求时,该缓存行可以,但不必需返回数据给HN或RN;
UCE: Unique Clean Empty该缓存行的数据只在当前缓存中,但是所有的数据都是无效的,可以不知会其它RN就对该缓存行的数据进行修改。在收到snoop请求时,该cache line必须不能返回数据给HN或RN;
Requester有意获取空缓存行(write): MOESI协议中,进行write时,需要获取写权限(UC),需要将其他缓存行中的副本invalid(实现本端cache U)并且将缓存行(如果Dirty)更新到memory,并且将“最新的”缓存行数据/memory数据store到本端缓存行中(实现本端cache C),实现UC,进而进行写操作。UCE旨在无需将“最新的”缓存行数据/memory数据store到本端缓存行中,因为写操作会对缓存行进行修改,这样可以节省系统带宽。开始写操作之前,为了节省系统带宽,requester可以获得具有store权限的空缓存行,而不是获得缓存行的有效副本。
cache 转变: If the Requester has a copy of the cache line when it requests permission to store, and that copy of the cache line is invalidated before the Requester obtains permission to store, this results in the Requester having an empty cache line with permission to store
Requester在获得store权限前已经有该缓存行的副本,但是数据是无效的。Requester获得store后,该缓存行变成UCE
UD:Unique Dirty,该缓存行的数据只在当前缓存中,且和主存的数据不一致,已经被修改过了;如果该缓存行的数据不用了,那需要写回到下级缓存或主存。可以不知会其它RN就对该缓存行的数据进行修改。在收到snoop请求时,该缓存行必须返回数据给HN或RN;
UDP: Unique Dirty Partial该缓存行的数据只在当前缓存中,且和主存的数据不一致,部分被修改且有效;如果该缓存行的数据不用了,那需要和下级缓存或主存的数据组成一个完成有效的缓存行(merge)。可以不知会其它RN就对该缓存行的数据进行修改。在收到snoop请求时,该缓存行必须返回数据给HN(进行merge),但不能直接将数据给Requester; UCE→UDP
由UCE转变UDP,对UCE进行partial write后,获得UDP
SC:Shared Clean,其它缓存可能也存在该缓存行的拷贝;该缓存行可能已经被修改了;当不需要该缓存行数据时,cache没有义务必须将该数据写回到主存;必须对其它缓存的该缓存行进行无效(invalidate)后,获得U态才能将该缓存行进行改写;在收到snoop请求时,该缓存行在RetToSrc没有置位时不需要返回数据,如果RetToSrc置位,则需要返回数据,可以直接fwd数据给Requester;
SD:Shared Dirty,其它缓存可能也存在该缓存行的拷贝;该缓存行相对于主存已经被修改了;当该缓存行不需要的时候,当前缓存需要将它写回下游缓存或主存;必须对其它缓存的该缓存行进行无效后,获得U态后才能将该缓存行进行改写。在收到snoop请求时,该缓存行必须返回数据给HN和Requester;