📜  高速缓存设计概念

📅  最后修改于: 2021-09-28 09:50:38             🧑  作者: Mango

高速缓存通过提供对数据/指令的快速访问,在减少程序的处理时间方面发挥着重要作用。高速缓存小而快,而主存大而慢。

下面解释缓存的概念。

缓存原理:
高速缓存的目的是在不影响内存大小和价格的情况下提供对资源的最快访问。处理器试图读取一个字节的数据,首先查看缓存。如果该字节在高速缓存中不存在,则在主存储器中搜索该字节。一旦在主存储器中找到字节,包含固定字节数的块就会被读入高速缓存,然后再读到处理器。由于称为局部性或局部性原理的现象,较早读入高速缓存的块包含与进程相关的字节,因此在高速缓存中找到后续字节的概率增加。

高速缓存设计:

  1. 缓存大小和块大小 –
    为了与处理器速度保持一致,高速缓存非常小,因此查找和获取数据所需的时间更少。它们通常根据体系结构分为多个层。缓存的大小应适应块的大小,而块的大小又由处理器的架构决定。当块大小增加时,由于局部性原则,命中率最初增加。

    进一步增加块大小导致将更多数据带入缓存会降低命中率,因为在某一点之后,使用新块带入的新数据的概率小于重用正在使用的数据的概率。冲出来为新的块腾出空间。

  2. 映射函数——
    当从主存中读取数据块时,映射函数决定缓存中的哪个位置被读入的主存块占用。如果缓存已满,则需要用主内存块替换缓存内存块,这会增加复杂性。应该替换哪个缓存块?

    应注意不要替换更有可能被处理器引用的缓存块。替换算法直接依赖于映射函数,如果映射函数更灵活,替换算法将提供最大的命中率。但是,为了提供更大的灵活性,搜索高速缓存以确定块是否在高速缓存中的电路的复杂性增加。

  3. 替换算法——
    当缓存已满时,它决定缓存中的哪个块被主内存中的读入块替换,映射函数有一定的约束。在不久的将来不会被引用的缓存块应该被替换,但是确定哪个块不会被引用是非常不可能的。因此,缓存中长时间未被引用的块应该由主存储器中的新读入块替换。这称为最近最少使用算法。
  4. 编写策略 –
    内存缓存最重要的方面之一。缓存中的数据块被选择被新的读入主内存块替换,应该首先放回主内存中。这是为了防止数据丢失。应决定何时将高速缓存块放回主存储器中。

    这两个可用选项如下 –

    1. Place the cache memory block in the main memory when it is chosen to be replaced by a new read-in block from main memory.
    2. 每次更新块后,将缓存块放在主内存中。

    写策略决定何时将缓存块写回主内存。如果选择选项 1,则在主存储器上执行了过多的写操作。如果选择选项 2,在多处理器系统的情况下,主内存中的块已过时,因为它尚未从高速缓存中替换,但已发生更改。

    例子 :

    • 什么是命中率?
      命中次数(在缓存中成功搜索)/总尝试次数(总搜索)。
    • 什么是LRU算法?
      更多细节在这里
    • 有哪些不同的缓存层?
      更多细节在这里和这里。
    • 如何检查我的 Windows PC 中不同层的缓存?
      打开任务管理器 -> 性能 -> CPU(示例 – L1、L2、L3)