0%

计算机组成原理之存储器

概述

存储器分类

按存储介质分类

  • 半导体存储体 易失
    • TTL 晶体管 集成度低 功耗高 速度快
    • MOS 金属氧化物 集成度高 功耗低
  • 磁表面存储器 磁盘
  • 磁芯存储器
  • 光盘存储器 激光、磁光材料

按存取方式分类

随机访问

存取时间与物理地址无关。

随机存储器

随机存储器在程序的执行过程中可读可写。

只读存储器

在程序的执行过程中只读。

串行访问

存取时间与物理地址有关。

  • 顺序存取存储器 磁带
  • 直接存取存储器 磁盘

按计算机中的作用分类

  • 主存储器
    • RAM
      • SRAM 静态 RAM 高速缓冲存储器 Cache
      • DRAM 动态 RAM
    • ROM
      • MROM
      • PROM
      • EPROM
      • EEPROM
  • Flash Memory U盘/SSD 比硬盘速度快
  • 辅助存储器
    • 磁盘、磁带、光盘

存储器的层次结构

层次结构

缓存-主存层次和主存-辅存层次

存储体系

缓存-主存

主要解决速度问题,所以使用硬件来实现。

主存-辅存

主要解决容量问题,一般使用软件和硬件相结合的方式实现。

主存存储器

主存的基本组成

主存结构
如果是读,则会把数据送到 MDR 中,如果是写,则把 MDR 中的数据写到存储体中。

主存与 CPU 之间的联系

主存与CPU

主存中存储单元地址的分配

存储地址
假设地址线为 24 根,按字节寻址 则存储器容量有 2^24 = 16MB,若字长为 16 位,按则字寻址 则有 8 MW = 8 M * 2 B,若字长为32位,按字寻址有 4MW。

主存的技术标准

存储容量

主存存放二进制代码的总位数。

存储速度

存取时间

存储器的访问时间,从给出存储地址到得到稳定的数据读出或写入的时间。

存取周期

连续两次独立的存储器操作(读或写)所需的最小间隔时间。

存取周期 > 存取时间

存储器的带宽 位/秒

主存储器 半导体芯片简介

半导体存储芯片的基本结构

存储芯片结构

地址线(单向) 数据线(双向) 芯片容量
10 4 1K * 4 位
14 1 2^14 * 1 位
13 8 2^13 * 8 位

线路

存储芯片片选线的作用

假设有 16 K 1 位 的存储芯片,CPU 要求组成 64K 8 位的存储器。怎么用 16 K 1 位的存储芯片构成 64 K 8 位的存储器呢?
至少需要32片存储芯片构成。
芯片组
此时一个字节的八位比特在8片芯片中。

半导体存储芯片的译码驱动方式

线选法

线选法
有四个地址线,能编码16个地址,图中有16条线。8位输出线,则这个图中存储器的容量位 16 * 8 位;

假设要实现 1M * 8 位 的存储器,则需要 100W 条线,很显然不可行。

重合法

重合法

随机存取存储器 (RAM)

SRAM

触发器电路

DRAM

用电容来表示 0 和 1。

动态 RAM 刷新

电容中存放的电荷随着时间的推移会漏电,所以要刷新。刷新与行地址有关,每次刷新的是一行中的所有单元。

三种刷新方式

  • 集中刷新 存在死区,四区时间内,动态 RAM 不可用,CPU 和 I/O 设备必须等待
  • 分散刷新 无死区,但增加了无效的刷新,使得性能下降
  • 异步刷新 分散刷新与集中刷新相结合

SRAM VS DRAM

对比项 DRAM SRAM
存储原理 电容 触发器
集成度
芯片引脚
功耗
价格
速度
刷新

只读存储器 ROM

一般保存系统程序或者配置信息。

  • 早期的只读存储器出厂时就写好了内容
  • 改进1:用户可以自己写,一次性的
  • 改进2:可以多次写,要能对信息进行擦除
  • 改进3:电可擦写,特定设备
  • 改进4:电可擦写,直接连接到计算机

类型

  • 掩模 ROM(MROM)厂家把信息直接写入,用户不可更改
  • PROM 一次性(破坏性)编程 熔丝通断表示位信息
  • EPROM 多次性编程 N 型沟道浮动栅 MOS 电路,信息擦除麻烦
  • EEPROM 多次性编程
  • Flash Memory 闪速型存储器(U盘、具备 RAM 功能)

CPU 与 内存的连接

存储器容量的扩展

位扩展

位扩展的目的是增加存储字长(数据线)。

如何用 1K 4 位(即1K个存储单元,每个存储单元保存4位信息,1K个存储单元需要10根地址线)的存储芯片组成 1K 8 位的存储器?

答案:需要两片 1K * 4 位的芯片、10根地址线、8根数据线。地址线对两片芯片同时寻址,8根地址线分成两份连接到两个芯片上。

位扩展需要把两个芯片当成一个芯片来用,两个芯片同时工作,同时读,同时写,要想同时就需要把两个芯片的片选信号用同一个信号来表示。

位扩展

字扩展

目的是增加存储字的数量(寻址空间扩展)。

如何用 1K 8 位的存储芯片组成 2K 8 位的存储器?

答案:需要两片 1K * 8 位的存储芯片,11根地址线(多出一根片选信号(地址最高位为0选第一片)),8根数据线。

字扩展

字、位同时扩展

如何用 1K 4 位存储芯片组成 4K 8 位的存储器?

答案:需要 8 片 1K 4 位的存储芯片,12根地址线(其中两根是片选线),8根数据线。用两片 1K 4 的芯片组成 1K 8 的存储器,这样的芯片组需要 4 组才能实现 4K 8 位的存储器。

字位扩展

地址线分为地址信号和片选信号。

存储器与 CPU 的连接

  1. 地址线的连接
  2. 数据线的连接
  3. 读写命令线的连接
  4. 片选线的连接
  5. 合理选择存储芯片
  6. 时序、负载

存储器的校验

  1. 为什么要对存储器的信息进行校验?
    受环境影响,比如太空中带电粒子的打击,可能会对电容进行充电,导致信息错误,导致更大的灾难。
  2. 为了能够校验出信息是否正确,如何进行编码?
  3. 纠错或检错能力与什么因素有关?
  4. 校验出信息出错后如何进行纠错

合法代码集合

  1. {000, 001, 010, 011, 100, 101, 110, 111} 如果有一位错误,无法检测,检0位错、纠0位错。
  2. {000, 011, 101, 110} 1的个数为0或偶数,检1位错,纠0位错,能够知道哪个错了,但是无法纠正。
  3. {000, 111} 假设使用三倍冗余的方式存储0和1,比如 000 表示 0, 111 表示 1,假设收到 100,由于存储器1位错的概率极大,多位错的概率小,所以可以认为 100 原始保存的是 000,检1位错,纠1位错。
  4. {0000, 1111} 使用四倍份冗余,检两位错,纠1位错。
  5. {00000, 11111} 使用五倍份冗余,检两位错,纠2位错。

纠错和检错能力相关因素

编码的检测能力和纠错能力与什么有关?和任意两组合法代码之间二进制位的最少差异数有关。差的越多,检错和纠错能力就越强。

编码最小距离

合法代码集中,任意两组(个)合法代码之间二进制位数的最少差异。编码的纠错、检错能力与编码的最小距离有关。

L-1 = D+C (D >= C)

  • L = 编码的最小距离
  • D = 检验错误的位数
  • C = 纠正错误的位数

汉明码的组成

汉明码是具有一位纠错能力的编码。

  • 汉明码采用奇偶校验
  • 汉明码采用分组校验

奇偶校验
把位划分成多个组。

  • 汉明码的分组是一种基于非划分的方式,有些位属于多个组,有些位属于一个组。

汉明码

提高访存速度的措施

  • 采用高速器件
  • 采用层次结构 Cache-主存
  • 调整主存结构

单体多字系统

之前假设机器字长和存储字长相等,一次取指令只取一条。现在可以一次取多个来提高速度。增加存储器带宽。
单体多字

问题一:如果 CPU 只想写一个数据寄存器的数据,会导致其他三个寄存器都写数据到内存,可以通过硬件解决。

问题二:如果要访问的数据不连续呢,比如第一条指令是跳转指令,并且跳转了很远,那么这时取出的其他三个字就是无效的。

多体并行系统

高位交叉 顺讯编址

多体并行
如果每个存储体都有自己的 MAR ,那么就可以并行。

问题:程序的指令具有连续性,虽然这种架构有了并行的思想,在程序执行时会导致某个存储体非常繁忙。

这种方式就是之前存储器容量扩展的方式,高位交叉编地址,存储体内顺序编址。适合存储器容量扩展,但不适合提高存储器带宽。

低位交叉 各个体轮流编址

地址的后两位给出了存储体编号。
低位交叉

程序指令顺序轮流放在多个存储体中。

特点:在不改变存取周期的前提下,增加存储器带宽,流水方式。

流水

高位交叉用于容量扩展,低位交叉用于带宽增加

高性能存储芯片

SDRAM 同步 DRAM

在系统时钟的控制下进行读出和写入 CPU 无须等待,之前都是没有同步的,相当于异步。这种 SDRAM 需要存储器速度很高,能跟上 CPU。

RDRAM

主要解决存储器带宽问题。

带 Cache 的 DRAM

在 DRAM 的芯片内集成一个由 SRAM 组成的 Cache,有利于猝发式读取。