系列文章目录
1.《带你深入挖掘计算机的底层逻辑,打通任督二脉的计算机基础知识》
2.《深入研究计算机的底层原理,深入分析存储器》
文章目录
- 系列文章目录
- 前言
- 一、存储器的分类
- 二、多级存储器
- 三、主存储器
- 总结
前言
今天的文章将来会带来成本来了解计算中的存储器。如果你有这方面基础薄弱的朋友,我建议你先读一读我的计算机底层原理系列文章的第一篇文章《带你深入挖掘计算机底层逻辑,开辟你计算机基础知识的任督二脉》。在这篇文章中,以最简单易懂的方式理解计算机最基本的硬件组成,可以为读者建立最基本的计算机印象,以动态模型的形式解释,更好地理解存储器。
一、存储器的分类
1.根据计算机中的作用进行分类
主存也称为内存(内存),用于存储计算机运行所需的程序和数据,CPU可直接随机访问。
容量小,访问速度快,成本高,但容量不高cache小,没有成本cache高,没有存取速度cache快。
辅存也叫外存,是我们在电脑上看到的磁盘(C盘、D磁盘等),但我们看到的磁盘实际上是一个虚拟的虚拟存储器,我将向您解释,他用来存储暂时不使用的数据和程序。
容量大,成本低,访问速度慢,CPU不能直接存取,CPU访问他必须通过内存。
我们的现代计算机设置了三级缓存,集成了一级缓存和二级缓存CPU三级缓存位于内芯片上CPU存储在主存之间CPU常用的数据和指令,他的访问速度可以与CPU匹配,但稍慢CPU。
容量小、造价高、存取速度快。
2.按存储介质分类
大致可分为磁表面存储器、光存储器(光盘)、半导体存储器等。
3.按存取方式分类
存储器的任何单元都可以访问,访问时间与存储单元的物理地址无关,读写方便,操作灵活,主要用于主存储器和高速缓冲存储器。
分为、(两者有什么区别,以后会给大家讲解)。
存储器中的内容只能读出,不能写入。一旦信息被写入,即使断电,信号干扰数据也不会丢失。
:用于存储固定数据、系统中的一些重要数据库等。在当前的设备中,他和RAM共同构成主存。它的写入操作比读取操作慢得多,并且仍然允许它随机访问。
读写存取单元时,按物理地址顺序搜索地址。
静态RAM与动态RAM
静态RAM即高速缓冲存储器(cache)它的组成是双稳态六晶体管电路,也称为六晶体管MOS无论是断电还是信号干扰,该电路都具有很强的稳定性,只要在信号恢复以后数据总能恢复到原来的样子。
动态RAM也就是说,我们在主存储器中使用的类型是由晶体管和电容器组成的电路。我们在高中学习过,电容器很容易失去电子,这导致了动态RAM非常不稳定,10ms存储单元中的数据会丢失,此时,我们必须进行读取操作并再次写入,这个过程将被刷新,以确保存储单元中的数据不会丢失。
当然,因为动态RAM它只由一个晶体管组成,因此其集成度高于静态RAN,因此,它也可以间歇性地改善CPU访问效率。
读取数据后,存储单元中的数据将丢失,原始存储内容将被破坏,称为破坏性读取,例如RAM,不管是动态RAM,还是静态RAM都是如此。
读取数据后,原始存储内容不会丢失,称为非破坏性读取。
对于易失性存储器,我们的系统必须定期恢复,并再生数据。
二、多层次存储器
1.存储器分层示意图
2.为什么使用多级存储器
- 上图中的金字塔存储结构表明,计算机硬件容量越来越大,成本越来越低,访问速度越来越慢。
- 之所以这么设计是为了让上一层存储器作为下一层存储器的高速缓存(这里可能有小伙伴不理解上一层作为下一层的告诉缓存是什么意思,我随后说明)。
- CPU可直接访问cache也可直接访问内存,但是CPU不可直接访问磁盘(外存,或者说是辅存),CPU要访问外存,必须通过内存将外存中的程序转移到内存中,然后CPU可直接访问。
- 内存(主存)和CPU不同的是,它可以访问层次结构中的任何存储器。
- 从CPU的角度来看的话cache--主存层次的存取速度接近CPU但是成本接近cache我们刚才提到金字塔越低,他的成本就越低,所以这样做不仅节省了成本,而且提高了访问速度,所以同样的cache--主存级存取速度接近cache是的,但是成本接近主存。
- 说到这里,我相信你可以理解为什么我们的存储系统使用这样的分层结构,因为当我们制造计算机时,我们的期望是大容量、高速和低成本刚才的金字塔结构也可以看出来这显然只是一个美好的愿望,金字塔从上到下容量越来越大但是速度却越来越慢,最顶部速度虽然快但是造假却很高,就比如说高速缓存cache他的造价成本是主存的100倍,这显然不是寻常老百姓能够消费的起的。
注释:高速缓存(cache)的功能:
还是要从上图的金字塔图来讲解,根据摩尔定理(这里不做过多说明,想要了解的小伙伴可以自行百度)可以了解到,我们计算机的CPU基本上每过18个月他的性能就会提升一次,所以这也就导致了我们的CPU和主存之间产生了巨大的性能差异,也就是CPU运算的速度远快于CPU访问主存的速度,所以为了解决这个问题就引进了高速缓存的概念,也就是我们之前提到的SRAM存储器。从上图可知cache的存取速度是要优于主存的,
我们在CPU和主存之间设置一级缓存(计算机共有三级缓存,另外两层集成在CPU的芯片上),将内存中的数据拷贝在cache当中,这样CPU可以直接到cache里面取数据和指令。
1.概述
主存储器有DRAM来实现,靠近CPU的高速缓冲存储器由SRAM来实现,他们都属于易失性存储器,就是只要断电,原来存储的信息便会丢失,DRAM的成本是要低于SRAM的,原因是因为SRAM使用的是六晶体管电路(MOS)管并且这个存储器的芯片要使用更多的硅,只有ROM属于非易失性存储器。
这里说明一个容易混淆的概念,只要是RAM都属于易失性半导体存储器,而DRAM是通过电容来实现的,而SRAM则是通过MOS管来实现的,大家都知道电容很大的一个特点就是电子容易丢失,所以即使在不断电的情况下,DRAM只要收到电子信号干扰或者其他干扰当中的数据也很容易丢失的,所以这个时候就必须计算机系统在一定的固定周期内对其进行读操作之后再将数据从新写入到主存当中,而SRAM具有双稳态性,即使受到干扰,只要在信号恢复之后数据还可以继续访问,不会丢失。
那么到这里可能就有小伙伴会问了,那为什么不把主存也用SRAM来设计呢?ememem.....因为贵呀。而且六晶体管的集成度也不如DRAM当中所使用的单晶体管,集成度越高CPU的访问效率也就越高啊。
2.SRAM与DRAM
我们通常把存放一个二进制位的物理期间叫做存储元,他是存储器的最基本原件,一个存储元可以存放一个二进制位,而我们的数据往往有多个二进制位,所以一个存储单元当中有着多个存储元,每一个存储单元有一个唯一的地址,所以这些存储单元里的存储元有着相同的地址。
SRAM存储元是一个双稳态触发器,也就是六晶体管(MOS管),这个MOS管是专门用来记忆信息的,即使信息被读出,存储单元里的信息也不会被破坏,他仍然保持原来的状态无需再生,这就是我们在上文当中所提到的非破坏性读取
但是,SRAM的速度随虽快,可集成度低、功耗较大、而且价格昂贵,一般用于高速缓冲存储器(只需要存储一些CPU运算暂时要用到的数据和指令即可)。
与SRAM的存储原理不同,DRAM是利用存储元电路中的栅极电容当中的电荷来存储信息的(电容上的电荷极易丢失),他的基本存储元只是用一个晶体管,所以他的密度要比SRAM高,所以他相比SRAM来说集成度高适合做大容量的存储器,而且功耗低、价格低(只有SRAM的1%)。
但是这里还要面临着一个问题也就是我刚才所提到过的问题,就是电容中的电荷极其容易丢失,一般只能维持10ms左右,有时候甚至只有1~2ms,为了解决这个问题,计算机系统必须周期性的对其进行读出,并且再次写回,一次来不断地刷新主存当中的数据,刷新所用的时间成为刷新周期,常见的三种刷新方式有三种。
1)集中刷新:利用一段固定的时间,依次对存储器的所有行进行逐一再生,但是在此期间却会停止对存储器的读写操作,成为“死时间”,又称访存死区,优点就是在CPU对主存进行读写操作时可以不受刷新的影响。
2)分散刷新:把对每行的刷新分散到各个工作周期当中去,这样一个存储器的工作周期会被一分为二,前半部分进行读写操作,后半部分对存储单元的每行进行刷新,这样的可以避免“死时间”,但是缺点就是延长了存储器的存取周期。
3)异步刷新:总的来说就是“走走停停”,按照一定的算法刷新一段时间,就让CPU对内存访问一段时间,这样虽然依然有“死时间”。但是“死时间”被大大低缩短了,而且CPU的等待时间也被缩短,这是基于以上两种方式的有机结合。
总结:
1)DRAM刷新的单位是行,由芯片内部自动生成行地址
2)刷新操作是整个存储器当中的所有芯片一起刷新,不需要选片
3)刷新对CPU是透明的,而且不需要外部的干预
3.DRAM与SRAM的比较
SRAM | DRAM | |
存储信息 | 触发器 | 电容 |
破坏性读出 | 非 | 是 |
刷新 | 不需要 | 需要 |
发送行里地址 | 同时送 | 不用同时送 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
存储成本 | 高 | 低 |
主要用途 | 高速缓存 | 主机内存 |
注释:这里的发送行列地址发送我后续后说明,这里和引脚有关,引脚这里从百度上找了一张图片供大家参考,旁边伸出来的部分就是引脚。
4.存储器芯片的内部结构
1)存储体:存储体是存储单元的集合,他由行选线和列选线来选择所访问的单元,存储体上相同的行、列上的位同时被读出或写入。
2)地址译码器:用来将地址转换为译码输出线上的高低电平,驱动相应的程序读写电路。
3)I/O控制电路:用以控制被选中的单元读出或写入。
4)片选信号量:单个芯片的容量是非常小的,无法满足CPU对存储器容量的要求,因此需要一定数量的芯片进行存储器的扩展,这也就是后需要为大家讲解到的CPU与存储器的连接以及存储器的扩展。
5)读写控制信号:根据PC发出的命令,向I/O控制电路发出命令,控制被选中的单元进行读写操作。
5.只读存储器
ROM和RAM都是支持随机存取的存储器,而且RAM为易失性存储器,反观ROM中一旦有了信息,就不能轻易地改变,即使系统断电也不会丢失,他在计算机当中只供读出操作,并且他的结构简单,信息不易丢失,非常可靠。
根据制造工艺的不同,ROM可分为掩模式只读存储器MROM、一次可编程只读存储器PROM、可擦除可编程只读存储器EPROM、Flash存储器和固态硬盘SSD。
1)掩模式只读存储器MROM:存储器的信息内容有厂商直接写好不允许用户修改,是只读不可写的存储器。
2)一次可编程只读存储器PROM:允许用户利用专门的设备写入自己的程序,一旦写入内容将无法改变。
3)可擦除可编程只读存储器EPROM:用户不仅可以写入编程信息,还可以允许多次修改,虽然允许修改,但是编程次数有限,而且写入的速度非常慢
4)Flash存储器:可以在断电的情况下长期保存信息,并且可以快速地擦除存储器当中的信息并且快速重写。
5)固态硬盘:基于闪存的固态硬盘,(闪存是一种非易失性存储器,采用随机访问方式),有控制单元和存储单元(Flash芯片)组成。
四、主存储器的基本组成
1.概念图
2.工作原理
- 这其中由一个个存储0或1的记忆单元(存储元件)构成的存储矩阵是存储器的核心部分,存储元件是具有两种稳态的能表示0或1二进制的物理器件,为了存取存储体当中的信息,必须对存储单元进行编号(编址),通常我们采用按字节编址。
- 在指令执行过程中需要访问内存的时候,CPU首先把被访问单元的地址送到MAR中,然后通过地址将主存地址送到主存中的地址寄存器,一边地址译码器进行译码选中相应的单元,这其中需要CPU通过控制总线将控制信号发送到内存(控制信号是控制CPU对主存进行读操作还是写操作)。
- 如果是写操作的话,CPU要先将数据送往MDR中,经过数据总线写入被选中的单元。
- 如果是读操作,那么主存将读出所选中的单元通过数据线送到MDR。
- 数据线的宽的与MDR的宽度是相同的,而地址线的数量则决定了主存地址空间可以寻址范围的大小。
- 要知道电信号通过数据线要想传到存储单元靠的是引脚,但是DRAM的芯片容量较大,地址位数多,为了减少芯片当中引脚的数量,通常采用地址引脚复用技术,行地址和列地址通过相同的引脚先后两次输入,这样的地址引脚数量可以减少一半。
- 数据线和地址线共同反映存储体容量的大小,例如2^36*64位代表着36跟地址线,64跟数据线。
总结
今天为大家系统的说明了存储器的内部结构,为大家深入地讲解了存储器的类型,以及他们的内部构造和工作原理,但是有很多计算机基础知识我已经在我的这个系列里的上一篇文章当中详细地讲解过了,如果读者对计算机底层逻辑以及计算机整体的硬件结构感兴趣的话可以阅读我的上一篇博文,相信你一定会有收获。
不过文章到了这里还不能够结束,我今天在这里还要为各位小伙伴们讲解一下虚拟内存的概念,准确的来说虚拟存储器就是将用户的逻辑存储器和物理存储器进行分离,给用户提供一种比真是内存大的多的存储器。
首先我从进程的角度来讲解虚拟存储技术,(如果小伙伴们对进程的概念不理解的话,可以浏览我的上一篇文章,当然我的下一篇文章将会为大家讲解什么是进程以及线程),进程再实现的时候由于CPU一次性只能执行一个进程,但是我们的内存当中进程的数量是远远超过CPU的数量的,那么这个时候就引入了并发(在同一时间间隔内,多个进程同时执行)的概念,这样就给了用户一张错觉,感觉自己是独占内存,独占CPU,这样子内存就被无形中给放大了许多倍。
其次虚拟内存会通过让内存结合外存的方式来扩大内存,其实我们所看到的磁盘全部都是操作系统为我们抽象出来的虚拟内存,计算机当中真正的磁盘其实只有一个,我们所拥有的地址也是逻辑地址,那么虚拟内存的工作原理是什么呢?