• MESI 缓存一致性协议


    VivioJS MESI 帮助
    https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm

    这个 VivioJS 动画旨在帮助您了解 MESI 缓存一致性协议。

    描述了一个多处理器系统,包括 3 个带有本地缓存​​和主存储器的 CPU。为简单起见,主存储器包括 4 个位置 a0、a1、a2 和 a3。缓存是直接映射的,包含两个集合。偶数地址(a0 和 a2)映射到设置 0,而奇数地址(a1 和 a3)映射到设置 1。

    注意:为了简化这个动画,缓存行的大小和 CPU 读/写操作的大小是相同的。但是,在写入未命中时,CPU 会读取内存,即使它会完全覆盖缓存行。这模拟了真实缓存的行为,其中缓存行的大小通常大于 CPU 读/写操作的大小。

    单击图表激活动画,或单击此处查看全屏版本。

    每个 CPU 都包含按钮,用于在指定的内存位置启动读取或写入事务。“CPU 写入”将递增值(最初为 1)写入“内存”。

    这个想法是按下按钮,看看你是否可以跟随发生的动作和状态转换。可以通过按右上角的“无错误”按钮将错误引入动画中。看看你是否可以确定错误是什么!

    地址和数据总线上的流量方向分别由蓝色和红色箭头指示。事务中涉及的缓存行和内存位置为绿色。陈旧的内存位置是灰色的。

    缓存线可以处于 4 种状态之一。无效:缓存中不存在缓存行。独家:缓存行仅存在于该缓存中,并且与内存中的副本相同。MODIFIED:仅在此缓存中存在缓存行并且内存副本已过期(陈旧)。 SHARED:此缓存中的缓存行,可能还有其他缓存,所有副本与内存副本相同。SHARED缓存线的写入是直写,而对EXCLUSIVE缓存线的写入是回写。如果高速缓存观察到它包含的地址的总线事务,它会断言共享总线线路。MESI 是一种无效缓存一致性协议。

    这是缓存行的状态转换图:

    MESI状态转移图

    尝试的示例序列 [来自 RESET]

    1 CPU0:读取a0 CPU0 从内存中读取 a0 [未共享] - 状态 E
    2 CPU0:读取a0 CPU0 从缓存中读取 a0 - 状态 E
    3 CPU0:写a0 CPU0 仅更新缓存中的 a0 - 状态 M
    4 CPU0:写a0 CPU0 仅更新缓存中的 a0 - 状态 M
    5 CPU1:读取a0 CPU1读取a0,CPU0缓存干预并向缓存和内存提供数据——状态S
    6 CPU1:写a0 CPU1 更新缓存和内存中的 a0,并使地址为 a0 的所有其他缓存失效 - 状态 E
    7 CPU1:写a0 CPU1 仅更新缓存中的 a0 - 状态 M
    8 CPU0:写a0 CPU0 读取 a0,CPU1 缓存干预并向缓存和内存(S)提供数据,然后 CPU0 写入缓存和内存中的 a0,使地址为 a0 的所有其他缓存无效 - 状态
    9 CPU0:写a2 CPU0 从内存(E)中读取 a2,然后写入 a2 - 状态 M
    10 CPU0:写a0 CPU0 将 a2 刷新到内存,从内存 (E) 读取 a2,然后写入 a0 - 状态 M

    =========================

    工作机会(内部推荐):发送邮件至gaoyabing@126.com,看到会帮转内部HR。

    邮件标题:X姓名X_X公司X_简历(如:张三_东方财富_简历),否则一律垃圾邮件!

    公司信息:

    1. 1.东方财富|上海徐汇、南京|微信客户端查看职位(可自助提交信息,微信打开);
  • 相关阅读:
    Java继承关系的父子类中相同的成员变量
    MVC写在Model文件夹下,登录注册等页面定义的变量规则,不会被更新实体模型删除
    手动新建MVC控制器和视图,以及数据显示的问题
    创建简单的MVC项目
    复习i++和++j
    ViewBag的简单使用
    ValidationMessageFor验证
    Cookie的简单使用
    MVC3中 ViewBag、ViewData和TempData的使用和区别
    C#的GridView控件复习
  • 原文地址:https://www.cnblogs.com/Chary/p/15739096.html
Copyright © 2020-2023  润新知