Ⅰ.概述
存储器是计算机系统中的记忆设备,用来存放程序和数据
1. 分类
- 按存储介质分类
- 半导体存储器:TTL和MOS,TTL半导体存储器集成度低、功耗高,但速度较快;MOS半导体存储器集成度高、功耗低,因而现代计算机多采用MOS型半导体存储器
- 磁表面存储器:(磁盘磁带)金属或塑料基体的表面涂上一层磁性材料作为记录介质,工作时磁层随载磁体高速运转,用磁头在磁层上进行读/写操作
- 磁芯存储器:由硬磁材料做成的环状元件,在磁芯中穿有驱动线和读出线,以进行读/写操作
- 光盘存储器:应用激光在记录介质(磁光材料)上进行读/写的存储器,具有非易失性的特点
- 按存取方式分类
- 随机存储器(RAM):可读/可写存储器,存储器的任何一个存储单元都可以随机存取,存取时间与存储单元的物理位置无关。计算机的主存都采用这种随机存储器;程序执行过程中可读/可写
- 只读存储器(ROM):能对其存储的内容读出,不能对其重新写入;程序执行过程中只读
- 顺序存取存储器(如磁带)
- 直接存取存储器(如磁盘)
按在计算机中的作用分类
2. 存储器的层次结构
- 缓存-主存层次:主要解决CPU和主存速度不一致问题;缓存较之主存速度高,容量小,因此可以通过主存不断往缓存调入将使用的内容,进而使CPU直接快速从缓存获取数据,达到解决CPU和主存速度不一致的问题的目的
- 主存-辅存层次:主要解决存储系统的容量问题;辅存速度较主存低,又不能直接与CPU交换数据,但容量比主存大。当CPU用到平时不常用的数据时,可由辅存将数据调入主存,以供CPU直接访问
- 上述两个层次,一个解决了速度与成本的矛盾,一个解决了容量与速度的矛盾;综合两个层次应用到现代计算机,可以有效解决速度、容量、成本三者间的矛盾
Ⅱ. 主存储器(✈)
用于存放正在执行的程序和数据,CPU可直接进行随机读写,访问速度较高
1. 概述
主存的技术指标:
当控制电路发出读写指令时,由地址总线给出信号并通过译码器、驱动器转换为目的单元地址;读入时经过读出放大器将被选中单元的存储字送到MDR;写入时,MDR中的数据必须经过写入电路才能写入到选中单元
- 例中可知每8字节占用1字,那么字长为16位时,占用2字,存储器容量即为16MB/2 = 8MW(word);同理,字长32位时,占用4字,存储器容量位16MB/4 = 4MW(word)
2. 半导体存储芯片简介
半导体存储芯片的基本结构
- CS表示[芯片选择],CE表示[芯片使能]
例题
解:由于A芯片为(地址容量16K×数据位数1位)的芯片,要求组成为(64K×8位)的芯片;首先每一片A芯片只能存放1位数据,因而需要8片芯片组合,使其成为可以存放8位数据的芯片C(16K×8位),为了使其同时可以保存64K数据,应将4组C芯片组合,从而成为符合题意的B芯片。值得注意的是,我们共进行了两次组合,第一次组合是使芯片可以保存8位数据,8片芯片的每一片相同位置保存一个一位数据,使其可以同时保存8位;第二次组合是使芯片的地址容量达到64K,因而将上一次的组合芯片C视为一片完整芯片(16K×8位),同时使用4片即可达到64K的容量
半导体存储芯片的译码驱动方式
- 线选法通过一片译码器传入地址信号,容量与译码器型号有关,适用在容量不大时
- 重合法通过两片译码器,一片转化为行地址,一片转化为列地址,二者组成与门使得只有当两片译码器同时选中时,对应地址才会被选中,提升了存储容量
3. 随机存取存储器
①静态RAM(SRAM)
- 触发器T1~T4用于存放‘0’和‘1’
- T5和T6为行开关,T7~T8是列开关(对应重合法)
- T1~T6共同构成一个基本单元电路
②动态RAM(DRAM)
- 通过电容存储0,1
- 读选择线有效,T2导通;写选择线有效,T3导通
- 预充电信号使得T4导通,从而令Cg电容充电
通过行、列地址译码器,读写选择线选择操作类型与选地址操作,行地址译码器对应行与列地址译码器对应列的交叉单元即为被选中单元
- 选择地址时,分2次从A'1~A'6传入,第1次为行地址,传入到行地址缓存器;第2次为列地址,传入到列地址缓存器
- 上方的(时序与控制)控制器控制了整个芯片的信号是行选通信号、列选通信号还是读/写控制信号
动态RAM刷新
- 集中刷新
- 在规定的一个刷新周期内,先作“正事”(读/写,维持),随后剩下的时间只用作刷新,所有读/写操作必须停止
- 以128×128矩阵为例,假设一个存取周期为0.5us,每个刷新时间间隔2ms预留128个存取周期作刷新,那么“死区”为0.5 us×128(刷新周期) = 64 us;“死时间率”为128(刷新周期数)/4000(一个刷新周期内所含存取周期总数)×100%
- 分散刷新
- 通过将刷新操作穿插在每一个存取周期中,使得存取周期增加至原来的2倍,即一个读/写周期+一个刷新周期;但这会导致过度刷新(无死区)
- 异步刷新(集中刷新与分散刷新相结合)
- 在规定的一个刷新周期内,要将n行全部刷新至少一次,那么最少需要一个刷新周期/n的时间刷新一行即可;于是乎,将一个刷新周期均分为n个小周期,在每个小周期的任一位置穿插一个刷新周期来刷新一行,那么n个小周期(即一个刷新周期)即可刷新n行,达到目的;其“死区”为一个存取周期的占时
③动态RAM和静态RAM的比较
- 综合比较DRAM与SRAM的各种参数性质,人们更多将DRAM作为主存,SRAM作为辅存使用
4. 只读存储器
① MROM(掩膜ROM)
- 行列选择线交叉处有MOS管——1
- 行列选择线交叉处无MOS管——0
② PROM(一次性可编程只读存储器)
- 熔丝未熔断——1
- 熔丝熔断———0
③ EPROM(重复可编程只读存储器)
- D端加正电压——形成浮动栅——S与D不导通——0
- D端不加正电压—不形成浮动栅—S与D导通———1
- 通过紫外线进行信息的擦除
④ EEPROM(电可擦写只读存储器)
⑤ Flash Memory(闪速型存储器)
5. 存储器与CPU的连接(✈)
1. 存储器容量的扩展
- 位扩展
- 以增加存储字字长
- 字扩展
- 以增加存储字的数量
- 字、位扩展
- 以增加存储器总的容量
- 用8片1K×4位的存储芯片组成4K×8位的存储器;先将8片芯片分为每组8/4 = 2片芯片的4/1 = 4组,即2片芯片可以组成1K×8位的子芯片,再将这4组子芯片组成题意所需的存储器。其中,4K的地址线是由1K的芯片合并成的,那么4K即212,1K即210,那么12-10 = 2根地址线将用于片选,也就是用这两根地址线表示的22 = 4种情况来分配给4片上面提到的1K×8位的子芯片上,从而可以实现“用8片1K×4位的存储芯片组成4K×8位的存储器”的目的
2. 存储器与CPU的连接
- 地址线的连接
- 数据线的连接
- 读/写命令线的连接
- 片选线的连接
- 合理选择存储芯片
- 其他(时序、负载)
例:设CPU有16根地址线、8根数据线,用作为访存控制信号(低电平有效),用作为读/写控制信号(高电平读,低电平写)。现有下列存储芯片:1K×4位RAM、4K×8位RAM、8K×8位RAM,2K×8位ROM、4K×8位ROM、8K×8位ROM以及74138译码器和各种门电路。画出CPU与存储器的连接图,要求如下:①6000H67FFH为系统程序区;6800H6BFFH为用户程序区②合理选用上述存储芯片,说明各选几片
- 解:
- 将十六进制的地址范围转化为二进制:
- 选择芯片类型及规格:系统程序区的芯片因其只需写一次,故选用规格为2K×8位的ROM;用户程序区的芯片没有直接适合大小的,并且需要多次进行更改,故选用两片1K×4位的RAM。
- 分配地址线:对于系统程序区的,从A11开始不发生改变,故A10 ~ A0接2K×8位的地址线;对于用户程序区的,从A10开始不发生改变,故A9 ~ A0接1K×8位的地址线;那么观察未使用到的接口中,A11 ~ A13适合作为芯片的片选信号接到74138译码器的A,B,C对应接口上
- 由于ROM是只读的,因此只与RAM相连接;并且ROM的数据线是单向的,RAM的数据线是双向的
6. 存储器的校验
- 不难看出,在集合内元素个数越少的情况下,检错纠错能力会增加;在上述条件下,单个元素的二进制位数越高,检错能力与纠错能力都会增加
- 编码的最小距离:任意两组合法代码之间二进制位数的最小差异(改变一个二进制合法代码为另一个合法代码最少所需要改变的二进制位数);并且有下式成立:
6.1 汉明码(Hanming Code)
汉明码的概念解释过于冗长,指望此篇笔记掌握汉明码并非明智之举,请读者自行查阅学习汉明码的编码方式
- 汉明码是一种采用奇偶校验的编码方式,并且采用了一种非划分的分组校验(即每一组的元素个数并不相等)
- 在以往的学习中,我们可以知道由2的n次方可以将2n个数表示出来;那么如果根据2i(0≤i<n)进行分组,是否可以将这2n个数分成n组呢?如果这么分组,这些分组有什么特征呢?
- 无疑,这种分组方式有可行之处,并且根据这种分组方式,每一个数在其对应的组内有着特定的规律:
假设n=3,那么将可以表示23=8个数,于是1、3、5、7在第一组P1,2、3、6、7在第二组P2,4、5、6、7在第三组P3;将这些数化为二进制,可以看出P1内的数满足XX1,P2内的数满足X1X,P3内的数满足1XX的规律,我们显然可以发现这并不是偶然;据此,分组已经完成。- 那么由此情况下,汉明码的组成需要多少位检测位呢?
由上文不难看出,既然分成n组,那么检测位k位即需满足len+k+1≤2k,其中len是数据码的位数- 检测位又该放在何位置上呢?
上文指出,检测位的位置,应该是在第2i(0≤i<n)位上- 检测位的取值是什么?
由汉明码采用奇偶检验方式,我们应该将校验位置为符合我们设置的要求的数据
例1:求0101按偶校验配置的汉明码
- 解:由len = 4,故根据len+k+1≤2k,得k = 3;
将校验位穿插入2i(0≤i<k=3)的位置,其中:
C1包含了1,3,5,7,而对应位上已有两位表示1,1的总的个数除校验位已经有偶数个,故C1置0
C2包含了2,3,6,7,有奇数个1,故C2置1
C4包含了4,5,6,7,有偶数个1,故C4置0
因此,0101的汉明码为‘0100101’
练习1:求0011按偶校验配置的汉明码(答案将设置在文末)
练习2:求0011按奇校验配置的汉明码(答案将设置在文末)
6.2 汉明码的纠错过程
- 接收方接受到传输过来的汉明码后,进行与译制汉明码时同样的操作:
①设置纠错位(与校验位相同)
②Pi是由原检测位Ci及其所在小组内‘1’的个数确定的,若为1则代表出错
③若Pi和Pj出错,那么只有Pi和Pj同时拥有的公共位置是出错的,将该位置取反即可完成纠错(该位置更简易的确定方法为由Pk...P2P1确定的进制数)
④得出纠错结果
例2:接收到按偶校验配置的的汉明码为‘0100111’,问原欲传递的信息是什么?
- 解:①知有三个纠错位P1,P2,P4
②P1=0,P2=1,P4=1,故P2和P4出错
③P2和P4出错,那么只有P2和P4拥有的公共位置6(P4P2P1=(110)2=(6)10)即为出错位置,取反后为0(7虽然是P2和P4共有,但并非只有它们拥有,若7出错P1也应该为1但实际并非如此)
④故纠错后,结果应是‘0100101’
练习3:接收到按偶校验配置的的汉明码为‘0101101’,问原欲传递的信息是什么?(答案将设置在文末)
练习答案
- 练习1:0011按偶校验配置的的汉明码为‘1000011’
- 练习2:0011按奇校验配置的的汉明码为‘0101011’
- 练习3:①知有三个纠错位P1,P2,P4
②P1=0,P2=0,P4=1,故P4出错
③P4出错,那么只有P4拥有的公共位置4(P4P2P1=(100)2=(4)10)即为出错位置,取反后为0
④故纠错后,结果应是‘0100101’
由于1,2,4位为校验位,因此只是校验位出错可以不纠错,该举并不影响实际数据的传输
7.提高访存速度的措施
通过以上学习,我们可以给出这些措施以提高访存速度:
采用高速器件
采用层次结构Cache-主存
但是上述方法都受限于价格、容量等因素,于是又提出了一种新的方式:调整主存结构
1.单体多字系统(增加存储器的带宽)
- 受限于工作原理,这种方法只适用于指令和数据在主存内必须是连续存放时
2.多体并行系统
①高位交叉(以高位对多个存储体进行编号)
②低位交叉(以低位对多个存储体进行编号)[在不改变存取周期的前提下,增加存储器的带宽]
高性能存储芯片
①SDRAM(同步DRAM)
- 在系统时钟的控制下进行读出和写入
- CPU无须等待
②RDRAM [主要解决存储器带宽问题]
③带Cache的DRAM [在DRAM的芯片内集成了一个由SRAM组成的Cache,有利于猝发式读取]
Ⅲ. 高速缓冲存储器(Cache)
1. Cache概述
- 前文提到,由于CPU与主存的速度差距不断增大,导致CPU往往会由于主存速度过慢而导致等待的大量时间浪费;为此引入Cache作为二者交流的媒介,充当“中转站”的作用,即先将CPU将会使用到的信息从主存调入Cache中,待CPU使用到这些数据时,可以直接从Cache中读取这些数据而无需等待
Written by Tknight9 ©
Written in 11/29/2020