四态写回无效协议MESI 缓存
MESI在MSI协议的基础上改进的,增长了一个互斥独占状态E。 spa
为何要引入? 事件
考虑当一个顺序先读入一个数据项,而后修改一个数据项时,就要产生一个BusRd事务用来获得内存块,并置为S状态,而后产生一个BusRdX事务,用来将该块状态从S变为M状态。而在顺序程序中数据项不存在共享者,所以只会在一个告诉缓存有该块拷贝,后一个事务是没必要要的。 事务
因此引入一个E状态,用来表示只有一个高速缓存中独占这个内存快,且该块内容没有被修改过。 内存
在产生总线读事务时,高速缓存控制器要知作别的高速缓存中是否存在该块的拷贝,来决定该块置为S状态仍是E状态。这就须要提供一个额外的共享S信号线, 基础
S信号线低电平,为E,高为S 程序
关键在于E状态: im
1. 当有处理器读PrRd事件时,由于就该cache有当前数据,因此直接命中仍是E态 数据
2. 当有处理器写PrWr事件时,由E到M状态,告知已经被修改过,且是最新的 协议
3. 当观察到一个总线读(BusRd)事务,将致使由E状态转换到S状态,同时由该高速缓存提供数据。(由于只有改cache是独占此数据的,其余cache中没有任务拷贝)
4. 当观察到一个总线互斥读(BusRdX)事务,由该高速缓存提供数据。(由于只有改cache是独占此数据的,其余cache中没有任务拷贝)可是由于人家要当老大,本身只好FLUSH后转为无效状态
注意S状态,在MSI中,当观察到一个总线读和互斥读的事务,在进行状态转换的同时,由主存提供数据,而在MESI中由处于S状态下的某一个高速缓存提供数据,这个并非必定的,这是一种选择的策略。怎么均可以。