1 多级存储系统?

为了解决存储系统大容量、高速度和低成本 3 个相互制约的矛盾,在计算机系统中,通常采用多级存储器结构,在图中由上至下,位价越来越低,速度越来越慢,容量越来越大, CPU 访问的频度也越来越低。

实际上,存储系统层次结构主要体现在“Cache-主存”层次和“主存-辅存”层次。前者主要解决CPU和主存速度不匹配的问题,后者主要解决存储系统的容量问题。在存储体系中, Cache 、主存能与 CPU 直接交换信息,辅存则要通过主存与CPU 交换信息;主存与CPU 、Cache 、辅存都能交换信息。

存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。从 CPU 的角度看,”Cache—主存”层次速度接近于Cache,容量和位价却接近千主存。从“主存—辅存”层次分析,其速度按近于主存,容址和位价动接近于辅存。这就解决了速度、容量、成本这三者之间的矛盾。

在“主存—辅存”这一层次的不断发展中,逐渐形成了虚拟存储系统,在这个系统中程序员编程的地址范围与虚拟存储器的地址空间相对应。对具有虚拟存储器的计算机系统而言,编程时可用的地址空间远大于主存间。


2 半导体随机存储器

主存储器由DRAM 实现,靠处理器的那一层(Cache)则由SRAM 实现,它们都属于易失性存储器,只要电源被切断,原来保存的信息便会丢失。DRAM 的每比特成本低千SRAM,速度也慢于SRAM,价格差异主要是因为制造DRAM 需要更多的硅。而ROM 属千非易失性存储器。

2.1 SRAM 的工作原理

通常把存放一个二进制位的物理器件称为存储元,它是存储器的最基本的构件。地址码相同时多个存储元构成一个存储单元。若干存储单元的集合构成存储体。

静态随机存储器(SRAM)的存储元是用双稳态触发器(六晶体管MOS)来记忆信息的,因此即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性牍出)。SRAM的存取速度快,但集成度低,功耗较大,所以一般用来组成高速缓冲存储器。

2.2 DRAM 的工作原理

SRAM的存储原理不同,动态随机存储器(DRAM)是利用存储元电路中栅极电容上的电荷来存储信息的, DRAM 的基本存储元通常只使用一个晶体管,所以它比SRAM的密度要高很多。DRAM 采用地址复用技术,地址线是原来的1/2,且地址信号分行、列两次传送。

相对于SRAM来说, DRAM 具有容易集成、位价低、容量大和功耗低等优点,但DRAM 的存取速度比SRAM的慢,一般用来组成大容量主存系统。DRAM 电容上的电荷一般只能维持1~2ms, 因此即使电源不断电,信息也会自动消失。

为此,每隔一定时间必须刷新,通常取2ms, 这个时间称为刷新周期。常用的刷新方式有3 种:集中刷新、分散刷新和异步刷新。

2.3 只读存储器(ROM)的特点

ROM 和RAM 都是支持随机存取的存储器,其中SRAM 和DRAM 均为易失性半导体存储器。而ROM 中一旦有了信息,就不能轻易改变,即使掉电也不会丢失,它在计算机系统中是只供读出的存储器。ROM 器件有两个显著的优点:

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

3 有哪些技术能够提高CPU访存速度?

为了提高CPU 访问存储器的速度,可以采用双端口存储器多模块存储器等技术,它们同属并行技术,前者为空间并行,后者为时间并行。

3.1 双端口RAM

双端口RAM 是指同一个存储器有左、右两个独立的端口,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元,如图所示。当两个端口的地址不相同时,在两个端口上进行读写操作一定不会发生冲突。

3.2 多模块存储器

为提高访存速度,常采用多模块存储器,常用的有单体多字存储器多体低位交叉存储器

注意: CPU 的速度比存储器的快,若同时从存储器中取出n 条指令,就可充分利用CPU 资源,提高运行速度。多体交叉存储器就是基于这种思想提出的。

3.2.1 单体多字存储器

单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储m 个字,总线宽度也为m 个字。一次并行读出m 个字,地址必须顺序排列并处于同一存储单元。单体多字系统在一个存取周期内从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔1/m 存取周期, CPU 向主存取一条指令。显然,这增大了存储器的带宽,提高了单体存储器的工作速度。

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

3.2.2 多体并行存储器

多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。

多体并行存储器分为高位交叉编址(顺序方式)和低位交叉编址(交叉方式)两种。


4 Cache

Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(Dynamic RandomAccess Memory)之间,规模较小,但速度很高的存储器,通常由SRAM(Static Random Access Memory静态存储器)组成。

Cache的功能是提高CPU数据输入输出的速率。Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善,仿佛其存储系统容量与内存相当而访问速度近似Cache。

Cache通常采用相联存储器,使用Cache改善系统性能的依据是程序的局部性原理

4.1 替换算法

当Cache产生了一次访问未命中之后,相应的数据应同时读入CPU和Cache。但是当Cache已存满数据后,新数据必须替换(淘汰)Cache中的某些旧数据。最常用的替换算法有随机算法、先进先出算法(FIFO)和近期最少使用算法(LRU)。

4.2 写操作

因为需要保证缓存在Cache中的数据与内存中的内容一致,Cache的写操作比较复杂,常用的有写直达法和写回法。

写直达法:在这个策略里,每一次数据都要写入到主内存里面。写入前,先去判断数据是否已经在 Cache 里面了。如果数据已经在 Cache 里面了,先把数据写入更新到 Cache 里面,再写入到主内存里面;如果数据不在 Cache 里,就只更新主内存。写直达的这个策略很直观,但是问题也很明显,那就是这个策略很慢。无论数据是不是在 Cache 里面,我们都需要始终把数据同步到主内存里面。

写回法:信息仅仅写到Cache中的块。当其被替换时,信息才会被写回到主存中。虚拟存储器系统通常采用写回策略,因为写到磁盘的延迟代价太大。

写回的速度要更快一些,因为不必每次写操作都访问主存。但这样我们如何保证一致性问题呢?我们可以给每行添加一个脏位(dirty bit),这样我们替换这块Cache时就可以根据脏位来判断是否需要写回主存。如果没有被“弄脏过”,那么就不需要写回主存。

4.3 与主存的映射方式

直接映射:主存数据块只能装入Cache中的唯一位置

全相联映射:可以把主存数据块装入Cache 中的任何位置

组相联映射:将Cache分为若干组,一个数据块可以装入一组内的任何一个位置


5 虚拟存储器

5.1 虚拟存储器的基本概念

虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量加以扩存的一种存储器系统。

5.2 页式虚拟存储器

页式管理:是把虚拟存储空间和实际空间等分成固定大小的页,各虚拟页可装入主存中的不同实际页面位置。页式存储中,处理机逻辑地址由虚页号页内地址两部分组成,实际地址也分为页号和页内地址两部分,由地址映射机构将虚页号转换成主存的实际页号。

页式管理用一个页表,包括页号,每页在主存中起始位置、装入位等。页表是虚拟页号与物理页号的映射表,页式管理由操作系统进行,对应用程序员的透明的。

5.3 段式虚拟存储器

段式管理:把主存按段分配的存储管理方式。它是一种模块化的存储管理方式,每个用户程序模块可分到一个段,该程序模块只能访问分配给该模块的段所对应的主存空间。段长可以任意设定,并可放大和缩小。

系统中通过一个段表指明各段在主存中的位置。段表中包括段名(段号)、段起点、装入位和段长等。段表本身也是一个段,段一般是按程序模块分的。

5.4 段页式虚拟存储器

段页式管理:是上述两种方法的结合,它将存储空间按逻辑模块分成段,每段又分成若干个页,访存通过一个段表和若干个页表进行,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。

5.5 TLB(快表)

在虚拟存储器中进行地址变换时,需要虚页号变换成主存中实页号的内部地址变换这一过程。

缓存时首先要到主存查页表,然后才能根据主存物理地址访问主存的存取指令或数据。因此采用虚拟存储器机制后,访存的次数增加了。为了减少访存的次数,往往将页表中最活跃的几个页表项复制到高速缓存中。这种在高速缓存中的页表项称为快表(translation look aside buffer)。

查表时,根据虚页表同时查找快表和慢表,当在快表中查到该虚页号时,就能很快找到对应的实页号,将其送入主存实地址寄存器,同时使慢表的查找作废,这时主存的访问速度没降低多少。

如果在快表中查不到,则经过一个访主存的时间延迟后,将从慢表中查到的实页送入实地址寄存器,同时将此虚页号和对应的实页号送入快表。