【考研408&计算机组成原理】存储系统之Cache考点

“弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家

另外,利用了工作之余的一点点时间,整理了一套考研408的知识图谱,

我根据这一套知识图谱打造了这样一个408知识图谱问答系统

里面的每一个回答都是根据考研408的考点回复的

目前暂时只接入了微信,如果大家对这个问答系统感兴趣的话可以在我的主页里找到我的微信号

找我拉进测试群免费体验哦


这一篇来复习计算机组成原理当中 存储系统章节之Cache的知识点

目录

这一篇来复习计算机组成原理当中 存储系统章节之Cache的知识点

Cache和高速缓冲器

存储器层次化结构

映射方式:

考点考题解答示例

替换算法:

写策略:

1. 全写法(Write-Through Cache)

2. 写回法(Write-Back Cache)

3. 写分配法(Write-Allocate Cache)

4. 非写分配法(No-Write-Allocate Cache)

写策略的选择

要注意的细节

Cache写策略的考点

考题示例


Cache和高速缓冲器

Cache通常指的是高速缓冲存储器(High-Speed Buffer Storage),它是一种特殊的存储结构,用于提高数据访问速度。Cache的目的是解决CPU(中央处理单元)与主存(主存储器)之间的速度不匹配问题。

存储器层次化结构

以下是Cache的一些关键特性和功能:

  • 引入目的:Cache是为了缓解CPU和主存之间的速度差异而设计的。由于CPU的处理速度通常远远超过主存的访问速度,Cache作为两者之间的缓冲,存储了频繁访问的数据,从而加快了数据的访问速度

映射方式

  • 直接映射:主存数据块只能装入到Cache中唯一的位置。
  • 全相联映射:可以把主存数据块装入Cache中的任何位置。
  • 组相联映射:将Cache分为若干组,组间直接映射,组内全相联映射。

考点考题解答示例

  • 问题:如果一个系统有2GB的地址空间,Cache大小为256KB,使用直接映射和组相联映射,需要多少位来表示Tag?
    • 解答
      • 直接映射: 首先确定地址总长度,2GB地址空间需要 log⁡2(2×109)=31log2​(2×109)=31 位。Cache大小为256KB,即 218218,所以索引部分需要 log⁡2(218)=18log2​(218)=18 位。因此,Tag的长度为 31−18=1331−18=13 位。
      • 组相联映射:假设Cache分为16组(仅为示例,实际组数由Cache大小和路数决定),则组号需要 log⁡2(16)=4log2​(16)=4 位。剩余的位用于Tag,即 31−4=2731−4=27 位。
  • 问题:如果一个Cache使用组相联映射,每组有8个Cache行,且Cache大小为1MB,需要多少位来表示Tag和组号?
    • 解答
      • Cache大小为1MB,即 220220。每组8行,所以每组大小为128KB,即 2^17。索引部分需要 log⁡2(217)=17log2​(217)=17 位来确定组内Cache行的位置。组号需要 log⁡2(8)=3log2​(8)=3 位。因此,Tag的长度为 20−17=3 位,组号为3位。

替换算法

当Cache满时,需要决定哪些数据被替换。常见的替换算法包括先进先出(FIFO)、近期最少使用(LRU)、最不经常使用和随机算法。

当Cache满了,需要引入新的数据时,就需要决定哪些旧数据需要被替换。以下是几种常用的Cache替换算法:

  • 先进先出(FIFO - First In, First Out)算法
    • 这种方法按照数据被加载到Cache中的顺序来决定哪些数据被替换。最先进入Cache的数据块将最先被替换。
  • 近期最少使用(LRU - Least Recently Used)算法
    • LRU算法会替换那些在最近一段时间内最少被访问的数据块。这种方法假设如果数据最近被访问过,那么它在未来可能还会被访问。
  • 最不经常使用(LFU - Least Frequently Used)算法
    • LFU算法替换那些在总的访问历史中被访问次数最少的数据块。这种方法关注于整体访问频率,而不是近期访问模式。

写策略

几种常见的Cache写策略:

1. 全写法(Write-Through Cache)
  • 在这种策略下,每次对Cache中的写操作都会同时更新主存中的相应数据块。这意味着Cache和主存的数据始终保持一致。
  • 优点是实现简单,数据一致性容易维护。
  • 缺点是每次写操作都需要访问主存,这可能会降低写操作的性能
2. 写回法(Write-Back Cache)
  • 写回法只在Cache中进行数据的写操作,并不立即同步到主存。只有当Cache中的块被替换时,才会将数据写回主存。
  • 这种方式可以减少对主存的写操作,提高写操作的性能。
  • 优点是写操作速度快,因为不需要每次都访问主存。
  • 缺点是实现相对复杂,需要额外的标记(如脏位,用于标记数据块是否被修改过)来追踪数据块的状态。
3. 写分配法(Write-Allocate Cache)
  • 在写分配法中,当发生Cache未命中时,会将主存中的数据块加载到Cache中,然后执行写操作。
  • 这种方法适用于写操作不频繁的场景,可以减少不必要的数据加载。
4. 非写分配法(No-Write-Allocate Cache)
  • 非写分配法在发生Cache未命中时,不将数据块加载到Cache中,而是直接在主存中进行写操作。
  • 这种方式适用于写操作非常频繁的场景,可以避免不必要的数据加载和替换。
写策略的选择

选择哪种写策略取决于具体的应用场景和性能需求。例如,如果写操作非常频繁,可能会选择写回法以提高性能;如果数据一致性非常关键,可能会选择全写法。

要注意的细节
  • 脏位(Dirty Bit):在写回法中,每个Cache行通常都有一个脏位,用于标记该行数据是否被修改过。这样,在替换数据块时,只有被修改过的块才需要写回主存。
  • 同步操作:在全写法中,每次写操作都需要同步到主存,这可能会引入额外的延迟。
Cache写策略的考点

Cache写策略是计算机组成原理中的一个重要考点,主要涉及以下几个方面:

  1. 写策略的概念:了解和区分不同类型的Cache写策略,包括全写法和写回法。
  2. 全写法(Write-Through Cache)
    • 写操作在Cache和主存中同步更新。
    • 适用于非写分配策略。
  3. 写回法(Write-Back Cache)
    • 写操作仅在Cache中进行,当Cache块被替换时再写回主存。
    • 适用于写分配策略。
  4. 未命中时的处理
    • 写分配法:在发生写未命中时,先将主存数据调入Cache,再进行写操作。
    • 非写分配法:直接在主存中进行写操作,跳过Cache。
  5. 写策略的选择:理解不同写策略的优缺点和适用场景。
  6. 写策略与存储器性能:分析写策略对存储器性能的影响。
  7. Cache一致性:在多级Cache系统中,理解如何维护Cache一致性。
考题示例

选择题:选择正确的Cache写策略,并解释其工作原理。

代码语言:javascript
复制
在Cache的写回法中,当发生写操作时,数据是先写入到Cache还是主存?
A. 主存
B. Cache

写回法(Write-Back)也被称为写回缓存或写分配缓存。
在这种策略中,当发生写操作时,数据首先被写入到Cache中,而不是直接写入到主存。
只有在Cache行被替换时,脏行(即那些已经被修改的行)才会被写回主存。
这种方式可以减少对主存的写操作次数,因为只有在必要时才进行写回,从而提高性能。

简答题:简述全写法和写回法的区别,并说明各自的优缺点。

代码语言:javascript
复制
描述全写法和写回法在处理写操作时的不同之处,并分析它们各自可能的性能特点。

全写法(Write-Through):

数据在写入Cache的同时,也会立即写入主存。
优点:保证了Cache和主存的数据一致性。
缺点:每次写操作都会涉及到主存,可能会降低写操作的性能。
写回法(Write-Back):

数据首先写入Cache,只在必要时(如替换时)写回主存。
优点:减少了对主存的写操作,提高了写操作的性能。
缺点:需要额外的机制来跟踪哪些数据块是脏的,增加了复杂性。

计算题:给定一个场景,计算在不同的写策略下,Cache的写操作性能。

代码语言:javascript
复制
假设有一个系统使用写回法的Cache,每次写操作需要10个时钟周期来写入Cache,
而写回主存需要50个时钟周期。
如果系统在1秒内发生了1000次写操作,请计算Cache写操作的总延迟时间。

1秒内发生1000次写操作。
每次写操作的延迟时间 = 写入Cache的时间 + 写回主存的时间(如果发生)。
由于写回法只在Cache行替换时写回主存,假设1000次写操作中有10%的行被替换,即100次写回主存。
Cache写操作总延迟 = (1000 * 10) + (100 * 50) = 10000 + 5000 = 15000个时钟周期。

分析题:分析在多级Cache系统中,如何通过写策略来维护数据一致性。

代码语言:javascript
复制
在一个具有L1和L2 Cache的多级Cache系统中,
当L1 Cache发生写命中时,如何确保L2 Cache中相应的数据块保持一致性?
请分析可能的策略及其影响。

写回(Write-Back):L1 Cache的写操作只更新L1 Cache,L2 Cache中的数据被视为过时的。当L2 Cache需要该数据块时,会从L1 Cache中获取最新的数据。