4.1 概述

4.1.1 存储器分类

分类方式很多

1.按存储介质分类

存储介质是指能寄存“0”、“1”两种代码并能区别两种状态的物质或元器件。存储介质主要有业导休器件磁性材料和光盘等。

(1) 半导体存储器:TTL 、MOS,易失
(2) 磁表面存储器:磁头、载磁体
(3) 磁芯存储器:硬磁材料、环状元件
(4) 光盘存储器:激光、磁光材料

2. 按存取方式分类

按存取方式可把存储器分为随机存储器、只读存储器、顺序存取存储器和直接存取存储器。

  1. 存取时间与物理地址无关(随机访问):随机存取存储器
  2. 存取时间与物理地址有关(串行访问):顺序存取存储器

3. 按在计算机中的作用分类

按在计算机中的作用分类如下

]

4. 按读写功能分类

  • 只读存储器ROM
  • 随机存取存储器RAM

4.1.2 存储器的层次结构

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

下面的六种存储结构任何一个都无法满足用户高速度大容量低价格的需求

2. 缓存 主存层次和主存 辅存层次

为了解决CPU 速度增长快但是主存的速度增长慢的问题, 我们在CPU以及主存之间加上了一寸缓存 , 这个缓存就是Cache , 速度比主存快很多, 其中保存主存一些数据的副本

  • 高速缓冲存储器(缓存)简称Cache,它是计算机系统中的一个高速小容量半导体存储器。
  • 主存储器简称主存,是计算机系统的主要存储器,用来存放计算机运行期间的大量程序和数据。
  • 外存储器简称外存(辅存),它是大容量辅助存储器。

程序的局部性原理程序局部性原理介绍 - 知乎 (zhihu.com)

在CPU和主存之间加一个缓存,主要是解决CPU和主存速度不一致的问题,主存速度比CPU慢很多,增加一个较快的缓存可以解决这个问题。

而在主存后面增加一个外存是为了解决容量不足的问题,外存比较便宜且容量大,但是速度慢,可以存放一些暂时不用的数据。

4.2 主存(储器) ⭐

4.2.1 主存储器的技术指标

存放一个机器字的存储单元,通常称为字存储单元,相应的单元地址叫字地址。而存放一个字节的单元,称为字节存储单元,相应的地址称为字节地址。如果计算机中可编址的最小单位是字存储单元,则该计算机称为按字寻址的计算机。

主要技术指标有:

  • 存储容量:主存 存放二进制代码的总位数
  • 存取时间:存储器的访问时间,读出时间和写入时间
  • 存储周期:连续两次独立的存储器操作(读或写)所需的最小间隔时间,读周期和写周期。
  • 存储器带宽 位/秒

4.2.2 主存储器的基本组成

译码器是一种具有“翻译”功能的逻辑电路,这种电路能将输入二进制代码的各种状态,按照其原意翻译成对应的输出信号。

  • 把二进制形式的地址映射成

主存的简化结构如下

  • 存储体:
    存储体由许多存储单元组成,每个存储单元又包含若干个存储元件,每个存储元件可以寄存一位二进制代码0/1

对于上述概念我们可以这样来记忆:

存储体呢,相当于一栋大楼,大楼内有很多房间(存储单元), 每个房间内又有很多床位(存储元件),那么0代表床上无人,1代表床上有人。

  • 存储单元

    以8位二进制作为一个存储单元,也就是一个字节。一个存储单元可以存储一串二进制代码,称这串二进制代码为一个存储字,代码位数位存储字长。存储单元有编号,这些编号称为存储单元的地址号。存储单元按地址寻访。这些地址都是二进制的形式。

  • MAR
    存储器地址寄存器。保存了存储单元的地址(编号)。其位数反映存储单元的个数。

比如有16个存储单元,而存储单元的地址是用二进制表示的,那么用4位二进制数就可以表示。MAR的位数就是4位。那么相反,如果我们知道MAR有4位,那么存储单元就有24个,16个存储单元。所以MAR反映存储单元的个数。

  • MDR
    存储器数据寄存器,其位数反映存储字长。存放的是:存储器中从存储某单元读出、或要写入某存储单元的数据(代码)。如果MDR=8,每个存储单元进行访问时,数据是8位,存储字长8位。

4.2.3 主存和 CPU 的连接

  1. 主存储器通过数据总线、地址总线和控制总线与CPU连接。
  2. 数据总线的位数与工作频率的乘积正比于数据传输率。
  3. 地址总线的位数决定了可寻址的最大内存空间。
  4. 控制总线(读/写)指出总线周期的类型和本次输入/输出操作完成的时刻。

要想完成一个完整的取或存操作,CPU(控制器)还得给主存加以各种控制信号(读命令、写命令、地址译码驱动信号等)。

现代计算机中:
1.主存由半导体集成电路构成
2.驱动器、译码器和读写电路均在存储芯片中
3.MAR和MDR在CPU芯片中
4.存储芯片和CPU芯片可以通过总线(系统总线)连接
5.地址总线用来指出存储单元地址号。

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

两种存储方式本质上没有区别 , 但是两种机器在通信的时候就是发生问题

大端先放高位字节

小端先放低位字节

上图中的表格,一小格代表一个存储单元,大方块是主存中的存储体。以8位二进制作为一个存储单元,也就是一个字节。通常,字由字节组成,图中,4个存储单元又构成了1个字,每个字有字地址(左边的0、4、8)。如果字的高有效位放在内存的低地址端,称为大端(大尾)方式,反之称为小端(小尾)方式

1.地址线24根,一共可以寻找到 224 个字节的地址,故寻址范围为 224B=16MB(B表示字节)。
2.字长为16位,也就是说一个字由两个字节组成,如果同样是24根地址线,那么按照字寻址,可以找到 16 / 2 = 8MW 的字,W = word。
3.同样的,32位说明一个字由4个字节组成,一共有16/4 = 4 MW。

1B= 8bit

1Kb= 210B

1字= 4B

半字 , 双字 按照字面意思

4.2.5 半导体存储芯片简介

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

1.存储矩阵:由大量相同的位存储单元阵列构成。

2.译码驱动:将来自地址总线的地址信号翻译成对应存储单元的选通信号,
该信号在读写电路的配合下完成对被选中单元的读/写操作。

3.读写电路:包括读出放大器和写入电路,用来完成读/写操作。

4.读/写控制线:决定芯片进行读/写操作。

5.片选线:确定哪个存储芯片被选中。可用于容量扩充。

6.地址线:是单向输入的,其位数与存储字的个数有关。

7.数据线:是双向的,其位数与读出或写入的数据位数有关。

8.数据线数和地址线数共同反映存储芯片容量的大小。

​ 如地址线10根,数据线8根,则芯片容量=21×8=8K位。

  • 地址线是单向输入的,其位数与芯片的容量有关。
  • 数据线是双向的(有的芯片可用成对出现的数据线分别作用输入或输出),其位数与芯片可读出或写入的数据位数有关,其位数与芯片的容量有关。
  • 读\写控制线,控制芯片读写操作,WE为写控制信号,OE为读控制信号,都是低电平有效。
  • 片选线,有CS和CE两种,分别为芯片选择器和芯片使能器。
  • 地址线和数据线共同来反应存储芯片的容量,比如地址线10根,数据线4根,芯片容量为210 x 4 = 4K位

2. 存储芯片片选线的作用(存储器扩容)

位扩展法

用8片存储芯片组成一个 16K×8位 的芯片组,一个芯片输出一位,8个同时进行读写,同时受一个片选线控制。再用四组上述芯片组,构成一个容量为64K的存储器。当地址为65535(2^64-1)时 应该对最后一组芯片进行读写操作,则最后一组片选线低电平有效,其他的片选线保持高电平无效。

如上图所示,用8个1K* 4位的存储芯片组成 4K * 8位的存储器,将两个芯片作为一组,片选线连在一起,受同个信号控制,地址线需要12根,其中10根作为芯片的地址线, A10 和 A11 作为片选译码器,用于选择哪个具体的芯片组。

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

线选法:

用一个地址译码器来寻址,例如输入0000,则表示寻找地址为0的存储单元,对其进行读写操作。这种驱动方式的缺点是,如果地址线很多,比如有20条,那么就能表示1M (220)条地址,相应地译码器的输出也就有1M条线,近百万条的电路是很不现实的,所以在大规模存储元件就无法使用线选法

重合法:

将存储单元排列成一个二维矩阵,X地址译码器表示二维矩阵的第一维,Y地址译码器表示二维矩阵第二维,比如X输入0000,Y输入0000,表示对坐标为(0,0)的存储单元进行读写。

4.2.6 例题

1.确认地址线、数据线,选择存储芯片
数据线:CPU数据线8根→存储器位数应扩展为8位
地址分配:

  • 6000H~67FFH→67FFH-6000H+1=800H,8X162=23X28=211=2K
    →用1片2K*8位R0M

    ​ ROM地址线11根(2k就是 211, 那么对应的地址线的数量就是11条)

  • 6800H6BFFH→6BFFH-6800H+1=400H,4X162=22X28=210=1K
    →用2片1K * 4位RAM,需要进行位扩展 => 1k * 8 位

    ​ RAM地址线10根

地址线:6000H ~ 67FFH→0110000000000000 ~ 0110011111111111

4.3 静态随机存取存储器SRAM

静态RAM(Static Random Access Memory,SRAM)

4.3.1 基本的静态存储元列阵

如图为静态RAM的基本电路:

T1−T4 为一个触发器,两端为输入端,A’A’ 为触发器非原端(即反相输入,输入信号为0,触发器内记录为1), A 为触发器原端,对应地,左边的写放大器做了取反处理,就是因为左边为触发器的非原端。

T5、T6 为行开关,同时打开表示这一行打通,信号可以在这一条路上流通(就是一个三极管,看成一个闸门,控制左右两端的连通)

T7、T8 为列开关,类似行开关,同时打开表示此列打通。

上述的一个个单元按照列阵的形式排列成下图的形式,构成了静态存储元阵列。如下图所示,有6条地址线,指定了存储器的存储容量为 26=64 个存储单元,四条数据线表示存储器的字长为4位,故存储位元的总数为 64 * 4 = 256 个。R/W线控制读写。

1. 静态 RAM 基本电路的 读 操作

分别打开行列选择线,对应图中紫色的线路打通,数据从A端向下从 Dout 流出。

2. 静态 RAM 基本电路的 写 操作

分别打开行列选择线,使得紫色的线路打通,数据从写输入端流入,左边经过取反后流入 A’A’ , 右边流入 A 。

4.3.2 SRAM 读/写时序

一个符号上面画上 – 意思是低电平有效

CS非 是片选信号

CE chip select

  • OE是输出允许,也是低电平时有效,当OE为低电平时,允许数据输出,也就是可以读取芯片中的内容,当OE是高电平时,输出被禁止,无法读取内容;

OE output enable

WE write enable

  • WE为编程允许,也是低电平有效,当WE为低电平时可以对芯片进行编程(写入),当WE为高电平时不能对芯片进行编程(我们可将此脚接为高电平,那么芯片就无法写入,无敌锁即是将此脚升为高电平,来保护芯片的.)

简单了解

读周期

4.3.3 为什么使用行列地址

减少选通线的数量

4.4 动态随机存取存储器DRAM

4.4.1 工作原理

  • 图为由一个MOS晶体管和电容器组成的单管DRAM记忆电路,MOS管作为开关,电容器存储信息,电荷满表示1,电荷空表示0.
  • 写入操作:输出缓冲器和刷新缓冲器关闭,输入数据送到存储元位线上,行选线为高打开MOS管,位线上的信号对电容器进行充放电过程,实现写入操作。
  • 读出操作:写入缓冲器和刷新缓冲器关闭,输出缓冲器和行选线为高打开MOS管,电容器进行充放电,信号通过位线送到输出端,实现读出操作。
  • 刷新操作:读出过程破坏电容上存储的信号,要重新写入,即刷新。读出过程可以完成刷新,读出信号后通过刷新缓存器重新对电容充放电,实现重新写入数据。

4.4.2 逻辑结构

4.4.3 读/写时序

一个符号上面画上 – 意思是低电平有效

4.4.4 刷新操作

不需要CPU控制
以行为单位, 每次刷新一行存储单元 , 仅需要行地址
存储器中所有芯片同时刷新

1.集中刷新

每一个刷新周期中集中一段时间对DRAM的所有行进行一次刷新,

对于一次刷新周期来说,一般前半段时间由来读写操作,后面留出一部分时间专门用于刷新,

且刷新和读写互斥,故会出现一段时间无法进行读写,称为死区

有硬件支持,读出一行的信息后重新写入,占用1个读/写周期

2.分散式刷新

刷新时间被均匀地分配到刷新周期里面,无死区,但是刷新次数过多,产生很大无用刷新。

3.分散刷新与集中刷新相结合(异步刷新)

将刷新时间划分成几块,每小块进行集中刷新,宏观开起来又是分散式刷新,

虽然还是存在死区,但是将刷新安排在指令译码阶段,就不会出现 “死区”。

4.4.5 SRAM和DRAM比较

SRAM采用6个晶体管和1个触发器作为一个存储单元,设计复杂,集成度低,价格高功耗大,由于SRAM不需要刷新所以速度较快,速度快的要求导致其使用单行译码,行译码的限制使其存储容量小,以上特点使其一般用于缓存。

DRAM采用一个晶体管和一个电容作为一个存储单元,需要刷新,存储容量大但是速度较慢,一般作为主存。

4.4.6 提高访存速度的措施

提高访存速度的措施主要有:采用高速器件、采用层次结构 Cache-主存、 调整主存结构。
主要介绍调整主存结构。

1.单体多字系统

主要用来扩容,增加存储器的带宽。在存储体和CPU之间增加数据寄存器,数据先存在数据寄存器中,每次需要数据直接从数据寄存器中取即可。但是存在一定问题:

  • 如下图的结构,每次CPU向数据寄存器写入四个W位数据,然后存入存储体,但如果某次CPU只修改了第一个W位数据,但是寄存器还是会向存储体存入4个W位数据,导致数据错误。所以需要额外的电路实现正确的存储,电路会比较复杂。
  • 如果所取的数据不是连续的,比如第一条指令是跳转指令,跳转到有个很远的位置,那么这次读取的数据只有第一位有效。

出现上述问题的原因是,每次存取数据都是一块一块地拿,不够灵活,于是出现了多体并行系统。

2.多体并行系统:高位交叉

如图,有多个存储体,编号为 M0 到 M3 ,从某个存储题开始顺序编址,,每个存储体有各自的控制电路,各个体并行工作,CPU给出地址格式为:体号+体内地址。但是存在问题:

  • 程序按序存储,一个程序的指令是从0000一位一位往下存,所以程序执行的时候,某个存储体会不停被访问而其他存储体空闲,导致资源浪费。

其实这种方式很像存储器的扩容操作,(见3.2.5.2),所以这种方式也就适合存储器的扩容,不能实现程序的并行运行。

3.多体并行系统:低位交叉

如图,按照横向编码,那么一个程序的指令会被拆分在多个存储器中,实现了并行。再观察地址,可以发现规律:前四位表示体内地址,后两位表示体号。在不改变存取周期的前提下,增加存储器的带宽。

  • 相关题目:

解释:M0 先进行存取,经过 τ 后 M1 ,开始进行存取,经过 τ 后 M2 ,开始进行存取,依次进行下去,我们发现,除了第一个字需要 T 的时间存取完成,后面都只需要 τ 的时间就可以完成一次存取操作,故读取4个字需要的时间为 T+(4−1)τ。