计算机的存储系统包括CPU内部寄存器,Cache,主存和外存。
存储器分类:
如果某个存储单元所存储的信息被读出时,原存储信息将被破坏,则称破坏性读出;如果读出时,被读单元存储信息不被破坏,则称非破坏性读出。
RAM存储器的任何一个存储单元的内容都可以随机存取,存取时间与存储单元的物理位置无关,主要用作主存或高速缓冲存储器,ROM通常存放固定不变的程序,甚至用于操作系统的固化,它与RAM可共同作为主存的一部分,统一构成主存的地址域。
顺序存取存储器的内容只能按照某种顺序存取,存取时间长短与信息在存储体上的物理位置有关;直接存取存储器介于随机存取和顺序存取之间,存取信息时,通常先寻找整个存储器中的某个小区域(如磁盘上的磁道),再在小区域内顺序查找。
存储器有三个主要性能指标:存储容量,单位成本,存储速度。设计计算机系统所追求的目标就是大容量,低成本和高速度。
存取时间不等于存储周期,通常存储周期大于存取时间。这是因为对任何一种存储器,在读写操作完成后,总要有一段恢复内部状态的复原时间。
相联存储器的基本原理是把存储单元所存内容的某一部分作为检索项(即关键字)去检索该存储器,并将存储器中与该检索项符合的存储单元内容进行读出或写入。所以它是按照内容或地址进行寻址,价格比较昂贵,一般用来制作TLB,相联Cache等。
存储系统的层次结构主要体现在“Cache--主存”层次和“主存--辅存”层次。前者主要解决CPU与主存速度不匹配问题,后者主要解决存储系统容量问题。现代计算机系统几乎都采用这种三级存储系统,需要注意,主存与Cache之间数据调动是由硬件自动完成,对所有程序员均是透明的;而主存与辅存之间的调动是由硬件和操作系统共同完成,对应用程序员透明。
在“Cache--主存”和“主存--辅存”层次中,上一层内容都只是下一层中内容的副本,也即Cache中内容只是主存中内容的一部分,主存中内容只是辅存中内容的一部分。
半导体存储芯片基本结构:
半导体随机存取器按其存储信息原理不同,可分为静态RAM和动态RAM,高速缓冲存储器大多由静态RAM实现,后者则广泛用于计算机主存。
存在一个二进制位的物理器件称为存储元,地址码相同的多个存储元构成一个存储单元,若干存储单元的集合构成存储体。
静态随机存储器(SRAM)的存储元是用双稳态触发器(六管MOS)来记忆信息,非破坏性读出,属于易失性半导体存储器。
动态随机存储器(DRAM)是利用存储元电路中珊极电容上的电荷来存储信息,常见的DRAM的基本存储电路有三管式和单管式。DRAM采用地址复用技术,地址线是原来的1/2,且地址信号分行,列两次传送。
DRAM电容上电荷一般只能维持1~2ms,因此即使电源不掉电,信息也会自动消失,故每隔一定时间必须刷新,通常取2ms,称为刷新周期,常用的刷新方式有三种:集中刷新,分散刷新,异步刷新。
集中刷新指在一个刷新周期内,利用一个固定的时间,依次对所有行进行逐一再生。优点是读写操作时不受刷新工作影响,因此系统的存取速度比较高,缺点是在集中刷新期间(死区)不能访问存储器。分散刷新把对每一行的刷新分散到各个工作周期,增加了系统存取周期,虽然没有死区,但是降低了整机的速度,异步刷新是前面两种方法的结合,既缩短“死时间”,又充分利用最大刷新间隔2ms的特点。如果将刷新安排在不需要访问存储器的译码阶段,则既不会加长存储周期,也不会产生“死时间”,这是分散刷新方式的发展,也称作透明刷新。
DRAM的刷新对CPU是透明的,刷新的单位是行,故只需要行地址,刷新操作类似于读操作,但又有所不同,刷新操作仅是给珊极电容补充电荷,不需要信息输出,另外,刷新不需要选片,即整个存储器中所有芯片同时被刷新。
相对于SRAM来说,DRAM具有容易集成,位价低,容量大,和功耗低等优点,但是DRAM的存取速度比SRAM慢,一般用来组成大容量主存系统。
根据制造工艺不同,ROM可分为掩模式只读存储器(MROM),一次可编程只读存储器(PROM),可擦除可编程只读存储器(EPROM):紫外线擦除(UVEPROM)和电擦除(E2PROM),闪速存储器和固态硬盘。
双端口RAM是指同一个存储器有左右两个独立的端口,分别具有两组相互独立的地址线,数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元。当两个端口同时对同一地址单元写入数据或一个写入一个读取时,就会因为数据冲突造成数据存储或读取错误,解决方法:置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即延时),未关闭端口正常访问,被关闭端口延长一个很短的时间段后再访问。
多模块存储器:单体多字存储器,多体低位交叉存储器 。
程序访问的局部性原理:程序访问的局部性原理包括时间局部性和空间局部性。前者是指在最近的未来要用到的信息,很可能是现在正在使用的信息,这是因为程序存在循环。后者是指在最近的未来要用到的信息,很可能与正在使用的信息在存储空间上是邻近的,这是因为指令通常是顺序存放,顺序执行的。
高速缓冲技术就是利用程序访问的局部性原理,把程序正在使用的部分存放在一个高速的,容量较小的Cache中,使CPU访存操作大多数针对Cache进行,从而使程序的执行速度大大提高。
当CPU发出读请求,如果访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关;如果Cache未命中,则仍需要访问主存,并将此字所在块一次从主存调入Cache内。值得注意,CPU与Cache之间数据交换以字为单位,而Cache与主存之间的数据交换则是以Cache块为单位。
Cache和主存的映射方式:
Cache中主存块替换算法:随机算法(RAND),先进先出算法(FIFO),近期最少使用算法(LRU),最不经常使用算法(LFU)。
Cache写策略:
虚拟存储器:虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际的主存容量和程序在主存中的实际存放位置。(详情见操作系统)
虚拟存储器与Cache比较: