计算机组成原理

4.1 存储器概述

分类

按存储介质:

  • 1 半导体存储器:TTL, MOS (容易丢失,断电就没)

  • 2.1 磁表面存储器:(塑料或金属基片涂磁层并磁化) 磁头 磁载体 (盘片)

  • 2.2 磁芯存储器:硬磁材料 环形元件

  • 3 光盘存储器:激光 磁光材料

按存储方式:

  1. 存取时间与地址无关 (随机访问)

    • 随机存储器 (RAM random-access memory) 在程序执行过程中可读可写
    • 只读存储器 (ROM read-only memory) 在程序执行过程中只读
  2. 存取时间与地址有关 (串行访问)

    • 顺序存储存储器 磁带
    • 直接存储存储器 硬盘 (定位 磁头一栋,停在指定的柱面上,读写头移动到柱面下,等待磁盘指定的区域旋转过来)

按在计算机中的作用:

  1. 主存储器
    • RAM
      • 静态 RAM cache
      • 动态 RAM 内存条
    • ROM
      • MROM 出厂厂家写入
      • PROM 一次可编程
      • EPROM 可擦鞋,可编程 ROM, 擦写复杂
      • EEPROM 更容易擦写
  2. Flash Memory 大硬盘缓冲
  3. 高速缓冲存储器 (Cache)
  4. 辅助存储器 磁盘 磁带 光盘

层次结构

  1. 存储器的三个主要特性的关系

速度 价格 容量

寄存器 > 缓存 > 主存 > 硬盘 > 光盘 > 磁带

  1. 存储层次
  • cache <=> 主存
    • 解决 CPU 和主存速度差异过大
  • 主存 <=> 辅存
    • 解决容量问题
    • 虚拟地址空间
   +-----------------------------+
   |                             |
+--+--+      +-------+        +--+--+        +-----+
|     |------|       |--------|     |--------|     |
| CPU |      | cache |        | 主存 |       | 辅存 |
|     |------|       |--------|     |--------|     |
+--+--+      +-------+        +--+--+        +-----+
   |                             |
   +-----------------------------+

4.2 主存储器

概述

  1. 主存储器基本组成
+-------+     +---------+       +-----+
|       |<--->|         |<----->|     |  数据总线
| 存储体 |     | 读写电路 |       | MDR | <========>
|       |<--->|         |<----->|     |
+-------+     +---------+       +-----+
  ↑   ↑          ↑   ↑
+-------+     +---------+
| 驱动器 |     | 控制电路 |
+-------+     +---------+
  ↑   ↑          ↑   ↑
+-------+       读   写
| 译码器 |
+-------+
  ↑   ↑
+-------+
|  MAR  |
+-------+
    ↑
    | 地址总线
    |

MAR 中保存了由 01 代码构成的地址 译码器将 01 代码译码之后会对应存储体的存储单元 接着选中的存储单元的开关打开,存储体中的数据会送到数据线上,或者数据线上的数据会保存到存储单元里

  1. 主存和 CPU 的联系
+------------+
|            |
| +-------+  | 数据总线   +-------+
| |  MAR  |<=|==========>|       |
| +-------+  |           |       |
|            |     读    |       |
|            |---------->|       |
|     CPU    |     写    |  主存  |
|            |---------->|       |
|            |           |       |
| +-------+  | 地址总线   |       |
| |  MAR  |==|==========>|       |
| +-------+  |           +-------+
|            |
+------------+
  • 存储器和主存需要数据交换,所以数据总线是双向的
  • 读和写都是站在 CPU 角度来说的,CPU 需要发出读或者写信号
  1. 主存中存储单元地址的分配
字地址      字节地址         字地址      字节地址
  0    +--+--+--+--+         0    +--+--+--+--+
  4    |1 |2 |3 |4 |         4    |4 |3 |2 |1 |
  8    |5 |6 |7 |8 |         8    |8 |7 |6 |5 |
       +--+--+--+--+              +--+--+--+--+
       小端对齐                       大端对齐

举例:将 16 进制数 0X12345678H 存储

字地址      字节地址        字地址      字节地址
  0    +--+--+--+--+       0    +--+--+--+--+
  4    |12|34|56|78|       4    |78|56|34|12|
       +--+--+--+--+            +--+--+--+--+
  1. 存储器的技术指标
  • 存储容量:主存存储二进制代码的总位数
  • 存储速度
    • 存取时间:存储器的访问时间,读出时间,写入时间
    • 存取周期:连续两次独立的存储器操作 (读或写) 所需要的最小间隔时间
  • 存储器的带宽

半导体芯片概述

1. 基本结构

         +-------------------------+
         | +----+   +----+  +----+ |
  地址线  | | 译 |   | 存 |   | 读 | |  数据线
  =====> | | 码 |   | 储 |   | 写 | | <=====>
         | | 驱 |   | 矩 |   | 电 | |
         | | 动 |   | 阵 |   | 路 | |
         | +----+   +----+  +----+ |
片选线--->|                         | <--- 读/写控制线
         +-------------------------+
  • 地址线:单向,由外部输入,能够表示有多少个存储单元

  • 数据线:双向,读出和写入的数据都通过数据线传输,表示存储单元有多少信息

  • 片选线:内存条上有很多芯片,需要由它确定。(CS/CE)

    一个存储单元的容量是 1b,需要 8 个存储单元组成一组才能表示 1 字节,很多组就构成了一个大存储器,片选线能够指定组

  • 读/写控制线:读写的控制信号 (例如 WE 低电平写,高电平读,OE 允许读,WE 允许写)

芯片容量 = 2 ^ 地址线条数 × 2 ^ 数据线条数

2. 译码器

将输入地址映射到对应的线路,找到对应的存储单元

  • 线选法:每个地址都对应一根线,线太多不现实
  • 重合法:地址信号分为两部分,可以等分也可以不等分,按照矩阵的 x y 选择

3. 随机存取存储器 (RAM)

  1. 静态 RAM(SRAM)

行选,列选同时打开,完成读写操作

  1. 动态 RAM(DRAM)

假如数据保存的是 0

  • 预充电:读数据线为高电平 1
  • 读选择线有效,这是读出的数据为 1,需要取反的到真实数据

假如数据保存的是 1

  • 数据是高电平,t1 也导通,接地,
  • 数据电容放电会变为 0,读数据线也会变为低电平

    注意:读数据线不能一直充电

  • 这是读选择线会读到 0, 取反得到真实数据
  • 注意: 因为数据改变了,需要重新写入原始数据。写入时就通过写选择线写入,写选择线会控制一整行
  1. 动态 RAM 时序

行列地址分开传送

  • 引脚数量更少,速度相对会慢
  • 静态 RAM 也可以实现,但是它速度更快,价格更高,不能舍弃性能

4. 只读存储器

  1. 掩膜 ROM(MROM)
  • 出厂时写入,不能修改

  • 可以保存常用的函数等

  • 行列选择线交叉处有 MOS 管为 1

  • 行列选择线交叉处无 MOS 管为 0

  1. PROM (一次性编程)

融丝

  1. EPROM(多次性编程)

必须整块擦出

  1. EPPRAM
  • 电可擦写
  • 局部擦写
  • 全部擦写
  1. Flash Memory(闪速型存储器)

5. 存储器和 CPU 的连接

存储器容量的拓展

  1. 位拓展(增加存储字长)

用 16K × 4 位 的存储芯片组成 1K × 8 位的存储器

  • 准备两个芯片(以 2114 为例)

  • 1K 对应 10 根地址线,分别连接到两个芯片上

  • 每一个芯片输出 4 位数据,把它们分别接到 8 根地址线上

  • 片选线会同时选中两个芯片,他们会同时工作

  1. 字拓展(增加存储器器的容量)

用 1K × 8 位的存储芯片组成 2K × 8 位的存储器

2K 对应 11 根地址线

使用最高位作为芯片选择的信号

  1. 字位拓展

用 1K × 4 位的存储芯片组成 4K × 8 位

先用两个 1K × 4 的组成 1 个 1K × 8 的

4K 对应 12 根地址线
4K A11 A10 A9 ... A1 A0

1K         A9 ... A1 A0

可以用最高 2 位选择 4 个芯片,两位译码出 4 根线,决定是哪一个芯片

存储器与 CPU 的连接

  1. 地址线的连接

  2. 数据线的连接

  3. 读/写命令线的连接

  4. 片选线的连接

  5. 合理选择存储芯片

  6. 其他,时序,负载

6. 存储器的校验

  1. 奇偶校验

计算一组存储单元中 1 的个数,如果 1 的个数是偶数,校验码就为 0, 1 的个数是奇数,校验码变为 1

假如纠错码发生翻转呢?并无影响

缺点:

  • 只能知道出错,但不知到出错的位置
  • 如果有偶数位发生翻转,无法检查到出错
  1. 汉明码

将数据分组,并利用二分法反复确认对比错误,能够发现两个数据翻转,无法解决 3 个数据翻转

由于汉明码的性质,纠错码出现在 2^n 位上。数据块越大,纠错吗的相对占比就越少

  1. LDPC

7. 提高访存速度

  • 采用高速器件
  • 采用层次结构 Cache-主存
  • 调整主存结构
  1. 单体多字结构

每次向数据中取出多个记录

带宽可能提高 4 倍

  1. 多体并行系统
  • 高位交叉,顺序编址

    不同存储体之间可以并行,但是 CPU 只会频繁访问某一个存储体

  • 低位交叉,各个存储体轮流编址

    需要满足一定条件,在存取周期内

4.3 高速缓冲存储器

1.

2.Cache 和 主存的映射

  1. 直接映射

特点:

  • 每个缓存块 i 和若干个主存块对应
  • 每个主存块 j 只能和 1 干个缓存块对应

过程:

  • 将主存储器的每个单元按照所在地址取模(Cache 大小)分组
  • 根据地址就能直接找到地址在 Cache 中的位置,
  • 接着在经过比较器比较组号是否对应判断是否命中

优点:速度快

  • 只需要一个额外的标记,组号
  • CPU 三级缓存,适合做为一级缓存,追求极致速度

缺点:利用率不高,

  • 假如 Cache 不满,1 号已经被占用,其他组 1 号的存储记录也不能利用到空的 Cache 资源
  1. 全相连映射

特点:

  • 主存的任一块可以映射到 Cache 的任一块

  • 主存储器依然需要分组

  • Cache 需要除了组号,还要标记第几位

  • 在比较时需要同时比较组号,位号

优点:

  • 利用率高
  • 适合做为 CPU 后几级缓存
  1. 组相连映射

前两种方法的折中

让每个主存块可以和 n 个 缓存块对应,它可以选择这 n 个中的任意一个

3.替换算法

  1. 先进先出(FIFO)

没有体现程序的局部型原理

  1. 最近最少使用算法(LRU)

很好体现程序的局部型原理

实现复杂:(滑动窗口 + 次数)?

最近最旧使用简单替代?