计算机组成与设计(5)-----存储器

思维导图

引言

    存储器是存储数据的硬件设备.我们既希望其有超高的速度,也希望有超高的容量,还想要便宜.但是在同样的容量下,不同访存速度的存储器价格相差极大,这又与适当的价格形成了矛盾.解决办法就是对存储器分层,这是一种折中的办法,利用部分高速度而低容量的存储器和低速度而高容量的存储器互相配合,从而组成了具有大容量和高速度优点的存储器.

    打个比方来说,如果我们需要去图书馆查找某一方面的资料,会将n本书抽取,然后放在书桌上,一般情况下,需要的资料很多都在放在书桌上的书中(空间),而且,某一本书会被重复性的阅读(时间).这就是局部性原理.利用局部性原理,设计了处理存储器层级结构.

  • 时间局部性:某项数据在被访问之后很有可能会被再次访问
  • 空间局部性:某项数据被访问之后,其旁边的数据很有可能会被访问
  •  存储器层次结构:一种由多存储器层次组成的结构,存储器的容量和访问时间随着离处理器距离的增加而增加.

             

    有多层次的存储器就意味着他们会进行数据的交换.而块/行是基本单位

  • 块/行:两级层次结构的存储信息交换的最小单元

    按照功能来说,处理器访存信息需要先访问存储器层次中高速度的那一层,如果在这一层中找到了所需的数据,就称为命中,没有则称为缺失,若发生缺失,就会在下一层次的存储器中寻找数据.

  • 命中:如果处理器需要的数据在高层次的存储器的某一个块中,这次访问就是命中的.
  • 命中率:在高层次存储器中找到数据的比率
  • 命中时间:处理器一次命中所需要的时间
  • 缺失:如果处理器没有在高层次的存储器中找到需要的数据,这次访问就是缺失的.
  • 缺失率:在高层次存储器中没有找到数据的比率
  • 缺失代价:若此次访问时缺失的,需要将低层次存储器的数据替换到高层次存储器,所需的时间就是缺失代价

一.存储器的分类

    存储器主要有四类,最快价格也最贵的是SRAM,主要用来实现cache层.价格和速度较低的是DRAM,主要用来实现主存储层次.以上两者是易失性的,速度和价格更低的是磁盘,其访问速度最慢,但是价格便宜,容量大,所以一般用来实现存储大量数据的层次.此外还有闪存,,主要用于移动存储设备.此两者是非易失性的.

  1. SRAM:静态随机访问存储器是一种组织层存储阵列结构的简单集成电路,读取和写入的时间可能不同,但所有的访问花费相               同时间.
  2. DRAM:在动态随机访问存储器中,存储单元使用电容保存电荷的方式存储数据,所以不能长久的保持数据,需要周期性的刷新.              而在时钟的控制下以突发方式传送连续的数据称之为SDRAM,他的最快版本称之为DDR.
  3. 闪存:一种电可擦除的可编程的只读存储器(EEPROM)
  4. 磁盘存储器:由多个磁盘组成的存储器.每个磁盘具有几万个磁道,磁盘存储器把磁头移动到磁盘上适当磁道的过程称之为寻                       道.每个磁道划分为几千个扇区,扇区是磁道的基本单位,也是磁盘上数据读写的最小单位,柱面则是给定时间内磁                     道可以访问的盘面上所有扇区的集合.

二.  cache

     cache也成为高速缓存,利用SRAM实现.会临时性的储存最常用的数据,而访问这些数据只需要相当短的时间.在实际的应用中,经常使用分离cache以处理指令和数据

  • 分离cache:一级cache由两个独立的cache组成,分别处理指令和数据

2.1cache的组织方式

cache的组织方式是指cache的块与主存储器(后文称主存)的块之间的映射方式,不同的映射方式有不同的优缺点.

  1. 直接映射:直接映射值主存中的地址仅仅对应cache中的一个位置,即一对多.
  2. 全相连:cache的一种组织方式,主存中的一个地址块可以对应于所有的cache中的位置.
  3. 组相连:直接映射和全相连都是组相连的极端情况,组相连中块的组织方式是将cache中的块分组,主存中的一个地址仅仅会对              应于cache中的一个组,但是,可以对应于该组中的任何一个位置.

    以直接映射举例,如果cache中块的数量是二的幂,则对应方式很简单,只需取主存地址的低位相匹配即可(即块号对cache块数求余数).例如,cache有8个块,映射方式如下(在组相连中,对应组的方式是块号对组数求余数.):

                

    因为cache中的一个块会对应主存中的多个块,所以需要一个标记字段用来判断此时cache中的数据是否是所请求的数据.如上例,cache中的一个块对应主存中的四个块,所以需要判断.

  • 标记:块中的一个字段,包含了地址信息,用于判读cache中的数据是否是请求的数据

在块中,还需要一个字段来判断确实没有有效的数据,比如,当处理器刚启动时,cache中没有数据,或者在执行了一些指令后,cache中依然没有数据,此时标志应该被忽略,否则,如果标记有效,就会取到空的数据.这个判断需要一个位的长度.

  • 有效位:用于判断块中的数据是否有效

    如果说直接映射中,主存中的地址仅仅会对应于cache中的一个地址,那么,在以全相连方式组织的cache中,主存中的每一个地址可以对应于cache中的任何一个位置,即多对多.

2.2  cache的访问处理

以直接映射举例,容量为8个块的cache,被方位9次.

下图是表明请求地址是如何匹配cache的,请求地址的低位会被用于定位所请求数据可能存在于哪一个cache的块中,高位则和标记比较,用于判断现在此cache块中的数据是否为请求的数据,如果是则命中,如果不是,则表示发生了一次缺失.

                 

以下是具体的访问请求:

以下是具体的访问步骤:

2.3    cache的缺失处理

  1. 在cache的访问处理中,发生了缺失,即请求的数据不在cache中,在这种情况下,处理器会进行缺失处理,以下是具体步骤:
  2. 程序计数器的值-4,送会存储器中
  3. 通知主存执行一次读操作,并等待主存访问完成
  4. 将从主存中读取的数据写入cache对应的块的数据区中,并改写其标记字段为地址的高位,重新设置有效位,重新执行指令.

2.4cache的写操作处理

    当处理器需要向存储器中写入数据时,则会进行写操作处理.以保证cache和主存数据的一致性.写操作处理主要有两种,写直达和写回

2.4.1写直达

    写直达是比较简单的写入处理,它会同时更新cache和主存中的数据,但是写直达有较大的缺点,因为需要向主存中写入数据,所以会花费相当大量的周期处理这一操作

  • 写直达:同时更新cache和下一层次存储器,以保证数据的一致性

    在写直达的基础之上,可以进行一点优化,使用写缓冲,此时数据会被写入cache和写缓冲中,写操作处理结束,在这之后,处理器会将写缓冲当中的数据写入主存中.

  • 写缓冲:一个保存写入主存的数据的缓冲队列

2.4.2写回

写回是另一种写操作的处理方式,比起写直达来说复杂得多.

  • 写回:发生写操作是只会将数据写入cache中.只有当cache中被修改过的块被替换时才会写入较低的存储器层次中

2.5  cache的性能评估和优化

设计人员有时会采用平均存储器访问时间(AMAT)作为评价cache性能的标准.

  • AMAT:即平均存储器访问时间,AMAT = 命中时间 + 缺失率 * 缺失代价

2.5.1组织块以优化性能

  • 相连度:即块的组织方式中,一个组拥有多少块.比如直接映射相连度 = 1,全相连 = 块的个数,组相连 = 一个组拥有的块数.

    提高适当相连度可以降低缺失率,比如,在一个cache中有8个块,此次请求的数据已经在cache中,直接映射可能会发生缺失,全相连则不会发生缺失,组相连则在二者之间.当然,提高了相连度会使访问时间增加,所以需要适当的取舍.

2.5.2并行查找以优化性能

  在组相连中,通过索引(低位)可以找到组的位置,然后需要遍历组所有块的标记以查询数据,此时可以使用并行的查找方式优化性能

2.5.3改进替换块的选择方式以优化性能

   当相连度大于1时,发生了缺失需要将cache中的一个块替换以储存从主存中读取的数据,此时可以替换最近最少使用的块以降低缺失率从而提高性能

  • LRU算法:查找最近最少使用的算法

2.5.4使用多级cache以优化性能

使用在已有cache的基础之上,多增加一级cache,其容量较一级cache高,当一级cache缺失时访问下一级的cache,以降低缺失代价,缺点则是会增加访问时间.

  • 多级cache:存储系统有多级的cache组成,而不仅仅只有主存和一个cache

2.5.5通过分块以优化性能

    软件通过对cache中的数据进行重用,提升了数据的时间局部性并因此降低了缺失率.

三.虚拟存储器

    存储器的层级结构当然不仅有cache和主存两层,实际上,可以在主存之下,还有磁盘,利用实现cache和主存的方式,也可以实现主存和磁盘这两层存储器结构,他们实现的原理是相同的.虚拟存储器以前被设计出来主要的目的就在于消除一个小而受限的主存容量对程序造成的影响.但是,渐渐地主要的功能变为了允许云计算在多个虚拟机之间有效而安全的共享存储器,

  • 虚拟存储器:一种将主存用作辅助存储器高速缓存的技术

在虚拟存储器中,使用的术语发生了一些变化,在虚拟存储器中,块被称为页,访问缺失被称为缺页,主存中的地址为称为物理地址,其主要的工作原理就是将处理器产生的虚拟地址结合软硬件转换为物理地址,然后用来访问主存.此过程为称为地址转换.地址转换加强了各个程序地址空间之间的保护

  • 页:块被称为页,是数据流通的基本单位.连个虚拟页可能映射到同一个物理地址上,以实现虚拟地址共享.所以虚页可能比物理         地址多很多.
  • 访页:访问缺失被称为缺页,一次缺页的处理将花费数百万个时钟周期,代价相当的大.
  • 物理地址:主存中的地址为称为物理地址
  • 地址转换:将处理器产生的虚拟地址结合软硬件转换为物理地址,然后用来访问主存.此过程为称为地址转换.其转换时,地址为                   分为虚页号和页偏移,类似于cache到主存的索引(低位)和标志字段(高位).
  • 保护:确保共享处理器,主存,I/O设备的多个进程之间没有读写其他进程的数据机制.

以下是层次图:

 

3.1虚拟存储器的操作处理

3.1.1页的查找

    为了快速定位物理地址,会在主存中维护一个称为页表的数据结构,根据虚拟地址找到物理地址.在处理器中存在一个页表寄存器,保存页表的起始地址.每一个进程都会拥有自己的页表.

  • 页表:保存虚拟地址和物理地址转换关系的数据结构.通常使用虚页号来来索引,如果这个虚页在主存中,页表的对应项就可以            找到物理地址

页表如下图:

       

3.1.2缺页故障

    如上图,如果页表的有效位关闭,就会发生缺页故障,此时操作系统会获得控制权,它会在下一级存储层次中找到该页,然后将其放到  主存中.因为不知道什么时候某一页会被替换出去,所以会在磁盘中维护一个交换区.同时在维护一个数据结构维护每个虚拟页在磁盘上册存放位置,这个数据结构可能是页表的一部分.

  • 交换区:为地址的全部虚拟地址空间预留的磁盘空间.

如下图:

    

3.1.3写操作

    虚拟存储器对下一层次的存储器的写操作会花费上百万个时钟周期,所以写直达不适合,采用写回机制.此时会在页表中添加一个脏位,所以也有了脏页.

  • 脏位:一个字段,表明此页已被修改过
  • 脏页:脏位为是的页,表示此页是被修改过的页,发生替换时,将被写入下一层次的存储器.

3.2快表TLB

    为了快速的获得虚拟地址和物理地址的映射关系,会在处理器中包含一个特殊的cache以跟踪最近使用的地址变换.,这个地址转换cache被称为快表(TLB).所以地址转换会先查询快表,如果没有表示发生了一次TLB缺失,就会去主存中查找,如果命中,会将会将地址变换装载到TLB中,重新访问,如果发生缺失,则需要进行缺页处理,必须完成如下步骤:

  1. 使用虚拟地址查找页表项,并在磁盘上找到被访问的页的地址,因为花费的时钟周期太多,所以通常选择另一个进程执行.
  2. 选择一个物理页,如果选择的页被修改过,则需要在把新的虚拟页装入之前将这个页写回磁盘
  3. 启动读操作,将被访问的页从磁盘上取回所选择的的物理页的位置上
  • TLB:用于记录最近使用的地址的映射信息的高速缓存.从而避免每次都要访问页表.

 

猜你喜欢

转载自blog.csdn.net/zh328271057/article/details/83239838
今日推荐