- 作者:老汪软件技巧
- 发表时间:2024-10-03 00:02
- 浏览量:
存储系统:引言:
本文介绍了计算机组成原理中存储系统 的整体框架和具体细节,可以结合目录一起学习,更容易理解。
重要:
我们已经知道
计算机组成的基本构成;数据在计算机中以什么形式存储的;数据在计算机中是怎样运算的。
以上三点了解即可,不是面试的重点;那么问题来了,存储这些数据的物件--存储器有哪些,具体有什么区别?下面先给出存储系统要学习的总体知识,这是一个全局观,应该有一个路线,往下学习才会显得游刃有余。
存储系统要学习什么?
存储系统的层次结构;存储器的分类;存储器的性能指标;
到这里,已经有一个整体的认识,然后再从主存、外存、cache、虚拟存储系统具体讲一讲各个细节,让你彻底搞懂计算机组成原理的存储系统;
一、存储器的层次结构:
从下到上,速度越来越快,容量越来越小,价格越来越高,越靠近CPU;
下面相连的表示可以直接进行数据交换,显然,缓存和主存可以直接和CPU进数据交换,而辅存只能先将数据调入内存才能被CPU访问;
另外:
二、存储器的分类:
1)按层次结构分类:
2)按存储介质分类:
3)按存取方式分类:
4)按信息的可更改性分类:
5)按信息的可保存性分类:
三、存储器的性能指标:存储容量:由MAR、MDR的位数反映;单位成本:总成本/总容量;存储速度:数据传输率=存储字长/存储周期。(存储周期包括存取时间和恢复时间)四、主存:1、主存的基本组成:
主存由存储体,MAR,MDR组成;其中存储体中的存储元件是半导体元件;但是,现在的计算机经常将MAR、MDR集成到CPU中(但MAR、MDR逻辑上还是归为主存的一部分);
a)MAR、MDR:
关于MAR、MDR只根据其位数确定地址线,数据线,引脚即可(不是面试的重点);
b)存储体(RAM,ROM)RAM:
是一种半导体存储器,RAM分为动态随机存储器DRAM(主存) 和 静态随机存储器SRAM(cache)
1)动态随机存储器DRAM:(刷新,地址复用):
DRAM有以下特点
关于刷新:
为什么要刷新:栅极电容里的电荷即使不被读出,也只能维持2ms左右。多久刷新一次:2ms怎么刷新:以行为单位,每次刷新存储体中的一行,每次刷新占用一个读写周期;什么时候刷新:
注意:
1、刷新是存储器自己完成的,不是cpu控制的,与cpu无关;
2、刷新不等于再生:刷新是以行为单位,对全部数据进行恢复;再生仅对需要恢复的那些单元进行恢复;
3、DRAM现在已经过时了,现在用的是SDRAM;DRAM采用的异步方式(cpu发出控制命令后经过一段时间才能读出或写入,在这段时间内不允许干其他事情),SDRAM采用的是同步方式(cpu发出控制命令后,在操作系统的时钟控制下,支持突发传送,在传送等其他不需要用到cpu等时候,可将cpu脱离出,干其他事情,提高cpu利用率)
4、DRAM采用地址复用技术:DRAM芯片的容量较大,地址位数较多,为了减少地址引脚的数量,采用地址引脚复用技术,将存储单元的地址划分为行地址和列地址,分两次输入才能确定某个存储单元。
2)静态随机存储器SRAM:
SRAM有以下特点:
3)DRAM和SRAM等对比DRAMSRAM
使用栅极电容
使用双稳态触发器
是破坏性读出
不是破坏性读出
易失性(区别于ROM)
易失性
结构简单,集成度高,成本低,运行速度慢,发热量小
结构复杂,集成度小,成本高,运行速度快,发热量大
需要重写,需要刷新
不需要重写,不需要刷新
地址复用
不采用地址复用
ROM:
ROM:只读存储器,不是易失性的,断电后数据不丢失,这是区别于RAM的本质。
常见的ROM:
1)MROM:掩模式只读存储器>
只能厂家生产时写入一次数据;
特点:可靠性高,灵活性差,生产周期长,只适合批量定制
2)PROM:可编程只读存储器>
用户可用专门的PROM写入器写入信息,写入一次之后就不能更改;
3)EPROM:可擦除可编程只读存储器>
用户可通过特殊手段多次重写:
4)闪存Flash:
读操作时直接读,写操作时需要先擦除再写入,所以读的书读比写的速度快很多;
5)SSD固态硬盘:
由Flash芯片(控制单元+存储单元)构成;与闪存的核心区别在于控制单元不一样,但存储介质都类似(都是半导体)
特点:速度快,功耗低,价格高,目前多取代机械硬盘;
6)BIOS:
虽然集成在主板上,但逻辑上还是属于主存,存储的是操作系统的“自举装入程序”
由此可见:
虽然ROM叫只读存储器,但不一定只能读;同时很多ROM也有“随机存取”的特性,因此ROM和RAM在概念上并没有明显的区分;区分RAM和ROM的本质上是否为易失性的。
至此,我们对主存储器的构成已经有全面的学习!!!!!!!!!!!
补充:
在传统的RAM中会存在以下的问题:
多核CPU对单个内存访问时,出现等待现象;---解决:双端口RAM即便是单核CPU,CPU的访问速度比主存快得多,而主存恢复时间太长,如何解决两者速度不匹配的问题?---解决:多模块存储器、引入cache主存容量太小应该如何解决?----芯片扩展
1、双端口RAM:
对同一块地址,多个处理器可以同时读,但不能同时写;
2、多模块存储器:
多模块存储器分为单体多字存储器和多体并行存储器;
1)单体多字存储器:
对存储体中的存储单元的大小进行调整,让一个存储单元包含更多的字,这样CPU执行一条指令读取出一个存储单元中含有更多的字。 显然,存储体的总字数是不变的,主存容量也没有得到增加;
2)多体并行存储器:
由于主存中的数据被读取后需要有恢复时间,这段时间内CPU是无法访问该主存的,所以可以引入多个内存条,采用某种编址方式,在cpu无法访问某个主存时访问别等主存,只要设计得当,相当于提升了主存的速度。
同时启动:数据总线的宽度必须大于等于一次读写所有模块时的总位数;
轮流启动:在某个模块进入恢复时间时,启动另外一个模块,这样,数据总线的宽度与一个模块的存储字长相等即可。
当每个模块的存取周期为T,存取时间为r时,为保证流水线不间断,必须使模块数>=T/r######
3)芯片拓展:
因为主存是与cpu直接相连的,这会存在两个问题:
1、cpu的数据总线宽度可能大于主存的存储字长,这使得一个传输给cpu的比特数比cpu能处理的最大位数小,发挥不了cpu的最大功能;---位拓展
2、单块存储器的存储字长有限,如何扩展---字扩展
线选法:cpu的高位地址线连接的是一组芯片,没有使用译码器,其地址线的信号为0时,表示选中该芯片;这样造成了各芯片的地址不连续,不能充分利用系统的存储空间,造成地址资源的浪费;
片选法:cpu多余的地址线连接译码器,译码器再连接各组芯片,通过译码器的译码来选择具体哪一片芯片工作。这样解决了线选法地址不连续的问题;字位扩展法:对位扩展和字扩展的综合使用;一般使用片选法。
2)主存与CPU之间的连接
主存通过数据总线、地址总线、控制总线与CPU连接;综合上述,要设计一个高速度,大内存的主存系统,需要合理的利用cpu的数据总线,地址总线。
五.外存:
外部存储器(外存)主要有磁盘存储器(磁盘)和固态硬盘(SSD);
1、磁盘存储器:
磁盘存储器是以磁盘为存储介质的存储器,我们需要知道磁盘的组成,工作过程,优缺点,性能指标;
1、组成:
1)存储区域(盘片):
2)磁盘驱动器、磁盘控制器
2、工作过程(磁盘地址):
引入磁盘地址:由柱面号+盘面号+扇区号组成;
计算机在进行读取数据的过程:
1、先通过磁盘地址找到数据所在的扇区:由磁盘地址,先确定数据在哪条道,哪个面,哪个扇区;找到对应扇区
2、进行顺序的读取的:找到扇区后以扇区为单位进行读写;
注意:读写一定是串行的,如果cpu传来的信号是并行信号,那么要通过并-串变换电路转为串行信号才能接收;同样,读取的数据要通过串-并变换电路才能传给cpu;
3、优点:4、缺点5、性能指标:
磁盘容量:格式化和非格式化下的磁盘容量是不一样的,非格式化下的容量要大于格式化下的容量;
记录密度:
平均存取时间:=磁盘控制器的时间+寻道时间+旋转磁盘时间+传输时间;
数据传输率:=转速✖️每条道n个字节=1圈的数据/有效时间;
6、补充-磁盘阵列:
磁盘阵列,也叫廉价磁盘阵列;由于存储在磁盘中的数据只有一份,没有容错能力(出现差错没办法恢复),所以引入磁盘阵列,使用多个磁盘对数据进行存储;
存储方案有:RAID0、RAID1、RAID2、RAID3、RAID4、RAID5
2、固态硬盘SSD:
固态硬盘是一种基于闪存的存储器,与U盘没有本质区别,只是容量更大,存取性能更好;
1、组成:由闪存翻译层和闪存芯片组构成;
闪存芯片代替了传统磁盘的机械驱动器;
闪存翻译层代替了传统磁盘的机械控制器;
注意:由于闪存翻译层是通过电路迅速定位到页的地址的,所以SSD是支持随机访问的;
2、SSD的读写:SSD的读写是以闪存芯片中一个页为单位的;但是擦除是一以块为单位的;
1)导致SSD中的数据地址会发生改变,闪存翻译层必须对其重新映射,显然,写操作速度比读慢得多;
2)一个SSD块被擦除次数过多,会使得整个SSD坏掉;-----磨损均衡策略;
3、磨损均衡策略:
3、Cache:1、cache产生原因:
由于cpu对主存的访问速度相对来说还是很慢的,通过多模块存储的方式,可以改进其整体速度,但单存依靠主存自身来提升是有限的,所以引入cache(高速缓存),cache(由DRAM组成)拥有比主存更快的速度,可以将主存的数据备份到cache中,之后要取数据直接从cache中取;
2、Cache的原理——局部性原理:
计算机正是将这些被认为是符合局部性原理的数据调入cache,以提高整体的速度;
3、如何界定“周围”的数据:
将主存和cache的存储空间分块,主存的块和cache的块大小相同,两者之间的数据交换是以块为单位的;
4、cache的工作过程:当cpu发出读请求时:**当cpu发出写请求时:**
注意:
4、性能指标:
注意:计算这些性能指标是默认是先从cache找,然后再从主存找的顺序;
5、cache和主存的地址映射:
cache的地址:
主存地址:由于主存的块号比cache多得多,所以主存地址的位数足以表示其在cache中的位置,不同的映射方式将主存地址逻辑上划分为不同的意义;
注意:主存地址的标记=cache地址等标记位;
映射的方式有:
1)直接映射:固定位置存放
主存块在cache 中的位置:主存块号%cache总块数;
映射过程:直接映射:主存物理地址=标记➕cache行号➕块内地址;
确定哪一个cache行:通过主存地址的caceh行号确定其在cache的哪一行;比较主存的标志和cache标记位:找到对应的cache行,比较其标志位和主存地址的高位(标记)是否相同,如果相同且cache行的有效位为1,则说明命中。找到对应的字节:根据主存中的块内地址,找到其在cache行中的具体偏移量(哪个字节),读取数据;
显然,对于具体的主存地址,其在cache的哪一行是确定的,所以只需要一个比较器来判断该cache行数据是否为该主存地址的数据即可;
2)全相联映射:随意放
映射过程:全相联映射:主存物理地址=标记➕块内地址;
确定哪一个cache行: cache中的每一行的标记位通过比较器与主存的高位(标记位)比较;找到对应的字节: 若匹配且有效位为1,则匹配成功,根据主存地址的块内地址找到具体的字节进行读取;
显然,有个cache行就需要几个比较器;
3)组相联映射:
映射过程:组相联映射:主存物理地址=标记➕组号➕块内地址(4路组相关是指cache中一组有4个cache行);映射过程:
确定在cache中的哪一组: 根据主存地址的组号确定其在cache中的组号;比较该组中所有的cache行;找到对应的字节;
显然,n路组相关就需要n个比较器;
6、替换算法:
在全相联映射中或组相联映射中,当主存块向cache中传送一个块时,可能遇到cache行已满,这时就需要使用替换算法,而在直接映射中遇到这种情况是直接强制替换的,无需考虑替换算法;
替换算法:
1)随机算法RAND:
若cache已满,则随机选择一块替换;
优点:实现简单;
缺点:没考虑局部性原理,命中率低,实际效果不稳定;
2)先进先出算法FIFO:
先进入cache的块先被替换;
优点:实现简单;
缺点:没考虑局部性原理,有“抖动”现象;(刚刚被替换的块又很快被调入)
3)近期最少使用算法LRU:
为cache分配一个计数器,记录每个cache多久没有被访问了,替换时选择计数器最大的cache块;
计数器工作过程:
当访问命中cache时,该cache的计数器清0,比他小的都➕1;(这里保证当cache有2的n次方时,计数器只需要n位即可保证计数器的值不重复)当访问未命中cache且cache行有空行:装入该块,并置其计数器为0,其他计数器➕1;当访问未命中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),希望能对你的面试有帮助,如果还想学习计算机基础,如计网,进我主页,后面还会更新操作系统的内容!!!!