按照冯·诺伊曼设计的计算机模型,CPU 执行指令,存储器系统负责存放 CPU 执行的指令和数据。在现代计算机中,存储器系统由不同容量、不同成本、不同访问时间的各级存储器组成。为什么要这样设计呢?
存储技术
一般来说,访问速度越快的存储器造价也越高。下面我们介绍几种常见的存储器。
寄存器
寄存器(Register)是 CPU 的组成部分。寄存器容量非常小,它们可用来暂存指令、数据和地址。
RAM
随机访问存储器(Random-Access Memory, RAM)分为两类,静态的和动态的。静态 RAM (SRAM) 比动态 RAM (DRAM) 更快,但也贵的多。SRAM 用来做高速缓存,DRAM 用来做主存以及图形系统的帧缓存区。通常来说,一个计算机系统的 SRAM 不会超过几 MB,但是 DRAM 却可以有几 GB。
Mac-pro 15
RAM 中的信息需要通电才能维持。
机械硬盘
机械硬盘是常见的保存大量数据的存储设备,现代机械硬盘一般能存储几百 GB 的数据,远远大于基于 RAM 的存储器所能存储的数据。不过,从机械硬盘上读取信息的时间为毫秒级,比从 DRAM 读慢了 10 万倍,比从 SRAM 读慢了 100 万倍。
机械硬盘内部的碟片在通电后开始高速转动
机械硬盘中的信息一旦保存后,不通电也能维持。
SSD
固态硬盘(Solid-state driver, SSD)是一种主要以 闪存 作为永久性存储器的计算机设备。由于价格及存储空间与机械硬盘有巨大差距,固态硬盘目前还无法完全取代机械硬盘。其读写速度比机械硬盘快 2-3 倍,且无噪音。
Mac-pro 15
局部性
一个编写良好的计算机程序常常具有良好的访问局部性(Locality of reference)。访问局部性分为两种,一种是时间局部性,一种是空间局部性。
- 时间局部性
- 被引用过一次的内存位置很可能在不远的将来再被多次引用。
- 空间局部性
- 如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置。
存储器层次结构
在 CPU 和一个较大较慢的设备(例如主存)之间插入一个更快更小的存储设备(例如高速缓存)的想法已经成为了一个普遍的观念。实际上,每个计算机系统中的存储设备都被组织成了一个存储器层次结构。在这个层次结构中,从上至下,设备的访问速度越来越慢,容量越来越大,并且每个字节的造价也越来越便宜。
存储器层次结构
寄存器在层次结构中的最顶部,也就是第 0 级或记为 L0。这里我们展示的是三层高速缓存 L1 到 L3,占据存储器层次结构的第 1 层到第 3层。主存在第 4 层,以此类推。
高速缓存
存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。 因此,寄存器就是 L1 的高速缓存,L1 是 L2 的高速缓存,L2 是 L3 的高速缓存, L3 是主存的高速缓存,而主存又是磁盘的高速缓存。在某些具有分布式文件系统的网络系统中,本地磁盘就是存储在其他系统中的数据的高速缓存。
小结
存储器系统之所以设计成层次结构,主要是以下两点因素导致的
- CPU 的周期时间与各级存储器的访问时间相差过大
- 节约成本
- 访问速度越快的存储器造价也就越高,我们无法全部用 SRAM 来做存储器。
- 根据程序的局部性原理,我们可以利用高一层的存储器作为低一层的存储器的高速缓存,这样总体上也能达到不错的访问速度。
CPU 周期时间与各级存储器的访问时间