这几天在复习计组,希望可以通过记笔记加深印象,后面也可以方便回顾。
RAM
随机访问存储器(RAM),分为静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)。
速度:SRAM > DRAM
价格:SRAM > DRAM
应用:
- SRAM:多用于高速缓存
- DRAM:多用于主存 | 图形帧缓冲区
DRAM芯片构造
DRAM中有很多很多单元(位),而DRAM中的单元一般被划分为d个超单元。每个超单元都有w个单元。所以一个$d\times w$的DRAM芯片可以储存$dw$位数据。
超单元不是一排排到底的,是被划分为r行,c列,形成一个矩阵。这样子做的好处在接下来的数据读取可以体现出来。
从单DRAM芯片中存取数据
从DRAM芯片中存取数据需要通过内存控制器。而内存控制器与DRAM芯片又是通过引脚交流。在传统的DRAM中,两者之间存在着两组引脚。
第一组被称为addr引脚,用于指示DRAM芯片应该对哪个超单元进行访问。第二组被称为data引脚,顾名思义用于传输数据。addr引脚是从内存控制器到DRAM的单向流通引脚,而data引脚则是双向流通的。毕竟DRAM没有将地址返回给内存控制器的需求。
随着计算机的发展,单位面积上我们希望塞进去更多的单元,存储更多的数据,这个时候就需要尽可能减少一些不必要的空间,例如引脚的数量。
但是有些引脚可以动,有些引脚动不得。
例如data引脚,如果每个超单元由8个单元构成,即每个超单元存储的数据是8位的。也就是说data引脚必须要8位才能实现完整的数据交流。引脚多了没用,少了数据被截断。所以data引脚一般是不会去动它的。
而addr引脚就可以稍微优化一下。加入这是一个16x8的DRAM,即有16个超单元,每个超单元有8位。那么如果将所有的超单元排排站,我们就会发现总共需要$log_2 16 = 4$个引脚来传输地址。但是如果我们将超单元排列成一个4x4的矩阵,那么我们可以将addr引脚优化到2个指针。我们可以先传输行地址,锁定目标行,再传输列地址,确定目标超单元。
实际上这也是传统的DRAM的设计与存取方法。实际的读取流程如下:
- 内存控制器向DRAM发送行地址
i
。 - DRAM将
i
行存储至DRAM内置的行缓冲区。 - 内从控制器向DRAM发送列地址
j
- DRAM从行缓冲区去除第
j
列的超单元数据,通过data引脚传出 - 行缓冲区被清空
其中第一步被称为RAS(Row Access Strobe,行访问选通脉冲),第三步被称为CAS(Column Access Strobe,列访问选通脉冲)。
将超单元排排站还是组成团,各有优劣
排排站的好处是一步到位,缺点是引脚增多
组成团的好处是引脚减少,缺点是过程复杂
内存模块
DRAM芯片不都是单枪匹马战斗的,他们被封装在内存模块里面。这样子可以统一调配多个DRAM芯片,而且每一个超单元的存储位数也能“变多”。怎么回事呢?
例如将8个64Mbit的8M×8的DRAM芯片封装成一个内存模块,那么和这个内存模块总共可以存储64MB的数据。其中每一个“超单元”可以存储64位的数据。这里的“超单元”实际上不是简单的一个超单元,而是在8个DRAM中相同的$(i,j)$对应的每一个超单元的集合!每一个超单元可以存储8位,那么将8个DRAM中相同地址的超单元的数据串起来就可以存储64位的数据。具体的实现过程如下:
- 内存控制器向内存模块发送地址$(i,j)$
- 模块内将
i
和j
广播到每一个DRAM中 - 内存模块取得每一个DRAM中$(i,j)$对应的超单元数据,并将它们拼接为64位的数据,传输给内存控制器
(这里的拼接实际上是有内存模块中的电路实现的)
更快更强的DRAM
- 快页模式DRAM(FPM DRAM),即行缓冲区在使用后不清空,如果下一次需要访问的数据还在该行,就可以直接从缓冲区读取。
- 拓展数据输出DRAM(EDO DRAM),让CAS信号能够更加紧凑
- 同步DRAM(SDRAM),使用与外部相同的时钟信号来控制(一般的DRAM内部有自己的时钟信号,即异步的)
- 双倍速率同步DRAM(Double Data-rate Synchronous DRAM, DDR SRAM),是SDRAM的升级版。原本的SDRAM只在时钟上升沿或下降沿更新,现在被升级为上升沿和下降沿都更新,从而将速率翻倍。
视频RAM(Video RAM,VRAM)。主要用于图形系统的帧缓冲区,思想与FPM DRAM类似,不过稍有区别。
- VRAM可以对内存并行读写,FPM 不行
- VRAM的输出是通过整个内部缓冲区的内容移位得到的
以上就是我在学习CSAPP中对RAM的一些理解,欢迎交流讨论~