Modified
-
-
当cpu0从内存中读取到最新数据a=0之后,想要进行修改a时数据a的状态M
-
现有状态
-
E->M
- 准备写的时候,从内存中拿到最新的值变成E状态,并且将其余CPU中的状态变成I
- 进行写操作时,变成M状态
-
M->S
- 当其余CPU进行读时,将数据刷到内存中,并将自己变成S状态
- 其余读的CPU状态也变成S
-
M->I
- 当其余CPU进行写时,总线会先去其他CPU找到M状态的缓存,将缓存写到内存,再将要写的CPU变成E状态,其余的变成I状态
-
-
Excluded
-
-
当CPU想要写的时候,会去总线拿取当前最新值,然后将自己变成E状态,然后总线会将其余CPU变成I状态
-
现有状态
-
E->S
- 当前CPU状态为E时,其余CPU中的状态为I,当其余CPU去读数据时,总线会先去其余CPU捞,如果有E则将E状态的CPU变成S状态,并更新内存数据
-
E->M
- 当前CPU状态为E时,且当前CPU继续对变量进行修改,则会将当前状态变成M
-
-
Share
-
-
当前CPU拿到的数据是最新值时的状态
-
现有状态
-
S->S
- 当前CPU状态是S时,当前CPU进行读操作时,会直接从当前CPU缓存读
-
S->I
- 当其他CPU对数据进行修改后,会将当前状态为S的CPU状态变成I
-
S->E
- 当前CPU想要对数据进行修改时,会将当前CPU变成E,并刷新内存数据,其余CPU状态会变成I
-
-
Invalid
-
-
当前CPU的数据不是最新时的状态
-
现有状态
-
I->S
- 当前CPU为I状态,再进行读取最新数据后,会变成S状态
-
I->E
- 当前CPU为I状态,再进行写操作时,会先获取最新的数据之后,此时会变成S状态,当S状态到E状态是,在当前修改操作完成后,总线将其余CPU状态变成I状态,当前CPU变成E状态
-
-
注意:状态的转换是总线进行的操作。