揭秘CPU Cache工作原理(二)

1、前言

揭秘CPU Cache工作原理(一) 中,较为全面地说明了Cache引入初衷、目的,它弥补了内存性能上的瓶颈。同时也对高速Cache中一些相关的术语作了简介,接下来本文主要完成上文中所提出的两个问题。即如何确认CPU所需要的数据在Cache中?若在缓存中,怎么去找到该数据块的具体位置?**
**

内存与高速Cache之间的数据传输是以块的形式进行,这在 浅谈计算机存储层次结构 曾有提及。而该块称为“高速缓存线(Cache Line)”,当然,也有某些书籍称此块为“缓存行”,比如《现代操作系统原理与实现》的2.2.1小节。为了更加容易地理解接下来的内容,这里先对内存的组件DRAM进行剖析和说明,这对后面Cache与和内存中块的映射的理解大有裨益。

2、内存(主存)

2.1 DRAM和SRAM

内存主要由动态随机访问存储器(Dynamic Random Access Memory, DRAM)组成,它是随机访问存储器(Random Access Memory, RAM)的其中一类。对于RAM,共分为两类,分别是静态随机访问存储器(Static Random Access Memory,SRAM)和动态随机访问存储器。由于DRAM的工艺、材质(电子元器件)和SRAM不同,所以导致两者在许多特性上面具有重大的差异性,DRAM比SRAM造价低、速度慢、密度大(将更多的数据打包到更小空间)、功耗底。因此,DRAM用于PC、游戏等大多数设备的内存和图形系统的缓冲区,而SRAM作为CPU的高速缓冲区。

动态随机访问存储器(DRAM)中使用一个电容器(电容器可充电、放电特性)和一个晶体管来存储每个二进制数据的比特位信息;而静态随机访问存储器(SRAM)中的每个二进制数字比特位使用六个晶体管。

DRAM对干扰(比如电子噪音)非常敏感,而且基于泄露电流等各种因素,对于存储在DRAM单元(一个电容与晶体管)间的比特位值仅能够保存在10~100ms时间范围,之后便失去原电荷,从而丢失该比特位信息。然而CPU的运行时钟周期、处理速度、频率极其快速,以纳秒级别来衡量,所以DRAM能够保存毫秒级(ms)的时间对于计算机而言,已经足够外部存储系统读取出原来电荷信息然后重新刷新该单元的每个位。并且需要周期性的重复这个过程,这也是“动态存储器”的由来。相反,SRAM则对电子干扰、信号干扰等敏感度较低。因此,当SRAM周边的干扰信息源消失后,其电路能够立刻恢复原来电位值。

附:所谓“电容泄露”是指电容器即使在电压下也会失去一点电荷,如果它们附近有器件(如晶体管),即使它们处于“关闭”状态,也会产生一点电流。

Capacitors can lose their charge a bit even when supplied with voltage if they have devices nearby (like transistors) that draw a little current even if they are in an “off” state; this is called capacitor leakage.

下表则列出了DRAM和SRAM间的所有差异点:

图片

若你对电容、晶体管等元器件感兴趣,或是想深入了解这些元器件的背后原理与底层知识,推荐阅读有关高频、模电、数电等领域的书籍,比如童诗白、华成英两位老师合著的《模拟电子技术基础》、张肃文老师的《高频电子线路》以及由余璆(qiu)、熊洁两位老师合译的《数字电子技术》书籍。这些也是我大学时候电子信息专业的课本,依稀记得那时在这些课程上的投入与付出,正因为如此,时至今日,依然耳熟能详这些书名。

2.2 多元化DRAM

​ 如今,已经衍生出许多种型号的DRAM加强版本,各种型号均是基于传统的DRAM单元,并在其基础上进行了许多的优化与性能增强。如下图所示,至于其中各种衍生版本的优化地方,就不一一列举说明了。

图片

2.3 DRAM单元(位)

DRAM通常排列在一个矩形阵列的电荷存储单元中,其中每个数据位由一个电容器和一个晶体管组成。连接每一行的水平线称为字线(Word-Line, 或行线-Row Line), 竖直的线称为“位线(Bit-Line,或数字线Dight-Line、列线-Column-Line)”。每一列单元格由两条位线组成,然后每一条位线连接到列中的所有其他存储单元格,它们通常称为“+”和“-”位线。

对于DRAM中的一个单元,如下图所示,其中(-||-)为电容,另一个表示晶体管,DRAM存储单元(DRAM Cell)以电容器上存储的电荷的形式(即是否有电荷)存储二进制比特位信息。 当需要将位放入存储器时,晶体管用于为电容器充电或放电。一个充电电容器表示逻辑高或”1″,而放电电容器表示逻辑低或”0″。充电/放电通过字线(Word-Line)和位线(Bit-Line)完成的,如下图所示。

图片

▲ 图片来自ALLABOUTCIRCUITS

​ 至于晶体管与电容如何配合去产生高低电平来存储位信息的底层原理背后细节,本文将不展开讨论,感兴趣的读者可以自行Google或Baidu。

晶体管(Transistor)电子元器件的作用及符号可参考:

晶体管是一种半导体器件,有三个端子,分别是基极、发射极和集电极。它用于电子电路中作为整流器、放大器、开关等。

www.electrical-symbols.com/electric-el…

​ 而电容(Capacitance)的作用及符号可参考:

电容器不仅在电路中充当耦合元件,或在振荡器或滤波器等上形成谐振元件,而且可能在解耦方面应用最广泛。

www.electronics-notes.com/articles/an…

2.3.1 DRAM阵列布局

上图中的DRAM单元仅仅是内存阵列单元中的其中一个。对于DRAM单元,它是以矩阵形式进行布局的,其中字线(Word-Line)控制着一行中所有DRAM单元中的传输晶体管的栅极,而位线(Bit-Line)则从位于一列中的大量DRAM单元收集数据。列的长度增加了DRAM阵列的容量,但同时也增加了电容Cline,从而限制了信号的强度。

DRAM单元阵列布局图如下所示。图中灰色部分是内存阵列,设计为行和列的网格,行解码器和列解码器分别用于访问行和列。灰色区域部分由成千上万(和内存实际大小有关)个灰色小格组成,每个灰色小格表示一个DRAM单元,该DRAM单元正是2.3节中的示意图。

图片

▲ 图片来自ALLABOUTCIRCUITS

下图是DRAM中更完整且完全连接的矩阵布局渲染图。从图中可以看但DRAM内部的详细布局,以及行解码器(Column Decoder)和列解码器(Row Decoder)所扮演的角色。

图片

▲ 图片来自QDPMA

讲解了这么多有关DRAM的特性以及内存内部布局方式等内容,接下来开始重点研究内存与高速Cache间的映射和确认匹配等。

3. 直接映射

直接映射(Direct Mapped)是一种Cache结构,它是最为简单、低效和极端的定位机制。在Cache中,将会为内存中的每个字都分配一个位置,换言之,即内存中任何一个块都将被直接映射到高速Cache中的唯一位置。记住,内存是一组可单独寻址的DRAM。

对于直接映射方式的原理细节,请阅读下一节的 揭秘CPU Cache工作原理(三) 博文。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享