组成原理:存储系统

存储器的分类

  1. 按照在计算机中的层次分为主存(内存)、辅存(外存)以及主存与CPU间的Cache。
  2. 按存取方式分为可随机存取的RAM(RandomAccessMemory,如SRAM、DRAM)、可随机存取的ROM,(ReadOnlyMemory,只能读出不能写入),以及串行访问的存储器(其下又包括顺序存取存储器如CD-ROM、磁带,以及直接存取存储器如磁盘)。注意:随机存取意为读写操作所需的时间与操作的位置无关!而随机存取存储器特指RAM!
  3. 按信息的可保存性分为易失性存储器(如RAM)和非易失性的存储器(如ROM)。易失性是指断电后其内保存的信息立即丢失。

存储器的性能指标

存储器有三个性能指标:

  1. 存储容量 = 存储字长 * 字数
  2. 单位成本 = 总成本 / 总容量
  3. 存储速度 = 数据宽度 / 存储周期,其中存储周期由存取时间(启动存储器到完成读/写的的时间)和恢复时间(用于恢复内部状态)构成,其指示了两次独立访问存储器操作完成的最小间隔。

设计存储系统的目标就是追求大容量、低成本、高速度。

存储系统的层次

CPU寄存器、Cache、主存、辅存,这四者按序容量递增、成本递减、速度递减。

为了解决CPU和主存的速度不匹配问题,在两者中间引入了Cache;为了解决主存容量偏小的问题,引入了辅存。

其层次结构如下图:

在这里插入图片描述需要注意的是:在Cache-主存层和主存-辅存层中,前者中的内容都只是后者中内容的副本。Cache与主存间的数据调动是由硬件完成的,对所有程序员均为透明,而主存与辅存间的数据调动由硬件和操作系统共同完成,对系统程序员不是透明的。

半导体随机存储器RAM

SRAM

Cache由SRAM构成,相较于DRAM,其存取速度快,但集成度较低、功耗较大。

SRAM的读出属于非破坏性读出,即信息被读出后,SRAM仍保持原状态不变,无需再生。

SRAM的引脚包括:地址线、数据线、片选线1、读写控制线1或2.

DRAM

主存由DRAM构成,其速度较SRAM更慢,但单位成本更低。

DRAM的读出属于破坏性读出,信息被读出后需要时间来再生。

DRAM的引脚包括:1/2 * 地址线(地址复用技术)、数据线、行选通线1、列选通线1、读写控制线1或2。

刷新:由于DRAM电容上的电荷一般只能维持1-2ms,因此即使电源不断电,信息也会自动消失,为此,每隔2ms需要对整个DRAM进行一次刷新,2ms这个时间被称为DRAM的刷新周期。要注意的是:刷新并不依赖于外部的读写操作,它对CPU来说是透明的。刷新的单位是行,因此仅需要行地址即可。

常用的刷新方式:

  1. 集中刷新:在一个刷新周期内,利用一段固定时间对存储器的所有行依次刷新,刷新时不能进行读写操作,这段时间被称为死时间。这种方式的优点是读写操作与刷新无关,因此系统的存取速度较高,缺点是存在死时间。
  2. 分散刷新:把对每行的刷新分散到各个存储周期的恢复时间中,这种方式的优点是不存在死时间,缺点是延长了存储周期,降低了整机的速度。
  3. 异步刷新:是前两种方式的结合。将刷新周期除以待刷新行数,得到两次刷新之间的时间间隔T,然后每隔T便刷新一行。这种方式缩短了死时间(一个小周期T中只有一次刷新操作的死时间)。

只读存储器ROM

ROM的优点:

  1. 结构简单,位密度比可读写存储器要高。
  2. 具有非易失性,可靠度高。

分类:根据制造工艺不同,分为掩膜式只读存储器(MROM)、一次可编程只读存储器(PROM),可擦除可编程只读存储器(EPROM)、闪速存储器(FlashMemory)和固态硬盘(SSD)

注意:

  1. EPROM虽然可读可写,但其编程次数有限,且写入时间太长。
  2. U盘属于闪速存储器的一种,这种ROM读快写慢。

双端口RAM

引入原因:为了提高访存的空间并行性,进而提高访存速度,引入了双端口RAM。

结构:同一个存储器有两个独立的端口和两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元。结构示意图如下:在这里插入图片描述
不足:同一个地址单元,一个端口读、一个端口写时会发生读错误,两个端口同时写会发生写错误。

多模块存储器

引入原因:为了提高访存的时间并行性而引入了多模块存储器,因为CPU的速度比存储器快很多,所以如果可以一次从存储器中取出多条指令,就可以充分利用CPU资源。常用的有单体多字存储器和多体并行存储器。

单体多字存储器

特点:只有一个存储体,一个存储单元存储m个字,总线宽度也为m个字,一次可以并行读出m个字。即每隔1/m个存储周期,CPU可向主存取一条指令。

缺点:指令和数据在主存中必须连续存放,一旦遇到转移指令或操作数不能连续存放,这种方法的效果就不明显了。

多体并行存储器

多体即多个存储体,每个存储体都有独立的读写控制电路,地址寄存器和数据寄存器。多体并行存储器又分为高位交叉编址和低位交叉编址两种。

其中低位交叉编址是指低位地址为存储体号,高位地址为体内地址。如下,一列代表一个存储体,数字代表此存储单元的地址。

M0M1M2M3
000 00000 01000 10000 11
001 00001 01001 10001 11

此种方式下,若访问连续的地址,则会采用流水线方式依次访问各个存储体。

假设模块字长等于数据总线宽度,模块存取一个字的存取周期为T,总线传输周期为r

欲满足流水线方式存取,存储体数m应满足 m >= T / r,方能保证从上一次启动某一存储体经过m * r的时间后,此模块已完成一个字的存取,即流水线不间断。

在满足流水线方式的情况下,从启动开始连续存取n个字所需的时间为 T + (n-1) * r
若流水线充分流动,则连续存取n个字所需时间为 n * r

高速缓冲存储器

说明:Cache通常由SRAM构成,为了便于Cache和主存间交换信息,二者都被划分为大小相等的块,Cache的块数要远小于主存块数,它用于保存主存中最活跃的若干块的副本。Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache。

作用:CPU发出读请求时,若访存地址在Cache中命中,则将需访存的地址转换为Cache地址,从Cache中读取数据;若未命中,则仍需访存读取数据,并将此数据所在的块按照某种替换算法(常见的有RAND、FIFO、LRU、LFU算法)调入Cache中(直接映射时直接替换即可,全相联映射和组相联映射需要考虑替换算法);当CPU发出写请求时,若Cache命中,则CPU对Cache 块进行写操作,写完后,Cache中的此块与主存中对应的块出现了不一致,因此需要按照一定的写策略(常见的有全写法和写回法)进行处理。

注意:

  1. CPU与Cache或主存间的数据交换以字为单位,而Cache与主存间的数据交换以块为单位。
  2. 与为了加快页表项查找而设立的快表相比较,快表是存放最近可能被访问的若干页表项,而Cache是用于保存主存中未来一段时间可能访问的数据;Cache既可读又可写,快表只能读;两者在工作时,都是既可以并行(同时查找快表和慢表、同时查找Cache和主存),又可以串行(先查快表后查慢表、先查Cache后查主存)的;两者都是由硬件实现的,原理类似;
  3. 较大的Cache块可以更好地利用程序访问的空间局部性,从而增加命中率,但是如果Cache块太大,一旦未命中,则从主存中调块的开销变大。

Cache和主存的映射方式

地址映射:指把主存地址空间映射到Cache地址空间,即把主存块按某种规则装入Cache块中。注意区分于CPU访存时的地址变换(将主存地址转换为Cache地址,然后访问Cache)。

Cache中每个块都需要有一个标记项,标记项中必有有效位和标记位,根据题目情况可能还有脏位和替换控制位,Cache总容量 = 存储容量 + 标记项总大小。

地址映射的方法有三种:直接映射、全相联映射、组相联映射。

  1. 直接映射:主存中的每一块只能装入Cache中唯一的位置,一旦发生冲突,则原有的Cache块被无条件替换。此种方式的主存地址结构为 标记位 + Cache块号 + 块内地址。CPU访存时,首先计算得到Cache块号(Cache块号 = 主存块号 mod Cache块数),然后在Cache中查找对应块,并将Cache块的标记位与主存地址的标记位作比较,若相等,则此块已在Cache中。再检查Cache的有效位,若为1,则命中。命中后,根据主存地址的最后一部分(块内地址)对Cache块进行读写。若标记不相等或Cache块有效位为0,则为未命中,CPU进行访存及读写操作,并把主存中的块调入对应的Cache块中,将Cache块的标记位置为主存地址的标记位,有效位置1。
  2. 全相联映射:主存中的每一块可以装入Cache中的任意一块,因此CPU在比较主存地址的标记位时需要与所有Cache块的标记位进行比较。此种方式的主存地址结构为 标记位 + 块内地址
  3. 组相联映射:将整个Cache分为若干大小相等的组并编号,主存同理,每组内若有N块,则称为N路组相联。一个主存块存放到哪个Cache组是固定的(直接映射),存放到Cache组中的哪一块则不是固定的(全相联),从主存块号到Cache组号的映射关系为:Cache组号 = 主存块号 mod Cache组数。此种方式的主存地址结构为:主存块号 + 块内地址,其中主存块号又可拆分为标记位和Cache组号,因此是标记位 + Cache组号 + 块内地址。CPU访存时,首先根据Cache组号找到对应Cache组,然后将主存地址的标记位与此Cache组中各块的标记位作比较,其余过程同直接映射。

三种映射方法的比较:

  • 直接映射实现简单,但块冲突概率最高,空间利用率最低,命中率最低,灵活性不足。
  • 全相联映射块冲突概率最低,空间利用率和命中率最高,但比较标记的速度较慢,实现成本高,因为需要采用按内容寻址的相联存储器进行地址映射。
  • 选定合适的路数,可使组相联映射的成本接近于直接映射,而性能接近于全相联映射。

Cache写策略

如上所述,Cache块是主存块的副本,当Cache块写命中后,需要按照写策略将修改写回主存,使其内容保持一致。有两种处理方法:全写法和写回法。

全写法:当CPU对Cache写命中时,必须同时把数据写入Cache和主存,当Cache块需要被替换时,无需写回 ,直接覆盖即可。这种方式实现简单,能随时保持主存数据的正确性,但增加了访存次数,降低了Cache的效率。为了解决速度不匹配的问题,引入了一个名为写缓冲的FIFO的队列,引入后,CPU将数据写入Cache和写缓冲,由写缓冲再将内容写回主存。

写回法:当CPU对Cache写命中时,只将数据写入Cache块,当此Cache块需要被换出时才将其写回主存。这种方式减少访存次数,但有可能造成脏读,为此,必须在Cache块中设立一个脏位以指示其是否被修改过。

若是Cache写不命中,也有两种处理方法:写分配法和非写分配法。

写分配法:先将主存块加载到Cache中,再向此Cache块进行写入。

非写分配法:直接写入主存块。

全写法通常搭配非写分配法,写回法通常搭配写分配法。

关于写策略的更多问题可参考:Cache写:为什么写回法搭配写分配法?全写法搭配非写分配法?

虚拟存储器

虚拟存储器:由主存、辅存以及负责地址转换的软硬件共同构成,对应用程序员是透明的,具有主存的速度和辅存的容量。逻辑上,程序存储在虚拟存储器中,用户只面对虚拟存储器编址;物理上,程序存储在辅存中,主存中的内容是辅存内容的副本。

虚地址:供应用程序员编程使用的地址,又称逻辑地址。虚地址由编译程序产生,理论上来说可以达到无限大,实际会受到辅存容量的限制。地址结构为:虚存页号 + 页内地址。

实地址:主存单元地址,又称物理地址。假设CPU地址总线为N位,则物理地址空间的大小为2^N。地址结构为:主存页号 + 页内地址。

辅存地址:磁盘存储单元的地址。地址结构为:磁盘号 + 盘面号 + 磁道号 + 扇区号。

访存:CPU使用虚地址访存时,先通过页表项或段表项的装入位判断这个虚地址对应的存储单元是否已从辅存调入到了主存。若已在主存中,则由辅助硬件将虚地址变为实地址,然后访存;若不在主存中,则把辅存中此地址所在的页(或段)遵循某种替换算法(见操作系统概论的页面替换算法)调入主存。

分类:根据虚拟存储器基本单位的不同分为 页式虚拟存储器、段式虚拟存储器和段页式虚拟存储器三种。

页式虚拟存储器

以页为基本单位,虚拟空间与主存空间都被划分为大小相等的页,虚存的页称为虚页,主存的页称为实页。从虚页号到实页号的映射是由页表实现的。

访存:每个进程都有一个页表基址寄存器标识页表的首地址,根据虚页号查找页表项,检查页表项的状态位,若为1,说明此页在主存,取出页表项的实页号后生成实地址访问。若为0,说明发生缺页。

快表(TLB):为了加快上述访存过程中的地址转换,引入了一个硬件TLB,它负责把一些经常被访问的页表项从主存的页表中拷贝过来,查找时可先直接在快表中查找,若命中则无需访存查页表。

在一个具有Cache和TLB(快表)的页式虚拟存储系统中,CPU访存过程中可能存在三种缺失:

  1. TLB缺失:要访问的页面对应的页表项不在快表中。既可用软件处理,也可用硬件。
  2. Cache缺失:要访问的页不在Cache中。由硬件处理。
  3. 缺页:要访问的页不在主存中。由软件处理。

三种缺失的可能组合情况如下:

TLBPageCache规则说明
命中命中命中若TLB命中,说明页表项在快表中,则页面必在主存中,但不一定在Cache中此种情况直接访问Cache,无需访存
命中命中缺失同上Cache缺失后,直接访存一次读写数据
缺失命中命中若TLB缺失,页面不知,Cache也不知TLB缺失后访存一次查页表,然后访问Cache
缺失命中缺失同上TLB缺失则访存查页表,命中后得到实地址,Cache缺失后,访存读写数据
缺失缺失缺失同上,若页面缺失,则Cache必定缺失TLB缺失则访存查页表,命中后得到实地址,Cache缺失后访存,发生缺页异常

页面大小:页式虚拟存储器中,若页面太小,则虚存的页面数会太多,导致页表本身占用的存储空间太大。若页面太大,则每次装入页面时耗时更久。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值