(1)存储器概述
1,存储器的分类:
TTL电路:TTL集成电路的主要型式为晶体管-晶体管逻辑门,TTL大部分都采用5V电源。
CMOS电路: CMOS电路是电压控制器件,输入电阻极大,对于干扰信号十分敏感,因此不用的输入端不应开路,接到地或者电源上。CMOS电路的优点是噪声容限较宽,静态功耗很小。
TTL和COMS电路比较:
1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。
2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。COMS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。COMS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热,这是正常现象。
3)COMS电路的锁定效应:COMS电路由于输入太大的电流,内部的电流急剧增大,除非切断电源,电流一直在增大。这种效应就是锁定效应。当产生锁定效应时,COMS的内部电流能达到40mA以上,很容易烧毁芯片。
片选线发挥的作用如下:
给定一个地址,如何通过译码驱动找到相对应的存储位置:
1,线选法(以四位译码器为例A1A2A3A4)
(16*8存储器)
上面当地址输入为0000时,译码之后第一条选择线导通,该线上的八位数据进行读写。
线选法只适合容量很小的存储器,比如上面只有四条地址线,只需有十六个存储单元即十六条选择线,但是如果是有二十条地址线,那么译码之后应该有1M条选择线,可想而知线路十分拥挤。 可采用下面第二种重合法。
区分线选法,这里采用横向纵向两个译码器重合,构成n*n的选择阵列,上图是5*5。当输入X=00000,Y=00000时,X译码后选中第一条,Y译码后选中第一条,故(0,0)这个位置的存储单元被选中,可对其进行读写。
采用重合法时,如果有二十条地址线,即需要有1M个存储单元时,那么可以分为XY各十条,译码之后两个译码器都只需要1K条选择线,这就大大优化了线路,提高了集成度。
随机存取存储器RAM包含静态RAM和动态RAM:
静态 RAM的单元中存储的0,1信息是怎么形成的呢?通过触发器来得到,另外加上外围的电路便形成下面RAM基本单元电路。注意和之前说到的重合法相关,有x行选择和y列选择(T5T6是行开关,T7T8是列开关)。下面以读写操作示例原理。
(行选列选之后,读引脚是有效的,数据从右端通过晶体管输出,左端因为写引脚没有打开,此路不通)
(行选列选之后,写引脚是有效的)
而动态RAM的0,1信息是通过电容充放电来表示的,有电认为是1,无电认为是0。
这里的三角形器件是刷新放大器,不管是哪一种动态RAM,都是利用电容存储电荷的原理来保存信息的,由于电容会逐渐放电,信息可能由1变成0,所以,对动态RAM必须不断进行读出和再写入,以使泄放的电荷受到补充,也就是进行刷新。动态RAM的存储元件依靠电容上的电荷表示所存储的数据信息,而电容的绝缘电阻不可能无限大,因此漏电不可避免。每隔一定的时间就对存储体中全部的存储电进行充电,以补充所消失的电荷,维持原存信息不变,这个过程称为“刷新”。
DRAM与SRAM的不同:
静态存储器SRAM(双极型、静态MOS型):依靠双稳态电路内部交叉反馈的机制存储信息。功耗较大,速度快,作Cache。利用双稳态触发器来保存信息,只要不断电,信息是不会丢失的,因为其不需要进行动态刷新,故称为“静态”存储器。
动态存储器DRAM(动态MOS型):依靠电容存储电荷的原理存储信息。功耗较小,容量大,速度较快,作主存。利用MOS电容存储电荷来保存信息,使用时需要给电容充电才能使信息保持,即要定期刷新。
只读存储器ROM(Read-Only Memory):
一般用于保存系统程序和配置信息,出厂设定。后面发展出来可擦写的ROM。
按照发展有如下几种ROM:
1,掩膜编程的只读存储器(Mask ROM,MROM)
其行线和列线的交点处都设置了MOS管,在制造时的最后一道掩膜工艺,按照规定的编码布局来控制MOS管是否与行线、列线相连。相连者定为1(或0),未连者为0(或1),这种存储器一旦由厂家制造完毕,用户就无法修改。
2,可编程只读存储器(Programmable ROM,PROM)
允许用户通过专用的设备(编程器)一次性写入自己所需要的信息,其一般可编程一次,PROM存储器出厂时各个存储单元皆为1,或皆为0。用户使用时,再使用编程的方法使PROM存储所需要的数据。比如用熔断熔丝的方式,是破坏性一次性编码。
3,可编程可擦除只读存储器(Erasable Programmable Read Only Memory,EPROM)
可多次编程,是一种以读为主的可写可读的存储器。是一种便于用户根据需要来写入,并能把已写入的内容擦去后再改写的ROM。其存储的信息可以由用户自行加电编写,也可以利用紫外线光源或脉冲电流等方法先将原存的信息擦除,然后用写入器重新写入新的信息。 EPROM比MROM和PROM更方便、灵活、经济实惠。但是EPROM采用MOS管,速度较慢。
4,电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)
一种随时可写入而无须擦除原先内容的存储器,其写操作比读操作时间要长得多,EEPROM把不易丢失数据和修改灵活的优点组合起来,修改时只需使用普通的控制、地址和数据总线。
5,之后出现了Flash Memory。
Flash Memory:
Flash Memory 比内存慢,但是比传统外存快,可以用来提高计算机的性能,现在常用固态硬盘SSD充当一部分或全部的外存,固态驱动器(Solid State Disk或Solid State Drive,简称SSD),俗称固态硬盘,分为两种,一种是采用闪存(就是上面介绍的 Flash Memory)作为存储介质,另外一种是采用DRAM作为存储介质。
高速缓存存储器:
高速缓存存储器(cache)的原始意义是指访问速度比一般随机存储存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。用于cpu和内存之间的数据缓存。
Cache提出的意义:
那么下面介绍缓存的工作原理:
主存和缓存的存储结构划分一致,也都是按照块存储,只不过由于SRAM和DRAM的固有区别,Cache的容量远远少于主存的,也就是块的个数少。
明显的,如果命中率越高,CPU访问效率越高,因为这样越多的需要被访问的数据可以被CPU直接在Cache中找到并访问而不用去主存中找,这一点通过Cache和主存建立起来的标记来实现的。
下面看看最关键的Cache,CPU以及主存的基本结构原理图:
CPU要访问主存中的数据,首先由地址映射变换机构将CPU传来的主存地址转化为Cache地址,主存的块内地址可以直接传送给Cache即变换过程中低位地址一样,变换的是高位的块号。如果这时Cache已经和主存对应的块建立起来了对应关系,也就是Cache发生了命中,这时直接由Cache将变换后的地址上的内容送到CPU处。如果没有发生命中,这时候主存有两步操作,一步是将CPU所需要的数据直接传给CPU,另一步是将数据所在的一整个数据块一起送到Cache中建立对应的关系,这一步进行时如果Cache已满,会由Cache替换机构根据替换策略将Cache中别的用不上的数据块传回主存或者直接删除,从而腾出空间完成建立对应关系这一操作。
下面以Cache读写操作来理解Cache的工作原理:
(读操作)
(写操作)
下面看Cache和主存的地址映射问题(不同的映射方法决定了主存的任意块加载到Cache时可以加载到哪一块的不同情况):
1)直接映射:主存中任意一个给定的块只能映射到某一个指定的cache块中
直接映射结构虽然简单,但是问题比较明显:
2)允许主存的任何一个块映射到cache中的任意一块中。
3)组相联映射:上面两种映射方式走了两个极端,下面第三种能够比较好的平衡方法。
和直接映射相比,也是给定的一个主存块只能放入指定的cache块中,但是cache一个块可以放主存的两块,灵活性提高,对比全相联相比,需要比较的次数又能大幅减少。总的来说结构复杂度可以接受,速度也较快。
4)替换策略:
2,存储器我们关注的指标:
3,存储器的校验(即检错和纠错能力)
由上面五个例子可以看出,若在信息编码中加入适当的检测位,增大最小距离L,可以很好的提高存储器的检错纠错能力,汉明码就是基于这个原理提出来的具有一位纠错的编码(一般只要有一位纠错能力就能完成大部分的工作,比较发生大规模乱码的概率较小),下面介绍汉明码:
如果只是采用奇偶校验,且采用分组校验,分组校验可以更好知道检错检出来的位置在哪个区域但是具体是哪个位置是不清楚的所以不具备纠错能力。如下图中间是只采用奇偶校验,右边是采用了奇偶校验和分组校验。
汉明码采用的非划分的分组方式,即组和组之间是具有交叉位的。如下面的例子:
分为三组也就是有三个校验位,设为C3C2C1,接收汉明码之后进行偶检验,将三组的新的检测位组成一个三位二进制P1P2P3,那么就可以用校验之后的结果来明确是哪一位的错误并纠正,也就是有了纠错的能力。比如P1P2P3=110,那么110(2)=6(10)也就是第六位出现了错误,将其修正即可。
那么怎么找出哪个位置放校验位呢?2的i次方的位置,比如位置1,2,4,8,16...这样也对应了上面的例子1,2,4是校验位。
而怎么知道一个汉明码编码需要多少检测位呢?设将要进行检测的二进制代码为n位,为使其具有纠错能力,需要再加上k位的检测位,组成n+k位的代码。那么,新增加的检测位数k应满足:2k≥n+k+1或2k-1≥n+k 下表可以参考:
4,提高访存速度的措施
我们知道cpu提高速度的技术发展非常快,但是访问内存的速度提升的技术发展比较慢,那么这就成为计算及性能提高的掣肘,俗称“存储墙”。
其中调整主存结构包括单体多字和多体交叉的方式。
单体多字
适用于程序和数据在存储体内是连续存放的情况。在一个存取周期内,从同一地址取出多条指令,然后再逐条将指令送至CPU执行,这样增大了存储器的带宽,提高了单体存储器的速度。
缺点:如果指令和涉及的数据不是连续存放的比如有jmp跳转指令的话,就会导致jmp跟随连续存储的其他存储单元被带进cpu寄存器但是实际上不发挥作用,导致增大存储器带宽的效果不理想。又当从cpu写入一个16位的数据到存储器时,由于存储器是四个字为一个整体读出读入的,所以会导致数据寄存器里的四个字一并写到存储器中,但是实际上本意只是写一个字,而改变了不需要改变的数据,从而使数据发生错误,这也是单体多字的缺点之一。
多体并行(高位交叉拓展容量和低位交叉提高带宽)
高位交叉:用高位作为选择存储体的判断标准,实际上应用时会导致某一块存储体被访问频繁,其他存储体很空闲,造成浪费,而且并不能提高存储器的带宽也就是访问存储体的速度,这种方法适合用于存储器容量的拓展。
低位交叉:用低位作为选择存储体的判断标准,不改变存取周期的情况下,增加了存储器的带宽。相当于流水操作。
补充:
各种模块的速度级如上图所示,实际上计算机存储体系分为两个层次,一个是主存辅存层次,一个是缓存主存层次。这两个层次分别要解决容量扩展,速度匹配的问题。主存辅存靠的是软硬件结合的方法,是主存和辅存连接成一个整体,这称为虚拟存储器,将主存和辅存组合在一起的目的是,用辅存来扩大主存的容量,同时速度接近主存,价格接近辅存。用的是虚拟地址也就是逻辑地址,实际使用时会由一定的机构自动转换为实际物理地址,程序员不用去关心具体的物理地址。
硬件缓存是为了解决CPU速度和内存速度的速度差异问题。内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。
(2)存储器之主存概述
1,基本组成:主要包括存储体,MAR,MDR。具体的组成由下图所示:
(注意地址总线单向,数据总线双向)
2,cpu与主存之间通过地址总线,控制总线和数据总线相互联系。
包含下面两个内容:
1)存储器容量的扩展
位扩展注意两片的地址线连接是一致的,CS片选信号也连在一起,数据线各自占有高四位和低四位。
A10用来选择哪一块存储器作用。因为这里字扩展只有两组,所以只需要一条地址线来表示0,1做选择就可以了。
注意这里字扩展有四组,所以需要两条地址线做选择,00,01,10,11分别给四组的片选信号CS接受低电平。
2)存储器与cpu的连接
3,存储单元地址的分配:以78563412为例
(大端:高位数据存在地址低位 小端:低位数据存在地址低位)
4,主存的技术指标:
一个是容量,指的是存放二进制代码的总位数, 另一个是存储器的带宽,单位为“位每秒”
还有一个是存储速度,详情如下图:
如果指令和涉及的数据不是连续存放的比如有jmp跳转指令的话,就会导致jmp跟随连续存储的其他存储单元被带进cpu寄存器但是实际上不发挥作用,导致增大存储器带宽的效果不理想。