20145235 《信息安全系统设计基础》第07周学习总结 _2

20145235 《信息安全系统设计基础》第07周学习总结 _1

6.2 局部性

  • 良好的计算机程序具有良好的局部性。
  • 局部性有两种不同的形式:时间局部性和空间局部性。
  • 时间局部性:被引用过一次的寄存器位置,在不久的将来多次被引用。
  • 空间局部性:如果一个存储器位置被引用了一次,那么很可能在不远的将来引用附近的一个存储器位置。

6.2.1、对程序数据引用的局部性

  • 步长为k的引用模式:一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
  • 步长为1的引用模式:就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中 空间局部性常见和重要的来源。一般来说,随着步长增加,空间局部性下降。

6.2.2、取指令的局部性

  •   程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。
  •   代码区别于程序数据的是在运行时是不能被修改的。

6.2.3、局部性小结

  •  一个程序中局部性的简单原则:
  •  重复引用同一个变量的程序有良好的时间局部性
  •  对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
  •  对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

6.3存储器层次结构

  • 用相互补充的性质想到的一种组织存储器系统的方法:存储器层次结构。一般而言,从高层往底层走,存储设备变得更慢、更便宜和更大。
  • 即:每层存储设备都是下一层的“缓存”

 6.3.1 存储器层次结构中的缓存

  • 高速缓存是一个小而快速的存储设备,作为存储在更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存。
  • 存储器层次结构的中心思想是:层次结构中的每一层都缓存来自较低一层的数据对象。
  • 第k+1层的存储器被划分为连续的数据对象片,称为块。每个块都有唯一的地址和名字。类似第k层也被划分为较少的块的集合,块的大小与k+1层是一样的,第k层的缓存包含第k+1层块的一个子集的拷贝。
  • 数据总是以块大小为传送单元在第k层与第k+1层之间来回拷贝。任一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。
  • 缓存命中:当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。该程序直接从第k层读取d,比从第k+1层中读取d更快。
  • 缓存不命中:即第k层中没有缓存数据对象d。这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块。
  • 决定该替换哪个块又缓存的替换策略控制,如随机替换策略,最近最少被使用LRU替换策略。
  • 缓存不命中的种类

  1、强制性不命中/冷不命中

  第k层的缓存为空(称为冷缓存),任何访问都会不命中。这种通常是短暂的事件

  2、冲突不命中

  放置策略为将第k+1层的块限制放置在第k层块的一个小的子集中。

  3、容量不命中

  当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。

  • 缓存管理

  存储器层次结构的本质是每一层存储设备都是较低一层的缓存。在每一层上,某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的结合。

6.3.2存储器层次结构概念小结

  •  基于缓存的存储器层次结构行之有效,因为较慢的存储设备更便宜。
  •  利用时间局部性
  •  利用空间局部性

 

6.4 高速缓存存储器

  • CPU和主存之间差距太大,插入一个小的SRAM高速缓存存储器,称为L1高速缓存:2-4个时钟周期。L2高速缓存:10个时钟周期。L3高速缓存:30~40个时钟周期

6.4.1通用的高速缓存存储器结构

  • 高速缓存的结构可以用元组(S,E,B,m)来描述:
  • S:这个数组中有S=2^s个高速缓存组
  • E:每个组包含E个高速缓存行
  • B:每个行是由一个B=2^b字节的数据块组成的
  • m:每个存储器地址有m位,形成M=2^m个不同的地址
  • 有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
  • 标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
  • 组索引位:s
  • 块偏移位:b
  • 高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。
  • 高速缓存的大小/容量C指所有块的大小的和,不包括标记位和有效位,所以:
  • C=S*E*B

 

6.4.2直接映射高速缓存

  • 每个组只有一行的高速缓存称为直接映射高速缓存。
  • 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程:1、组选择2、行匹配3、字抽取
  • 直接映射高速缓存中的组选择
  • 从地址中抽取s个组索引位,解释成一个对应于一个组号的无符号整数,选择相应组。
  • 直接映射高速缓存中的行匹配
  • 直接映射高速缓存每个组只有一行,当设置了有效位并且行中的标记与地址中的标记相匹配时,我们得到缓存命中。
  • 直接映射高速缓存中的字选择
  • 块偏移位b提供了所需要的字的第一个字节的偏移。
  • 直接映射高速缓存中不命中时的行替换
  • 缓存不命中时,需要从下一层取出被请求的块存储在组索引位指示的组中的高速缓存行中。若组中都是有效行时。需要替换,直接映射高速缓存每组只有一行,就可直接替换。
  • 综合:运行中的直接映射高速缓存
  • 直接映射高速缓存中的冲突不命中
  •  当程序访问大小为2的幂的数组时,直接映射高速缓存中通常会发生冲突不命中。

 6.4.3 组相联高速缓存

  • 一个 1<E<C/B 的高速缓存通常称为E路组相联高速缓存。

组相联高速缓存中的组选择

  • 与直接映射高速缓存的组选择一样,组索引位标识组

组相联高速缓存中的行匹配和字选择

  •   形式是(key, value),用key作为标记和有效位去匹配,匹配上了之后返回value。
  •   重要思想:组中的任意一行都可以包含任何映射到这个组的存储器块,所以告诉缓存必须搜索组中的每一行。
  •   判断匹配的标准依旧是两个充分必要条件:

    1.有效

    2.标记匹配

四、组相联高速缓存中不命中时的行替换

  • 缓存不命中时,高速缓存从存储器中取出包含这个字的块,替换行时,如果没有空行,按照替换策略替换。复杂的局部性利用了局部性原理,以使在比较近的将来引用被替换的行的几率最小

6.4.4 全相联高速缓存(E=C/B

  • 一个全相联高速缓存由一个包含所有高速缓存行的组(即E=C/B)组成的。
  • 全相联高速缓存中的组选择

  只有一个组,地址中没有组索引位,地址只被划分成了一个标记和一个块偏移。

  • 全相联高速缓存中的行匹配和字选择

  与前面的一样,区别主要是规模大小的问题

  全相联高速缓存只适合做小的高速缓存,例如虚拟存储器系统中的翻译备用缓存器TLB。

6.4.5 有关写的问题

  • 更新低一层中的拷贝的方法:

  (1)直写:立即将w的高速缓存块协会到紧接着的低一层中

        缺点是每次写都会引起总线流量。

  (2)写回:只有当替换算法要驱逐更新过的块时,才写到紧接着的低一层中

        优点:由于局部性,写回能显著的减少总线流量

        缺点:增加了复杂性,必须为每个高速缓存行维护一个额外的修改位

  • 写不命中的处理方法

  (1)写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。

  (2)非写分配:避开高速缓存,直接把这个字写在低一层中。

6.4.6 真实的高速缓存层次结构:

  • 既保存指令又包括数据的高速缓存称为统一的高速缓存。

6.4.7 高速缓存参数的性能影响

  • 有许多指标来衡量高速缓存的性能:

  不命中率

  命中率

  命中时间

  不命中处罚

代码托管

 问题

书上讲,一个空的缓存有时称为冷缓存。就之前学汇编,就讲一个存储空间里面永远都会有数据,删除只是重新覆盖数据,或者移动指针。缓存他也是存储器啊,就之前学过的而言,它里面无论如何都会有数据,那为什么这里会说缓存为空呢?

原文地址:https://www.cnblogs.com/20145235litao/p/6013896.html