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