①存取时间与物理地址无关(随机访问)
②存取时间与物理地址有关(串行访问)
计算机的存储器采用分级方式是为了解决容量、速度、价格三者之间的矛盾
缓存-主存层次:主要解决CPU与主存速度不匹配的问题
主存-辅存层次:主要解决存储系统的容量问题(形成虚拟存储器,容量远大于实际存储单元的个数)
CPU中的MAR和MDR与主存进行地址和数据的交换
即地址码能够指定的最小存储单元
按上图的主存,地址线24根
按字节寻址:
寻址范围:2的24次方=16M
按字寻址:
寻址范围:16M/32/8=4M
问题:
设存储字长为32位,数据12345678H如何存储?
①按字编址
②按字节编址,操作数的存储方式
(1)大端方式
符合人类书写习惯
高位字节地址表示字地址
数据的最高字节存储在最小字节地址位置
读数据时,高位字节在前,低位字节在后
(2)小端方式
符合计算从低位起的规律
低位字节表示字地址
数据的最低字节存储在最小字节地址
读数据时,低位字节在前,高位字节在后
①存储容量
②存储速度
存取时间:启动一次存储器操作到完成该操作所需的全部时间
存取周期:连续两次独立的存储器操作(读或写)所需的最小间隔时间
通常存取周期大于存取时间,存取周期=存取时间+复原时间
③存储器的带宽
单位时间内存储器存取的信息量
提高存储器带宽的方法:
(1)缩短存取周期
(2)增大存储字长
(3)增加存储体
一根字选择线可直接选中一个存储单元的各位,结构简单,但只适用于容量不大的存储芯片
以16×1字节存储芯片为例:
16为2的4次方,也就是4根地址线,4根地址线经过地址译码器后是16根字线
1字节是8位,也就是8根数据线,8根数据线对应8根位线
故最终形成规格为16×8的矩阵,也就是16×8个存储单元
被选单元由X和Y两个方向的地址决定
以1k×1位的存储芯片为例:
以1K×4位的存储器芯片为例:
1K×4位一共4K,所以行列各64条字线,因为一次要取出4位,所以行或者列以4位为一个组合,一共16组,需要16条字线,64+16为80条字线,最终形成64×16的矩阵
①存储原理:触发器工作原理
②特点
(1)信息读出后,仍保持原状态,不需要再生
(2)断电后,原信息丢失
(3)存取速度快,但集成度低,功耗大,一般用于组成高速缓冲存储器(cache)
①存储原理:电容存储电荷的原理存储信息
注:由于电容上的电荷只能维持1~2ms(放电),因此即使电源不掉电,信息也会消失,为此,必须在2ms内对其所有存储单元恢复一次原状态,这个过程称为刷新
②特点
(1)所存储信息需要刷新
(2)集成度高,功耗更低
③常见的动态RAM基本单元电路有三管式和单管式两种
④动态RAM芯片分两次发送地址信息(地址复用),所以相较于一般的存储器,地址线数量减半
例:4M×8位的DRAM芯片,地址引脚和数据引脚总数为:22/2+8=19
⑤动态RAM刷新
(1)何为刷新?
刷新的过程实质上就是将原存信息读出,再经由刷新放大器形成原信息并重新写入的过程
(2)为什么要刷新?
(3)如何刷新?
(4)刷新的方式?
常用的刷新方式有三种:集中刷新、分散刷新、异步刷新
1)集中刷新
在规定的一个刷新周期(2ms)内对全部存储单元集中一段时间进行逐行刷新,刷新时必须停止读写操作(死区)
刷新时间=存储矩阵行数(逐行)×存取周期
刷新间隔:2ms 在集中刷新中就是刷新周期
刷新时间:128×0.5us=64us
注:刷新间隔是指完成两次刷新全部存储单元的时间间隔
优点:读写操作不受刷新操作的影响,因此下头的存取速度比较高
缺点:在集中刷新期间(死区)不能进行读写,而且存储容量越大,死区就越大,这增加了存储管理的困难,显然对于高速高效的计算机系统工作时不利的
2)分散刷新
把刷新操作分散到每个存取周期内进行,在一个存取周期内刷新存储矩阵的一行,所以存取周期=读写操作或保持的时间+刷新时间
刷新间隔:128us=128行×(0.5us+0.5us)
刷新时间:(2ms/128us)×(128us/2)=1ms 被乘数是一次刷新周期内共进行了多少次全体刷新,乘数是每次全体刷新中的刷新时间,也就是存取周期的一半时间
优点:没有死区
缺点:加长了系统的存取周期,降低了整机速度;刷新过于频繁,从而使刷新时间增加。没有充分利用所允许的最大时间间隔(2ms)
3)异步刷新
前两种方式的结合,充分利用了最大刷新间隔时间,把刷新操作平均分配到整个最大刷新间隔时间内进行
故:相邻两行刷新间隔=最大刷新时间间隔÷行数
刷新间隔:2ms
刷新时间:128×0.5us=64us
每隔15.6us刷新一行也就是说以15.6us为周期,进行多次读写操作和一次刷新操作
优点:死区小,刷新占用时间少
缺点:系统结构变复杂
注:如果将刷新安排在指令译码阶段,这个阶段CPU不访问存储器,也就是说存储器不进行读写操作,就不会出现死区,从根本上提高了整机的工作效率
可多次改写,但是读的速度比写快,这是因为写的时候还需要擦除
EPROM是可改写的,但不能作为随机存取存储器
小结:
ROM是非易失性存储器,RAM是易失性存储器,它们都是随机存取存储器
为什么要进行存储器的扩展?
存储芯片的容量有限,其容量或者每个单元的位数常常与实际应用的要求有差距,需要对各种芯片加以级联,实现所需主存
只在位数(与数据线有关)方向扩展,而芯片的字数(与地址线有关)和存储器的字数一致
位扩展的方法:
①将各存储芯片的地址线、片选线和读写线相应地并联起来
②各芯片的数据线单独列出,拼接成要求的数据宽度
只在字数(与地址线有关)方向扩展,而芯片的位数(与数据线有关)和存储器的位数一致
字扩展的方法:
①将选中芯片的低位地址线、读写线、数据线对应并联起来
②用高位地址线译码,将输出接至各芯片的片选端
位和字扩展:在字数和位数方向同时扩展(既增加存储器的字的数量又增加字长)
位和字扩展的方法:
①先进行位扩展,扩展成组,使得组的字长达到要求的字长
②再用组进行字扩展,按照字扩展的方法将字数增加到目标字数
任意两组合法代码之间二进制位数的最少差异
编码的纠错、检错能力与编码的最小距离有关
无错 | 有错 |
---|---|
一种可能 | n+k种可能 |
注:只错一位是大概率事件
汉明码的分组是一中交叉非划分方式
思路:共3位偶校验位,每组有1位校验位
问题1:校验位应该放在哪些位置?
问题2:如何分组?
问题3:如何判断是否出错?
以偶校验为例:
将每个分组的汉明码写出来,然后对每个分组用异或运算进行校验码的检错
红蓝绿代表三个非交叉分组
采用偶校验的汉明码,P4P2P1对应的十进制数就是出错位置,本题是011即第三位出错
(1)判错方式1
绿红相同为3、7,则3、7中有错
绿蓝相同为6、7,则6、7中无错
则3错
注:汉明码中校验位出错不需要纠正,信息位出错需要纠正
(2)判错方式2
1)每组进行异或运算
2)采用偶校验的汉明码,P4P2P1对应的十进制数就是出错位置
(1)几位检测位?k?
2的k次方>=n+k+1
(2)检测位位置
i=2的j次方(j=0,1,2,3…,k-1)
(3)检测位取值?Ci?
与奇偶校验任务有关
1)奇校验:小组中有奇数个1
2)偶校验:小组中有偶数个1
注:汉明码纠错和求检测位取值不会出现在同一个题目,一般来说,求出来的检测位的值都是正确的,不需要纠错,这是两类题型
①缩短存储器的存取周期
②增加存储字长
③增加存储体
程序访问的局部性原理
同一个存储器具有两组独立的端口,每个端口具有独立的MAR、MDR、读写端口和片选端口
当左右两个端口地址不同时,可以并行处理,互不干扰
当左右两个端口地址相同时,发生冲突。根据优先级,设置BUSY=1来延迟优先级的存储器访问
增加存储体的存储字长及MDR位数
增加存储器的带宽,提高访存速度
遇到转移指令、操作数不能连续存放、只需要单字长操作,效率不高
采用单体多字系统提高访存速度办法的前提是,指令和数据在主存内必须是连续存放的,一旦遇到转移指令、或者操作数不能连续存放,这种方法的效果就不明显了
多个存储模块
各存储模块有独立的MAR、MDR、译码和读写电路
高位地址表示体号,低位地址表示体内地址
程序和数据按体内地址顺序存放,一个存储体存满之后,再存下一个
优点:各存储体可并行工作,体内地址连续,便于存储体容量的扩充
高位交叉编址的存储器能够提高访存速度的原因是各个体分别响应不同请求源的请求,实现多体并行
缺点:由于程序和数据按顺序存放,导致某个存储体访问过于频繁,其余存储器空闲
主要应用于存储器容量的扩展
高位交叉编址的特点:
①通过多体并行提高访存速度,有利于存储器容量的扩展
②若采用高位交叉编址,则连续读取n个字所需时间为nT(T为存取周期)
③一个存取周期内能向CPU提供模块存储字长位二进制信息
高位地址表示体内地址,低位地址表示体号
程序连续存放在相邻的存储体中
优点:充分挖掘了总线的每个瞬间(分离式通信),结合流水线技术,有利于增加存储器带宽
注:分离式通信可以提高数据传输率,从而提高存储器带宽,达到提高访存速度的目的
低位交叉编址的特点:在不改变单体的存储周期的前提下,结合流水线技术增加存储器带宽
设n体低位交叉存储器,存取周期为T(一个存取周期读取多个存储体),总线传输周期为τ,为实现流水线方式存取,应满足T=nτ
一个存储体一个字
为保证第二次启动某个体时,则该体上一次存取操作必须已经完成,要求存储体的数量应该大于等于n
低位交叉编址主要用于存储器带宽和访问速度的提高
在一个存取周期内,能向CPU提供n×模块存储字长为二进制信息
①避免CPU空等现象
②CPU和主存(DRAM)的速度差异
CPU不直接访问主存而与高速Cache交换信息,Cache存放CPU近期要用到的程序和数据
程序访问的局部性原理:
①时间局部性:被访问的存储位置将来可能会被多次访问(循环程序)
②空间局部性:被访问的存储单元,其附近的存储单元也将被访问(程序在主存内的顺序存放)
③只要将CPU近期要用到的程序和数据提前从主存送到Cache中,就可以做到CPU在一定时间内只访问Cache,相对的簇聚使得CPU在执行程序时,访存具有相对的局部性
命中率:CPU欲访问的信息在Cache中的比率
(1)命中率与Cache的容量的关系
cache容量越大,命中率越高
(2)命中率与Cache的块长的关系
块长:一般每块可取4~8个字或者一个存取周期内从主存调出的信息块长度
增大块长可将更多有用字存入缓存,可提高命中率
若块长过长,使新装入的有用数据反而少于替换掉的有用数据,会使缓存块数减少,导致少数块刚装入就被覆盖,反而降低命中率
总结:Cache的命中率与Cache的容量与块长有关
Cache由Cache存储体、地址映射变换机构和Cache替换机构三大模块组成
CPU访存发送的是主存地址,即使是访问缓存
①Cache对用户透明,用户编程时所用的地址为主存地址,即将主存块调入Cache的任务全由CPU(硬件)完成
②地址映射变换机构将CPU送来的主存地址转换为Cache地址,地址变换主要是主存的块号和Cache块号的连接
③当Cache中可用的位置被占用或者内容已满时,按照一定的替换算法确定新的主存块调入Cache中
将主存地址映射到缓存中定位称为地址映射,将主存地址变换成缓存地址称为地址变换,当新的主存块需要调入缓存中,而它的可用位置又被占用时,根据替换算法解决调入问题
写操作时既写入Cache又写入主存
写操作时间就是访问主存的时间
读操作不涉及主存的写操作,更新策略比较容易实现
写直达法能随时保证主存和Cache数据始终一致,但增加了访存次数
写操作只把数据写入Cache而不写入主存
当Cache数据被替换出去时才全部一次写回主存,需标志位(区分标记)
写操作时间就是访问Cache的时间,速度快
读操作Cache失效时发生数据替换时,被替换的块需写回主存,增加了Cache的复杂性
注:标志位,也叫脏位,清表示未修改过,浊表示修改过,一共有两个状态,所以只需要一位
单一缓存:CPU和主存之间只设一个缓存
两级缓存:片内缓存和片外缓存
统一缓存:指令和数据都存放在同一缓存内
分立缓存:指令缓存和数据缓存
与主存结构和指令的控制方式有关
超前控制或流水线控制,一般采用分立缓存
根据映射方法的不同,Cache-主存的地址映射可以分为直接映射、全相联映射和组相联映射
有效位用来标记Cache数据块中的数据是否有效。如初始时刻Cache的数据应该是空,此时其中的内容无意义
每个主存块只与一个缓存块相对应,映射关系为:i=jmodC,i为缓存块号,j为主存块号,C为缓存块数
注:由主存容量求出来的是m,由主存地址求出来的是m+b,由cache容量求出来的是c,可以直接通过主存容量和cache容量求出来主存字块标记
两个条件同时满足才能命中:
①标记相同,主存与Cache对应
②有效位为1,Cache中的内容有意义
主存地址高m位为被分为两部分,低c位是Cache的字块地址,高t位(t=m-c)是指主存字块标记,它被记录在建立了对应关系的缓存块的标记中,当缓存接到CPU送来的主存地址后,只需根据中间c位字段(假设为00…01)找到Cache字块1,然后根据字块1的标记是否与主存地址的高t位相符来判断,若符合且有效位为1,表示该Cache块已和主存的某块建立了对应关系,即命中,则可根据b位地址从Cache中取出信息
优点:
①该映射函数实现简单,查找速度快
(1)主存地址的中间c为即为Cache字块地址
(2)使用高t位地址(主存标记)进行比较,决定是否命中
缺点:
①灵活性差(最不灵活)
(1)主存的2的t次方个字块只能对应唯一的Cache字块,即使Cache中别的字块空着也不能占用
主存中的任一块可以映射到缓存中的任一块
主存地址中省去了Cache字块标记,原因如下:
主存字块标记位数增加,使Cache中标记的位数增加,而且访问Cache时主存字块标记需要和Cache的全部标记进行比较,才能判断出所访问主存地址的内容是否已在Cache中,这是因为多个主存块都对应同一个Cache主存块,不知道数据到底放在哪一个Cache中
每个主存块只与一个缓存组相对应,映射关系为:
i=jmodQ i为缓存组号,j为主存块号,Q为缓存组数
以二路组相联为例:Cache共Q组,每组内两块
某一主存块j按模Q映射到缓存的第i组中的任一块,即组间直接映射,组内全相联映射
注:关于块冲突问题:
①直接映射主存中的每一个块只能映像到某一固定的Cache块中,即使Cache中别的存储空间空着也不能占用,当多个块映像到同一个Cache块中,将有一个主存块不能写入,从而使块冲突概率较高
②全相联映射:主存中的任何一个块都可以映像到Cache中的任何一块位置,Cache利用率高,块冲突概率低。但这种方式由于Cache标记太长,所以需要很长的时间才能判断出所需的主存块是否在Cache中,实现起来比较复杂
③组相联映射:两者折中