likes
comments
collection
share

一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca

作者站长头像
站长
· 阅读数 16

存储系统:

引言:

本文介绍了计算机组成原理中存储系统 的整体框架和具体细节,可以结合目录一起学习,更容易理解。

重要:

我们已经知道

  1. 计算机组成的基本构成;
  2. 数据在计算机中以什么形式存储的;
  3. 数据在计算机中是怎样运算的。

以上三点了解即可,不是面试的重点;那么问题来了,存储这些数据的物件--存储器有哪些,具体有什么区别?下面先给出存储系统要学习的总体知识,这是一个全局观,应该有一个路线,往下学习才会显得游刃有余。

存储系统要学习什么?

  1. 存储系统的层次结构;
  2. 存储器的分类;
  3. 存储器的性能指标;

到这里,已经有一个整体的认识,然后再从主存、外存、cache、虚拟存储系统具体讲一讲各个细节,让你彻底搞懂计算机组成原理的存储系统;

  一、存储器的层次结构:

  从下到上,速度越来越快,容量越来越小,价格越来越高,越靠近CPU;

一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca

  下面相连的表示可以直接进行数据交换,显然,缓存和主存可以直接和CPU进数据交换,而辅存只能先将数据调入内存才能被CPU访问;

  另外:

  • Cache缓存和主存的数据交换,解决了主存与CPU速度不匹配的问题
  • 主存和辅存的数据交换,实现了虚拟存储系统,解决了主存容量不足的问题(后面会讲)

一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca

  二、存储器的分类:    

1)按层次结构分类:

  • 高速缓存(cache);
  • 主存(平时所说的内存);
  • 辅存;    

2)按存储介质分类:      

  • 半导体存储器:如cache,主存;      
  • 磁表面存储器:如磁盘;      
  • 光存储器:如光盘,DVD,VCD;    

3)按存取方式分类:      

  • 随机存储器RAM:存取时间与存储单元的物理位置无关;      
  • 顺序存储器SAM:存取时间与存储单元的物理位置有关,如磁带,光盘;      
  • 直接存储器DAM:先随机存储某块区域,再对这块 区域进行顺序的读写,所以既有随机特性,也有顺序特性;如磁盘;      
  • 相联存储器CAM:可以按照内容找到相应的数据,如快表    

4)按信息的可更改性分类:      

  • 读写存储器RM/WM:如磁盘,内存,cache;      
  • 只读存储器ROM:如实体音乐专辑,实体电影光盘,BIOS(操作系统的引导程序的位置)    

5)按信息的可保存性分类:      

  • 易失性存储器:断电后信息消失;如主存,cache      
  • 非易失性存储器:断电后信息不丢失;如磁盘

  三、存储器的性能指标:    

  1. 存储容量:由MAR、MDR的位数反映;    
  2. 单位成本:总成本/总容量;    
  3. 存储速度:数据传输率=存储字长/存储周期。(存储周期包括存取时间和恢复时间)

  四、主存:

    1、主存的基本组成:      

主存由存储体,MAR,MDR组成;其中存储体中的存储元件是半导体元件;但是,现在的计算机经常将MAR、MDR集成到CPU中(但MAR、MDR逻辑上还是归为主存的一部分);

a)MAR、MDR:

关于MAR、MDR只根据其位数确定地址线,数据线,引脚即可(不是面试的重点);      

一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca

    b)存储体(RAM,ROM)      
RAM:

是一种半导体存储器,RAM分为动态随机存储器DRAM(主存)静态随机存储器SRAM(cache)        

1)动态随机存储器DRAM:(刷新,地址复用):

DRAM有以下特点

  • 使用栅极电容存储信息;            
  • 每次读取出数据,都会破坏DRAM中的原数据,所以需要使用刷新技术对其进行恢复;

关于刷新:

  1. 为什么要刷新:栅极电容里的电荷即使不被读出,也只能维持2ms左右。
  2. 多久刷新一次:2ms
  3. 怎么刷新:以行为单位,每次刷新存储体中的一行,每次刷新占用一个读写周期;
  4. 什么时候刷新:
  • 分散刷新:读/写一次刷新一次,这种操作本质上是增加了读写周期,整个读写周期前部分为 实际的读写,后部分为刷新,所以是不存在死区的(死区是指不在读写周期内cpu还不能访问该存储单元);
  • 集中刷新:有一段时间专门用来刷新,这段时间内cpu无法访问主存,称为死区;
  • 异步刷新:在整个刷新周期内(2ms内),将2ms分为n次刷新,每次刷新一行,总的2ms就能刷新一次存储体。这种方法还是存在死区,只是将死区的时间分散而已  

注意:

1、刷新是存储器自己完成的,不是cpu控制的,与cpu无关;              

2、刷新不等于再生:刷新是以行为单位,对全部数据进行恢复;再生仅对需要恢复的那些单元进行恢复;

3、DRAM现在已经过时了,现在用的是SDRAM;DRAM采用的异步方式(cpu发出控制命令后经过一段时间才能读出或写入,在这段时间内不允许干其他事情),SDRAM采用的是同步方式(cpu发出控制命令后,在操作系统的时钟控制下,支持突发传送,在传送等其他不需要用到cpu等时候,可将cpu脱离出,干其他事情,提高cpu利用率)

4、DRAM采用地址复用技术:DRAM芯片的容量较大,地址位数较多,为了减少地址引脚的数量,采用地址引脚复用技术,将存储单元的地址划分为行地址和列地址,分两次输入才能确定某个存储单元。        

2)静态随机存储器SRAM:

SRAM有以下特点:            

  • 使用双稳态触发器存储信息;            
  • 不是破坏性读出的,不需要刷新,不像DRAM那样读出数据需要刷新;
3)DRAM和SRAM等对比
DRAMSRAM
使用栅极电容使用双稳态触发器
是破坏性读出不是破坏性读出
易失性(区别于ROM)易失性
结构简单,集成度高,成本低,运行速度慢,发热量小结构复杂,集成度小,成本高,运行速度快,发热量大
需要重写,需要刷新不需要重写,不需要刷新
地址复用不采用地址复用      
ROM:

ROM:只读存储器,不是易失性的,断电后数据不丢失,这是区别于RAM的本质。        

常见的ROM:     

1)MROM:掩模式只读存储器>

只能厂家生产时写入一次数据;

特点:可靠性高,灵活性差,生产周期长,只适合批量定制          

2)PROM:可编程只读存储器>

用户可用专门的PROM写入器写入信息,写入一次之后就不能更改;          

3)EPROM:可擦除可编程只读存储器>

用户可通过特殊手段多次重写:

  •   UVEPROM:用紫外线照射8-20分钟即可擦除所有信息;
  •   EEPROM:用电擦除,可擦除特定的字;          
4)闪存Flash:

读操作时直接读,写操作时需要先擦除再写入,所以读的书读比写的速度快很多;          

5)SSD固态硬盘:

由Flash芯片(控制单元+存储单元)构成;与闪存的核心区别在于控制单元不一样,但存储介质都类似(都是半导体)

特点:速度快,功耗低,价格高,目前多取代机械硬盘;          

6)BIOS:

虽然集成在主板上,但逻辑上还是属于主存,存储的是操作系统的“自举装入程序”          

由此可见:

  1. 虽然ROM叫只读存储器,但不一定只能读;          
  2. 同时很多ROM也有“随机存取”的特性,因此ROM和RAM在概念上并没有明显的区分;         
  3. 区分RAM和ROM的本质上是否为易失性的。

至此,我们对主存储器的构成已经有全面的学习!!!!!!!!!!!

  补充:

在传统的RAM中会存在以下的问题:

  1. 多核CPU对单个内存访问时,出现等待现象;---解决:双端口RAM
  2. 即便是单核CPU,CPU的访问速度比主存快得多,而主存恢复时间太长,如何解决两者速度不匹配的问题?---解决:多模块存储器、引入cache
  3. 主存容量太小应该如何解决?----芯片扩展

      

  1、双端口RAM:          

对同一块地址,多个处理器可以同时读,但不能同时写;

  2、多模块存储器:          

多模块存储器分为单体多字存储器多体并行存储器;          

1)单体多字存储器:

对存储体中的存储单元的大小进行调整,让一个存储单元包含更多的字,这样CPU执行一条指令读取出一个存储单元中含有更多的字。 显然,存储体的总字数是不变的,主存容量也没有得到增加;          

2)多体并行存储器:

由于主存中的数据被读取后需要有恢复时间,这段时间内CPU是无法访问该主存的,所以可以引入多个内存条,采用某种编址方式,在cpu无法访问某个主存时访问别等主存,只要设计得当,相当于提升了主存的速度。            

  • 高位交叉编址(顺序方式):每个存储体的高位作为模块号,低位作为模块内的地址号;细想,这样在读取连续的数据时,还是在对同一个内存进行读写,没有做到提升速度的效果            

  • 低位交叉编址(交叉方式):每个存储体的低位地址作为模块号,高位地址作为模块内地址号;这样对于连续的数据,是分散在不同的存储体中的,如果要读取这连续的数据,那么可以采用同时启动所有模块进行读,或者轮流启动这些模块;这样达到了提升速度的效果;                

  1. 同时启动:数据总线的宽度必须大于等于一次读写所有模块时的总位数;                

  2. 轮流启动:在某个模块进入恢复时间时,启动另外一个模块,这样,数据总线的宽度与一个模块的存储字长相等即可。

    当每个模块的存取周期为T,存取时间为r时,为保证流水线不间断,必须使模块数>=T/r######             

3)芯片拓展:              

因为主存是与cpu直接相连的,这会存在两个问题:

1、cpu的数据总线宽度可能大于主存的存储字长,这使得一个传输给cpu的比特数比cpu能处理的最大位数小,发挥不了cpu的最大功能;---位拓展              

2、单块存储器的存储字长有限,如何扩展---字扩展

一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca            

  • 位扩展:增加存储字长(连满cpu的所有数据线)            
  • 字扩展:增加存储字数量;利用cpu多余的地址线多连接些存器;
  • 字位扩展法:对位扩展和字扩展的综合使用;一般使用片选法。          

线选法:cpu的高位地址线连接的是一组芯片,没有使用译码器,其地址线的信号为0时,表示选中该芯片;这样造成了各芯片的地址不连续,不能充分利用系统的存储空间,造成地址资源的浪费;              

片选法:cpu多余的地址线连接译码器,译码器再连接各组芯片,通过译码器的译码来选择具体哪一片芯片工作。这样解决了线选法地址不连续的问题;            字位扩展法:对位扩展和字扩展的综合使用;一般使用片选法。

      2)主存与CPU之间的连接        

主存通过数据总线、地址总线、控制总线与CPU连接;综合上述,要设计一个高速度,大内存的主存系统,需要合理的利用cpu的数据总线,地址总线一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca

  五.外存:

外部存储器(外存)主要有磁盘存储器(磁盘)和固态硬盘(SSD);

1、磁盘存储器:     

磁盘存储器是以磁盘为存储介质的存储器,我们需要知道磁盘的组成,工作过程,优缺点,性能指标;      

1、组成:

1)存储区域(盘片):

  • 磁头数:一个记录面对应一个磁头;
  • 磁道:每个盘面中有多个磁道;
  • 柱面数:不同盘面的相同编号的磁道构成的圆柱面称为柱面;
  • 扇区面:每个磁面上会划分多个扇区; (磁盘的读写是以扇区为单位的。)        

2)磁盘驱动器、磁盘控制器

  • 磁盘驱动器让磁盘能转动;
  • 磁盘控制器是硬件与主机的接口;      
2、工作过程(磁盘地址):

引入磁盘地址:由柱面号+盘面号+扇区号组成;        

计算机在进行读取数据的过程:

1、先通过磁盘地址找到数据所在的扇区: 由磁盘地址,先确定数据在哪条道,哪个面,哪个扇区;找到对应扇区          

2、进行顺序的读取的:找到扇区后以扇区为单位进行读写;        

注意:读写一定是串行的,如果cpu传来的信号是并行信号,那么要通过并-串变换电路转为串行信号才能接收;同样,读取的数据要通过串-并变换电路才能传给cpu;      

3、优点:
  • 容量大、价格低;
  • 记录介质可重复使用;
  • 记录信息可长期使用而不丢失,甚至可以拖机存档;
  • 非破坏性读出,读出时不需要重写(当然不需要刷新);      
4、缺点
  • 存取速度慢;
  • 机械结构复杂;
  • 对工作环境要求高,如强磁场环境下可能导致数据的丢失。      
5、性能指标:
  1. 磁盘容量:格式化和非格式化下的磁盘容量是不一样的,非格式化下的容量要大于格式化下的容量;  

  2. 记录密度:

  • 道密度:半径上有几条道;            
  • 位密度:一条道上单位长度的位数;每条道道信息量是相等的,由于每条道道长度不同,所以 每条道的位密度也是不同的;            
  • 面密度:道密度✖️位密度;         
  1. 平均存取时间:=磁盘控制器的时间+寻道时间+旋转磁盘时间+传输时间;     

  2. 数据传输率:=转速✖️每条道n个字节 =1圈的数据/有效时间

6、补充-磁盘阵列:

磁盘阵列,也叫廉价磁盘阵列;由于存储在磁盘中的数据只有一份,没有容错能力(出现差错没办法恢复),所以引入磁盘阵列,使用多个磁盘对数据进行存储;          

存储方案有:RAID0、RAID1、RAID2、RAID3、RAID4、RAID5

  • RAID0:类似于低位交叉编址,无冗余,无校验,没有容错能力;       
  • RAID1:镜像磁盘阵列,有容错能力,但容量减半;
  • 随之RAID版本增大,容错能力在不断提升;
2、固态硬盘SSD:        

固态硬盘是一种基于闪存的存储器,与U盘没有本质区别,只是容量更大,存取性能更好;        

1、组成:由闪存翻译层闪存芯片组构成;          

闪存芯片代替了传统磁盘的机械驱动器;

闪存翻译层代替了传统磁盘的机械控制器;          

注意:由于闪存翻译层是通过电路迅速定位到页的地址的,所以SSD是支持随机访问的一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca        

2、SSD的读写:SSD的读写是以闪存芯片中一个页为单位的;但是擦除是一以块为单位的;         

  • 读: 可以直接读          
  • 写: 只有当页中没有数据时,才可以直接写入;当页中有数据时,必须先将该页所在块迁移到另外的块中,同时擦除原来的块;所以会出现一些问题:

1)导致SSD中的数据地址会发生改变,闪存翻译层必须对其重新映射,显然,写操作速度比读慢得多;

2)一个SSD块被擦除次数过多,会使得整个SSD坏掉;-----磨损均衡策略;

3、磨损均衡策略:

  • 动态磨损均衡:写入时优先选择擦除次数少的新闪存块写入;
  • 静态磨损均衡:SSD会监控并将“读多写少”的数据迁移到老旧的闪存块中,让新的闪存块承当更多的写任务;

    3、Cache:

1、cache产生原因:

由于cpu对主存的访问速度相对来说还是很慢的,通过多模块存储的方式,可以改进其整体速度,但单存依靠主存自身来提升是有限的,所以引入cache(高速缓存),cache(由DRAM组成)拥有比主存更快的速度,可以将主存的数据备份到cache中,之后要取数据直接从cache中取;      

2、Cache的原理——局部性原理:
  • 空间局部性原理:在最近的将来要用到的信息的存储位置可能与现在访问的存储空间相邻; 
  • 时间局部性原理:最近的未来要使用的数据很可能是现在在使用的数据;       

计算机正是将这些被认为是符合局部性原理的数据调入cache,以提高整体的速度;      

3、如何界定“周围”的数据:

将主存和cache的存储空间分块,主存的块和cache的块大小相同,两者之间的数据交换是以块为单位的;      

4、cache的工作过程:
  1. 当cpu发出读请求时:** 
  • 若cache中命中,就将地址转成cache地址(cache和主存的地址映射),直接对cache进行读写,与主存无关;          

  • 若cache不命中,则需访问主存,并把此字所在块一次性从主存调入cache,若此时主存已满,则需采用替换算法,用这个块替换cache中原来的块。        

    整个过程全部由硬件实现。        

  1. 当cpu发出写请求时:** 
  • 若cache命中,可能会导致cache和主存数据的不一致,这时需要采用caceh的写策略进行写操作;    

注意:

  • cpu与cache之间的数据交换是以字为单位的;(这里解释了主存地址的划分为什么有块内地址)        
  • cache和主存的数据交换是以块为单位的;      

4、性能指标:

  • 命中率:从cache中读取的数据次数占总次数的百分比        
  • 缺失率:与上面类似;        
  • 平均访问时间:        

注意:计算这些性能指标是默认是先从cache找,然后再从主存找的顺序;      

5、cache和主存的地址映射:

cache的地址:一篇带你串联计算机组成原理---存储系统(计算机组成原理之存储系统)本文详细介绍了计算机组成原理中的存储系统,重点是ca        

主存地址: 由于主存的块号比cache多得多,所以主存地址的位数足以表示其在cache中的位置,不同的映射方式将主存地址逻辑上划分为不同的意义;          

  • 直接映射:主存物理地址=标记➕cache行号➕块内地址;          
  • 全相联映射:主存物理地址=标记➕块内地址;          
  • 组相联映射:主存物理地址=标记➕组号➕块内地址          

注意:主存地址的标记=cache地址等标记位;        

映射的方式有:

1)直接映射:固定位置存放

主存块在cache 中的位置:主存块号%cache总块数; 

映射过程:直接映射:主存物理地址=标记➕cache行号➕块内地址;

  1. 确定哪一个cache行:通过主存地址的caceh行号确定其在cache的哪一行;
  2. 比较主存的标志和cache标记位:找到对应的cache行,比较其标志位和主存地址的高位(标记)是否相同,如果相同且cache行的有效位为1,则说明命中。              
  3. 找到对应的字节:根据主存中的块内地址,找到其在cache行中的具体偏移量(哪个字节),读取数据;            

显然,对于具体的主存地址,其在cache的哪一行是确定的,所以只需要一个比较器来判断该cache行数据是否为该主存地址的数据即可;          

2)全相联映射:随意放

映射过程:全相联映射:主存物理地址=标记➕块内地址;

  1. 确定哪一个cache行: cache中的每一行的标记位通过比较器与主存的高位(标记位)比较;              
  2. 找到对应的字节: 若匹配且有效位为1,则匹配成功,根据主存地址的块内地址找到具体的字节进行读取;            

显然,有个cache行就需要几个比较器;          

3)组相联映射:

映射过程:组相联映射:主存物理地址=标记➕组号➕块内地址(4路组相关是指cache中一组有4个cache行);               映射过程:

  1. 确定在cache中的哪一组: 根据主存地址的组号确定其在cache中的组号;              
  2. 比较该组中所有的cache行;              
  3. 找到对应的字节;            

显然,n路组相关就需要n个比较器;        

6、替换算法:

在全相联映射中或组相联映射中,当主存块向cache中传送一个块时,可能遇到cache行已满,这时就需要使用替换算法,而在直接映射中遇到这种情况是直接强制替换的,无需考虑替换算法;          

替换算法:

1)随机算法RAND:

若cache已满,则随机选择一块替换;

优点:实现简单;              

缺点:没考虑局部性原理,命中率低,实际效果不稳定;            

2)先进先出算法FIFO:

先进入cache的块先被替换;              

优点:实现简单;              

缺点:没考虑局部性原理,有“抖动”现象;(刚刚被替换的块又很快被调入)            

3)近期最少使用算法LRU:

为cache分配一个计数器,记录每个cache多久没有被访问了,替换时选择计数器最大的cache块; 

计数器工作过程:

  1. 当访问命中cache时,该cache的计数器清0,比他小的都➕1;(这里保证当cache有2的n次方时,计数器只需要n位即可保证计数器的值不重复)   
  2. 当访问未命中cache且cache行有空行:装入该块,并置其计数器为0,其他计数器➕1;                
  3. 当访问未命中cache且cache行没有空行:替换计数器最大的cache块并置0,其余都➕1;              

优点:考虑了局部性原理,实际运行效果优秀;              

缺点:有抖动现象;            

4)最近不经常使用LFU:

与LRU相似,只是计数器记录的是cache块被访问的次数,每次替换时选择计数器最小的cache块替换,当计数器的值相等时,可选用FIFO算法选择替换;                

缺点:1、没有考虑局部性原理;2、有抖动现象;3、计数器的值可能很大,这对计数器的位数要求很高;          

7、Cache的写策略

解决数据一致性问题;因为cache中保存的是主存块的副本,当cache块内容更新时,就需要使用写策略来保证主存和cache的数据一致性;            

1、写命中时:
a)全写法(直写法):

当写命中时,同时写入主存和cache,这样随时可保证主存和cache的数据一致性;

缺点:增加了访存次数,降低cache的效率;所以引入写缓冲,先将数据写入写缓冲,之后慢慢的写入主存,不占用cpu资源,但是,可能造成写缓冲饱和溢出;              

b)写回法(回写法):

当写命中时只对cache进行修改,之后该cache块被替换时才写回主存;所以引入脏位,当脏位为1时表示该cache块被修改过,替换时必须写回主存;            

2、写不命中时:
写分配法:

当写未命中cache时,只写入cache,之后该cache块被替换时写回主存;

非写分配法:

当写未命中cache时,只写入主存,而不把主存的数据调入cache;

通常,全写法与非写分配法搭配使用;写回法和写分配法搭配使用;      

8、虚拟存储系统:
1、虚拟存储系统解决了什么问题:

上面提到,主存内存很小,当一个程序比内存还大时,没办法将整个程序都调入主存再运行,即使一个程序比内存小,假设就小一点,如果全部转入主存,那么主存能利用的空间就会变得很少,cpu在这段时间也只能访问该程序,无法处理其他的事情(因为数据要在内存中才能被cpu访问)。

所以采用虚拟存储系统,借用辅存的大空间,将程序先放入辅存,只将其必不可少的部分调入主存(补充:程序在运行过程,其实很多时候都是只有少部分代码发挥了作用,大部分是不需要运行的) 

总结:虚拟存储系统解决了主存容量太小的问题;

2、虚拟存储器的分类:

按基本单位来分,有页式存储器,段式存储器,段页式存储器;

关于虚拟存储器是操作系统的重点,这里仅做一个简单的介绍,机组在存储系统中的重点是cache。

最后

到此,我们学习了计算机组成原理的存储系统全部知识(重点是cache),希望能对你的面试有帮助,如果还想学习计算机基础,如计网,进我主页,后面还会更新操作系统的内容!!!!

转载自:https://juejin.cn/post/7420334734972092467
评论
请登录