存储器是计算机系统五大部件之一。
一、存储系统层次结构
哈弗结构
:数据和指令分别存放
程序局部性原理:
时间局部性
:最近被访问的信息
很可能还要被访问
(一个被访问的存储单元很可能再次被访问,循环程序结构具有时间局部性)
空间局部性
:最近被访问的信息邻近地址的信息
也可能被访问
(顺序程序结构具有空间局部性)
存储器层次:
存储器价格相对较高,必须使用某种策略解决成本和性能之间矛盾。
即利用不同存储器著称多级存储系统
内存
:正在执行程序的指令和数据存储在其中,CPU能直接访问。速度快,容量小,价格高
外存
:为了扩大存储容量,在内存外增加容量更大但速度稍慢的外存。速度低,容量大,价格低
cache(高速缓冲存储器)
:在内存与CPU之间增加速度更高的高速缓冲存储器,用于提升访问速度,以便存取速度和CPU运算速度匹配
主存与内存
:主存包括RAM与ROM,而内存包括主存与cache
注意
:CPU不能直接访问外存储器,外存储器信息必须调入内存后才能由CPU处理
二、存储器分类
主存
被分为:RAM
,ROM
两大类
RAM(随机存取存储器):存储当前运行的程序和数据,并可在程序运行过程中反复更改内容
同时RAM可根据信息储存方法分为SRAM
,DRAM
ROM(只读存储器):存储不变的程序或数据
三、存储器的编址和端模式
存放一个机器字
的存储单元,成为字存储单元
。相应单元地址成为字地址
存放一个机器字节
的存储单元,成为字存储单元
。相应单元地址成为字地址
当一个存储字的字长高于8位,就存在排列顺序问题
大端
:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。即数据从左往右存储。
小端
:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。即数据从右往左存储。
举个例子
:
0x12345678
按大端模式存放时,其所在存储单元最低
字节单元存放的数据是0x12
,最高
字节单元存放的数据是78
。
0x12345678
按小端模式存放时,其所在存储单元最低
字节单元存放的数据是0x78
,最高
字节单元存放的数据是12
。
四、SRAM
基本静态存储元阵列
存储元
:能够表示一位二进制的“0”,“1”两种状态,具有记忆功能的物理器件。
存储单元
:若干存储元构成的存储单元
SRAM
:用锁存器作为存储元,只要直流供电电源一直加在这个记忆电路上,它就无限期地保持记忆的1状态或0状态。如果电源断点,则存储的数据(1或0)就会丢失
存储方式
:双稳态触发器
,非破坏性读出
,不需要重写操作,读写速度更快
图为基本的静态存储元阵列
任何一个SRAM,都有三组信号线
与外部打交道:
①地址线
:指定存储器容量
,地址线有 n 条,指定存储器的容量是
2
n
2^{n}
2n 个存储单元
②数据线
:指定存储器字长
,数据线有 n 条,则存储器字长是 n 位
③控制线
:指定存储器读写操作
,读写操作不能同时发生
基本SRAM逻辑结构
目前SRAM芯片采用双译码
形式,将地址分为x向,y向两部分,以便组织更大的存储容量。
图为32K×8
位的SRAM逻辑结构图。
因为存储容量是32K
,所以需要
2
10
∗
2
5
2^{10}*2^{5}
210∗25共15
条地址线
地址线
一共有15条,其中x方向8条,经行译码输出
2
8
=
256
2^{8}=256
28=256行,y方向7条,经列译码输出
2
7
=
128
2^{7}=128
27=128列。
双向数据线
有8条,所以字长为8位
存储阵列为三维结构,即256行×128列×8位
五、存储器容量的扩充
当单个存储器的芯片容量不能满足系统要求,需要把多片存储器芯片组合起来成为更大容量的存储器
所需芯片数 d=设计要求的存储器容量/已知芯片存储容量
位扩展
位扩展
:是指增加存储字长
,类似于并联
字扩展
字扩展
:这种方式仅仅增加了存储单元数
,各单元位数不变。类似于串联
字位扩展
字位扩展
:即加长存储单元的数量又增加各单元的位数,字位同时扩展的时候,先
进行位扩展,再
进行字扩展。
计算芯片地址空间
上图所示,地址空间的编码是根据地址线的个数确定的
,地址线有n条,二进制位有n位,对于16K×8
的芯片,编码地址从A0-A13
,扩展后,地址线有17
条,故编码地址扩展3
位,从A14-A16
,而地址编码以16进制形式存储,每四个二进制位表示一个地址,不足四位的,高位补0
。
六、DRAM
DRAM
:动态随机存取存储器简化了每个存储元的结构,使用栅极电容
存储信息,存储密度高,电路复杂,通常用作计算机主存储器。
存储方式
:如果存储二进制“1”,电容上方会存储电荷
,而读出“1”时,电容需要释放掉
,栅极电容信息是被破坏的。所以读出后需要进行重写
操作
刷新
:电容存储的电荷过一段时间会消失,导致存储的二进制信息会存在误差,电荷只能维持2ms,所以2ms
内必须要刷新一次。每次刷新一行存储单元
如何刷新
:硬件支持,读出一行的信息重新写入,占用一个读/写周期
刷新方式
:
地址线复用技术
:地址线数量减半,芯片引脚更少
例子
:现有1M×4
位的DRAM芯片,存储容量为1M字,共需要20
位地址线。DRAM运用了地址复用技术,此芯片地址引脚数量为10
位,先传送行地址码A0-A9
,然后传送列地址码A10-A19
七、对比
八、多模块交叉存储器
基本思想是在不提高存储器速率,不扩展数据位数前提下,通过存储芯片的交叉组织,提高CPU单位时间内访问的数据量
,解决快速CPU与慢速主存之间的速度差异
高位多体交叉存储器
数据组织特点
:相邻地址的数据处于统一存储体,多模块串行,性能无提升
低位多体交叉存储器
数据组织特点
:相邻地址处于不同存储体,多模块并行,性能提升,需要地址寄存器
性能分析
m的最小值
m
m
i
n
=
T
/
t
m_{min}=T/t
mmin=T/t称为交叉存取度,其模块数必须大于或等于
m
m
i
n
m_{min}
mmin,以保证启动模块后经过mt时间再次启动该模块时,上次存取操作已经完成。
九、cache存储器
cache功能
:缓解快速CPU与慢速主存的速度差异
理论基础
:局部性原理
CPU与cache之间的数据交换是以字
为单位
cache与主存之间的数据交换是以块
为单位
工作原理
:CPU读取内存中一个字时,便发出此字的内存地址到cache和主存,此时cache判断此字是否在cache中,若是,则cache命中
,立即送给CPU,否则cache缺失
cache命中率
:设
N
c
N_{c}
Nc表示cache完成的存取总次数,
N
m
N_{m}
Nm表示主存完成存取的总次数,
h
h
h定义命中率
访问效率
:
e
=
t
c
/
t
a
e=t_{c}/t_{a}
e=tc/ta
例子
:
CPU执行一段程序,cache完成存取次数为1900次,主存完成存取次数为100次,已知cache存取周期为50ns,主存存取周期为250ns,求(cache/主存系统)的效率和平均访问时间。
cache的结构与工作所需部件
Cache每行包括四部分
Tag
:从CPU访问主存的地址中剥离得到
Data
:是与主存交换的数据块
Valid
:表示Cache
中数据有效
Dirty
:表示主存
中数据是最新
属于协助Cache工作所需的部件或功能是:
相联存储器
,调度替换算法
,脏位和有效位比较电路
,标记比较电路
相联存储器
作用
:
为了实现快速的查找,就需要用到相联存储器。
解决的问题
:
CPU是根据数据在主存的中的地址来访问主存的,如果用主存的全部地址来查找,那和直接访问主存查找没什么区别,没提高速度,所以只采用一部分地址(即主存地址的部分内容作为查找依据)。
工作原理
:
从地址中剥离出Key
以Key为关键字
全局硬件并发比较
存储体存放有效位,标记,数据等信息
符合寄存器存放Cache命中行信息
根据符合寄存器的信息取出命令行数据
注意
:
相联存储器是一种按内容访问的存储器,内容是指从主存中分离出的标记(Tag)
相联存储器按关键字实现快速查找
,同时对访问内容进行并行比较
主存与cache的地址映射
如何将主存信息定位在cache中,如何将主存地址变换为cache地址,为了把主存块放到cache中
,必须应用某种方法把主存地址定位到cache中,称为地址映射
。
地址映射三种方式:全相联
,直接
,组相联
1、全相联映射方式:空位随意放
cache数据块大小成为行
,主存数据块大小称为块
。行与块等长
2、直接映射:对号入座
cache的行号
i
i
i和主存的块号
j
j
j有如下关系,
m
m
m 为cache中总行数
i
i
i=
j
j
j mod
m
m
m
3、组相联映射:按号分组,组内随意放
4、对比与例题
例题
:一个组相联cache由64行组成,每组4行。主存储器包含4K个块,每块128个字。请表示内存地址的格式。
十、替换算法
程序运行一段时间后,Cache存储空间会被占满,当再有新数据要调入时,就需要通过某种机制决定替换对象。
目的
:提高Cache命中率
先进先出 FIFO
红字
为计数器
当cache满了之后替换最先进入的
最不经常使用算法 LFU(Frequently)
使用=命中,命中一次+1
,新进入的都是0
,最终数值最小的被替换
如果使用次数都为0,可配合FIFO,先进先出,将其替换
近期最少使用算法 LRU(Recently)
每当有新块数据调用时,对cache原有数据而言,
没被使用,计数值都会+1
。新调入或命中数据为0
,最终数值最大的被替换
十一、虚拟存储器
计算机理论上不可能执行比主存空间大的程序。
虚拟存储器并不是一个买来的部件,而是一个逻辑模型
功能
:用户给一个地址,叫做虚地址
或逻辑地址
,虚拟存储器要给出该地址相应的数据
实现
:由辅助硬件将虚地址映射到主存当中某个单元,主存单元地址称为实地址或物理地址
位置
:处于主存-辅存存储层次
作用
:解决主存容量不足的问题,为程序设计者提供比主存空间大的编程空间
因此引入虚拟存储器
主存与辅存交换的信息单位分类:页式虚拟存储器
,段式虚拟存储器
,段页式虚拟存储器
问题:
1CPU访问存储系统的地址属性?
采用MMU
:管理虚拟存储器合物理存储器
如何判断CPU要访问的信息是否在主存中?
采用页表
来判断CPU要访问的内容是否在主存
、并与MMU配合实现逻辑地址与物理地址的转换,页表放入主存中
CPU给一个虚拟地址访问,查页表,如果得到CPU访问信息所在的页在主存种,那就实现虚拟地址到物理地址的转换,如果CPU要访问的信息在辅存或磁盘中,需要调用页面调度程序,将页从磁盘调入到主存种
虚拟存储器地址划分(页式虚拟存储器)
虚拟空间与主存空间都划分成同样大小的页,主存的页称为实页
,虚拟的页称为虚页
虚存地址划分如下:
逻辑地址与物理地址转换
例子
:
注意
: