(已废弃)二、存储系统
主存储器的简单模型
存储器的基本结构:
- 存储体:存储数据
- 地址寄存器 MAR(Memory Address Register):定位数据
- 数据寄存器 MDR(Memory Data Register):存储器和外界的缓冲。
存储体
功能: 存储数据和程序(指令)
存储元
基本结构:
物理存储方式(其中一种实现方式)
这样的存储数据的单元称为:存储元。
包含两部分:
- 电容: 存储数据0/1
- 控制器件: 一个开关器件。
读操作
如果外部传入1(闭合操作)就闭合开关,电容存储的1(数据),就随着电流流出,实现读操作。
写操作
如果外部传入1(闭合操作)就闭合开关,待写数据1,就自动的施加到电容,实现写操作。
存储体
基础定义
一行存储元,组成存储单元。
多个存储单元,组成存储体。
存储字 和 存储字长
一个存储单元存储的0/1数据,成为一个存储字。
一个存储字的位数,成为存储字长。(单位是bit,Byte)
注意: 每个存储体,最多有一个存储单元的输入信号为1(闭合操作)(如果有多个开关闭合,输出的从存储字就会错误)。
译码器
很容易发现此时的编号01...00很像二进制地址,但还不是,还需要借助译码器,才能得到二进制地址。
很明显,通过n位的译码器就可以操作有\(2^n\)个存储单元的存储体。
也就是:
n位地址\(\to 2^n\)个存储单元。
存储体总容量
而且显然 一个存储体的总容量(一个存储体容纳多少二进制位),就是\(长乘宽\)。
即:\(总容量=存储单元个数×存储字长=2^n×存储字长(bit)\)
注意:
MAR和MDR在逻辑上属于主存,但在实际实现时封装到CPU。
寻址
存储器芯片的基本结构
-
存储矩阵: 由大量相同的存储单元阵列构成。
-
译码驱动:将来自地址总线的地址信号翻译成对应存储单元的选通信号 该信号在读写电路的配合下完成对被选中单元的读/写操作。
-
读写电路:包括读出放大器和写入电路,用来完成读/写操作。
-
读/写控制线:决定芯片进行读操作还是写操作。 (可以是两根,可以是一根)
-
片选线:确定哪个存储芯片被选中。可用于容量扩充。
-
地址线:是单向输入的,其位数与存储字的个数有关。
-
数据线:是双向的,其位数与读出或写入的数据位数有关。
数据线数和地址线数共同反映存储芯片容量的大小。 如地址线10根,数据线8根,则芯片容量=\(2^{10}×8=8K位\)。
编址、寻址和端模式
编制就是将存储器先按照某个大小进行分组,然后对组间进行编号。
寻址就是指根据编号查找某组的过程。
给出两者的定义:
-
编址:存储器是由一个个存储单元构成的,为了对存储器进行有效的管理,就需要对各个存储单元编上号,即给每个单元赋予一个地址码,这叫编址。
经编址后,存储器 在逻辑 上便形成一个线性地址空间。 -
寻址:存取数据时,必须先给出地址码,再由硬件电路译码找到数据所在地址,这个过程就是寻址。
按xx寻址就是指 该计算机中(可编址的)最小单位是xx,也就是说按照每xx为一组的方式进行查找数据。
可以看到编制和寻址是相辅相成的,而两者的关键是:如何分组(可编址的最小单位设为多少)。
分类:(不理解的话,看下面例题)
-
按字节编址/寻址,该计算机中可编址的最小单位是字节。
-
按字编址/寻址:该计算机中可编址的最小单位是 字存储单元。
-
按半字编址/寻址:该计算机中可编址的最小单位是 半个字存储单元。
-
按双字编址/寻址:该计算机中可编址的最小单位是 两个字存储单元。
注意: 一个机器字可以包含数个字节,所以一个存储单元也可包含数个能够单独编址的字节地址。
寻址范围: 就是指有多少个组。 \(寻址范围=总位数/字长*n\)
如果按字编址且 一存储字包含多个字节,那么数据的存放就可以有不同的存放顺序,就要引出端模式:
端模式:多字节字的存储顺序问题
-
大端模式(big-endian):字数据的高位字节存储在低地址中,字数据的低字节则存放在高地址中
-
小端模式(little-endian):低地址中存放字数据的低字节,高地址中存放字数据的高字节
注意:
ARM支持大端模式和小端模式两种内存模式。
X86系列处理器:小端模式
例题
例:
很容易得到:该存储体的每个物理存储单元的大小是1B,总容量为1KB。因此该存储器:
- 按字节寻址:1K个单元,每个单元1B
- 按字寻址:256个单元,每个单元4B
- 按半字寻址:512个单元,每个单元2B
- 按双字寻址:128个单元,每个单元8B
如果该存储体 按字节 编址寻址,可以看到每个物理存储单元的地址就是单元地址。
按字寻址的编址(下图中的绿线框出的部分 ),可以看到:
对于每个存储字的地址(字地址)就是每个存储字的首个存储单元的编号。
也可以从 字节地址分析:按字寻址就相当于将4个地址分为一组,因此倒数第三位二进制位 就是组号。
如果按字寻址 ,那存放数据就需要考虑端模式,如下图:
计算机字长16位,其存储容量为32MB,若按双字编址,它的寻址范围是多少?
寻址范围为:\(2^{28}/2^5 = 2^{23} = 8M\)
步骤
计算总二进制位数:32mb8位=2^28
按n(n=1为单,=2为双)字编址:字长n
半导体存储器RAM
主存储器都是采用半导体存储器,
随机存取器(RAM):无论访问地址在哪个位置,从给出地址到读取数据,耗费的时间都几乎一样。
RAM分为两种:SRAM和DRAM
- 存储信息(都只存储 0、1 两种信息)
SRAM:有两种稳定的状态,触发器可以稳定的保持某种状态
DRAM:电容存放时,需要不停的进行充放电
注意: 两个都属于易失性存储器,断电都会丢失信息
- 破坏性读出
SRAM:读时查看触发器状态;写时改变触发器状态
DRAM:读时连接电容,检测电流状态,读取一次后信息便消失,需要充放电;写时要给电容充电即可。
除此之外,对于DRAM而言,电容的状态只能维持2ms,也就是说每个单元,每隔2ms就必须重新写入一次原来的数据,否则里面的电荷就会流失到无法检测到信号,数据就会丢失。
这个重新读写的过程,就叫刷新
-
SRAM:能稳定地保持两种状态,不需要刷新,只需改变触发器状态即可
-
DRAM:电容上的电荷只能保持 2ms 左右,因此每隔 2ms 就要重复刷新依次
-
送行列地址
SRAM:先分列,再分行,因此行列地址可能长度不一,因此需要将整个地址同时放到地址线上(不能复用)。
DRAM:将地址分为长度相同的两部分:行地址和列地址,因此先送进去行地址,再送进去列地址,可以复用地址线,线数可以少一半。 -
运行速度
SRAM:由于是稳定的状态,不需要重复刷新和充放电,因此速度较快
DRAM:需要不断的充放电,重复刷新,因此速度较慢 -
集成度、发热量、存储成本
SRAM:由于需要实现稳定的状态,每个触发器由 6 个逻辑元件构成,因此集成度低,运行时发热量大,制造成本也较高
DRAM:核心元件只有电容,一般只由 1 或 3 个逻辑元件构成,因此集成度高,运行时发热量低,制造成本也较低
由于SRAM速度快,因此常用作Cache
由于DRAM容量更大,常用作主存
现在的主存,常使用DRAM的升级款 SDRAM:同步动态随机存储器。
DRAM 的刷新
对于DRAM而言,由于电容的状态只能维持2ms,也就是说 每2ms电容里面的电荷就会流失到无法检测到信号,数据就会丢失。
因此对于每个存储单元,每隔2ms就必须重新写入一次原来的数据,防止数据丢失;这个重新读写的过程,就叫刷新
对于刷新有以下常见问题:
-
多久需要刷新一次? 刷新周期:一般为2ms
-
每次刷新多少存储单元?以行为单位,每次刷新一行存储单元
-
为什么要用行列地址?减少选通线的数量
通过对存储单元排列成\(2^{\frac{n}{2}}×2^{\frac{n}{2}}\)的矩阵,加上使用两个译码器,可以显著的减少选通线的数量。(对比图如下:)
如果是256个存储单元,原本需要\(256=2^8\)根选通线,采用行列地址后,仅需要\(2^4+2^4=32\)根选通线 -
如何刷新?有硬件支持,读出一行的信息后重新写入,占用1个读/写周期
4. 在什么时刻刷新?
假设DRAM内部结构排列成128×128的形式,读/写周期(存取周期)0.5us
那么2ms共 2ms/0.5us = 4000 个周期
思路一:每次读写完都刷新一行(刷新和读写是两套硬件,不一定刷新读写的那一行)
系统的存取周期变为1us:前0.5us时间用于正常读写,后0.5us时间用于刷新某行。
优点:系统可以一直工作,没有死区(死区:无法访问存储器,称为访存“死区”)
缺点:导致运行速度下降(相当于2ms内每行都刷新了多次,浪费了资源)
思路二:2ms内集中安排时间全部刷新
系统的存取周期还是0.5us
但是有一段时间专门用于刷新,无法访问存储器,称为访存“死区”
优点:访问速度不变
缺点:有大量死区
思路三:2ms内每行刷新1次即可
2ms内需要产生128次刷新请求
每隔2ms/128 = 15.6us 一次,每15.6us内有0.5us的“死时间”
优点:死区分散变小,可以通过合理安排进程规避死区。
注意:
- 整个刷新过程不需要CPU控制
- 以行为单位,仅需要行地址
- 如果进行了位扩展,存储器中所有芯片同时刷新
RAM的读写周期
RAM的读写周期分为:读写时间和恢复时间。且有延迟开始和延迟结束的理念。
下面通过存储器的读写周期波形图理解:(了解)
读周期
在地址线CS上面有横杠,就表示低电平有效。
地址上的形状表示多个二进制位,CS上的形状表示一个二进制位。
采用读写控制线为一根,整个读出过程$ \overline{WE}$为高电平
- 在读周期中,地址线先有效,以便进行地址译码,选中存储单元。
- 地址线有信号后CS不能直接有效,因为此时的地址不稳定,需要隔一段时间再打开CS,开始读取动作。
- 数据要从存储矩阵被调出来也需要时间,因此CS也需要等待数据稳定后,再关闭CS。
- CS关闭后数据可能还在传送,因此数据线需要维持一段时间再关闭。相应的地址信号也需要维持一段时间再关闭。
对于SRAM:可以看出到数据读出后需要延迟一段时间保证数据稳定。
对于DRAM:数据读取后需要一段时间用于恢复数据。
写周期 和 读周期类似
在地址线CS上面有横杠,就表示低电平有效。
地址上的形状表示多个二进制位,CS上的形状表示一个二进制位。
采用读写控制线为一根
半导体存储器ROM
为什么需要ROM?
主机的工作原理是:CPU不断地从主存取指令,并且执行指令,但是RAM断电后数据全部丢失,重新启动机器后RAM为完全空白(也会不知道读指令,因此无法数据数据),整个系统就无法正常工作了;
因此必须要有断电之后还能存储数据的存储器来 存储对于主机运行必要的指令和数据。
但是之前的辅存,是通过I/O接口接入主机,而如何控制I/O接口工作,也需要主存中的相关指令。因此必须引入另一个存储器ROM来保证:
- 能和CPU直接通信
- 断电后不会丢失数据
也就是ROM:只读存储器。ROM的容量不会特别大,只需要存储关键信息,比如:指出操作系统在辅存的位置,然后通过I/O接口将OS调入到RAM;然后CPU就可以访问RAM,系统就可正常工作。
因此实际上主存由ROM和RAM共同构成 ROM存放开机之后必要的信息。而更详细的正在运行中的信息存放走RAM中。 如下图:
注:
- 主板上的BIOS芯片就是ROM(存储了“自举装入程序”,负责引导装入操作系统(开机) )
- 常说“内存条”就是RAM
ROM的发展(分类)
推动ROM的发展的最主要的因素是 人们对写的需求。
注意: 可编程和可擦写不同。最开始的MROM就可以编程,但是不可擦写。
MROM(Mask Read-Only Memory)——掩模式只读存储器
厂家按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写(只能读出)
可靠性高、灵活性差、生产周期长、只适合批量定制
这也就是为什么叫ROM,因为最开始只能写一次
PROM(Programmable Read-Only Memory)——可编程只读存储器
用户可用专门的PROM写入器写入信息,写一次之后就不可更改
EPROM(Erasable Programmable Read-Only Memory)——可擦除可编程只读存储器
允许用户写入信息,之后用某种方法擦除数据,可进行多次重写
擦除的方式有两种:
- UVEPROM(ultraviolet rays)——用紫外线照射8~20分钟,擦除所有信息
- EEPROM(也常记为E2PROM,第一个E是Electrically)——可用“电擦除”的方式,擦除特定的字
但是由于 修改次数有限,写入时间很长仍不能满足需求。
Flash Memory ——闪速存储器(注:U盘、SD卡就是闪存)
在EEPROM 基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写
注意:由于闪存需要先擦除在写入,因此闪存的“写”速度要比“读”速度更慢。
SSD(Solid State Drives)—— 固态硬盘
由控制单元+存储单元(Flash 芯片)构成,与闪速存储器的核心区别在于控制单元不一样,但存储介质都类似,可进行多次快速擦除重写。
SSD速度快、功耗低、价格高。目前个人电脑上常用SSD取代传统的机械硬盘
因此对于ROM需要注意几点:
- 很多ROM芯片虽然名字是“Read-Only”,但很多ROM也可以“写”
- 闪存的写速度一般比读速度更慢,因为写入前要先擦除
- RAM芯片是易失性的,ROM芯片是非易失性的。很多ROM也具有“随机存取”的特性
- ROM相比RAM结构简单,位密度比RAM高。
存储器概述
存储器分级结构
分级原因
目前存储器的特点是:
- 速度快的存储器价格贵,容量小;
- 价格低的存储器速度慢,容量大。
在计算机存储器体系结构设计时,
我们希望:存储器系统的性能高、价格低
因此在存储器容量,速度和价格方面的因素作折中考虑,建立了分层次的存储器体系结构。
依据: 程序局部性原理
程序的局部性原理
在某一段时间内频繁访问某一局部的存储器地址空间,而对此范围之外的地址空间很少访问的现象。
分类
- 时间局部性:最近被访问的信息很可能还要被访问。
- 空间局部性:最近被访问的信息临近地址的信息也可能被访问
组成
多级结构
组成:
- 高速缓冲存储器(cache/缓存)
- 主存储器(主存)
- 外存储器(外存)
分层存储器系统之间的连接关系
缓存-主存层次主要解决CPU和主存速度不匹配的问题。
主存-辅存层次主要解决存储系统的容量问题。
-
从CPU角度来看,缓存-主存这一层次速度接近于缓存,高于主存,其容量和价位却接近于主存。
-
主存-辅存这一层次,其速度接近于主存,容量接近于辅存,价位也接近于低速、廉价的辅存价位,
目的:
解决速度、容量、成本这三者的矛盾。
高速缓冲存储器(cache/缓存)
它是计算机系统中的一个高速小容量半导体存储器。
在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。
存在于主存与CPU之间的一级存储器,由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。
现在的Cache 一般在处理器芯片内部。
主存储器(主存)
是计算机系统的主要存储器,用来存放计算机运行期间的大量程序和数据。
主存就是内存条,辅存就是硬盘,
外存储器(外存)
它是大容量辅助存储器。
存储器分类
按在计算机系统中的作用分类
-
主存储器
能够被CPU直接访问,速度较快,用于保存系统当前运行所需的所有程序和数据; -
辅助存储器(硬盘、光盘)
不能被CPU直接访问,速度较慢,用于保存系统中的所有的程序和数据; -
高速缓冲存储器(Cache)
能够被CPU直接访问,速度快,用于保存系统当前运行中频繁使用的程序和数据; -
控制存储器
用来存放实现全部指令系统的所有微程序。
半导体存储器的类型及性能特点
按存储介质分类
-
半导体存储器:目前广泛使用的都是半导体存储器。
用半导体器件(MOS管)组成的存储器; -
磁表面存储器:磁盘,磁带
用磁性材料(磁化作用)做成的存储器; -
光存储器:光盘(磁光材料)
按存取方式分类
-
随机存储器:存取时间和存储单元的物理位置无关;
半导体存储器 -
顺序存储器:存取时间和存储单元的物理位置有关;
(如果存储的信息依次为ABC,那么读完A后想读C,必须经过B,这就是顺序读取)
磁带,光盘 -
半顺序(直接)存取:磁盘沿磁道方向顺序存取,垂直半径方向随机存取。
(先直接定位到一个小区域,然后再顺序读取)
按存储内容可变性分类
-
只读存储器(ROM)
只能读出而不能写入的半导体存储器; -
随机读写存储器(RAM):
既能读出又能写入的半导体存储器;
注意:rom和ram的位数要一致
按信息易失性分类
-
易失性存储器:断电后信息消失的存储器;
RAM -
非易失性存储器:断电后仍能保存信息的存储器;
ROM,磁性材料
按是否破坏性读出分类
- 信息读出后,原存储信息被破坏——破坏性读出(如DRAM芯片,读出数据后要进行重写)
- 信息读出后,原存储信息不被破坏——非破坏性读出(如SRAM芯片、磁盘、光盘)
考研真题:下列各类存储器中,不采用随机存取方式的是( )
A.EPROM B.CDROM
C.DRAM D.SRAM
解答:B。光盘采用顺序存取方式。
存储器的技术指标
主要由: 存取容量、单位成本、存储带宽(存储速度)
三个概念反映主存的速度指标。
1.存储容量:
指一个存储器中可以容纳的二进制信息量。指存储器能存放二进制代码的总数。
存储容量常用字数或字节数来表示,如64KB、512KB、64MB等。
2. 单位成本: 每位价格=总成本/总容量。
3. 数据传送速率(带宽,频宽): \(数据传输率=数据的宽度/存储周期\)
单位时间里存储器能存取的最大信息量。
通常以位(bit)/秒或字节(B)/秒做度量单位。
注意: 带宽是个速率
- 存储周期(存取周期):
指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作(读或写操作)之间所需的最小时间间隔。
存取周期分为 存取时间和恢复时间两部分。 - 存取时间又称存储器访问时间:
指一次读操作命令发出到该操作完成,将数据读出到数据总线上所经历的时间。分为读出时间和写入时间。
例题:求存储器带宽。设某存储系统的存取时间为500ns,每个存取周期可访问16位,则该存储器的带宽是多少?
存储带宽
\(= \frac{16位} {500×10^{-9}} 秒\)
$ 3.2 × 10^7 位/秒$
习题
1、对存储器的要求是 容量大 ,速度快,成本低 为了解决这三方面的矛盾,计算机采用 多级存储体系结构。
2、存储器的技术指标有存储容量、存取时间、存储周期、存储器带宽
3、CPU能直接访问 cache , 主存 ,但不能直接访问 外存 。
存储器与CPU的连接
单块存储芯片连接
⭐多块存储芯片连接(容量扩充)
位扩充
字长位数扩展(数据宽度、位扩展)
给定的芯片字长位数较短,不满足设计要求的存储器字长,此时需要用多片给定芯片扩展字长位数。
连线方式: 地址线和控制线公用, 数据线单独分开连接即可.
(假设CPU给出一个地址,两个存储器同时接收到信号,同时给出对应位置的数据,由于数据线不同,对于CPU就相当于收到了一个2位的数据)
需要的芯片数量d: $$d=设计要求的存储器容量/选择芯片存储器容量$$
[例] 利用1K×4位的SRAM芯片扩充为1K×8位的SRAM存储器。
解:所需芯片数量=(1K×8)/(1K×4)=2片
连线如下:
地址线均连在A0-A9,控制线也都连接上。
数据总线:两片分别连在 的 低四位 和 高四位 上。
字扩充
字存储容量扩展(字扩展)
给定的芯片存储容量较小(字数少),不满足设计要求的总存储容量,此时需要用多片给定芯片来扩展字数。
常见的扩充有两种方法:
- 线选法,n条线n个选片信号,电路简单,地址空间不连续
- 译码片选法,n条线\(2^n\)个选片信号,电路复杂,地址空间可连续
片选法
连线方式: 地址总线和数据总线公用,控制总线中R/W公用;但是片选线CS不公用,连接到不同的地址线上。
(如果片选线共用:假设CPU给出一个地址,两个存储器同时接收到信号,同时给出对应位置的数据,由于所有线都相同,那么CPU就会收到一个混乱的数据,因此需要分开片选线。)
片选信号:哪一片工作的信号,子扩展的芯片不会同时工作。
上图中片选信号采用高电平有效,且分别连接到地址线A13、A14上。
对于上图如果想选择左边的存储芯片就将A13=1,A14=0;如果想选择右边的存储芯片就将:A13=0,A14=1。
可以得出
左边存储单元:最低地址: 010 0000 0000 0000,最高地址: 011 1111 1111 1111
右边存储单元:最低地址: 100 0000 0000 0000,最高地址: 101 1111 1111 1111
译码片选法
注意: 虽然上面即可解决问题,但是A13、A14不能同时设为1,如果A13=1,A14=1 相当于控制线没有分开,得到的数据是错误的。
根据我们之前的经验,显然可以通过新增 译码器,减少地址线的浪费。
x-y译码器芯片:用于生成片选信号。x是需要的(剩下的)线,y是可选的片选信号的最大值(可选范围)。
(简单了解下译码器的设计)
对于上面的例子,借助1-2译码器,仅需要占用1根地址线就可以达到同样的效果。
同时地址范围也变得更紧凑:
左边存储单元:最低地址: 10 0000 0000 0000,最高地址: 11 1111 1111 1111
右边存储单元:最低地址: 00 0000 0000 0000,最高地址: 01 1111 1111 1111
注意: 一般由地址总线的高位段译码来决定片选信号
。
需要的芯片数量d:
[例]利用1K×4位的SRAM芯片设计2K×4位的DRAM存储器
解: 所需芯片数d=(2K×4)/(1K×4)=2(片)
利用 256K×8 位的 SRAM 芯片设计 2048K×8 位的存储器。
所需芯片数 d=(2048K×8)/(256K×8)=8(片)
8 个芯片的数据总线和读写控制信号线公用
因为芯片是\(256K=2^{18}\)芯片,所以需要18个线。
地址总线中 A0~A17同时连接到 8 片 SRAM 的片内地址输入端
因为使用了8个芯片,所以需要x-8线译码器
地址总线高位的 A18~A20 通过三-八线译码器芯片分别产生 8 个片选信号,这 8 个芯片不会同时工作。
因为剩下21-18=3根线,所以是3-8线译码器
字位同时扩展(先位扩,再字扩)
利用16K × 4位存储芯片,设计64K × 8位的存储器:
先位扩展到16K × 8位,然后将位扩展后的组合,字扩展成64K × 8位。如下图:
并行存储器
由于CPU和主存储器之间在速度上是不匹配的,这种情况便成为限制高速计算机设计的主要问题。
为了提高CPU和主存之间的数据传输率,除了主存采用更高速的技术来缩短读出时间外,还可以采用并行技术的存储器。
为什么通过并行存储器可以提高速度? 因为存储器的存储周期分为存取时间和恢复时间,而同过并行技术可以
- 相同时间对不同的存储单元进行并行的读取
- 或者采用流水线方案,当某单元进入恢复时间时,对其他单元进行读取。
解决途径: 多个存储器并行工作
- 双端口访问和交叉编址存储器
- 采用分层的存储系统 (Cache(第6节))
双端口存储器
双端口存储器由于同一个存储器具有两组相互独立的读写控制电路而得名。由于进行并行的独立操作,因而是一种高速工作的存储器,在科研和工程中非常有用。
需要有两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更复杂的控制电路
当任一端口被选中驱动时,就可对整个存储器进行存取,每一个端口都有自己的片选控制(CE)和输出驱动控制(OE)。读操作时,端口的OE(低电平有效)打开输出驱动器,由存储矩阵读出的数据就出现在I/O线上。
作用:优化多核CPU访问一根内存条的速度
两个端口对同一主存操作有4种情况:
无冲突读写控制:
- 两个端口同时对不同的地址单元存取数据。
- 两个端口同时对同一地址单元读出数据。
有冲突读写控制 当两个端口 同时 存取存储器同一存储单元时
3. 写入错误:两个端口同时对同一地址单元写入数据。
4. 读出错误:两个端口同时对同一地址单元,一个写入数据,另一个读出数据。
解决冲突方法:设置BUSY信号(控制信号)
置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。
特点:
-
采用空间并行技术 ,有两套独立的读写控制电路
-
在同一时刻对两个存储体的两个不同单元进行读写,相当于存储器的速度增加了一倍。
多模块交叉存储器
普通存储器:每行为1个存储单元。因此每次只能读取一个存储单元,
为了提高速度可以一行存放多个字来提高访问速度,也就是:
单体多字存储器 每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字
这样虽然可以提速,但是 指令和数据在主存内必须是连续存放的。因此出现 多模块并行存储器:
多模块并行存储器:每个模块都有相同的容量和存取速度。各模块都有独立的读写控制电路、地址寄存器和数据寄存器。
这样的使存储体有两种工作模式:
- 既能并行工作:和单体多字存储器一样,一次读取多个数据
- 又能交叉工作:就是轮流工作,一个存储体进入恢复时间时,采用另一个存储体
注意:不要和字扩展混淆概念
多模块存储器的工作模式取决与 地址在各模块中如何安排,有两种:
- 一种是顺序方式:
- 一种是交叉方式
1、顺序方式
编址方式:块号+块内地址(高位选模块,低位选块内地址)
[例]M0-M3共四个模块,则每个模块8个字
则地址为: M0:0—7 ,M1:8-15,M2:16-23,M3:24-31
工作模式:某个模块进行存取时,其他模块不工作
连续取n个存储字,耗时为nT
设每个存储体存取周期为T,存取时间为r,假设 T=4r。
则顺序方式编址,连续访问5个地址(连续访问:地址连续)的时间:
可以看到这种方式编码,效果类似扩容,对速度影响不大。
优点: 某一模块出现故障时,其他模块可以照常工作,通过增添模块来扩充存储器容量比较方便。
缺点 是各模块串行工作,存储器的带宽受到了限制。
2、交叉方式
(可以实现多模块流水式并行存取)
编址方式:块内地址+块号(高位选块内地址,低位选模块)
[例]M0-M3共四个模块,则每个模块8个字
交叉方式:
M0:0,4,...除以4余数为0
M1:1,5,...除以4余数为1
M2:2,6,...除以4余数为2
M3:3,7,...除以4余数为3
工作模式:采用“流水线”的方式并行存取(宏观上并行,微观上串行)
微观(计算题)
- 模块数m=4,存储周期为T,字长W,数据总线宽度为W,总线传输周期为r,连续存取n个字,求交叉存储器的带宽。
- 有m个存储体,存储周期为T,字长W,每隔r时间启动下一个存储体,连续存取n个字,求存储器的存取速率。
- 连续存取n个字耗时=T+(n-1)r
- 带宽 = n × W T+(n−1)r m≥T/r
n较大时,带宽 W/r对比单个存储体的带宽:W/T相当于m个存储体并行工作
宏观:一个存储周期内,交叉存储器可以提供的数据量为单个模块的m倍
设每个存储体存取周期为T,存取时间为r,假设 T=4r。
则连续访问5个地址(连续访问:地址连续)的时间:T+4r
则连续取n个存储字, 耗时T+(n-1)r
可以看到这种方式编码,对速度提升明显
特点:
连续地址分布在相邻的不同模块内,同一个模块内的地址都是不连续的。
优点
是对连续字的成块传送可实现多模块流水式并行存取,大大提高存储器的带宽。使用场合为成批数据读取。
3、多模块交叉存储器的基本结构
右图为四模块交叉存储器结构框图。主存被分成4个相互独立、容量相同的模块M0,M1,M2,M3,每个模块都有自己的读写控制电路、地址寄存器和数据寄存器,各自以等同的方式与CPU传送信息。在理想情况下,如果程序段或数据块都是连续的在主存中存取,那么将大大提高主存的访问速度。
通常在一个存储器周期内,n个存储体必须分时启动,则各个存储体的启动间隔为 (n为交叉存取度)
整个存储器的存取速度有望提高n倍
注意: 所需要的时间就是顺序执行和流水执行需要的时间
例子:
例5 设存储器容量为32字,字长64位,模块数m=4,分别用顺序方式和交叉方式进行组织。存储周期T=200ns,数据总线宽度为64位,总线传送周期=50ns。若连续读出4个字,问顺序存储器和交叉存储器的带宽各是多少
解:
顺序存储器和交叉存储器连续读出m=4个字的信息总量都是:\[q=64b×4=256b \]顺序存储器和交叉存储器连续读出4个字所需的时间分别是:
\[t2=mT=4×200ns=800ns=8×10^{-7}s \]\[t1=T+(m-1)t=200ns+3×50ns=350ns=35×10^{-7}s \]顺序存储器和交叉存储器的带宽分别是:
\[W2=q/t2=256b÷(8×10^{-7})s=320Mb/s \]\[W1=q/t1=256b÷(35×10^{-7})s=730Mb/s \]
**注意:
- 模块数就是位数
- **因为带宽时速度,因此上面的 \(M=10^6\)