浅入理解计算机系统(3)- RAM和ROM,处理器和主存的那些事

本文是操作系统系列的第三篇,以下是文章目录
浅入理解计算机系统(1)- 操作系统的两个基本功能和三个抽象概念
浅入理解计算机系统(2)- 程序的机器级表示
浅入理解计算机系统(3)- RAM和ROM,处理器和主存的那些事

本章将带大家了解现代计算机系统都会使用的存储器层次结构以及其中的随机访问存储器和CPU是如何与主存进行数据传送的。正文内容涉及硬件以及总线相关概念,如果不了解的话,建议先看本系列中的第一篇文章。

存储器的层次结构

存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。存储器层次结构对应用程序的性能有着巨大的影响。因为不同层次的容量、访问速率差异很大,所以应该尽可能从靠上的存储层次获取数据。以下按照不同层次的指令执行期间访问所需的周期正序介绍(从上到下、从周期短到周期长):

CPU寄存器

保存最常用的数据。例如从下一层 高速缓存(Cache Memory) 获取的数据,以及保存CPU计算的临时结果等。执行期间访问所需的周期为0,几乎瞬间完成。

高速缓存(Cache Memory)

高速缓存一般较小、靠近CPU并且速度非常快。作为一部分存储在相对慢速的 主存储器(Main Memory) 中的数据和指令的缓冲区域。执行期间访问需要4-75个周期。

主存(Main Memory)

在CPU运行时,保存程序的代码和程序处理的数据。作为容量较大的、慢速磁盘上的数据的缓冲区域。执行期间访问需要上百个周期。

磁盘

一般用于存储通过网络连接的其他机器的磁盘或用户本地的一些数据。执行期间访问需要大约几千万个周期。

可以看到,高速缓存和主存的访问时间相差几十倍,主存和磁盘的访问时间相差十万甚至数十万倍,而越是靠上的存储设备,成本则越高。为了综合访问时间和容量,需要靠存储器层次结构共同协作,尽量在上层完成数据访问。假设应用程序每次使用数据都需要从磁盘中读取,那么这个程序的执行时间将非常的长。

随机访问存储器(RAM,Random-Access Memory)

上面提到的高速缓存、主存都属于随机访问存储器。根据易失性(断电后数据丢失)来区分,还可以分成易失性存储器与非易失性存储器。

易失性存储器(Volatile Memory)

静态随机访问存储器(SRAM)

SRAM的单位容量成本偏高,一般用作高速缓存。SRAM将每个位存储在一个双稳态的存储器单元里,每个单元用一个六晶体单元管实现。这个电路可以无限期的保持在两个不同的电压配置或状态之一,其他任何状态都是不稳定的。从不稳定状态开始,电路会迅速地转移到两个稳定状态中的一个,类似倒立的钟摆。
由于双稳态特性,只要有电,SRAM可以永远地保持它的值。即使有干扰(例如电子噪音),也会在干扰消除后恢复到稳定值。

SRAM

图片来源《深入理解计算机系统》6-1

动态随机访问存储器(DRAM)

DRAM一般用作主存或帧缓冲区。DRAM将每个位存储为对一个电容的充电。与SRAM不同,DRAM对干扰非常敏感,当电容的电压被扰乱后,永远都不会恢复。DRAM芯片中的单元被分成 d 个超单元,超单元被组织成一个 rc 列的长方形阵列(二维矩阵),rc=d。每个超单元有形如 (r,c) 的地址。

DRAM超单元

图片来源《深入理解计算机系统》6-3

如上图所示,假设要从DRAM读取超单元(2,1),内存控制器先发送行地址2 ,DRAM将行2整行的内容复制到内部行缓冲区。接下来内存控制器发送列地址1 ,DRAM从行缓冲区复制出列1中的内容,发送给内存控制器。

传统的DRAM存在一些缺陷,例如一次将超单元的一行复制到缓冲区中,只使用一个,然后丢弃剩余的,因为空间局部性的原因,会造成性能浪费,所以后来出现了许多增强版的DRAM。

快页模式DRAM(Fast Page Mode DRAM,FPM DRAM)

FPM DRAM的出现,正是为了修复只使用一个后丢弃整行的问题,它允许对同一行连续地访问可以直接从行缓冲区得到服务。

同步DRAM(Synchronous DRAM,SDRAM)

从与内存控制器通信使用的一组显式的控制信号来说,传统的、FPM都是异步的。同步DRAM能够比异步的更快地输出超单元的内容

双倍数据速率同步DRAM(Double Data-Rate Synchronous DRAM,DDR SDRAM)

SDRAM的增强版,通过使用两个时钟沿作为控制信号,从而使DRAM的速度翻倍。

视频DRAM(Video RAM,VRAM)

一般用作图形系统的帧缓冲区中。VRAM与FPM DRAM的思想类似,但有两个主要区别。

  • VRAM的输出是通过依次对内部缓冲区的整个内容进行移位得到的。
  • VRAM允许内存并行地读和写。因此,系统可以在写下一次更新的新值的同时,用帧缓冲区中的像素刷屏幕。

非易失性存储器(Nonvolatile memory)

如果断电,SRAM和DRAM都会丢失它们存储的信息,从这个意义上来说,它们是易失的(volatile)。非易失性存储器即使在断电后,仍然保存着存储的信息。由于历史原因,虽然ROM中有的类型既可以读,也可以写,但它们整体上都被称为只读存储器(ROM,Read-Only Memory)

ROM的类型由它们能被重编程(写)的次数和它们进行重编程所用的机制来区分。

可编程ROM(PROM,Programmable ROM)

只能被编程一次。PROM的每个存储器单元有一种熔丝(fuse),只能用高电流熔断一次。

可擦写可编程ROM(EPROM,Erasable Programmable ROM)

EPROM有一个透明的石英窗口,允许光到达存储单元。紫外线光照射过窗口,EPROM单元就被清除为0。对EPROM的编程是通过使用一种把1写入EPROM的特殊设备来完成的。EPROM的被擦除和重编程次数为1000次。

电子可擦除PROM(Electrically Erasable PROM,EEPROM)

类似EPROM,但不需要一个物理上独立的编程设备,因此可以直接在印制电路卡上编程。可被编程的次数可以达到10^5。

闪存(Flash Memory)

这个名字想必生活中也经常听到。闪存是一种电子可擦除可编程只读存储器的形式,为大量的电子设备提供快速而持久的非易失性存储,例如固态硬盘就是基于闪存的磁盘驱动器。

RAM有两种基本类型。静态RAM快一些,但是也贵一些,既可以用来做CPU芯片上的高速缓存,也可以用作芯片下的高速缓存。动态RAM慢一点,也便宜一些,用作主存和图形帧缓冲区。ROM即使在断电的时候,也能保持信息,可以用来存储固件。

讲完了高速缓存和主存的硬件,接下来讲讲处理器是如何访问主存的。

访问主存

在系列的第一篇文章中有提过一个核心概念,即 总线(bus)。数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来回。每次CPU和主存之间的数据传送都是通过一系列的步骤来完成的,这些步骤称为 总线事务(bus transaction)

从主存传送数据到CPU是读事务,从CPU传送数据到主存是写事务。总线是一组并行的导线,能携带地址、数据和控制信号。取决于总线的设计,数据和地址信号可以共享一组导线,也可以使用不同的。控制线携带的信号会同步事务,并标识出当前正在被执行的事务的类型。例如当前事务是到主存还是磁盘控制器等I/O设备?总线上的数据是地址还是信息项?

以两个简单的读写指令为例,分析CPU执行操作的步骤:

读指令 move A, %rax

即读取主存中的地址A的内容,并复制到寄存器%rax中。

  1. CPU中的总线接口的电路在总线上发起读事务,将地址A放到系统总线上。
  2. I/O桥识别到信号,将信号传递到内存总线上。
  3. 主存察觉到内存总线上的地址信号,从内存总线读地址,从DRAM的地址A取出数据字,并将数据写到内存总线。
  4. I/O桥将内存总线信号翻译成系统总线信号。
  5. CPU从总线上读取数据并将数据复制到寄存器%rax。

写指令 move %rax, A

即读取寄存器%rax中的内容,并复制到主存的地址A中。

  1. CPU中的总线接口的电路在总线上发起写事务,并将地址A放到系统总线上。
  2. I/O桥识别到信号,将信号传递到内存中线上。
  3. 主存察觉到内存总线上的地址信号,从内存总线读地址,并等待数据到来。
  4. CPU将寄存器%rax的数据子复制到系统总线上。
  5. I/O桥将系统总线信号翻译成内存总线信号。
  6. 主存从内存总线读取数据字,并存到DRAM中的地址A上。

本文内容源自《深入理解计算机系统 第三版》以及本文作者的个人理解补充,只涉及一些个人认为重要概念和协作原理的描述,并不深入剖析每一个点。
如果有不准确或者错误的地方欢迎评论指出。
感谢你的阅读。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值