第五章 大容量和高速度:开发存储器层次结构
开始更新计算机组成与设计:硬件/软件这一本书的笔记。这本书是理解计算机组成原理的经典书籍,也是很多考研自命题学校的参考书籍。
所以我决定带着大家一起阅读这本书。这本书一共六章,重点是前四章,其中最为精彩的是第四章,主要讲解了处理器的基本概念以及设计方法。
- 第一章:计算机概要与技术,主要是对整个计算机组成有一个大概的了解。主要了解计算机系统结构中的8个伟大思想,程序概念以及硬件概念入门 ,以及对计算机性能的各种度量。
- 第二章:指令 计算机的语言。主要讲解汇编语言以及机器语言的基本知识。
- 第三章:计算机的算术运算。主要了解计算机底层是如何完成加减乘除运算的。
- 第四章:处理器。主要讲解处理器的内部实现以及工作原理。
- 第五章 主要了解存储技术以及Cache的基本原理。
本书我将从第五章开始整理复习
存储器技术
这是计算机组成与设计:软硬件接口的第五章笔记。在这一章中,我们将进入存储器的世界,去探究存储器内部的工作原理。
在第五章我们将会学习存储器技术和Cache的基本原理。
引入
在正式介绍存储器技术之前,我们引入一个例子来帮助大家对于存储器的理解。
想象你正坐在图书馆中完成一份关于计算机硬件重要历史性发展的论文,你可以从图书馆的书架上精心挑选一些经典的计算机书籍,并将它们放在书桌上。你从这些书中找到了需要写的几种重要的计算机,但是没有找到关于EDSAC的,因此,你返回书架去寻找其他书,并在早期的英国计算机书籍中找到了一本有关EDSAC的书。一旦在你的书桌上有了选好的一些书,你就有可能从这些书中找到你需要的内容。这样一来,你的大部分时间只需花在阅读这些书上,而无需返回书架。
我们可以把上述例子中放在书桌上的书当作是存储在Cache中的数据,将放在书架上的书当作是存储在内存或其他存储设备的数据。你也就是处理器想要完成一项任务的时候,会先检查Cache中有没有需要的数据,如果有,就立即返回给处理器;如果没有,就会接着向更低级的存储器中寻找,然后逐级返回。我们称在Cache中找到数据为一次命中,命中率是在高层存储器中找到目标数据的存储访问比例。而缺失就是没有在Cache中找到需要的数据,缺失率是高层存储器中没有找到目标数据的存储访问比例。
而命中时间指的是访问某存储器层次结构所需要的时间,包括了判断当前访问时命中还是缺失所用的时间。
那么什么是高层存储器,什么是低级存储器呢?下面的图说明了存储器层次结构。
存储器层次结构呈正金字塔形状,最上层的L0是寄存器,接着L1~L3指的是处理器缓存Cache,现代处理器均具有三层Cache结构,接着是内存也称为主存,最后是本地磁盘以及云存储。
有了以上的存储器基本知识,我们开始介绍存储器技术。
目前,构建存储器层次结构主要有4种技术。
主存也就是内存由DRAM(动态随机存取存储器)实现,而Cache由SRAM(静态随机存取存储器)实现。
DRAM每比特成本低于SRAM,但速度比SRAM慢。
第三种技术是闪存,第四种是磁盘。我们在接下来将依次详细介绍这四种技术。
SRAM技术
SRAM是一种组织成存储阵列结构的简单集成电路。SRAM对任何数据的访问时间都是固定的。为了防止读操作时信息丢失,SRAM的一个基本存储单元通常由6~8个晶体管组成。
SRAM的存储单元具有双稳态特性,所以只要一直通电就能够一直保存数据。
DRAM技术
与SRAM技术相比,DRAM的原理是电容充电,DRAM每个比特位存储对应一个电容和一个晶体管。而且DRAM对干扰十分敏感,当电容的电压被扰乱之后就再也无法回到扰乱之前的状态。
而且电容十分容易发生漏电,所以需要不断刷新来保持数据的存在。
接下来我们来看一下DRAM的内部结构:
图中展示了一个16×8的DRAM芯片,其中16表示的是超单元的个数,8表示每个超单元可以存储8bit的数据。
通过这张图 我们可以看到所有的超单元被组织成了一个4x4的阵列,每个超单元可以通过类似坐标的方式进行寻址 其中i表示行j表示列,整个DRAM芯片通过地址引脚和数据引脚与内存控制器相连。
简单来讲 内存控制器主要用来管理内存。
第一次听到内存控制器的同学可能会感到困惑 可以通过一个通俗的例子来理解:
假如我们将数据比作书 内存就相当于是一个图书馆 而内存控制器可以看成图书管理员。
例如 我们需要从DRAM芯片中读出图中所示的超单元
- 首先 内存控制器发送行地址2到DRAM芯片
- DRAM所做出的响应就是将整个第二行的内容全部复制到内部的行缓冲区域中
- 接下来 内存控制器发送列地址1到DRAM芯片
- DRAM对应的操作是从这个行缓冲区中复制出对应的数据位 并把它发送到内存控制器
看到这里 相信有很多同学会有这样的疑问:
为什么要分两次发送地址 这样不是增加了访问的时间吗?
这是因为DRAM芯片的设计人员将存储单元设计成了二维阵列 而不是线性数组,这样设计的好处是可以降低芯片上地址引脚的数量。
不过 ,二维阵列的组织方式确实会增加数据访问的时间。接下来 我们看一下采用DRAM芯片封装成的内存模块。
图中展示了一个内存模块的基本组成 这个模块一共用了八个DRAM芯片,分别用编号0-7来表示。每个DRAM芯片的大小是8×8=64bit也就是8MB个字节.因此 整个内存模块的大小为64MB
在刚才我们提到,每个超单元可以存储8bit的数据,那么对于8字节也就是64bit的数据,就需要八个超单元来存储。
不过,这八个超单元并不在同一个DRAM芯片上,而是平均分布在8个DRAM芯片上。其中\(DRAM_0\)存储第8位\(DRAM_1\)存储下一个字节,以此类推 \(DRAM_7\)存储最高八位。
当处理器向内存控制器发起读数据的请求时,内存控制器将地址转换成超单元地址,然后把它发送到内存模块,然后 内存模块再将行地址i和列地址j广播到每个DRAM,每个DRAM都会输出它对应的超单元的数据。
最终 内存模块将所有的超单元合并成一个64bit的数据返回给内存控制器。
在实际生活中,处理器处理数据的速度与内存处理数据的差距已经越来越大,为了跟上迅速发展的处理器的速度 市场上会定期推出新的DRAM,这些DRAM都是基于传统的DRAM单元 然后进行一些优化。
图中就是我们经常能看到的几种内存类型。
接下来我们介绍第三种技术,闪存技术。
闪存技术
闪存是一种电可擦除的可编程只读存储器。闪存是存在损耗的,为了应对闪存的不断损耗,大多数闪存产品中都存在一个控制器,用来将写操作从已经写入很多次的块中映射到写入次数较少的快中,从而使写操作尽量分散。这种技术被称为损耗均衡。
闪存广泛运用于我们如今十分常见的固态硬盘中。
最后一种技术是磁盘存储器。
磁盘技术
一个磁制磁盘包含一组圆形磁盘片,它们绕着轴心每分钟转动5400~15000周。为了对硬盘上的信息进行读写,每层的表面有一个包含小的电磁线圈的读写磁头。
每个磁盘表面划分为同心圆盘,称为磁道(tracks)。每个面通常有几万条磁道,每条磁道同样被划分为存储信息的扇区(sector)。
每个扇区的容量通常是512~4096字节。信息在磁介质上保存的顺序为扇区号、一个间隙、包含该扇区纠错码的信息、一个间隙、下一个扇区的扇区号。
为了访问数据,操作系统必须对磁盘进行三步操作。
- 将磁头移动到适当的磁道之上,被称为寻道
- 等待访问的扇区转动到读写头下面
- 传输数据
在操作系统视角下,磁盘被抽象为一个个 逻辑块序列,每个逻辑块的大小与磁盘扇区的容量是一致的 都是512个字节。
磁盘内部有一个小的固件设备 称为磁盘控制器。它维护着逻辑块与实际磁盘扇区之间的映射关系。当操作系统执行从硬盘读取数据到内存时,操作系统会发送一个命令到磁盘控制器。
这个命令就是让磁盘控制器读取特定逻辑块号的数据。可以使用盘面、磁道、扇区这样的一个三元组来唯一标识每个物理扇区。接下来,控制器会根据这个三元组的信息来执行移动读写头以及旋转盘面的操作。然后 读写头会把读到的数据放到一个缓冲区中,最后将目标数据复制到内存里。
以上就是四种存储器技术的全部内容,接下来我们将开始学习Cache的基本原理。