文章目录随机访问存储器SRAM传统 DRAM内存模块增强的 DRAM访问主存随机访问存储器SRAMSRAM 将每个位存储在一个双稳态的存储器单元里这样的电路可以无限期地保持在两个不同的电压配置或状态之一。其他任何状态都是不稳定的——从不稳定状态开始电路会迅速地转移到两个稳定状态中的一个。类似于钟摆的状态。当钟摆倾斜到最左边或最右边时它是稳定的。从其他任何位置钟摆都会倒向一边或另一边。原则上也能在垂直的位置无限期保持稳定但是这个状态是亚稳态的——最细微的扰动也能使它倒下而且一旦倒下就永远不会在恢复到垂直的位置。由于 SRAM 存储单元的双稳态特性只有有电它就会永远保持它的值。即使有干扰来扰乱电压当干扰消除时电路就会恢复到稳态。传统 DRAM:::color1DRAM 芯片中的单元位被分成$ d∗ ∗ 个超单元 s u p e r c e l l 每个超单元都由 ∗ ∗ ** 个超单元supercell每个超单元都由 **∗∗个超单元supercell每个超单元都由∗∗w∗ ∗ 个 D R A M 单元组成。一个 ∗ ∗ ** 个 DRAM 单元组成。一个 **∗∗个DRAM单元组成。一个∗∗d \times w∗ ∗ 的 D R A M 总共存储了 ∗ ∗ ** 的 DRAM 总共存储了 **∗∗的DRAM总共存储了∗∗dw∗ ∗ 位信息。超单元被组织成一个 ∗ ∗ ** 位信息。超单元被组织成一个 **∗∗位信息。超单元被组织成一个∗∗r∗ ∗ 行 ∗ ∗ ** 行 **∗∗行∗∗c∗ ∗ 列的长方形阵列这里 ∗ ∗ ** 列的长方形阵列这里 **∗∗列的长方形阵列这里∗∗rc d∗ ∗ 。每个超单元有形如 ∗ ∗ **。每个超单元有形如 **∗∗。每个超单元有形如∗∗(i, j)∗ ∗ 的地址这里 ∗ ∗ ** 的地址这里 **∗∗的地址这里∗∗i∗ ∗ 表示行而 ∗ ∗ ** 表示行而 **∗∗表示行而∗∗j $表示列。:::例如图 6-3 展示的是一个 $ 16 \times 8 $ 的 DRAM 芯片的组织有 $ d 16 $ 个超单元每个超单元有 $ w 8 $ 位$ r 4 $ 行$ c 4 $ 列。带阴影的方框表示地址 $ (2, 1) $ 处的超单元。信息通过称为引脚pin的外部连接器流入和流出芯片。每个引脚携带一个 1 位的信号。图 6-3 给出了两组引脚8 个 data 引脚它们能传送一个字节到芯片或从芯片传出一个字节以及 2 个 addr 引脚它们携带 2 位的行和列超单元地址。其他携带控制信息的引脚没有显示出来。要从该 DRAM 中读出超单元21内存控制器发送行地址 2。DRAM 的响应是将行 2 的整个内容都复制到一个内部行缓冲区。接下来内存控制器发送列地址 1DRAM 的响应是从行缓冲区复制出超单元21中的 8 位并把它们发送到内存控制器。为什么电路设计者将 DRAM 组织成二维阵列而不是线性数组降低芯片上地址引脚数量。例如如果 128 位 DRAM 被组织成一个 16 个超单元的线性数组地址位 0~15那么芯片会需要 4 个地址引脚而不是 2 个。二维阵列组织的缺点是必须分两步发送地址这增加了访问时间。内存模块DRAM 芯片封装在内存模块memory module中它插到主板的扩展槽上。Core i7 系统使用的是 240 个引脚的双列直插内存模块Dual Inline Memory Module, DIMM它可以以 64 位为块传送数据到内存控制器和从内存控制器传出数据。示例模块用 8 个 64 Mbit 的 8 M $ \times $ 8 的 DRAM 芯片总共存储 64MB兆字节这 8 个芯片编号为 07。每个超单元存储主存的一个字节而用相应超单元地址为 $ (i, j) $ 的 8 个超单元来表示主存中字节地址 A 处的 64 位字。在图 6-5 的示例中DRAM 0 存储第一个低位字节DRAM 1 存储下一个字节依此类推。要取出内存地址 A 处的一个字内存控制器将 A 转换成一个超单元地址 $ (i, j) $并将它发送到内存模块然后内存模块再将 $ i $ 和 $ j $ 广播到每个 DRAM。作为响应每个 DRAM 输出它的 $ (i, j) $ 超单元的 8 位内容。模块中的电路收集这些输出并把它们合并成一个 64 位字再返回给内存控制器。通过将多个内存模块连接到内存控制器能够聚合成主存。在这种情况下当控制器收到一个地址 A 时控制器选择包含 A 的模块 $ k $将 A 转换成它的 $ (i, j) $ 的形式并将 $ (i, j) $ 发送到模块k kk。增强的 DRAM有许多种 DRAM 存储器而生产厂商试图跟上迅速增长的处理器速度市场上就会定期推出新的种类。每种都是基于传统的 DRAM 单元并进行一些优化提高访问基本 DRAM 单元的速度。:::warning快页模式 DRAMFast Page Mode DRAM, FPM DRAM。传统的 DRAM 将超单元的一整行复制到它的内部行缓冲区中使用一个然后丢弃剩余的。FPM DRAM 允许对同一行连续地访问可以直接从行缓冲区中得到服务从而改进了这一点。例如要从一个传统的 DRAM 的行i ii中读 4 个超单元内存控制器必须发送 4 个 RAS/CAS 请求即使是行地址i ii在每个情况中都是一样的。要从一个 FPM DRAM 的同一行中读取超单元内存控制器发送第一个 RAS/CAS 请求后面跟三个 CAS 请求。初始的 RAS/CAS 请求将行 $ i $ 复制到行缓冲区并返回 CAS 寻址的那个超单元。接下来三个超单元直接从行缓冲区获得因此返回得比初始的超单元更快。扩展数据输出 DRAMExtended Data Out DRAM, EDO DRAM。FPM DRAM 的一个增强的形式它允许各个 CAS 信号在时间上靠得更紧密一点。同步 DRAMSynchronous DRAM, SDRAM。就它们与内存控制器通信使用一组显式的控制信号来说常规的、FPM 和 EDO DRAM 都是异步的。SDRAM 用与驱动内存控制器相同的外部时钟信号的上升沿来代替许多这样的控制信号。我们不会深入讨论细节最终效果就是 SDRAM 能够比那些异步的存储器更快地输出它的超单元的内容。双倍数据速率同步 DRAMDouble Data-Rate Synchronous DRAM, DDR SDRAM。DDR SDRAM 是对 SDRAM 的一种增强它通过使用两个时钟沿作为控制信号从而使 DRAM 的速度翻倍。不同类型的 DDR SDRAM 是用提高有效带宽的很小的预取缓冲区的大小来划分的DDR2位、DDR24位和 DDR38位。视频 RAMVideo RAM, VRAM。它用在图形系统的帧缓冲区中。VRAM 的思想与 FPM DRAM 类似。两个主要区别是1VRAM 的输出是通过依次对内部缓冲区 的整个内容进行移位得到的2VRAM 允许对内存并行地读和写。因此系统可以在写下一次更新的新值写的同时用帧缓冲区中的像素刷屏幕读。:::访问主存数据流通过称为总线bus的共享电子电路在处理器和 DRAM 主存之间来来回回。每次 CPU 和主存之间的数据传送都是通过一系列步骤来完成的这些步骤称为总线事务bus transaction。读事务read transaction从主存传送数据到 CPU。写事务write transaction从 CPU 传送数据到主存。总线是一组并行的导线能携带地址、数据和控制信号。取决于总线的设计数据和地址信号可以共享同一组导线也可以使用不同的。同时两个以上的设备也能共享同一总线。控制线携带的信号会同步事务并标识出当前正在被执行的事务的类型。例如当前关注的这个事务是到主存的吗还是到诸如磁盘控制器这样的其他 I/O 设备这个事务是读还是写总线上的信息是地址还是数据项计算机系统配置主要部件是CPU 芯片、我们将称为I/O 桥接器I/O bridge的芯片组其中包括内存控制器以及组成主存的 DRAM 内存模块。这些部件由一对总线连接起来其中一条总线是系统总线system bus它连接 CPU 和 I/O 桥接器另一条总线是内存总线memory bus它连接 I/O 桥接器和主存。I/O 桥接器将系统总线的电子信号翻译成内存总线的电子信号。正如我们看到的那样I/O 桥接器也将系统总线和内存总线连接到 I/O 总线像磁盘和图形卡这样的 I/O 设备共享 I/O 总线。CPU 执行加载操作——读事务movq A,%rqx地址 A 的内容被加载到寄存器 %rax 中。CPU 芯片上称为总线接口的电路在总线上发起读事务。CPU 将地址 A 放到系统总线上I/O 桥将信号传递到内存总线。主存感觉到内存总线上的地址信号从内存总线读地址从 DRAM 取出数据字并将数据写到内存总线。I/O 桥将内存总线信号翻译成系统总线信号然后沿着系统总线传递。CPU 感觉到系统总线上的数据从总线上读数据并将数据复制到寄存器%rax。CPU 执行存储操作——写事务movq %rax,A寄存器%rax 的内容写到地址 ACPU发起写事务。CPU 将地址放到系统总线上。内存从内存总线读出地址并等待数据到达。CPU 将%rax 中的数据字复制到系统总线。主存到内存总线读出数据字并且将这些位存储到 DRAM 中。