WaterNorth's Blog

存储器

32 分钟WaterNorth

重点 #

  • 存储系统的层次结构;
  • SRAM与DRAM的区别;
  • DRAM的刷新:为什么需要刷新,刷新的特点,主要的刷新方式,刷新间隔、死区时间的计算等;
  • SRAM存储器芯片与CPU的连接(位扩展、字扩展、字位同时扩展),每个芯片地址范围的计算;
  • Cache的原理,命中率,平均访问时间及访问效率;
  • Cache三种地址映射方式(全相联、直接、组相联)的地址结构;
  • 虚拟存储器的概念。

一、存储器的层次结构 #

1、概述 #

信息存储的基本单位,叫做一个二进制位(bit)。存储一位二进制数的器件称作一个存储元。当一个二进制数作为一个整体进行存储操作时,就称作一个存储字,一个字中的二进制位数叫字长。

多个存储元组成了一个存储单元。多个存储单元组成了一个存储体——存储器的核心。存储体中,为区分不同的存储单元,对每一单元给一个编号,这个编号叫地址,地址与存储单元一一对应。存储单元可以按字编址,也可以按字节编址;存储单元是地址码能够指定的最小存储单位;存储体同周围的逻辑线路一起组成存储器

2、存储器的评价标准 #

  • 存取时间(访问时间、读/写时间):指从启动一次存储器操作到完成该操作所经历的时间;
  • 存取周期(读写周期、访内周期):存储器从接受读/写命令信号始,将信息读出或写入后,到接到下一个读/写命令为止所需的时间; 一般情况下,存取周期大于存取时间,因为对任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。 特别对于破坏性读出的存储器,存取周期往往比存取时间要大得多,这是因为存储器中的信息读出后需要马上进行重写。
  • 主存带宽:又称为主存的数据传输率,是指主存每秒钟可读写的数据量。提高主存带宽的措施有:缩短存取周期,增加存储字长;
  • 可靠性:以平均无故障时间(两次故障之间的平均间隔)来衡量;
  • 性能/价格比;
  • 功耗:反映了存储器件耗电的多少,同时也反映了器件的发热。功耗小,也有利于存储器的稳定工作。

3、存储器的分类 #

分类功能
主存储器在主机内,可直接与CPU交换信息,速度较快。
辅助存储器在主机外,不能与CPU交换信息,速度较慢。
高速缓冲存储器在CPU和内存之间,容量小,速度与CPU匹配。
控制存储器用于存放实现指令系统的所有微程序,是一种只读存储器,位于CPU内部。
分类读写方式
RAM随机存取存储器
ROM只读存储器
分类读写顺序
SAM(sequential)顺序存取,存取时间与存储单元的物理位置有关,如磁带。
RAM随机存取,存取时间与存储单元的物理位置无关。
DAM(Director)直接存取,介于上述二者之间,如磁盘。
分类存储介质
磁芯永久存储(非易失性)、速低,但不常用。
半导体速度高,集成度高、常用。
磁表面容量巨大、速度慢、价格低,多用作辅助存储器。
光存储器应用越来越广泛

4、存储器的三级存储结构 #

为了解决存储容量、存取速度和价格之间的矛盾,通常把各种不同存储容量、不同存取速度的存储器,按一定的体系结构组织起来,形成一个多级存储层次的存储系统。

在层次化存储系统里,普遍采用了缓存思想。在存储层次中,每一层都将其下一层作为“后备存储”,并将其内容的一部分(工作集)复制到本层中。这种缓存思想是层次结构最核心的设计原则。比如:Cache是主存的缓存、主存是辅存的缓存(虚拟内存机制)。

Cache-主存存储层次(Cache存储系统) Cache存储系统是为解决主存速度不足而提出来的。从CPU看,速度接近 Cache 的速度,容量是主存的容量,每位价格接近于主存的价格。由于Cache存储系统全 部用硬件来调度,因此它对系统程序员和应用程序员都是透明的。

主存−辅存存储层次(虚拟存储系统) 虚拟存储系统是为解决主存容量不足而提出。从CPU看,速度接近主存的速度,容量是虚拟的地址空间,每位价格是接近于辅存的价格。由于虚拟存储系统需要通过操作系统来调度,因此对系统程序员是不透明的,但对应用程序员是透明的。

二、半导体随机存储器RAM #

1、静态存储器(SRAM) #

SRAM是一种基于双稳态触发器的半导体存储器,通过晶体管状态保存数据,无需刷新电路即可在供电状态下维持存储,断电后数据丢失。

特点:

  • 集成度较低,每片几K位。Intel2114,1k×4位/片;
  • 功耗大;
  • 易失性,用电池做备用电源(断电信息即丢失);
  • 非破坏性读出;
  • 读写速度快,生产成本高,多用于容量较小的高速缓冲存储器。

2、动态存储器(DRAM) #

DRAM的动态MOS电路是利用MOS管栅极上的电容所存的电荷的多少来存储信息的,而电容上的电荷有泄漏,不可能长久保存, 因此需要定时充电补充,这个过程叫刷新,这种电路因要不断补充电荷,故称为动态存储单元电路。

DRAM有两种不同的电路:四管动态MOS基本单元电路和单管动态记忆单元电路。两种电路速度上差别不大,读出时都要预充电,读出时间基本相当。 集成度和功耗方面,单管好。四管是非破坏性读出,单管是破坏性读出。控制上单管较简单,四管较复杂。可靠性方面单管好,单管读出后,经过了放大,信号较强。

项目SRAMDRAM
存储元件触发器电容
是否刷新不需要需要定期刷新
破坏性读出非破坏性单管为破坏性读出
速度较快较慢
集成度较低较高
单位容量成本较高较低
常见用途Cache主存

3、DRAM的刷新 #

刷新的时间间隔取决于电荷的漏泄速度。一般器件的刷新周期为2ms,即要在2ms内对每个存储单元的信息刷新一次。

刷新要点:

  • 两次刷新时间间隔不能超过允许时间2ms;
  • 刷新优先于访存,但不能打断访存周期;
  • 在刷新期间内,不准访存;
  • 刷新是以一行为单位进行,每刷新一行需要一个存储周期。

刷新方式

集中式:在允许的最大刷新时间间隔2ms内,集中安排刷新时间。

如:存储单元1024个,排成32×32阵,存取周期500ns,刷新按行进行,每刷新一行,用一个存取周期500ns,共刷新32行,需要32个存取周期。每个时间间隔有2ms/500ns=4000个周期。

特点:存取周期不受刷新影响,速度快,存在“死区”,刷新时间内不能读/写。

分散式:把系统的存取周期分成两部分。一部分读/写,一部分刷新,每次读出信息后,立即对它刷新。

上例:存取周期500ns,刷新一行500ns,存取周期变为:1 μs。 特点:刷新时间间隔短(32 μs),无“死区”,系统存取周期长,降低了整机的运算速度。

异步式:以上两种方式的结合,在2ms的时间内,把存储单元分散地刷新一遍。

上例:32×32阵,2ms/32=62.5 μs(每行刷新的平均间隔)

特点:折中,使用较多。另外,异步刷新方式还可以采取不定期刷新方式,可以在主机不访存的时间内刷新,这种方式取消了机器的死区,但刷新控制线路极其复杂。

  • 刷新对CPU是透明的,原来存在的事物或属性,从某个角度看好象不存在了(刷新任务是由存储器芯片上的刷新电路负责);
  • 刷新按行进行,不需列地址;
  • 刷新与读出操作既相似又不同。读出时,要对C1或C2充电,刷新时也要对其充电,但刷新时仅补充电荷,无需信息输出;
  • 刷新和重写(再生)是两个完全不同的概念,重写是随机的,某个存储单元只有在破坏性读出之后才需要重写。而刷新是定时的,即使许多记忆单元长期未被访问,若不及时补充电荷的话,信息也会丢失。重写一般是按存储单元进行的,而刷新通常以存储体矩阵中的一行为单位进行的。

4、存储器芯片的译码方式 #

单译码方式:容量为M个字的存储器(M个字,每字b位),排列成M行×b列的矩阵,矩阵的每一行对应一个字,有一条公用的选择线——字线。 地址译码器集中在水平方向,K位地址线可译码变成 2K2^K 条字线,M=2KM=2^K 。字线选中某个字长为b位的存储单元,经过b根位线可读出或写入b位存储信息。

单译码方式的优点是结构简单,缺点是使用的外围电路多,成本昂贵。更严重的是 ,当字数大大超过位数时,存储体会形成纵向很长而横向很窄的不合理结构,所以这种方式只适用于容量不大的存储器。

双译码方式:双译码方式又称为重合法。通常是把K位地址线分成接近相等的两段,一段用于水平方向作X地址线,供X地址译码器译码;一段用于垂直方向作Y地址线,供Y地址译码器译码。X和Y两个方向的选择线在存储体内部的每个记忆单元上交叉,以选择相应的记忆单元。双译码方式对应的存储芯片结构可以是位结构的,也可以是字段结构的。对于位结构的存储芯片,容量为M×1,把M个记忆单元排列成存储矩阵(尽可能排列成方阵)。

若要组成一个M字×b位的存储器,就需要把b片M×1的存储芯片并列连接起来(可理解为把所有的列分成b组,每根Y方向的选择线有效时,每一组的对应列都被选中,则同时选中b位数据)。双译码方式与单译码方式相比,减少了选择线数目和驱动器数目。

RAM芯片 #

RAM芯片通过地址线、数据线和控制线与外部连接。

  • 地址线是单向输入的,其数目与芯片容量有关。如容量为1024×4时,地址线有10根;容量为64K×1时,地址线有16根。
  • 数据线是双向的,既可输入,也可输出,其数目与数据位数有关。如1024×4的 芯片,数据线有4根;64K×1的芯片,数据线只有1根。
  • 控制线主要有读写控制线和片选线两种,读写控制线用来控制芯片是进行读操作还是写操作的,片选线用来决定该芯片是否被选中。

由于DRAM芯片集成度高,容量大,为了减少芯片引脚数量,DRAM芯片把地址线分成相等的两部分,分两次从相同的引脚送入。两次输入的地址分别称为行地址和列地址,行地址由行地址选通信号 RAS\overline{RAS} 送入存储芯片,列地址由列地址选通信号 CAS\overline{CAS} 送入存储芯片。由于采用了地址复用技术,因此,DRAM芯片每增加一条地址线,实际上是增 加了两位地址,也即增加了4倍的容量。

三、存储器芯片与CPU的连接 #

存储器与CPU连接时需要进行如下连接:

  • 数据线的连接(若存储器芯片数据线不足,需扩充数据位,称为“位扩充”);
  • 地址线的连接(若芯片的地址线少于系统的地址线,可利用多个芯片扩充寻址范围,称为 “字扩充”);
  • 存储器芯片片选端的连接 片选端可看做最高位的地址线;
  • 读/写控制信号的连接。

位扩展:扩充字长 例如用 4K×44K\times4 芯片构成 4K×84K\times8 存储器,需要两片并联:

  • 地址线并联;
  • 控制线并联;
  • 一片连接 D0~D3;
  • 一片连接 D4~D7。

字扩展:扩充容量。 例如用 8K×88K\times8 芯片构成 64K×864K\times864K8K=8\frac{64K}{8K}=8。 需要 8 片,低位地址线接芯片,高位地址线用于片选。

四、高速缓冲存储器Cache #

容量及速度:通常采用SRAM半导体器件,其工作速度是主存的5-10倍,但容量小,对整个存储系统的硬件线路复杂性和价格影响不大。

命中率:CPU在Cache中取到的有效信息的次数与访问Cache的总次数的比率。

h=NcNc+Nmh=\frac{N_c}{N_c+N_m}

Cache/主存系统的平均访问时间TaT_a

Ta=htc+(1h)tmT_a=h·t_c+(1−h)·t_m
  • hh:Cache命中率(命中次数 / 总访问次数)
  • tct_c:命中时Cache的访问时间(Cache存取周期)
  • tmt_m:未命中时主存的访问时间(包括访问Cache未命中和从主存读取的时间)

访问效率:

e=TcTa=1h+(1h)rr=tm/tce=\frac{T_c}{T_a}=\frac{1}{h+(1-h)r} \quad r=t_m/t_c

1、工作原理 #

将主存分块,每块有若干个字节,将Cache也分成同样大小的块,由于其容量小,故其块数也比主存少,主存中,只有一部分块的内容可放在Cache中。

例如:主存容量1MB,分为2048块,每块512B;Cache容量8KB,每块512B,分为16块。

块标记:指明该块是主存中哪一块的副本,该标记的内容是主存中块的编号。

读操作:当CPU发生读请求时,就把主存地址同Cache某块的标记相比较,若相等,则所需数据已在Cache中,直接访问 Cache(一次传送一个字)。若不等,则所需数据未在Cache中,需将该数据所在的整个字块,从内存一次调来。

写操作:Cache中的字块,是主存中相应字块的副本,程序运行过程中会对Cache的某块的某单元进行写操作,如何保持Cache与内存的一致性?

  • 写直达法:Cache与主存单元同时更新(Write through);
  • 写回法:仅更新Cache单元,用标志位标记,直至修改的字块被从Cache中替换出来时,则一次写入内存(Write back)。 写直达法简单,但当一个字被多次更新时,会引起对主存的多次写入,这是不必要的。写回法速度快,减少了访问主存的次数,但存在一致性的隐患。

2、主存与Cache的地址映射 #

全相联映射: 在全相联映射中,主存与Cache分成相同大小的数据块,Cache中的一块可以存放主存中的任意一块,主存中的一块可以存放在 Cache 中的任意一块 。这就是全相联映射方式。

主存地址:

m位b位
块号块内地址

全相联映射需要一个目录表来存放有效位和块标记,块标记即为主存地址的块号,进行映射时,比较目录表的所有行,若要查找的块号所对应的有效位为1,则表示命中,该行的行号即为变换后cache的块号。

  • 优点:非常灵活;
  • 缺点:需相联存储器(目录表),比较位数多,电路难设计;
  • 适用于块数较少的小容量Cache。

直接映射: 在直接映射中,每个主存块只能映射到缓存中的一个特定缓存块。这意味着每个主存块只有一个缓存块可以存储它。

主存与缓存分成相同大小的数据块。主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。

m-c位c位b位
区号区内块号块内地址

直接映射需要一个目录表来存放有效位和块标记,块标记为主存地址的区号,而不是块号,进行映射时,比较目录表的第”块号“行,若要查找的区号与该行的区号一致,且对应的有效位为1,则表示命中,该行的行号即为变换后cache的块号。

  • 优点:硬件实现简单,不需要搜索整个目录表,只需比较对应行的区号,速度较快;
  • 缺点:对于块号相距G整数倍的两个块,只能映射到Cache的同一块中,所以块的冲突率较高;
  • 适合大容量Cache。

组相联映射

组相联映射是直接映射和全相联映射之间的一种折中方案。它将缓存块分为多个组,每个组包含多个缓存块。主存块可以映射到组中的任意一个缓存块。

  • 主存和Cache按同样大小划分成块。
  • 主存和Cache按同样大小划分成组。
  • 主存容量是缓存容量的整数倍,将主存空间按缓存的大小分成区,主存中每一区的组数与缓存的组数相同。
  • 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放,即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。

组相联映射中,主存块地址到缓存组索引的计算公式为: 组号=主存块号mod组数 Cache 行=组内 N 行中的任意一个

组相联映射需要一个目录表来存放有效位和块标记,块标记为主存地址的区号和组内块号,进行映射时,先根据组号找到目录表中组号所对应的n个块,再将这n行的区号和组内块号与要查找的区号和组内块号比较,找到一致的那一行,且对应的有效位为1,则表示命中,该行的块号即为变换后cache的块号。

优点:块的冲突率大大降低,块的利用率大大提高,并且实现比全相联方式容易。

3、替换策略 #

如果cache是满的,或者某个组已经是满的,这时新的数据会根据某种替换策略来替换组中的一个缓存块。

先进先出法(FIFO法): 先进先出法是选择那个最先调入的那个块进行替换。 缺点:当最先调入并被多次命中的块,很可能被优先替换, 因而不符合局部性规律。

最不经常使用算法(LFU): LFU算法将最近一段时间内被访问次数最少的那个行块换出。每行块设置一个计数器,初始值为0,被访问一次,该行块的计数器增1。当需要进行替换时,将计数值最小的行块换出,同时将这些行块的计数器都清零。 缺点:这种算法将计数周期限定在对这些特定行块两次替换之间的时间间隔内,不能严格反映近期访问情况。

最近最少使用法(LRU法): 总是选择那个最近最少使用的块被替换。这种方法比较好地反映了程序局部性规律。方法:每行块也设置一个计数器,Cache每命中一次,命中行块的计数器清零,其它各行块的计数器增1。当需要替换时,将计数值最大的行块换出。

五、虚拟存储器 #

1、概述 #

一个程序运行时,在一小段时间内,只会用到程序和数据的很小一部分,仅把这部分程序和数据装入主存储器即可。更多的部分可以在用到时随时从磁盘调入主存。在操作系统和相应硬件的支持下,数据在磁盘和主存之间按程序运行的需要自动成批量地完成交换。虚拟存储器对系统程序员不透明,对应用程序员透明。

主存一辅存在硬件、软件的共同作用下,构成一个对应用程序员来讲是单一的,速度相当于主存,容量相当于辅存的存储系统。

逻辑地址(虚地址):程序员编程以及CPU通过指令访问内存所用的程序地址。其寻址空间完全由指令中的地址码长度决定,如地址码32位,寻址空间可过4G。

物理地址(实地址):内存实际提供的地址,其可寻址空间大小完全由内存容量决定。

辅存地址:磁盘地址空间。

地址变换:虚拟地址的可寻址空间远大于内存的可寻址空间,于是出现了虚拟存储器必须解决的问题:虚实地址变换,一般由OS和辅助硬件自动转换。

2、虚拟存储的管理方式 #

虚存(辅存)-主存信息交换单位由两种:程序段和信息页

程序段:程序模块化结构的基本空间单位(大小可变),便于面向程序进行管理。

信息页:大小固定的信息空间单位,常称页或页面,类似于Cache块大小设置,页大小一般有几KB,便于面向硬件进行管理。

段式存储管理:以程序段为信息交换单位的虚存-主存管理方式;

  • 信息交换单位:程序段(大小因程序而异);
  • 存储管理:主存以程序段大小为单位分配空间给程序用;
  • 管理表格:段表(指明各程序段被分配的主存位置、≤2段号位数);
  • 优点:段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享;某些类型的段具有动态可变长度,允许自由调度,能更有效利用主存空间;
  • 缺点:因为段的长度各不相同,起点和终点不定,给主存分配带来麻烦,而且容易在段间留下许多空余的零碎空间,造成空间浪费。

页式存储管理:以信息页为信息交换单位的虚储-主存管理方式;

  • 信息交换单位:信息页(大小固定);
  • 存储管理:虚存空间和主存空间按信息页大小划分成若干逻辑页和物理页,主存以页为单位分配空间给程序用;
  • 管理表格:页表(指明各逻辑页被分配的物理页、≤2逻辑页号位数);
  • 优点: 页面的起始点和终点地址是固定的,页表结构方便,可能造成浪费的空间只是程序最后一页的零头,比段式空间浪费小;
  • 缺点: 由于页的内容逻辑上不独立,故处理、保护和共享都不及段式管理方便。

段页式存储管理:段式+页式(信息页为单位)的虚存-主存管理方式; 信息交换单位:信息页(大小固定); 存储管理:虚存空间先分段、再分页,主存空间只分页,主存以页为单位分配空间给程序用(解决面向程序和碎片问题); 管理表格:段表(指明各程序段被分配的主存位置)和一组页表(指明程序段中各逻辑页被分配的物理页); 优点: 兼有段式和页式管理的优点,程序的调入调出按页进行,保护和共享按段实现; 缺点: 地址变换过程中需要多次查表。

评论

0

评论功能待配置数据库后启用。