概述
在计算机中,除了CPU之外,另外一个非常重要的组件是——存储器,根据冯•诺依曼结构的设计思想,计算机中含有存储功能的有:
- 运算器 central arithmetical
- 存储器 main memory
- 外部记录介质 outside recording medium
对于计算机中的存储器,我们人类都是用贪婪的眼光看待:
We are … forced to recognize the possibility of constructing a hierarchy of memories, each of which has greater capacity than the preceding but which is less quickly accessible.
—— A. W. Burks, H. H. Goldstine, and J. von Neumann
我比较认同懒惰是人类技术进步的驱动力,同时,认为贪婪也是技术进步的推动力之一。
既想要容量大,又想要访问快。从技术角度来看,这样是可以的吗?可以的,但是需要很多成本。但是考虑现实因素,这样做性价比不高,所以人们希望建立一个“虚拟”的存储器,能够同时实现这两者,以完成人们的“梦想”,这就是通过memory hierarchy实现的。这种技术方案是在两者之间取得一个均衡,而不是过分极端,同时考虑成本等因素。
一些存储器选择的考虑因素
- 非易失性
- 即电路断电后,存储器中的信息仍然存在,不会消失。
- CPU中的通用存储器和main memory均为易失性存储器,即断电后数据消失。
- BIOS和硬盘均为非易失性存储器;
- 可读可写
- 硬盘和main memory均为可读可写的;
- BIOS为只读存储器,用于引导计算机启动,避免任何写入;
- 随机访问
- 随机访问指,当对存储器中任意位置数据的访问时间与其所在的位置没有关系。
- 这种典型的数据结构是数组和hashmap
- 一种典型的非随机访问的设备是磁带,只能顺序访问,否则就要倒带。
- 如果不支持随机访问,会对存储器有很大的影响。
- 访问时间
- 这里所说的访问时间,指的是CPU对存储器的访问时间。
- 不同存储器装置的电路结构、与CPU的距离决定了访问时间;
- 例如:硬盘由于有机械装置的存在,因此其访问速度难以媲美main memory。
- 功耗
- 功耗在移动设备上尤其重要;
- 也与存储器的电路结构有关,比如是否需要刷新;有时还与总线有关;
- 还有其他的,如:容量、价格等等;
📌 虽然有这么多考虑因素,但是其中访问速度和容量使我们考虑的核心因素,memory hierarchy也是围绕着两者设计的。
不同类型存储器件的特点
问题1:硬盘的优点和缺点
我们都了解硬盘,动辄几百GB,甚至TB,也很常见,这是它的突出的特点,容量大,同时很便宜,但是缺点是访问速度慢。导致CPU与硬盘难以直接进行数据交互。
如上图所示:
- CPU对比Disk,发现2010相对于1980,CPU的时钟周期,变快了2500倍,但是Disk只提升了29倍,而且两者完全不在一个数量级上。因此CPU直接与Disk交互时,会等待Disk完成IO操作,期间闲置,因此会严重被Disk拖累;
- DRAM相比于Disk则更快一些,其速度提升了9倍,但是与CPU的时钟周期处在同一个数量级上。
- 但是Disk的成本降低了1600000倍,而DRAM只降低了130000倍。
问题2:DRAM存储器性能的影响
DRAM相比于Disk,虽然在访问时间上有提升,但是比CPU的时钟周期还是慢100倍,这种造成怎样的结果呢?
计算执行一条指令,分为4个步骤:
- fetch 取码
- decode 译码
- execute 执行
- write-back 写回
受限于存储器的性能,当CPU执行其中的特定步骤时,需要等待存储器的访问结束才能进行下一个步骤。
针对这种问题,在CPU和DRAM之间添加SRAM来获得高速访问的效果,以保证程序和数据大部分时间都在SRAM中,SRAM的访问时间一般为3个时钟周期。当使用SRAM作为cache后,指令执行时间大幅下降。
问题3:SRAM的问题
虽然SRAM的访问速度能够大幅提升性能,但是我们并不用SRAM作为main memory,因为其价格是DRAM的1000倍。
但是考虑到其优秀的访问性能,仍作为Cache被不断地引入计算机中。
Memory hierarchy的设计
设计原理
考虑到上述不同组件而特点,同时兼顾现实场景,我们对于存储器数据的的访问是等概率的吗?当然不是,肯定有最常访问的数据和程序;那些特定文件夹内吃灰的大部头书籍,肯定很少访问。基于这个现实考虑,人们依据 principle of locality
设计整个结构,有两种 locality:
Temporal locality
(locality in time): if an item is referenced, it will tend to be referenced again soon.Spatial locality
(locality in space): if an item is referenced, items whose addresses are close by will tend to be referenced soon.
依据这两个locality进行了整体结构的设计。
整体结构
这个结构有如下的特点:
- 整个结构包含多个层次,每个层次的组件有不同的访问速度和容量;
- 访问速度越快,越靠近CPU,也越贵,同时容量也越小;速度慢的则完全相反;
- 不仅存储器呈现层次化,其中的数据也呈现层次化,靠近CPU存储器中的数据是底层存储器的子集,越靠近底层存储的数据越完整;
- 在这个结构中,仅仅两个相连的levels之间可以进行数据传递,所以我们只需要关注两个level即可;
locality如何在结构中体现
在整体结构中:
temporal locality
: 体现在将访问频次高的数据放到顶层,靠近CPU;spatial locality
: 体现在数据读取的最小单位上,电路中数据的存储以bit为单位,但是在memory hierarchy两个levels之间数据的传递,不是按照bit,甚至不是按照byte,而是按照block (line)
,这个是传递信息的最小单位,在底层level中的一段连续的存储单元,即要读就一起,因为彼此相连,可能会被访问。
参考资料
Computer Organization and Design : the hardware/software interface