• VivioJS-用于WWW的交互式可逆电子学习动画& raft 在线演示


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

      VivioJS-用于WWW的交互式可逆电子学习动画
      MESI缓存一致性协议


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

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

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

     
    单击图表以激活动画,或单击此处获取全屏版本。

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

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

    地址和数据总线上的通信方向分别由蓝色和红色箭头指示。事务中涉及的高速缓存行和内存位置显示为绿色。过时的内存位置被涂成灰色。

    高速缓存行可以处于4种状态之一。无效:缓存行中不存在缓存行。独占性:仅存在于此缓存中的缓存行,与复制到内存中相同。修改:此缓存中仅存在缓存行,并且内存复制已过期(陈旧)。 共享:此高速缓存中的高速缓存行以及可能的其他高速缓存,所有副本与内存副本相同。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

    raft 在线演示:http://thesecretlivesofdata.com/raft/

  • 相关阅读:
    Eclipse背景颜色修改
    使用主键或者索引提高SQL语句效率的建议
    Mysql批量插入executeBatch测试
    【php增删改查实例】第十三节
    【php增删改查实例】第十二节
    【php增删改查实例】第十一节
    【php增删改查实例】第十节
    【php增删改查实例】第九节
    【php增删改查实例】第八节
    【php增删改查实例】第六节
  • 原文地址:https://www.cnblogs.com/Chary/p/14099635.html
Copyright © 2020-2023  润新知