您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

计算机组成原理学习笔记之《唐书》-第四章-存储器

						机组学习笔记(四)-存储器

4.1.1 存储器的分类
4.1.2存储器的层次结构
4.2主存储器
4.2.1主存储器概述
主存的基本组成主存的基本组成
主存和CPU的联系
主存和CPU的练系
译码器、驱动器和读写电路制作在存储芯片中,MAR、MDR制作在CPU中,二者由总线连接。

而主存中的存储单元是如何分配的呢?
主存中的地址分配
主存中的地址分配
IBM 370机为32位,则其为4字节机器,且其规定4字节为1字。
如图a,每一个小矩阵中包含一个字节,每一行含4个字节,即一个字。如果按字节寻址(即寻找字节的地址),那每一个小矩阵都有独立的一个地址(即方格中的数字)。如果按字寻址,那显然不能给按0,1,2,3给字地址编号,因为存储的最小值是字节,所以我们就应该把该字所包含的字节中的高位的地址赋给他。如第一行中的0,第二行中的4。如果已找到4,要继续寻址,那如何区分其包含的更小的字节地址呢。为方便,选择81,83。二进制转换,81=10100012,83=10100112。可以发现,在4字节机器中,一个字地址所包含的字节地址仅有后2位不同,所以仅需由后两位区分。

4.2.2半导体存储芯片简介

1.存储芯片的基本结构
存储芯片的基本结构
芯片的容量由其地址线和数据线共同决定。地址线决定了存储单元的数量,数据线决定了每一个存储单元所包含的存储元。例如地址线10根,数据线4根,则其有210 =1024≈1K个存储单元,其数据线可传输4位数据,每个存储单元有4个存储元,可存储4位,总容量为1k×4位=4K位。再如地址线位14根,数据线位1根,则其有214=16,384≈16K个存储单元,每一个存储单元可存储1位,所以总容量就是16k×1=16K位。
片选线的是选择存储芯片的。因为通常为优化结构,半导体存储器会由多个芯片组成,所以要通过片选线选择使用哪个芯片。
我们可以把32片16K×1位的芯片组合成64K×8位的芯片,如图
64K×8位
每8片为1组,组成一个大芯片,则为16K×8位,4个这样的大芯片排列起来,则为64K×8位。片选器来选择由哪个芯片工作。

2.芯片的译码驱动方式
半导体存储芯片的译码驱动方式有两种:线选法和重合法。
16×8位线选法结构
线选法
每个存储单元仅由一根地址选择线(字选择线)直接控制。当地址线为1111时选中第15根字线,再由读写电路把8位数据写入。
1K×1位重合法
重合法
其有10根地址线,为使其能表示更多地址,我们把它分为X和Y各5根,则译码器可输出32×32个信号,这样便可选择矩阵中任意一个存储单元。上面这张图表示的是1K×1位的芯片,若要构成1K×1字节芯片,则需要8片该芯片。

线选法与重合法比较。
上述线选法可以看作是一个16×1的矩阵,而重合法则是一个32×32矩阵。若要使用线选法达到重合法的数据容量,则需要一个1024×1的矩阵,其结构严重失调。但因其结构简单,适用于较小规模电路。

4.2.3随机存取存储器
随机存取存储器按照存储信息的原理不同,可分为静态RAM和动态RAM两大类。
1.静态RAM(Static RAM,SRAM)
(1)SRAM基本电路组成
SRAM基本电路组成

SRAM基本电路组成

图中M1~M4构成了一个交叉耦合反相器(即两个反相器互为输出输入),可保存1位数据。
图缘唐书,有疑问
唐书图
先介绍图中各器件,T1-T6称为其基本单元电路。T1-T4对应上上图中M1-M4,构成锁存器,其中A与A’反相。图中T5、T6为行选择器,与行译码器输出相连,T7、T8与列选择器,与列译码器输出相连,当且仅当T5-T8同时工作时,才可进行读写操作。读写放大器由三态使能反相器构成,当读选择或写选择激活时才工作,由DIN或DOUT进行数据传输。
当其进行读操作时,T5-T8工作,数据由位线A传输至读出放大器,而位线A’则传输A的反相,直至第一个写放大器(反相器),被反相为A,依然输出至读出放大器。
写操作类似。

下面以Intel2114芯片为例详细说明。
Intel2114芯片外特性示意图
Intel2114外特性示意图
显然可以从图上看出其有10根地址线,4根数据线,可以算得其能储存210×4=4K数据。由选线法,我们会得到一个极其庞大的电路,这显然不是我们想要的,那如何由重合法实现呢?重合法要求存储中心尽量为一个方阵,观察我们的数据容量:210×4=26×26=64×64。可以考虑制成64×64的方阵,6根地址线对应数据26=64,余下4根地址线对应24=16,注意到16×4=64,可以考虑每个列地址都可控制四组列。这样我们就找到了布线方法。
这是2114的矩阵排布。
2114RAM矩阵
64行由6个行信号控制,64列被分为4组。如输入列地址1111,则列译码器输出15并控制15列、31列、47列、63列T7、T8的晶体管工作,继续行地址输入111111,行地址译码器输出63并控制63的T5、T6晶体管工作,这样取交集我们就控制了(63,15)(63,31)(63,47)(63,63)4个矩阵工作。此时4个读写电路再同时向这四个矩阵进行读出或写入操作。注意,4个读写电路可以读出或写入不同的值,但必须同时进行读出或写入操作。

2.动态RAM(Dynamic RAM,DRAM)
(1)动态RAM的基本单元电路
DRAM基本单元电路分为三管式和单管式两种,均由电容储存电荷的方式来寄存信息。DRAM的刷新,电容上的电荷只能保存1-2ms,即使电源不断电,其电容也会消失,导致信息丢失,因此要定时为其刷新状态。
三管式DRAM
三管DRAM
显然,图中有T1-T4四个晶体管,但却被称为三管DRAM。这是因为存储矩阵中,每一列共用一个T4,T4起到的作用仅仅是给T2的源极一个VDD,T4的栅极一直保持有预充电信号,故可以认为他是不变的,为节省材料,一列共用一个T4。此时T2源极为VDD,若读选择线达到高电平,则T1源极与T2漏极连通,达到VDD,此时观察储存信息的Cg,若Cg存有足够多能打开T1的电容,则T2、T1连接T1漏极,接地,读数据线上返回低电平,故Cg的"1"对应输出"0",输出时要反相。若写选择线连接高电平,T3打开,Cg充放电则与写数据线同步。
为提高集成度,可取点T1,将T2、T3合并,得到如下图所示的单管式DRAM。
单管式DRAM

读操作时,字线为高电平,T打开,数据线信号与Cg保存数据相同,但读出操作为一次破坏性的,需要重新写入。
写操作时,字线为高电平,T打开,Cg充放电与数据线上电平相同。
三管DRAM实例
三管DRAM实例
如图是一个1K×1位的DRAM,每一个存储元(小方格)都是一个三管是DRAM基本单元电路,每列配置一个刷新放大器和一根读出预充电线(图中未画出),10根地址线排布成32×32矩阵。其读写方式与一般重合法存储原件稍有不同。
读出时注意上上上图 三管式DRAM,先置以预充电信号,其余部分与一般重合法电路相同。

单管式DRAM实例4116DRAM
如图是一个16K×1位的存储芯片,按理来说应当由14根地址线,但为了减少芯片封装的引脚数,只使用7根地址线。因此,行列信息分两次分别发送,先发送7位行地址到行地址缓存器重,再送7位列地址到列缓存器中。芯片内自带时序电路,收行地址选通!RAS、列地址选通!CSA,写允许信号!WE控制。
16K×1位4116DRAM
上图为存储芯片的128×128存储矩阵,图中行列电路均为基础电路,容易理解。关注中间的读放大器,读放大器可以使其两端的信号反转。不妨使此原件运作起来,当选中63行0列时,若其Cg存有信号"0",则通过都放大器后右端输出"1",所以,DOUT输出1,与存有信号反相。再观察其输入时,假设输入信号为"1"经过读放大器后,其反相为"0",存入Cg为"0",所以显然不用考虑信号错误的问题,体系很自洽。

接下来关注DRAM的刷新问题
刷新的过程实质是把原存信息读取出来,再由刷新放大器形成原信息并重新写入的过程,由电路结构可看出,存储元的输出端与刷新放大器的输入端相接,刷新放大器的输出端又与存储元的输入端相接。一般而言,2ms内必须对所以基本单元电路进行一次刷新,2ms被称为刷新周期。刷新分为集中刷新,分散刷新和异步刷新三种。
(1)集中刷新
集中刷新
集中刷新的一个刷新周期内,要对所有存储单元逐一进行刷新,同时会暂停读写操作。例如对128×128芯片进行刷新,若存取周期为0.5μs,刷新周期为2ms,则对128行进行集中刷新要需要64μs(128个读取周期,刷新的本质时再读再写)其余1946μs(3872个读取周期)用于正常读写。而这64μs被称为死区。
(2)分散刷新
分散刷新
分散刷新时把刷新周期分散到每个存取周期,每个存取周期,前半段用于正常读写,后半段用于刷新,这样读写周期为0.5μs时存取周期则为1μs。仍以128×128为例,每隔128μs会刷新一遍所有存储单元,这远低于要求的2ms,并且其不存在死区。但缺陷是当存取周期较长时,其遍历所有存储单元时间长,整个系统速度变慢。
(3)异步刷新
异步刷新
异步刷新是前两种的结合方式。为保证刷新周期不占用太多时间,取刷新间隔最大15.6μs,(2000μs÷128≈15.6μs)15.6μs刷新一行,这样每行的刷新周期仍为0.5μs,对于某一行而已其死区仅为0.5μs,其刷新间隔为2ms。结合了集中刷新的思想,也优化分散刷新的模式,缩短了存取周期(分散刷新中存取周期=读写周期+刷新周期)加快了系统运行速度。同时,可以把刷新周期放到CPU的译码阶段,这个阶段CPU不访问主存。这样整体提高了系统效率。

DRAM与SRAM比较
优点
①由于DRAM的基本单元电路仅为1个晶体管,而SRAM为6-8个,所以DRAM的集成度高,造价便宜,功耗小。
②同时,由于DRAM的选址方式,其所需要的地址引脚较少,封装尺寸较小。
缺点
①由于其使用电容,因此其访问速度要低于SRAM
②由于其需要刷新,故还需要布置再生电路。所以在小规模电路中一般使用SRAM。

4.2.4只读存储器
原始ROM仅能读,内部信息在出厂时就已经被厂家写入。但随着用户需求,出现了PROM,EPROM,EEPROM等可读写的ROM。
1.掩膜ROM
1K×1位的MOS管掩膜ROM
在这里插入图片描述

此为第一代ROM,体现了能省则省的思想。注意观察其每个行列交界处,部分有MOS管而部分无,有MOS管的选中时输出0,经读放大器取反后输出1。无MOS则固定输出0。且所有输出共用一个读放大器,省钱行家。
2.PROM
PROM

PROM基本单元
PROM基本单元输出端与一条镍铬合金薄膜相连,当用户想存储0时通大电流将熔丝烧断,当用户想存储1时则不通大电流。显然,这种ROM熔丝的熔断不可逆,故只能实现一次性编程。在这里插入图片描述
上图为2716型EPROM,若在D极接上正电压,则会形成一个浮动栅,阻挡源S与漏D之间的连通,则此时存储0,反之不加正电压,则可连通。皆根据用户需求决定。使用紫外线照射,可以驱散浮动栅,重新编程。
在这里插入图片描述
3.EEPROM
是在EPROM基础上可以用电擦除重写。
4.Flash Memory
闪存。更便宜更高效的PROM。

4.2.5存储器与CPU的连接
1.存储容量的扩展
(1)位扩展
在这里插入图片描述
在这里插入图片描述

(2)字扩展
在这里插入图片描述
(3)字、位扩展
在这里插入图片描述
2.存储器与CPU连接
(1)地址线的连接
(2)数据线的连接
(3)读写命令的连接
(4)片选线的连接
(5)合理选择存储芯片
MREQ

4.2.6存储器的校验
1.汉明码的组成
2.汉明码的纠错过程

4.2.7提高访存的措施

4.3高速缓冲存储器
4.3.1概述
1.问题的提出

2.Cashe工作原理
Cashe与主存空间的基本结构
在这里插入图片描述
由前所学,主存有2n个字,每个地址有唯一的n位地址。为与Cashe形成映射,将他们俩切分为字块,每个字块内含若干个字,且二者子块大小相同(含有相同的字)。不过主存的地址任然由n位构成,现在称为块地址,这n位又分为高位和低位,(如上图)高位是主存块号,低位时块内地址,m位主存块号把主存分为2m块,低位的b位块内地址,是在主存块号相同时用以细分字地址的地址。至于为什么高位是块号,低位时块内地址,留给读者思考。同样的,把Cashe的地址分为块号和块内地址。但是显然M>>C,所有要在Cashe前补充一个标记,用以对比主存到Cashe的映射(4.2.3详解)
关于Cashe命中率计算详见唐书P111(后期补充)
那如何提高Cashe命中率?
显然可以给Cashe扩容,容量越大,装载的有效数据便多,命中率自然而然上升。但需要注意,并不是容量越大越好,容量大,成本升高(不如全Cashe?)并且容量过大之后,命中率随着Cashe提升而提升的提升率变低。
块长与命中率的关系更为复杂,它取决于程序的局部特性。当块由小增大时,由于局部性原理其命中率会提升。局部性原理指出,在被调用的字附近,其有效数据的概率会偏大。所以块增大的初期,其命中率会提升。在后期,其命中率很可能下降,这是因为块较大时,其装入的有效数据少于被其替换掉的块里的有效数据。同时,由于块长变长,块数减少,很有可能数据刚被装入就被替换掉。总之,这一个很复杂的课题,往往人们会根据经验决定块长。
Cashe基本结构
Cashe基本结构
Cashe逻辑上处于主存与CPU之间,其由存储体,地址映射变换机构,Cashe替换机构等模块组成。
(1)Cashe存储体
上已述,Cashe主要以块为存储单位,且为加速与Cashe调动,主存大多采用多体结构,且Cashe访存优先级最高。
(2)地址变换机构(4.3.2)
地址变换机构负责把主存送来的主存地址映射(函数思想)变换成Cashe地址。而不同块中低位地址都是同一套,区别在于高位地址,所以主要用于映射高位地址。
(3)替换机构(4.3.3)
当Cashe已存满时,再接收到来自主存的信息,就必须由替换机构根据一定的替换算法来操作。
注意Cashe对于用户时透明的(即用户无法得知其信息)所以Cashe与主存之间的操作全靠机器硬件完成。
(4)Cashe的读写操作
Cashe读写
流程简单易懂,主要介绍两种Cashe读写方法。
①写直达法(Write-through)亦可存直达法(Store-through)。因为其写操作的同时也会对主存进行写操作,保证主存与Cashe的数据一致。
②写回发(Write-through)亦称拷回法(Copy-back),即写操作时只把数据写入Cashe而不写入主存,仅仅在Cashe中数据被替换时才将其写入主存。因此,为了识别其是否与主存一致,需要添加一个标识。
当与主存一致时,标识为“清”,不一致时为“浊”。显然,写操作时,CPU只写入Cashe,标识为浊,当CPU向此Cashe块写入相同数据时,仅需要把标识改为“清”,同时与主存同步即可,下一次再写入相同数据,不需要访问主存。当CPU向此Cashe块写入不同数据时,此时发生替换,块内原有的数据要向主存写入,新数据替换原有数据,标识置为浊。读操作时,从主存写入的数据为发生变化,故标识为“清”,此时若发生替换,如CPU向该块写入新数据,块标识变化,对应的主存地址变化,不需要与原主存地址对应,“清”发挥作用,之后的变化参考写操作。
对于多个处理器的系统,他们各自有Cashe,但共享相同的主存,若用写直达法,则修改各自的Cashe时,会修改相应的主存,但与该主存对应的其他处理器的Cashe则会变无效。显然,这是一个当今仍在研究的课题,如何保证Cashe的一致性。
4.Cashe的改进
(1)单一缓存和二级缓存
介于处理器和内存二者之间的缓存有两个天然冲突的性能指标:速度和容积。如果只向处理器看齐而追求速度,则必然要靠减少容积来换取访问时间;如果只向内存看齐而追求容积,则必然以增加处理器的访问时间为牺牲。这种矛盾促使人们考虑使用多级缓存。
单一缓存是指CPU和主存逻辑之间只设置一个Cashe,但随着技术进步,芯片集成度的提高,这个Cashe可以封装到CPU内部,称为片内Cashe。而且为提高片内Cashe与CPU的读写速度,二者直接相连,不占用系统总线。当然片内Cashe容量较小,这就导致CPU在访问较大数据量时仍会通过主存,这就需要片外Cashe。片外Cashe加装在片内Cashe外部。
图源网络
片外Cashe采用速度更快的SRAM且其与片内Cashe不占用系统总线。
随着发展,现在片外Cashe也集装到CPU中。还发展出了更多级Cashe。
(2)统一Cashe和分立Cashe
统一Cashe是把指令和数据放在同一个Cashe的结构。分立Cashe是把Cashe分成两个独立的指令Cashe和数据Cashe。
两个结构的选择主要考虑以下两点。
其一,他和主存结构有关,主存的存储方案如果是统一,则Cashe与其保持统一为统一,反之为分立。
其二,若是机器采用超前或流水线式控制,一般采用分立Cashe。
所谓超前,则是当前指令还未处理完,就取出下一条指令,称为指令预取。而流水线则是多条指令共同执行。显然,这两种结构都需要指令和数据的同时读取,若在统一Cashe中,则会争用统一Cashe。分立Cashe则可以很好解决这一问题。
如图是两个分立Cashe的结构
在这里插入图片描述

4.3.2Cashe-主存地址映射
这一节其实本质是数学映射问题。
1.直接映射
直接映射
主存字块数量要比Cashe字块多得多,我们不妨把主存的块再分组,每一组含有与Cashe字块数目相同的块数。这样就构成一个映射,每一组的第n个块与Cashe的第n个块对应,Cashe到主存的一对多映射,主存到Cashe的多对一映射。
数学表达式为在这里插入图片描述
i 为Cashe块号,j为主存块号,C为Cashe块数量。
现在来看看主存地址的具体含义,由图可见,主存地址的高位(原先被称为用来判别块的地址)被再次分为高低位,低位是Cashe块地址,高位时主存字块地址,因为Cashe块数量小于主存块数量,所以Cashe块地址为低位(想想为什么)。当地址传入Cashe块时,首先由中位的c位地址判断属于哪个块,再由高位的t位地址判断该Cashe是否与该主存块构成映射,并且其中还有一位有效位“1”判断其中数据是否有效(刚开机时,即使构成映射,数据也无效)。若构成映射且数据有效,则称”命中“,若有一者不满足则“未命中”,需要从主存读取数据。
这种方法不够灵活,当访问某些块较为频繁时,会有部分块的空余,空间利用率不高,替换频繁,命中率也会下降。但对于理解主存地址的具体含义较为方便。
2.全相联映射。
在这里插入图片描述
全相联映射保证了主存中每一个块都能与Cashe中每一个块发生对应(多对多,全对全)。直接映射中,主存地址高位被划分为主存标记地址和Cashe块地址,再全相联映射中,我们就不需要把主存高位地址进行划分,m位高位全分配为主存的字块标记。由此看来,Cashe中的标记其实是在在字块数目不足导致地址无法完全对应,地址不足的情况下,做出的一种巧妙的地址扩展机制。这样访问Cashe时(读写操作均要访问Cashe)就要把主存地址与Cashe的标记全对比一遍,才能确定所需主存内容是否存在Cashe内。这种映射通常采用“按内容寻址”的相连存储器(见附录4A)来完成。
可见,这种方式需要的逻辑电路很多,成本较高,实际运用中,还要采用各自措施来减少地址的比较次数。
3.组相连映射
组相连映射是前两种的折中考虑。把Cashe分为Q组每组R块。同样也有如下数学关系在这里插入图片描述
i 为缓存的组号(对应直接相连的标记)j为主存的块号。
在这里插入图片描述
如图主存的每一个组中的第一个块都可存入Cashe的第一个组中(相承直接相连,若组为2c,组内块数为1则为直接相连),但与直接相连不同的是,Cashe的每一个组有两个块,故主存可选择存入其中的某个块(相承全相联,若组为1,组内块数为2c则为全相连)。且主存地址的高m位被分成了s,q高低位两部分,s为主存字块标记,决定了选择哪一个字块,组地址类似于直接相连的块地址。

4.3.3替换策略
替换策略则是算法的表达,按照不同情况选取算法。
1,先进先出(First-In-First-Out,FIFO)算法
即队列(Queue),这种算法逻辑简单,不需要记录各字块的使用情况,容易实现,开销小,但没有根据局部性原理,故不能提高Cashe命中率,较大的循环程序其表现很差。
2.近期最少 使用(Least-Recently-User,LRU)算法
LRU算法很好的根据局部性原则,替换出近期使用最少的字块。他要实时记录各字块的使用情况,但如果把使用情况全记录,开销很大。所以我们一般使用LRU的简化版,只记录每个字块的最近一次使用时间。LRU算法的平均命中率要高于FIFO算法。
3.随机法
随机替换,也没有根据局部性原理,也不能提高Cashe命中率。


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进