一、概论
1.1存储器分类
1.按存储介质分类(注意易失性)
(1)半导体存储器 TTL晶体管、MOS管、主存、cache 易失
(2)磁表面存储器 磁头、载磁体 非易失
(3)磁芯存储器 硬磁材料、环状元件 非易失
(4)光盘存储器 激光、磁光材料 非易失
2.按信息的可保存性
易失性存储器:通电的时候01保存,断电即丢失——主存,cache
非易失性存储器:断电后存储信息依然保持——磁盘,光盘
3.按存取方式分类
(随机访问)
(1)随机存取存储器RAM读写任何一个存储单元的用时都是相同的,与存取单元所在的物理位置无关
随机存储器 在程序的执行过程中可读可写
只读存储器 在程序的执行过程中只读
(串行访问)
(2)顺序存储存储器SAM读写一个存储单元所需时间取决于该存储单元的物理位置 磁带
(3)直接存取存储器DAM 磁盘
先直接选取信息所在区域,再按顺序存取。速度介于随机存取存储器和顺序存储存储器之间
4.按在计算机中的作用分类
1.2存储器的层次结构
1.存储器三个主要特性的关系
CPU中也有缓存
存储器三个主要指标:速度、容量、价格。速度越快价格越高;容量越大,价格越低,速度也更慢。
2.缓存——主存层次和主存——辅存层次
CPU和缓存、主存能交换信息;缓存和CPU、主存能交换信息;主存和CPU、缓存、辅存能交换信息。
缓存-主存层次解决了CPU和主存间的速度差异问题。由于缓存速度比主存快,只要将CPU近期要用的信息调入缓存,CPU便可以直接从缓存中获取信息,提高访存速度。但缓存容量小,需要不断的将主存内容调入,这一过程是硬件实现的,对程序员透明。
主存—辅存层次解决了主存容量不够的问题。辅存的速度低于主存,但容量比主存大得多,存储着暂时未用到的信息。当CPU需要使用这些信息时,再调入主存,供CPU直接访问。这一过程由硬件和操作系统共同实现。
辅存中的数据要调入主存中才能被CPU访问
没保存的时候,数据存在主存里(比如ctrl c)是易失的
二、主存储器
2.1概述
1.主存的基本组成
以下是对一个主存存储芯片的抽象(主存使用DRAM,所以图中为栅极电容)
控制电路的意义:当地址线中的信号稳定后才能送入译码器。
MAR经过译码驱动才能找到要访问的单元;存储体经过读写电路才能和MDR交互
2.主存和CPU的联系
译码驱动器和读写电路制作在主存中,而MAR和MDR制作在CPU芯片内
3.主存中存储单元地址的分配
地址:地址编号小的是低地址,地址编号大的是高地址
数据:靠右的是低位,靠左的是高位
小端存储:低位对应低地址,高位对应高地址
大端存储:高位字节存在低地址,低位字节存在高地址(字节越靠左位越高)
例:12345678H 的存储
假定每个字含4个字节,其中编号高的字节为高位字节;2整个字的地址用最低地址表示
12345678H是一个字(一行一个字),两个数字是一个字节
大端存储:
小端存储:
注意:每个存储单元内部不需要调换顺序
设地址线 24 根 按字节寻址 2^24=16M
若字长为 16 位 按字寻址 8MW,字长增加一倍,行数减少一半
若字长为 32 位 按字寻址 4MW
4.主存的技术指标
(1)存储容量
主存存放二进制代码的总位数,存储字数*字长,如(1M*8位)
(2)存储速度
存取时间 又称为存储器的访问时间,指启动一次存储器操作到完成该操作所需的全部时间;分为读出时间、写入时间
存取周期 连续两次独立的存储器操作(读或写)所需的最小间隔时间。读/写的平均值,因为写一般较慢。
存取周期大于存取时间,因为存取后还有恢复时间
(3)主存带宽/数据传输率:每秒出入主存的最大信息数量 位/秒(b/s),字/秒,字节/秒(B/s)
3种提高存储器带宽的方法:缩短存取周期,增加存储字长(MDR反映),增加存储体
2.2半导体存储芯片简介
0.基本的半导体原件及原理
一个存储元包括一个MOS管和一个电容。电容用于存储01比特。MOS管起到开关的作用。当MOS管接高电压时,变为导体,外界可以对电容读或写。
多个存储元构成了存储单元,存储元的个数称为存储字长。存储字的长度是不固定的,而字节是固定8bit。
存储单元中,红色的线(字选线)连接MOS管,通高电压时将一行所有MOS管导通,电容中的0或1由绿色的线(数据线/位线)导出。所以每次读写的是一个存储字。
多个存储单元构成存储体。
1.半导体存储芯片的基本结构
有x根地址线,就有2^x个存储单元。2^10=1K
14根地址线,10根是1K,4根是16,共16K(2^14)
片选线:CS、CE 传输芯片选择信号或者芯片使能信号,用来选择存储芯片
读写控制线:一根线WE(低电平写,高电平读);两根线OE允许读、WE允许写
存储芯片片选线的作用
2.半导体存储芯片的译码驱动方式
(1)线选法
4根地址线,译码后能选择16个字线,每个字线对应8个芯片,每次对字线上芯片的所有位进行读出或写入
缺点:如果有一个1M的地址线,那么在内存中就要部署 220个字线,来对这1M的存储单元写入数据,这样会对内存电路集成中造成很大困难,所以这种方法更适合存储量不大的芯片
(2)重合法
地址线分为两组,行列各5根线,各能译出32种数,两者结合确定存储单元的地址
一个存储单元只有一个存储元件,每次只输出一位
若使用线选法,需要2^10=1024根线;现在只需要2^5*2=64根线。
存储结构复杂,芯片集成度高,存储容量大
使用行列地址,减少选通线的数量
掌握线选法和重合法的优劣及差异
2.3随机存取存储器(RAM)
1.静态RAM(SRAM)
使用双稳态触发器(有两种稳定状态)存储信息
(1)静态RAM基本电路的读操作
T1~T4是晶体管,存储数据;如果A’高A低,表示1;如果A’低A高,表示0。
T5T6是写入和读出状态的,同时作为行选择信号
行列地址选择信号导入,将T5678电路导通;读选择信号导入;数据导出
(2)静态RAM基本电路的写操作
先输入行/列地址选择将电路导通,然后写选择信号(两路)传入
三角形带个圈是反相信号,写的时候需要两个信号
静态RAM(SRAM)——芯片举例
A0~A9地址总线 WE读写 CS片选 I/O数据总线 Vcc电源高压输入 GND地线
SRAM的数据存储依赖于电源,并且当电源关闭时数据会丢失,因此它被视为易失型存储器。
重合法改进,之前是一次选一行一列,怎么一次选一行四列?
Intel 2114 RAM矩阵(64*64)读
行地址线6条,64位字线;列地址线4条,16位字线
芯片分为四组,每组16列*64行
行地址一次选择64行中的某一行,列地址一次选择每一组的某一列,共4位数据
写的时候是两路反相电压
2.动态RAM(DRAM)
(1)动态RAM基本单元电路
使用栅极电容存储信息
三管式
Cg电容,保存数据
数据读出步骤
- 预充电信号打开
- VDD给读数据线充电,使其变为高电平,代表数据1
- 读选择信号有效
- T2打开
- 若Cg没有充电,代表0
- T1 不会打开
- 读数据线为高电平,为1
- 若Cg有充电,代表1
- T1打开
- 放电后读数据线为低电平,代表0
读出与原存信息相反
数据写入步骤
- 写数据线开通
- 写选择线有电流
- T3开通
- 数据为0,Cg放电
- 数据为1,Cg充电
写入与输入信息相同
单管式
数据读出步骤
- 字线充电
- Cs没有电,代表0
- 数据线没有电流,代表0
- Cs有电,数据线有电流,代表1
数据写入步骤
- 字线充电
- 数据线没有电,写入0
- 数据线有电流,写入1
(2)动态RAM芯片举例
1.三管动态RAM芯片(Intel 1103)读
2.三管动态RAM芯片(Intel 1103)写
SRAM用触发器,DRAM用电容,较简单,但是读数据时电容会损失电,每次操作时用刷新放大器每次对一行充电
DRAM和SRAM都是易失型存储器
(3)动态RAM刷新
刷新:对DRAM定期进行的全部重写过程。
刷新与行地址有关,一次刷新一行
3.1集中刷新(默认刷新时间间隔为2ms(2ms内要把全部存储单元刷新)),存取周期为0.5us,以128*128矩阵为例)
刷新时间间隔内要对所有芯片充电,一次刷新一行,共128行,一次刷新占用一个存取周期的时间。刷新时间间隔内存在4000个存取周期。
集中式:最后128周期(64us)统一进行刷新,但是该128个周期无法读写,称为死区。死区为64us。死时间率为128/4000*100%=3.2%
刷新时间间隔:2ms
3.2分散刷新:存取后接着刷新
无死区。存取周期变为0.5us+0.5us
出现了过度刷新
刷新时间间隔:128us
3.3异步刷新
2ms被128行分割,得15.6us,则15.6us刷新一行
每行每隔2ms刷新一次,死区为0.5us
将刷新安排在指令译码阶段,不会出现死区
刷新时间间隔2ms
刷新由存储器自行完成,不需要CPU控制
一个 8Kx8 位的动态 RAM 芯片,某内部结构排列成256 × 256 形式,存取周期为 0.5 us,刷新最大间隔时间为 2ms。采用集中刷新时,死时间率为百分之多少?采用分散刷新(注意此时存取周期有变化)时,实际的刷新间隔为多少us?采用异步刷新时,每隔多少us刷新一行?
总的周期数:2ms/0.5us=4000
刷新占用周期数=256
死时间率=256/4000=6.4%
0.5us+0.5us=1us
刷新间隔=256*1=256us
2000/256=7.8us
(4)动态RAM与静态RAM的比较
DRAM需要一个电容+1~3个晶体管,而SRAM需要8个晶体管
芯片引脚与速度有关,速度快引脚多
DRAM有引脚复用,提高集成度;SRAM的速度快是其特性,不使用引脚复用
管件多的损耗大
速度快的价格高
DRAM适合做主存(集成度高),SRAM适合做缓存(速度快)
(5)DRAM地址线复用
行地址、列地址可以分两次传送,可以减少一半的地址引脚。比如2K,11根地址线,可以分为5+6,地址引脚只需要6。
而SRAM的行列地址可以一次传送,因为SRAM集成度低,容量小。
2.4只读存储器ROM
1.掩模ROM(MROM)
行列交叉线有MOS管——通电后接地变0——反相后变1——输出1
行列选择线交叉处有 MOS 管为“1”
行列选择线交叉处无 MOS 管为“0”
用户无法改变原始状态。
制造成本较低,批量生产时具有成本优势。
适用于量产的、数据固定不变的应用。
2.PROM(一次性编程)
熔丝断为“0”
熔丝未断为“1”
用户可以在编程时用大电流将熔丝烧断。故只能支持一次编程
3.EPROM(多次性编程)
(1)N型沟道浮动栅MOS电路
G栅极 S源 D漏
D端加正电压 形成浮动栅 SD不导通为“0”
D端不加正电压 不形成浮动栅 SD导通为“1”
紫外线可以全部擦洗
2716型EPROM的逻辑图和引脚
引脚有地址线、数据线,还有电源引出头Vcc和Vpp,Vss为地。CS为片选端,读出时为低电平,编程时为高电平。PD/progr是功率下降/编程输入端,读出时为低电平,此端为高电平时,使EPRONM功率下降。没有读写控制线。
4.EEPROM(多次性编程)
电可擦写:用电气方法将存储内容擦除再重写
在联机条件下,可以局部擦写、全部擦写
5.FLASH Memory(闪速型存储器)
有EPROM的优点:价格便宜、集成度高
有EEPROM的优点:电可擦洗重写
比EEPROM快;具备RAM功能:可与CPU直连
下列有关RAM和ROM的叙述中正确的是()。
I. RAM是易失性存储器,ROM是非易性存储器
II. RAM 和 ROM 都是采用随机存取方式进行信息访问
III. RAM 和 ROM 都可用作 Cache
IV.RAM和ROM都需要进行刷新
A. 仅I、II B. 仅II 、III
C. 仅I、II、III D. 仅II 、III、IV
A
cache用高速SRAM制作
下列关于闪存(Flash Memory)的叙述中,错误的是( )
A信息可读可写,并且读、写速度一样快
B存储元由 MOS 管组成,是一种半导体存储器
C掉电后信息不丢失,是一种非易失性存储器
D采用随机访问方式,可替代计算机外部存储器
A
写的时候要擦除,较慢
2.5存储器与CPU的连接
1.存储器容量的扩展
(1)位扩展(增加存储字长)
用两个1K*4位的存储芯片组成1K*8位的存储器:
地址线、CS、WE共用;其中一片的数据线作为高4位D7~D4,另一片作低四位D3~D0
(2)字扩展(增加存储字的数量)
用两个1K*8位的存储芯片组成2K*8位的存储器
A10作片选信号。片选信号为低电平表示选择,所以A10低电平时CS0有效,高电平时反相后CS1有效。
也叫线选法,一个地址线分为两路,通过非门,使一个为1一个为0。
(3)字、位扩展
用8片1K×4位存储芯片组成4K×8位的存储器
1K是10条地址线,4K是12条存储线,多出两条片选线
8位则是两个芯片一组
用512K × 8位的闪存存储芯片组成一个4M × 32位的半导体只读存储器,则:
(1)该存储器有多少根数据线?
(2)该存储器有多少根地址线?
(3)存储容量是多少 MB?
(4)共需几片这种存储芯片?
1.32
2.22
3.16
4.32
假定用若干个2 K ×4位芯片组成一个8 K ×8位存储器,则地址0B1FH所在芯片的最小地址是()
A 0000H
B 0600H
C 0700H
D 0800H
D
需要8个芯片,两两一组
每一组的地址为2k,11根地址线
8k总共13根地址线,所以12-13为片选线
题目中0B1FH=0000 1011 0001 1111,很显然取低11位作为片内地址,低12~13位作为片选地址,很显然 0B1FH低十三位为=000(0 1)(011 0001 1111) 很显然选片地址为01 代表第二组芯片
2.存储器与CPU的连接
(1)地址线的连接
通常情况是将CPU地址线的低位与存储芯片的地址线相连。CPU地址线的高位或在存储芯片扩充时用,或做其它用途,入片选信号。
例如:16K×1位存储芯片连接时,地址线有14根与CPU相连。
(2)数据线的连接
CPU的数据线数与存储芯片的数据线数也不一定相等。此时必须对存储芯片扩展。使其数据位数与CPU的数据线相等。
(3)读/写命令线的连接
CPU读/写命令线一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写。ROM不连读写,连的是PD/Progr。
(4)片选线的连接
存储器由许多存储芯片组成,哪一片被选中完全取决于该存储芯片的片选控制端CS非能否收到来自CPU的片选有效信号。
片选有效信号与CPU的访存控制信号MREQ非(低电平有效)有关,因为只有当CPU要求访存时,才需要选择存储芯片。若CPU访问I/O时,则MREQ非为高电平,表示不要求存储器工作。
(5)译码器左上角为使能线路,相当于供电用的,需满足高/低电平的要求译码器才能工作。可以连外接电源、MREQ、CPU多余的地址线。ABC确定Y的有效输出(低电平),其余Y都为高电平。
a10必须用上,不然选择RAM时就会选到一些不存在的地址
每根线都要用上,根据该芯片的地址特性确定,比如地址用12位,13位始终为1,那就要将13位并入片选信号中,让13位取1时片选信号有效
与非门:全0才为0,类似或门
假设同上一题,要求最小8K为系统程序区,相邻16K为用户程序区,最大4K为系统程序工作区
(1)写出对应的二进制地址码
(2)确定芯片的数量及类型
(3)分配地址线
(4)确定片选信号
2.7提高访存速度的措施
(1)采用高速器件
(2)采用层次结构 cache——主存
(3)调整主存结构
1.单体多字系统
每次从存储器中取出4个值或指令放到数据寄存器中,CPU使用时,通过单字长寄存器从其中取出一个即可。
问题:
1.写入时,先写入单字长寄存器中,再写入4位数据寄存器中,放到存储器中时,就可能覆盖其他3个位置上的数据,造成覆写。如果想只写到1个位置上,还要实现这样的功能,存储器就会比较复杂。
2.取数或者指令时,数据或指令不是连续存放的,就会造成麻烦。比如取了4个指令,结果第一个指令是跳转指令,那么根本用不到后面3个指令。
2.多体并行系统
(1)高位交叉 单体内顺序编址
每个单体的前几位是相同的,后面几位递增
前两位是存储体号,后四位是存储地址
数据在存储体内按照列存放的。
问题:
一个存储体的芯片在准备数据时,其它存储体的芯片可以并行存取。
但是连续读取一个存储体的数据时,其它存储器会空闲。在连续访问时性能并未提升。
(2)低位交叉 各个体轮流编址
每个单体的后几位相同,前几位递增
低位交叉特点:
对连续地址的数据进行操作时可以顺序访问各个存储体,实现流水线方式存取
在一个存取周期中,cpu通过总线正好对所有存储体进行访问,不耽误时间。
应满足T=nr,连续读取n个字所需的总时间为T+(n-1)r
高位交叉存储中的字连续存放,总是访问同一个存储体,不能保证程序的局部性原理
低位交叉存储中的字交叉存放,通常会流水访问存储体,保证了程序的局部性原理
若机器采用四体低位交叉存储器,现分别执行下述操作:第一(读取6个连续地址单元中存放的存储字,重复80次);第二(读取8个连续地址单元中存放的存储字,重复60次)则第一种、第二种所花费的时间之比为(C)
A.1:1 B. 2:1 C.4:3 D.3:4
第一种情况,读取数据块123412,再重复时,要注意不能立即读1,要等一会
第二种可以连续读
画图解题,
最后一次用时单独考虑
设有 4 个模块组成的四体存储器结构,每个体的存储字长为 32 位,存取周期为 200 ns。假设数据总线宽度为 32 位,总线传输周期为和50ns,试求顺序存储和交叉存储的存储器带宽
解:顺序存储(高位交叉编址)和交叉存储(低位交叉编址)连续读出 4 个字的信息量是 32 x 4 = 128 位。
顺序存储存储器连续读出 4 个字的时间是200ns*4=800ns
交叉存储存储器连续读4个字的时间是200+(4-1)*50=350ns
带宽分别为128/(8*10-7)=16*107bps;128/(3.5*10-7)=37*107bps
s,ms,us,ns
下面有关存储器的说法中正确的是 ()
A SRAM 是非易失性存储器, DRAM是易失性存储器
B辅存是按顺序访问的存储器,主存一般是按随机存取方式访问的存储器
C辅存是非易失性存储器,主存是易失性存储器
D RAM 和 ROM 都可用作 Cache
C
ROM只读不写,不可用作cache
某计算机主存容量为 64 KB ,其中 ROM 区为4KB, 其余为 RAM 区,按字节编址现在要用 2 K*8位的 ROM 芯片和 4K * 4 位的 RAM 芯来设计该存储器,则需要上述规格的 ROM 芯片数和 RAM 芯片数分别是
A1,15
B2,15
C1,30
D2,30
D
0000-07FF, 0800-0FFF,……
0800H
地址线需要11根。由于DRAM可以分时复用,即先传送行地址,再传送列地址,所以行列地址分为5、6时地址引脚数最小。减少刷新开销即行数最少。所以行是5,列是6。r、c是字线数。
交叉存储,访问64个字用时:T+T/4*(64-1) = 67T/4
顺序存储,64T
某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存 储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH,则读取 x 需要的存储周期数是
低位交叉存储,一个总线周期(1/4存取周期)读出8位,double为64bit,需要8个总线周期。由x的主存地址得知x存在第三个单体中。读8个需要3周期。
double/long 64bit; int/float 32bit; char/short 16bit;
某计算机使用 4 体交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为 8005,8006,8007,8008,8001,8002,8003,8004,8000则可能发生访存冲突的地址对是()
A 8000,8004
B 8002,8007
C 8001,8008
D 8004,8008
D
画图,
0 1 2 3
4 5 6 7
8 9 10 11
一个存取周期内(4个总线周期内),一个存储体不能访问两次