-
MESI四种状态的说明
状态 | 描述 | 监听任务 |
---|---|---|
M(Modified)修改 | 该缓存行(cached lined)有效,数据被修改了; 数据和主内存中的数据不一致 数据只存在于本cpu缓存中 | 缓存行监听其他cpu是否读取该缓存行对应的主内存 中变量的操作,这种操作必须在该缓存行把修改后的 缓存行的值写入主内存,并把状态变成S前,暂缓执行 |
E(EXclusive)独占,互斥 | 该缓存行(cached lined)有效 数据和主内存中的数据一致 数据只存在于本cpu缓存中 | 缓存行必须监听其他cpu是否读取该缓存行对应的主内 存中变量的操作,一旦有这种操作,该缓存行的状态 由E->S;
|
S(Share)共享 | 该缓存行(cached lined)有效 数据和主内存中的数据一致 数据存在于很多cpu缓存中 | 缓存行监听是否收到将该缓存行状态变成I或E状态 的请求,然后做出响应 |
I(Invalid)无效 | 该缓存行(cached lined)无效 | 无监听任务 |
-
举例说明
假设有两个CPU,名称分别为A,B则CPU读取主内存中的变量的过程如下
1. CPU A 读取主内存中变量 X = 1的值
2.此时CPU B也需要读取主内存中变量X的值
3.此时CPU A 发出一条修改X变量的 然后 CPU B 发出读取X的指令